设备文件链接到驱动程序的主要和次要号码。 那么驱动程序如何链接到设备? 当我们插入一个设备时,内核怎么知道它和哪个模块加载了
有关供应商和设备ID以及hotplug和udev的答案是正确的,但是他们没有解释主要和次要数字是什么。 所有关键字都是为未来的搜索者所覆盖,我会在这里做。
在ls -l /dev
看到的主要和次要设备号码不会有助于识别在检测到设备时加载的驱动程序。 它们是让内核知道你打开设备文件时访问的是什么设备。
当驱动程序加载时,如果它支持/dev
任何特殊文件,它将调用register_chrdev
(或类似的函数),通知内核的主要号码使用。 一些驱动程序通过要求内核选择一个未使用的驱动来动态选择一个主要的数字。 注册程序将驾驶员及其主要号码放入表格中,稍后可以找到它们。
永久分配的设备编号在中央管理机构进行注册,注册信息将在文档/管理指南/设备中发布。
/dev
文件具有与其驱动程序匹配的主号码,以及标识特定设备或功能的次要号码。 这些文件是由MAKEDEV
静态创建的,或者由hotplug / udev系统动态创建的。 低级别的“创建设备文件”操作称为mknod
。
当用户程序打开一个设备文件时,主要和次要号码用于在由register_chrdev
维护的表中查找驱动程序,并调用驱动程序的方法来处理用户的请求。
对于PCI设备,它们将供应商和设备ID展示在一个一致的位置。 内核模块可以向pci子系统呈现它们支持的列表。
例如: http : //lxr.free-electrons.com/source/drivers/uio/uio_aec.c#L48
当内核检测到新插入的设备时, hotplug程序可能会自动启动。 现在udev也为此做出了贡献。