Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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_U Boot_Device Tree - Fatal编程技术网

Linux kernel 永远不会调用内核模块探测函数

Linux kernel 永远不会调用内核模块探测函数,linux-kernel,linux-device-driver,u-boot,device-tree,Linux Kernel,Linux Device Driver,U Boot,Device Tree,我尝试加载一个示例设备树驱动程序,但从未调用probe函数 dts文件中的条目如下所示 dummy1 { compatible = "ti,dummy"; reg = <0x9f200000 0x1000>, <0x9f201000 0x8>; }; 我已经重新编译了dtb文件(dtdiff显示它包含我的设备)并将其复制到目标,但在修改驱动程序时什么也没有发生。 我在/sys/firmware/devicetree/中也找不到它。为了解决

我尝试加载一个示例设备树驱动程序,但从未调用probe函数

dts文件中的条目如下所示

dummy1 {
    compatible = "ti,dummy";
    reg = <0x9f200000 0x1000>,
        <0x9f201000 0x8>;
};
我已经重新编译了dtb文件(dtdiff显示它包含我的设备)并将其复制到目标,但在修改驱动程序时什么也没有发生。
我在/sys/firmware/devicetree/

中也找不到它。为了解决这个问题,我甚至删除了dtb文件……神奇的是,内核继续启动,就好像什么都没发生一样。我认为dtb可以烘焙到zImage中,这可能需要一些额外的调整,但事实并非如此

解决方案: 最后,我发现uboot也在首先检查emmc卡上的./boot目录!从中删除dtb会立即使NFS上的文件“可见”


注:如果遇到类似问题,请仔细阅读输出。当我在NFS上删除.dtb加载错误时,我开始理解这个问题,但之后出现一条消息,表明它已成功加载到内存。

复制到目标是什么意思?@yashC我在beaglebone black上运行内核,beaglebone black通过串行连接到主机。系统使用Busybox/NFS引导。通过复制到目标,我的意思是将重新编译的am335x-boneblack.dtb复制到NFS上的/boot文件夹。由于它不存在于
devicetree/
中,首先,我们可以假设它与内核没有解析它有关。你可以试试看。1.明确给出
status=ok
2。如果该节点被定义为其他节点的子节点,则检查该节点是否禁用(如果尚未禁用,则将其置于soc节点下)。@yashC我执行了该操作,但没有丝毫更改。更重要的是,即使从NFS中删除dtb文件,DT也能成功加载!它能被烤进zImage吗?有可能是这样的。您可以尝试删除zimage文件并添加新的内核映像文件。那就行了。
#define DRV_NAME  "dummy"
static const struct of_device_id dummy_of_match[] = {
{
.compatible = "ti,dummy",
}, {
},
};

static struct platform_driver dummy_driver = {
.driver = {
.name = DRV_NAME,
.of_match_table = dummy_of_match,
},
.probe   = dummy_probe,
.remove   = dummy_remove,
};
MODULE_DEVICE_TABLE(of, dummy_of_match);
module_platform_driver(dummy_driver);