设备文件按主要和次要编号链接到驱动程序。那么司机如何链接到设备???当我们插入一个设备时,内核如何知道它与哪个模块加载了
答案 0 :(得分:1)
对于PCI设备,它们在一致的位置公开供应商和设备ID。内核模块可以向pci子系统提供它们支持的列表。
例如:http://lxr.free-electrons.com/source/drivers/uio/uio_aec.c#L48
答案 1 :(得分:1)
关于供应商和设备ID以及hotplug和udev的答案是正确的,但他们没有解释主要和次要数字是什么。所以关键词都包含在未来的搜索者中,我会在这里做。
ls -l /dev
中显示的主要和次要设备编号无法识别在检测到设备时要加载的驱动程序。它们是内核在打开设备文件时知道您正在访问的设备。
当加载驱动程序时,如果它支持/dev
中的任何特殊文件,它将调用register_chrdev
(或某些类似的函数),通知内核它想要使用的主编号。一些驱动程序通过要求内核选择一个未使用的驱动程序来动态选择主要数字。注册程序将驱动程序及其主要编号放入一个表格中,以便稍后找到。
永久分配的设备号已在中央机构注册,注册发布在Documentation/admin-guide/devices.*。
/dev
中的文件具有与其驱动程序匹配的主要编号,以及标识特定设备或功能的次要编号。这些文件由MAKEDEV
静态创建,或由hotplug / udev系统动态创建。低级“创建设备文件”操作称为mknod
。
当用户程序打开设备文件时,主要和次要编号用于在register_chrdev
维护的表中查找驱动程序,并调用驱动程序的方法来处理用户的请求。
答案 2 :(得分:0)