Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux中设备如何链接到驱动程序_Linux_Linux Device Driver_Device Driver - Fatal编程技术网

Linux中设备如何链接到驱动程序

Linux中设备如何链接到驱动程序,linux,linux-device-driver,device-driver,Linux,Linux Device Driver,Device Driver,设备文件按主要和次要编号链接到驱动程序。那么,驱动程序如何链接到设备???当我们插入设备时,内核如何知道它与哪个模块一起工作?对于PCI设备,它们在一致的位置公开了供应商和设备id。内核模块可以向pci子系统提供它们支持的这些模块的列表 例如:当内核检测到新的插入设备时,程序可能会自动启动。现在也有助于这一点。关于供应商和设备ID以及热插拔和udev的答案是正确的,但他们没有解释主要和次要数字是什么。为了让所有的关键词都能为未来的搜索者所覆盖,我将在这里这样做 主要和次要设备编号,如ls-l/d

设备文件按主要和次要编号链接到驱动程序。那么,驱动程序如何链接到设备???当我们插入设备时,内核如何知道它与哪个模块一起工作?对于PCI设备,它们在一致的位置公开了供应商和设备id。内核模块可以向pci子系统提供它们支持的这些模块的列表


例如:

当内核检测到新的插入设备时,程序可能会自动启动。现在也有助于这一点。

关于供应商和设备ID以及热插拔和udev的答案是正确的,但他们没有解释主要和次要数字是什么。为了让所有的关键词都能为未来的搜索者所覆盖,我将在这里这样做

主要和次要设备编号,如
ls-l/dev
中所示,对识别设备检测时要加载的驱动程序没有帮助。它们用于内核在打开设备文件时了解您正在访问的设备

加载驱动程序时,如果它支持
/dev
中的任何特殊文件,它将调用
register\u chrdev
(或一些类似函数),通知内核它要使用的主数字。一些驱动程序通过要求内核选择一个未使用的主数字来动态选择主数字。登记程序将驾驶员及其主要号码放入一个表格中,以便以后查找

永久分配的设备编号在中央机构注册,并在中发布

/dev
中的文件具有与其驱动程序匹配的主编号,以及标识特定设备或功能的次编号。这些文件要么由
MAKEDEV
静态创建,要么由热插拔/udev系统动态创建。低级“创建设备文件”操作称为
mknod

当用户程序打开设备文件时,主数字和次数字用于在由
register\u chrdev
维护的表中查找驱动程序,并调用驱动程序的方法来处理用户的请求