Raspbian Jessie上的自定义启动屏幕?


8

许多网站都介绍了如何使用SysV init在Pi上进行启动屏幕显示,但是我找不到有关如何在Jessie上使用systemd进行操作的任何信息。我尝试只是将init脚本“转换”为systemd-service,但是它没有任何作用。

有没有人设法做到这一点或任何有用的建议?


您是否尝试过在未指定Pi的情况下进行搜索?
史蒂夫·罗比拉德

在没有指定Pi的情况下进行搜索,是普利茅斯吗? wiki.debian.org/plymouth。我仍在使用Wheezy,所以不能确定...
eri0o

我也在寻找有关Jessie / RPi的解决方案...您有运气吗?普利茅斯解决方案似乎需要无法安装的plymouth-drm
jpw,2016年

Answers:


2

哦,我已经做到了,但是它是完整而完整的PITA。

首先,通常的普利茅斯文件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

然后是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);

然后将它们/usr/share/plymouth/themes/mytheme与mytheme.png 一起放在相关位置。

然后,使用plymouth-set-default-theme命令启用mytheme 。

现在有些诡计。plymouth只能读取内核cmdline的前1024个字节...但是,Rpi加载程序会将事情放在/ proc / cmdline的前面,因此您可能认为您做对了,但是,如果cat /proc/cmdline稍后,您可能会发现实际上您的设置低于1024字节的限制。因此,您必须非常早在cmdline.txt中添加安静的启动和普利茅斯忽略设置。

我将cmdline.txt设置为此(但是我们使用adafruit触摸屏,所以是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

现在,您还必须使用initramfs,因为初始屏幕是从早期启动脚本中启用的。这通常update-initramfsinitramfs initrd.img-4.1.9-v7在/boot/config.txt中运行和指定(或类似)一样容易。

就我而言,我还必须更新普利茅斯,因为Jessie附带的版本会在帧缓冲驱动程序中出现段错误,结果我无法在adafruit触摸屏上使用它。

之后,它开始为我工作。但是我也希望最后有一个“安全关闭”屏幕,因为Rpi没有可以自行关闭的硬件。因此,我为此添加了一个systemd脚本:

[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

现在距离我已经进行了至少6个月,但是我希望这是有用的。

编辑:添加更多提示。

您可以像这样调试普利茅斯主题。以调试模式启动plymouthd,例如:

plymouthd --debug --debug-file=/tmp/plymouth-debug-out

然后您可以使用以下方法测试您的主题:

plymouth --show-splash
plymouth --quit

正是在这个阶段,我发现我遇到了段错误。

您也可以停止引导过程,并放入外壳程序以在引导时环境中进行测试。编辑/boot/cmdline.txt并添加break=top,或者在此处查看更多信息。

这些都是我使用的技巧,我终于到了。但是正如我所说,这是一个PITA。


无法正常工作。也许我需要将命令放在cmdline的前面?编辑:猫/proc/cmdline|wc -c说,虽然只有508个字节。
柯比

我在启动时添加了有关调试外壳的更多详细信息,并分别测试了主题。
izak

太好了,谢谢。我明天或下周看看。
柯比

您如何设法更新普利茅斯?

我从源代码编译。我是制作debian软件包的老手,所以我从package.debian.org下载了源代码,并使用dpkg-buildpackage来构建它。如果需要,可以在pi上完成此操作,但是我想我是在chroot环境中构建的。我记不清了,你看到了:-)
izak '16

1

您可以使用asplashscreen。自定义启动屏幕


这是在使用SysV Init的Debian旧版本中执行此操作的方法。Jessie使用systemd,因此将无法使用它。
柯比

这种方式与systemd完美配合。现在,我在Debian Stretch中进行操作,并按照howto步骤完美工作。
Alfredo Pons Menargues,2016年

这在杰西工作。我发现初始屏幕显示的时间不一致-通过在do_start()方法中退出之前添加“ sleep 5”来解决。
格雷格T

0

@izak的答案有效,但是使用默认的Jessie软件包时,您可能仍然会遇到Plymouth segfaulting问题。要修复段错误,您将需要从测试系统信息库安装Plymouth。

请遵循AptPreferences文档中的说明,然后运行以下命令以更新您的Plymouth软件包:

apt install plymouth/testing

这为我解决了所有问题!

(我不能在@izak他的帖子上发表评论)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.