Linux中__init、__devinit等初始化宏

来源:互联网 发布:迈阿密大学知乎 编辑:程序博客网 时间:2024/05/19 03:27

在内核里经常可以看到__init,__devinit这样的语句,这都是在init.h中定义的宏,gcc在编译时会将被修饰的内容放到这些宏所代表的section

其典型的定义如下:

  1. #define__init __section(.init.text)__cold notrace

  2. #define__initdata __section(.init.data)

  3. #define__initconst __section(.init.rodata)

  4. #define__exitdata __section(.exit.data)

  5. #define__exit_call __used __section(.exitcall.exit)

其典型用法如下:

  1. staticint__init xxx_drv_init(void)

  2. {

  3. returnpci_register_driver(&xxx_driver);

  4. }

根据上面的定义与用法,xxx_drv_init()函数将会被link.init.text段。

之所以加入这样的宏,原因有2

1,一部分内核初始化机制依赖与它。如kernel将初始化要执行的init函数,分为7个级别,core_initcall,postcore_initcall, arch_initcall, subsys_initcall, fs_iitcall,device_initcall, late_initcall。这7个级别优先级递减,即先执行core_initcall,最后执行late_initcall。通过使用文中提到的宏,gcc会将初始化代码按下面的结构安排:

在内核初始化时,从__initcall_start__initcall_end之间的initcall被一次执行。

2,提高系统效率

初始化代码的特点是,在系统启动时运行,且一旦运行后马上推出内存,不再占用内存。

================================================================================

常用的宏:

  • __init,标记内核启动时所用的初始化代码,内核启动完成后就不再使用。其所修饰的内容被放到.init.textsection中。

  • __exit,标记模块退出代码,对非模块无效

  • __initdata,标记内核启动时所用的初始化数据结构,内核启动完成后不再使用。其所修饰的内容被放到.init.datasection中。

  • __devinit,标记设备初始化所用的代码

  • __devinitdata,标记设备初始化所用的数据结构

  • __devexit,标记设备移除时所用的代码

  • xxx_initcall7个级别的初始化函数

==================================================================================

driver中的使用:

  • module_init,module_exit函数所调用的函数,需要分别用__init__exit来标记

  • pci_driver数据结构不需要标记

  • proberemove函数用__devinit__devexit来标记

  • 如果remove使用__devexit标记,则在pci_drvier结构中要用__devexit_p(remove)来引用remove函数

  • 如果不确定需不需要添加宏,则不要添加


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魔域手机号换了怎么办 买的qq号找回了怎么办 买dnf账号被找回怎么办 微博账号已锁定怎么办 抖音账号封手机怎么办 手机号码绑定被别人占用了怎么办 DNF账号给找回了怎么办 转转上被骗了200怎么办 7彩账号被锁定怎么办 猪不吃食没精神怎么办 cf手游签到没给怎么办 cf说停止运行了怎么办 cf端游永久禁赛怎么办 cf端游爆破怕死怎么办 王者荣耀累计扣分12分怎么办 去医院看病没带身份证怎么办 ps4星战2鬼服怎么办 冒险岛英雄五转怎么办 6儿童视力低常怎么办 腰干活累的酸痛怎么办 狗狗体力很差怎么办啊 脉差总是五十多怎么办 吃过敏药嗜睡乏力怎么办 写字紧张心跳的快手抖怎么办 怀孕食欲差没精神怎么办 爬个三楼就喘了怎么办 头被篮球砸了怎么办 打球手指肿了很久怎么办 客人吃饭跑单了怎么办 脑子总是记不住东西怎么办 穿的鞋有味道怎么办 生完孩子血糖高怎么办 生了孩子子宫大怎么办 生完孩子阴吹怎么办 怀孕初期感冒嗓子发炎怎么办 脑子转不过来弯怎么办 他说我道行不深怎么办 鞋子内测磨破了怎么办 老公拉肚子拉的很厉害怎么办 老公拉肚子拉得很厉害怎么办 和老公吵架很厉害怎么办