Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 内核模块在构建为模块时未在内核中注册,但如果内置模块起作用_Linux Kernel_Linux Device Driver_Kernel Module - Fatal编程技术网

Linux kernel 内核模块在构建为模块时未在内核中注册,但如果内置模块起作用

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" },

这是我第一次在内核中使用内核模块。我正在尝试运行内核已经有IIO框架驱动程序的传感器BMC150:

我可以看到:

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文件,就会自动加载模块。