必威体育Betway必威体育官网
当前位置:首页 > IT技术

MODULE_DEVICE_TABLE宏的理解

时间:2019-07-16 16:41:05来源:IT技术作者:seo实验室小编阅读:61次「手机版」
 

module_device_table

在学习USB驱动时,会看到下面的代码

module_device_table(usb, id_table);

MODULE_DEVICE_TABLE宏的定义如下:

#define MODULE_DEVICE_TABLE(type, name)					\
  extern const struct type##_device_id __mod_##type##__##name##_device_table \
  __attribute__ ((unused, alias(__stringify(name))))

利用上面的例子,该宏生成一个名为__mod_usb__id_table_device_table的局部变量,该变量指向第二个参数,是id_table的别名。内核构建时,depmod程序会在所有模块中搜索符号__mod_usb__id_table_device_table,把数据(设备列表)从模块中抽出,添加到映射文件/lib/modules/KERNEL_VERSION/modules.usbmap中,当depmod结束之后,所有的USB设备连同他们的模块名字都被该文件列出。当内核告知热插拔系统一个新的USB设备被发现时,热插拔系统使用modules.usbmap文件来找寻恰当的驱动程序。 

MODULE_DEVICE_TABLE的第一个参数是设备的类型,如果是USB设备,那自然是usb(如果是PCI设备,那将是pci,这两个子系统用同一个宏来注册所支持的设备)。后面一个参数是设备表,这个设备表的最后一个元素是空的,用于标识结束。

例:假如代码定义了USB_SKEL_VENDOR_ID是 0xfff0,USB_SKEL_PRODUCT_ID是0xfff0,也就是说,当有一个设备接到集线器时,usb子系统就会检查这个设备的 vendor ID和product ID,如果他们的值是0xfff0时,那么子系统就会调用这个模块作为设备的驱动.

(注:最新的linux文件系统中已经找不到modules.usbmap文件,现在还不理解所做的改变,后面理解之后再添加)

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读