Linux kernel 内核模块在构建为模块时未在内核中注册,但如果内置模块起作用
这是我第一次在内核中使用内核模块。我正在尝试运行内核已经有IIO框架驱动程序的传感器BMC150: 我可以看到:Linux kernel 内核模块在构建为模块时未在内核中注册,但如果内置模块起作用,linux-kernel,linux-device-driver,kernel-module,Linux Kernel,Linux Device Driver,Kernel Module,这是我第一次在内核中使用内核模块。我正在尝试运行内核已经有IIO框架驱动程序的传感器BMC150: 我可以看到: static const struct of_device_id bmc150_magn_of_match[] = { { .compatible = "bosch,bmc150_magn" }, { .compatible = "bosch,bmc156_magn" }, { .compatible = "bosch,bmm150_magn" },
static const struct of_device_id bmc150_magn_of_match[] = {
{ .compatible = "bosch,bmc150_magn" },
{ .compatible = "bosch,bmc156_magn" },
{ .compatible = "bosch,bmm150_magn" },
{ }
};
因此,我创建了设备树节点,如下所示:
magn@13 {
compatible = "bosch,bmc150_magn";
reg = <0x13>;
status = "ok";
};
magn@13 {
compatible=“博世,bmc150\u magn”;
reg=;
status=“ok”;
};
现在,如果我已经内置了模块,我可以在/sys/bus/i2c/drivers
下看到驱动程序,探针发生了,我可以在/sys/bus/iio/devices
下看到设备,一切正常,我能够从传感器获得读数
但是,如果我将模块构建为“M”(非内置),我不会在/sys/bus/i2c/drivers
下看到模块,也不会生成IIO设备。内核似乎不知道驱动程序。
这里有什么问题?(我使用的是busybox rootfs,我使用make modules\u install
将模块安装到rootfs。如果我使用“modprobe”,则驱动程序加载,一切正常)
我在文章中读到,如果一个模块有其他模块尚未作为依赖项加载,那么这些问题可能会发生。这是问题吗,我不确定。请指导。当您手动修改探测驱动程序时,一切运行正常吗?我想您需要在目标板上执行depmod-a并重新启动该板。看看是否可行。回答她e解释模块的自动加载@R.k.Lohana:是的,在手动执行modprobe之后,它工作正常。我还尝试创建了
/etc/modules load.d/mymodules.conf
文件。您可以使用udev或busybox的mdev添加冷/热插拔支持(您可以使用udev而不使用systemd的其余部分。)您可能还需要在busybox中配置UEVENT支持。只要生成了modules.alias文件,就会自动加载模块。当您手动modprobe驱动程序时,一切运行正常吗?我认为您需要在目标板上执行depmod-a并重新启动该板。看看是否有效。这个答案在这里解释模块的自动加载@R.k.Lohana:是的,在手动执行modprobe之后,它工作正常。我还尝试创建了/etc/modules load.d/mymodules.conf
文件。您可以使用udev或busybox的mdev添加冷/热插拔支持(您可以使用udev而不使用systemd的其余部分。)您可能还需要在busybox中配置UEVENT支持。只要生成modules.alias文件,就会自动加载模块。