在我的ARM系统(基于Tegra)上,我正在运行主线linux内核。它使用设备树系统。
我通过设置状态=" 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
返回&#34;好的&#34;。
我是否需要制作某种&#34; mknod&#34;? 还有什么是必须的?
答案 0 :(得分:1)
传统的UNIX“字节流”设备模型是大多数现代硬件的高级抽象,因此有很多驱动程序不会为它们控制的设备创建/ dev条目,因为它们不是适合那个模特。特别是公共汽车司机就是这种情况 - 它们存在,但仅仅是为了发现和允许访问它们背后的设备;没有/ dev / sata可以让你与实际的主机控制器交互,在任何旧端口发送原始命令,无论连接与否;没有/ dev / usb允许您尝试任意转移到可能存在或可能不存在的任意端点。
此外,在这种情况下,典型的“外部接口”控制器比SATA或USB接口的数量级要简单 - “设备”本身通常只是控制某些时钟和芯片的寄存器块 - 选择多路复用器。即使驱动程序确实创建了可以直接与之交互的内容,但实际上并没有多少做。
在这种情况下,正确的方法是将DT中的FPGA器件描述为GMI总线的子级,准确反映硬件,然后为此开发自己的驱动程序。公交车司机本身只是透明地坐在中间。如果你想通过直接读取和写入总线地址来快速而肮脏的方式开始,那么它就在内存映射的I / O区域之后;这正是/ dev / mem所存在的。