Linux Device Tree:如何制作设备文件?

Linux Device Tree: How to make the device file?

在我的 ARM 系统(基于 Tegra)上,我是 运行 主线 linux 内核。它使用设备树系统。

我通过设置 status="okay" 在 .dts 文件中为 General-Memory-Bus(SoC 的一部分)启用了硬件驱动程序。重新编译 dtb 并启动内核。但是没有设备 (/dev/xx) 出现。

驱动编译进内核,可以看到

cat /lib/modules/$(uname -r)/modules.builtin

命令

cat /sys/firmware/devicetree/base/<path to device>/status

returns "okay".

我需要制作某种 "mknod" 吗? 还有什么必要的?

传统的 UNIX "stream of bytes" 设备模型是大多数现代硬件的漂亮 high-level 抽象,因此有很多 drivers 不创建 /dev 条目他们控制的设备主要是因为它们不适合该模型。总线 driver 尤其是这种情况——它们存在,但只是为了发现并允许访问它们背后的设备;没有 /dev/sata 可以让您与实际的主机控制器交互,无论连接与否,都可以在任何旧端口上发送原始命令;没有 /dev/usb 可以让您尝试任意传输到可能存在或不存在的任意端点。

此外,在这种情况下,您的典型 'external interface' 控制器比 SATA 或 USB 等接口复杂几个数量级 - 'device' 本身通常只不过是一个寄存器块,控制一些时钟和一个 chip-select 多路复用器。即使 driver 确实创造了一些你可以直接与之互动的东西,你也无法 用它。

这种情况正确的处理方式是在DT中将你的FPGA器件描述为GMI总线的child,准确反映硬件,不能少,然后自己开发driver 为了那个原因。总线 driver 本身就透明地位于中间。如果你确实想要一种快速而肮脏的方式来直接读写总线地址,那么,它在 memory-mapped I/O 区域后面;这正是 /dev/mem 存在的目的。