在 Debian/Raspbian(Raspberry Pi)中加载内核模块后运行启动脚本

在 Debian/Raspbian(Raspberry Pi)中加载内核模块后运行启动脚本

我正在尝试为我的 Raspberry Pi 创建自定义启动屏幕按照此处的说明进行操作

这涉及fbi在脚本中安装和运行它init.d

这在默认的 HDMI 输出上工作正常。问题是,我需要图像显示在Adafruit PiTFT位于 /dev/fb1 上。使用开关从命令提示符运行 fbi-d /dev/fb1即可,并在 PiTFT 上显示图像。

问题是 PiTFT 是使用内核模块加载的,根据 Debian 启动过程,该模块是脚本init.d运行。这意味着 -d 开关不起作用,因为/dev/fb1尚不存在。

有没有办法我可以设置一个启动脚本在内核模块加载后运行,这样我就可以在 PiTFT 上显示图像?

答案1

我在这里假设 Raspbian 与常规 Debian GNU/Linux 类似,并且您使用的是基于依赖项的启动(不是 systemd;尽管这可能也可以适用于 systemd)。也就是说,您的环境类似于 Debian Wheezy(这是撰写此答案时的最新稳定版本)。

在启动过程中,/etc/init.d/kmod 会启动以加载 /etc/modules 中列出的所有模块。通过确保您的脚本具有kmod依赖项,您可以利用这一点来确保在脚本执行之前加载所需的内核模块。

为此,您应该INIT INFO在脚本中添加一个标题(可以从另一个脚本复制),其中列出kmodRequired-Start启动脚本提供的服务时必需)和Required-Stop(停止服务时必需)。您还需要Default-Start适当设置Default-Stop

一个好的初始化脚本头可能是这样的:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          mybootdisplay
# Required-Start:    kmod
# Required-Stop:     kmod
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: 
# Description:       
### END INIT INFO
# ... your magic goes down here ...

查看man 8 insserv有关不同信息节的更多详细信息,并查看不同的现有初始化脚本以获得灵感。

使用适当的 init 信息块创建 init 脚本后,运行sudo update-rc.d mybootdisplay defaults以将 /etc/init.d/mybootdisplay 添加到启动顺序。


作为选择除了上述内容,您可以让脚本在运行之前通过调用modprobe或自身来专门加载所需的内核模块。 话虽如此,我个人还是更喜欢使用正常的 init 脚本,这意味着上述解决方案可能更好。insmodfbi

相关内容