如何在Linux上调试无法绑定到设备的驱动程序?
我试图弄清楚为什么我的Creator CI20上的驱动程序未安装以下设备。供参考,我使用Linux内核v4.13.0并在本地进行编译: make ARCH=mips ci20_defconfig make -j8 ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- uImage 从正在运行的系统中,我可以看到: ci20@ci20:~# find /sys | grep rng /sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8 /sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8/compatible /sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8/name /sys/bus/platform/drivers/jz4780-rng /sys/bus/platform/drivers/jz4780-rng/bind /sys/bus/platform/drivers/jz4780-rng/unbind /sys/bus/platform/drivers/jz4780-rng/uevent 因此内核在运行时可以看到该设备,现在缺少的部分是为什么驱动程序从未绑定?我本来期望这样的事情: /sys/bus/platform/drivers/jz4780-rng/100000d8.rng 我确实找到了其他一些文章来解释如何调试正在运行的系统,例如: /programming/28406776/driver-binding-using-device-tree-without-compatible-string-in-the-driver /programming/35580862/device-tree-mismatch-probe-never-所谓 /programming/41446737/platform-device-driver-autoloading-mechanism 是否可以使用正在运行的内核的/ sys获取设备树的信息? 尽管这些帖子的信息准确无误,但对我来说却不是很有帮助。由于我是在本地构建内核(我printk在jz4780-rng驱动程序的probe函数中添加了),所以我的问题是: 我应该在编译时打开什么选项,以便内核在无法调用jz4780-rng驱动程序的probe函数时输出准确的信息? 特别是我该如何打印经过测试的总线/驱动器的完整列表driver_probe_device? 我printk可以在代码中的任何地方添加调试它。问题在于:哪个函数正在遍历设备树并调用probe / init函数? 以供参考: $ dtc -I fs -O dts /sys/firmware/devicetree/base | grep -A 1 …