当前位置: 首页 > article >正文

module是什么类型_Linux驱动开发:为什么教程都不讲MODULE_DEVICE_TABLE的作用

d4577392b70efb61b58c01bbcf0b04c6.png

1.疑问

在阅读linux源代码时发现,在驱动中大量使用了MODULE_DEVICE_TABLE这个宏。

MODULE_DEVICE_TABLE(platform, s3c_adc_driver_ids);
MODULE_DEVICE_TABLE(of, of_flash_match);
MODULE_DEVICE_TABLE(of, dma_match);

而网上大部分的教程都没有介绍过这个宏,那么这个宏究竟是做什么的那?

2.分析

看看它是如何实现的:

这个宏定义在:/include/linux/module.h 中

#ifdef MODULE
/* Creates an alias so file2alias.c can find device table. */
#define MODULE_DEVICE_TABLE(type, name)					
extern const typeof(name) __mod_##type##__##name##_device_table		__attribute__ ((unused, alias(__stringify(name))))
#else  /* !MODULE */
#define MODULE_DEVICE_TABLE(type, name)
#endif

根据代码把这个宏展开之后会发现:

生成了一个 _mod_type__name_device_table 的符号表,其中type为类型,name是这个驱动的名称。在内核编译的时候将这部分符号单独放置在一个区域。

3.原因

当内核运行的时,用户通过类型(tpye)和类型对应的设备表中名称(name)中动态的加载驱动,在表中查找到了这个符号之后可以迅速的加载驱动。

4. 结论

由以上可以得出结论,MODULE_DEVICE_TABLE一般用于动态加载驱动也就是热插拔的时候使用,这也就是为什么网上大部分教程不讲这个驱动的原因了。

http://www.lryc.cn/news/2419795.html

相关文章:

  • Free Pascal介绍
  • 蓝牙广播报文
  • 数据产品化的数据标准化:如何实现数据的一致性和可比性
  • 3维地图的尝试
  • C和指针
  • Ubuntu下Tinyos安装步骤
  • Java中获取时间以及java.util和java.sql之间时间日期的转换
  • assert_param 错误的解决方法
  • [Mysql] LIKE与通配符
  • 利用百度点击原理提升关键词排名
  • 禁用的灰色文本框、按钮的克星
  • web应用项目开发
  • window.open()和window.showModalDialog 的使用及传值操作
  • c语言程序的生命周期(编写、预处理、编译、汇编、链接、执行)
  • 四个数列(二分查找)
  • IoU,GIoU,DIoU、CIoU详解
  • System.ArgumentException HResult=-2147024809 Message=参数无效。 Source=System.Drawing
  • 标志位寄存器与CF、OF标志位的区分
  • 史上可以针对大部分对于鼠标右键菜单的设置
  • 常用协议对应的端口号
  • Javaweb开发项目之JS知识(JavaScript)
  • 日本推出罩杯测量APP,罩杯大小一夹便知!
  • AFL实战
  • 中国家装水管十大品牌排行榜:联塑、日丰、金牛、弗锐德、美尔固等品牌上榜
  • 字体下载_ps字体打包下载,送你1.15G+316款可用字体
  • 8005端口导致的阿里云上的tomcat无法外部访问
  • 2021-09-18堡垒机
  • SuperMap iMobile for Android许可介绍
  • Phoenix 的 thick Client 和 thin Client
  • Actix-Web构建一个简单的HTTP服务器