如何更改 yocto 中的内核模块加载顺序
How to change kernel module loading order in yocto
目前我正在构建一个自定义的 yocto morty 内核。我发现在内核中,内核模块(实际上是摄像头驱动程序)的加载顺序不正确会导致模块失败。
我不想修改驱动,因为依赖太多,而且是不同公司不同人实现的。
所以如题所述,如何在内核启动阶段更改驱动加载顺序?
非常感谢任何帮助!
如果您谈论的是加载驱动程序,那意味着它不是内置驱动程序,因为它们是在启动时激活的,您不能优先考虑一个。
对于内核模块,您应该使用启动系统功能、systemd 或 sysv。
工作驱动程序的示例(谈到优先级) for 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
驱动程序不工作的示例(谈到优先级) for 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/
}
您也可以使用 KERNEL_MODULE_AUTOLOAD 变量。它对我有用。
添加
KERNEL_MODULE_AUTOLOAD += "<module-name>"
在你的 local.conf
目前我正在构建一个自定义的 yocto morty 内核。我发现在内核中,内核模块(实际上是摄像头驱动程序)的加载顺序不正确会导致模块失败。
我不想修改驱动,因为依赖太多,而且是不同公司不同人实现的。
所以如题所述,如何在内核启动阶段更改驱动加载顺序?
非常感谢任何帮助!
如果您谈论的是加载驱动程序,那意味着它不是内置驱动程序,因为它们是在启动时激活的,您不能优先考虑一个。
对于内核模块,您应该使用启动系统功能、systemd 或 sysv。
工作驱动程序的示例(谈到优先级) for 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
驱动程序不工作的示例(谈到优先级) for 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/
}
您也可以使用 KERNEL_MODULE_AUTOLOAD 变量。它对我有用。
添加
KERNEL_MODULE_AUTOLOAD += "<module-name>"
在你的 local.conf