Oh, je l'ai fait, mais c'était un PITA complet et complet.
Tout d'abord, les fichiers plymouth habituels, mytheme.plymouth:
[Plymouth Theme]
Name=My theme
Description=Raspberry Pi theme
ModuleName=script
[script]
ImageDir=/usr/share/plymouth/themes/mytheme
ScriptFile=/usr/share/plymouth/themes/mytheme/mytheme.script
Et puis mytheme.script
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
theme_image = Image("mytheme.png");
resized_wallpaper_image = theme_image.Scale(screen_width, screen_height);
sprite = Sprite(resized_wallpaper_image);
sprite.SetZ(-100);
message_sprite = Sprite();
message_sprite.SetPosition(screen_width * 0.1, screen_height * 0.8, 10000);
fun message_callback (text) {
my_image = Image.Text(text, 1, 1, 1);
message_sprite.SetImage(my_image);
}
Plymouth.SetUpdateStatusFunction(message_callback);
Ceux-ci vont ensuite dans les endroits appropriés /usr/share/plymouth/themes/mytheme
avec mytheme.png.
Ensuite, vous activez mytheme avec la plymouth-set-default-theme
commande.
Maintenant, une ruse. plymouth ne peut lire que les 1024 premiers octets de la cmdline du noyau ... mais, le chargeur Rpi PRÉPEND les choses à / proc / cmdline, donc vous pouvez PENSER que vous l'avez fait correctement, mais si vous le faites cat /proc/cmdline
plus tard, vous constaterez peut-être que vos paramètres sont en fait tomber la limite de 1024 octets. Vous devez donc ajouter très tôt les paramètres Splash silencieux et Plymouth dans cmdline.txt.
J'ai mon cmdline.txt défini sur cela (mais nous utilisons l'écran tactile adafruit, donc ymmv):
dwc_otg.lpm_enable=0 console=tty3 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles fbcon=map:10 fbcon=font:VGA8x8
Maintenant, vous devez également utiliser un initramfs, car l'écran de démarrage est activé à partir des premiers scripts de démarrage. C'est généralement aussi simple que d'exécuter update-initramfs
et de spécifier initramfs initrd.img-4.1.9-v7
(ou similaire) dans /boot/config.txt.
Dans mon cas, j'ai également dû mettre à jour plymouth car la version livrée avec Jessie entraînerait une défaillance du pilote framebuffer et, par conséquent, je ne pouvais pas le faire fonctionner sur l'écran tactile d'Adafruit.
Après cela, il a commencé à travailler pour moi. Mais je voulais aussi un écran "éteindre en toute sécurité" à la fin, car le Rpi n'a pas de matériel pour s'éteindre. J'ai donc ajouté un script systemd pour cela:
[Unit]
Description=Tell Plymouth to show a safe-to-power-off message
DefaultDependencies=no
After=umount.target
Before=shutdown.target
[Service]
ExecStart=-/bin/plymouth update --status " SAFE TO POWER DOWN"
Type=oneshot
[Install]
WantedBy=shutdown.target
Cela fait maintenant au moins 6 mois que je l'ai fait, mais j'espère que cela est utile.
Modifier: ajoutez quelques astuces supplémentaires.
Vous pouvez déboguer des thèmes plymouth comme ça. Démarrez plymouthd en mode débogage, par exemple:
plymouthd --debug --debug-file=/tmp/plymouth-debug-out
Et puis vous pouvez tester votre thème en utilisant:
plymouth --show-splash
plymouth --quit
C'est à ce stade que j'ai découvert que j'avais une faute de segmentation.
Vous pouvez également arrêter votre processus de démarrage et passer dans un shell pour le tester dans un environnement au démarrage. Modifiez /boot/cmdline.txt et ajoutez break=top
, ou voyez ici pour plus d'informations à ce sujet.
Ce sont toutes des astuces que j'ai utilisées et j'y suis finalement arrivé. Mais comme je l'ai dit, c'était un PITA.