相关疑难解决方法(0)

如何列出内核设备树

我正在使用带有 Debian 构建的嵌入式 Arm。如何从设备树中列出已编译的设备?我想看看是否已经支持某个设备。

对于阅读本文的人来说,“设备树”是将设备添加到(嵌入式)Linux 内核的规范/标准。

linux embedded linux-kernel device-tree

21
推荐指数
2
解决办法
7万
查看次数

如何调试无法绑定到 Linux 上的设备的驱动程序?

我想弄清楚为什么以下设备未在我的Creator CI20上设置为其驱动程序。作为参考,我使用的是 Linux 内核 v4.13.0 并在本地进行编译:

make ARCH=mips ci20_defconfig
make -j8 ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- uImage
Run Code Online (Sandbox Code Playgroud)

从正在运行的系统中,我可以看到:

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
Run Code Online (Sandbox Code Playgroud)

所以设备在运行时被内核看到,现在缺少的部分是为什么驱动程序从未绑定?我会期待这样的事情:

/sys/bus/platform/drivers/jz4780-rng/100000d8.rng
Run Code Online (Sandbox Code Playgroud)

我确实找到了其他一些解释如何调试正在运行的系统的帖子,例如:

虽然这些帖子上的信息是准确的,但对我来说并不是很有帮助。由于我在本地构建我的内核(我printkjz4780-rng驱动程序的探测功能中添加了),我的问题是:

  • 我应该在编译时打开什么选项,以便内核打印有关其未能为jz4780-rng驱动程序调用探测函数的准确信息?
  • 特别是如何打印已测试总线/驱动程序的完整列表driver_probe_device

printk可以在代码中的任何地方添加来调试它。问题是:哪个函数正在遍历设备树并调用probe/init 函数?

以供参考:

$ dtc -I fs -O dts /sys/firmware/devicetree/base | grep -A 1 rng
              rng@d8 {
                      compatible = "ingenic,jz4780-rng";
              };
Run Code Online (Sandbox Code Playgroud)

兼容字符串声明为:

cgu: jz4780-cgu@10000000 {
    compatible = …
Run Code Online (Sandbox Code Playgroud)

linux drivers devices mips device-tree

10
推荐指数
1
解决办法
5175
查看次数

当“wlan0”不是出现在/dev 中的设备时,Linux 如何找到/配置它?

(在 raspberry pi zero w,内核 4.14y 上)似乎无线适配器芯片不是 /dev fs 中的设备,而是 'ifconfig' 知道的东西的名称。我知道这是 Berkley Sockets 的人工制品。

它是硬件,我认为它必须在设备树中提及——以导致加载某些驱动程序,但它不能在 /dev (devfs) 中创建条目。

Sockets 在哪里/如何找到这个不是设备的设备?

wifi configuration device-tree

2
推荐指数
1
解决办法
1430
查看次数