目前我正致力于构建一个自定义的yocto morty内核。我发现在内核中,内核模块(实际上是相机驱动程序)的不正确加载顺序将导致模块失败。
我不想修改驱动程序,因为依赖项太多而且它们是由不同公司的不同人员实现的。
正如标题所述,如何在内核启动阶段更改驱动程序加载的顺序?
非常感谢任何帮助!
答案 0 :(得分:0)
如果您正在谈论加载驱动程序,这意味着它不是内置驱动程序,因为它们在启动时被激活,您无法优先考虑其中一个。 对于内核模块,您应该使用启动系统功能,systemd或sysv systemd的工作驱动程序(说到优先级)的示例:
[Unit]
Description=Initializer for good driver
Before=bad_driver.service
[Service]
Type=oneshot
ExecStart=/bin/sh /usr/bin/script_modprobing_good_driver.sh
[Install]
WantedBy=multi-user.target
systemd的不工作的驱动程序(说到优先级)的示例:
[Unit]
Description=Initializer for bad driver
After=good_driver.service
[Service]
Type=oneshot
ExecStart=/bin/sh /usr/bin/script_modprobing_bad_driver.sh
[Install]
WantedBy=multi-user.target
还有一个.bb文件来安装这些人。
SUMMARY = "Systemd test for changing precedence of 2 kernel modules"
LICENSE = "CLOSED"
SRC_URI = "file://script_modprobing_good_driver.sh \
file://script_modprobing_bad_driver.sh \
file://bad_driver.service \
file://good_driver.service \
"
DEPENDS = "systemd"
S = "${WORKDIR}"
inherit systemd
SYSTEMD_SERVICE_${PN} = " bad_driver.service good_driver.service "
do_install () {
install -d ${D}/usr/bin
install -d ${D}/etc/systemd/system
install -m 700 ${S}/script_modprobing_bad_driver.sh ${D}/usr/bin/
install -m 700 ${S}/script_modprobing_good_driver.sh ${D}/usr/bin/
install -m 644 ${S}/bad_driver.service ${D}/etc/systemd/system/
install -m 644 ${S}/good_driver.service ${D}/etc/systemd/system/
}
答案 1 :(得分:0)
您还可以使用KERNEL_MODULE_AUTOLOAD变量。它对我有用。
添加
你的local.conf中的KERNEL_MODULE_AUTOLOAD += "<module-name>"