3.11.03 设备节点

2017-02-14


设备节点是Linux中的一种特殊文件类型,它代表着一个设备,但我们打开/dev下的一个设备文件,为什么就能操作到正确的驱动程序呢?这个的关键就是设备号。

通常情况下,设备驱动程序中不会指定一个设备号,而会使用函数让内核指定一个设备号,这可以避免设备号之间的冲突,而且与手工分配设备号相比,扩展性要好得多。

而设备文件则有专门的创建工具:mknod。

mknod /dev/hello c 234 0
mknod 名称 类型 主设备号 次设备号

这条命令会得到一个名为/dev/hello的新文件,它代表着设备驱动程序模块。

设备节点本身只是我们文件系统中的一个文件而已,然而,由于它作为设备节点的特殊地位,我们可以使用它来绑定一个已安装的设备驱动程序。如果一个应用程序发起一个open()系统调用,并以设备节点作为路径参数,那么,内核会搜索一个有效的设备驱动程序,搜索条件是它注册的主设备号和设备节点的主设备号相匹配。内核就是使用这个机制将我们的具体设备关联到一个设备几点上的。

而次设备号则只是一种机制,用于在一个设备驱动程序中处理多个设备或子设备。操作系统并不使用它,它仅仅是被传递给设备驱动程序。设备驱动程序能够以合适的方式随意使用次设备号。

另外一个值得注意的地方是:大多数主流Linux系统上,永远都不会实际的创建设备节点,设备节点的创建是由udev自动完成的。

results matching ""

    No results matching ""