Oh, l'ho fatto, ma è stata una PITA completa e totale.
Innanzitutto, i soliti file di plymouth, 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
E poi 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);
Questi vanno quindi nei luoghi pertinenti /usr/share/plymouth/themes/mytheme
insieme a mytheme.png.
Quindi abiliti mytheme con il plymouth-set-default-theme
comando.
Ora qualche trucco. plymouth può leggere solo i primi 1024 byte del cmdline del kernel ... ma, il caricatore Rpi PREPENDE le cose in / proc / cmdline, quindi potresti PENSARE di averlo fatto bene, ma se in cat /proc/cmdline
seguito potresti scoprire che le tue impostazioni in effetti cadere fuori dal limite di 1024 byte. Quindi devi aggiungere lo splash silenzioso e plymouth ignora le impostazioni molto presto in cmdline.txt.
Ho cmdline.txt impostato su questo (ma usiamo il touchscreen di adafruit, quindi 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
Ora, è necessario utilizzare anche un initramfs, poiché la schermata iniziale è abilitata dagli script di avvio iniziale. Di solito è facile come eseguire update-initramfs
e specificare initramfs initrd.img-4.1.9-v7
(o simili) in /boot/config.txt.
Nel mio caso, ho anche dovuto aggiornare Plymouth perché la versione fornita con Jessie si sarebbe confusa nel driver del framebuffer e, di conseguenza, non riuscivo a farlo funzionare sul touchscreen dell'adafruit.
Successivamente, ha iniziato a funzionare per me. Ma alla fine volevo anche una schermata di "spegnimento sicuro", poiché Rpi non ha l'hardware per spegnersi. Quindi ho aggiunto uno script systemd per questo:
[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
Sono passati almeno 6 mesi da quando l'ho fatto, ma spero che sia utile.
Modifica: aggiungi altri suggerimenti.
È possibile eseguire il debug di temi Plymouth in questo modo. Avviare plymouthd in modalità debug, ad esempio:
plymouthd --debug --debug-file=/tmp/plymouth-debug-out
E poi puoi testare il tuo tema usando:
plymouth --show-splash
plymouth --quit
Fu durante questa fase che ho scoperto di avere un segfault.
È inoltre possibile interrompere il processo di avvio e rilasciarlo in una shell per testarlo in un ambiente di avvio. Modifica /boot/cmdline.txt e aggiungi break=top
, oppure vedi qui per maggiori informazioni.
Questi sono tutti i trucchi che ho usato e finalmente ci sono arrivato. Ma come ho detto, era una PITA.