如何在yocto中更改内核模块加载顺序

时间:2017-07-11 00:09:48

标签: module linux-kernel driver yocto

目前我正致力于构建一个自定义的yocto morty内核。我发现在内核中,内核模块(实际上是相机驱动程序)的不正确加载顺序将导致模块失败。

我不想修改驱动程序,因为依赖项太多而且它们是由不同公司的不同人员实现的。

正如标题所述,如何在内核启动阶段更改驱动程序加载的顺序?

非常感谢任何帮助!

2 个答案:

答案 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>"