我有一个驱动程序作为引导的一部分,使用某个初始调用级别(比如late_initcall)加载。作为模块init的一部分,它向udev注册以自动创建设备节点auto-ma(t|g)。问题是模块如何知道udev守护进程是否在引导过程中的那个时间点运行。否则,用户空间将无法使用设备文件,从而导致驱动程序和设备无用。
谢谢。
发布于 2012-08-19 18:10:46
首先,udev只是创建设备节点的一种机制。您的代码应该在内核设备模型中创建一个设备,然后在/dev中为您的设备创建一个设备节点。在嵌入式系统上,这可能只是一个简单的shell脚本。
就时间而言,如果您的设备是在引导早期创建的,那么一旦udev启动并运行,udev和内核将处理重放创建事件。这是通过udev扫描/sys并将"add"写入每个设备的uevent文件来实现的。这告诉内核发送创建事件,udev通过netlink接收该事件(或者它可以使用uevent_helper)。
而且,即使没有udev,您的设备也会出现在/sys中的某个地方,在那里您可以查询它的主编号和次要编号,并手动创建设备节点。
https://stackoverflow.com/questions/12010366
复制相似问题