你了解linux驱动的入口?

 以module_init(Demo_init);为例

    你了解linux驱动的入口?_设计制作_可编程逻辑  

定义文件:

include\     linux   \init.h

#define module_init(x) __initcall(x);

#define __initcall(fn) device_initcall(fn)

#define device_initcall(fn) __define_initcall("6",fn,6)

#define __define_initcall(level,fn,id) \
sta     ti   c initcall_t __initcall_##fn##id __attribu     te   _used__ \
__attribute__((__sec  TI on__(".initcall" level ".init"))) = fn

展开为

sta  TI c initcall_t __initcall_Demo_init6 __attribute_used__ __attribute__((__sec  TI on__(".initcall6.init"))) = Demo_init;

typedef int (*initcall_t)(void);

这里

typedef int (init_fnc_t)  (void); 定义一种函数类型
typedef int (*init_fnc_t) (void); 定义一种类型的函数指针

所以展开的宏定义就是定义名为__initcall_Demo_init6的函数指针

属性有两个:

1.

在gcc 3.4之前的编译器被展开成__attribute__((unused))来禁止编译器弹出有关函数没有被用到的的警告信息

在gcc 3.4之后被展开成__attribute__((used))功能一样

2.加载到段.initcall6.init,其地址为Demo_init的地址

段的分布顺序在链接脚本中有

编译内核后,会有vmlinux.lds的打印信息,里面有各段位置

__initcall_start = .;

*(.initcallearly.init) __early_initcall_end = .;

*(.initcall0.init)

*(.initcall0s.init)

*(.initcall1.init)

*(.initcall1s.init)

*(.initcall2.init)

*(.initcall2s.init)

*(.initcall3.init)

*(.initcall3s.init)

*(.initcall4.init)

*(.initcall4s.init)

*(.initcall5.init)

*(.initcall5s.init)

*(.initcallrootfs.init)

*(.initcall6.init)

*(.initcall6s.init)

*(.initcall7.init)

*(.initcall7s.init)

__initcall_end = .;

当insmod的时候,内核从initcall6.init段中读取到驱动入口地址,然后跳转到该地址去执行入口函数,

一般入口函数会进行注册驱动,例如

register_chrdev(unsigned int major, const char * name, const struct file_opera  TI ons * fops)

    usb   _register(struct usb_driver * driver)

s     pi   _register_driver(struct spi_driver * sdrv)

等等注册函数,再依次调用相应设备结构体中的ioctl或者直接调用file_operations结构体



34
75
0
66

相关资讯

  1. 1、《诡拼车》曝宣传特辑“万里诡拼车”嗨遍全国3247
  2. 2、名叫“胭脂”的五个美人,赵丽颖聪明,陈紫函颜值高,贾静雯纯真898
  3. 3、​娱乐圈最会演戏的星二代,除了郭麒麟,还有他俩4198
  4. 4、山河令幕后:导演谈龚俊出不来的那场戏,说他拍完还不太想离开4166
  5. 5、本应2018年上映的超英电影,但因各种问题延期或再也看不到了4270
  6. 6、韩国将翻拍三十而已,网友不在意谁演顾佳,就想知道谁演林有有3225
  7. 7、一整部宫斗结束了,如懿始终还是废柴,但这些才是最真实的2913
  8. 8、黑帮大佬古天乐退出江湖!这部成龙监制的港片,实在太另类3172
  9. 9、《西游记》最贵的女演员,导演租飞机接送,插足他人婚姻当小三3207
  10. 10、《3D诡婴吉咪》导演谈心得将心理恐怖发挥极致999
全部评论(0)
我也有话说
0
收藏
点赞
顶部