你了解Linux内核中的常见符号?

 [THIS_MODULE]

模块是一种可以在内核运行过程中动态加载、卸载的内核功能组件。2.6内核中模块在被使用时,是不允许被卸载的。编程是需要用”使用计数”来描述模块是否在被使用。THIS_MODULE就充当了这个功能。

[likely& unlikely]

在2.6的内核中经常看到这两个符号,表面上看if(likely(value))和if(unlikely(value))其实都等同于if(value),但是在实际上执行是不同,加likely的意识着value为真的可能性要大;unlikely与之相反;加上这两个宏编译器会对其进行优化,提高程序效率。

[BUG_ON]

#define BUG_ON(condi     ti   on) do { \

if(unlikely(condi  TI on)) BUG(); \

} while(0)

一些内核调用可以用来方便     标记   bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构是相关的。大部分体系结构把BUG()和BUG_ON()定义成某种非法操作,这样自然会产生需要的oops。

[IS_ERR& PTR_ERR & ERR_PTR]

#define IS_ERR_VALUE(x) unlikely((x) >=(unsigned long)-MAX_ERRNO)

IS_ERR宏用来检测x地址是否有效;

sta  TI c inline void *ERR_PTR(long error)

{

return(void *) error;

}

sta  TI c inline long PTR_ERR(const void *ptr)

{

return(long) ptr;

}

[cont     ai   ner_of]

/**

*container_of - cast a member of a structure out to the containing structure

*@ptr:    the poin     te   r to the member.

*@type:   the type of the container structthis is embedded in.

*@member: the name of the member within the struct.

*

*/

#define container_of(ptr, type, member)({          \

consttypeof(((type *)0)->member)*__mptr = (ptr);    \

(type *)((char *)__mptr - offsetof(type,member)); })

通过指向成员member的指针ptr,来获取包含该成员的结构体type的指针。

[__init& __initdata & __exit & __exitdata]

这些宏定义的作用是告诉编译器将这些函数或者数据放入相应的sec  TI on中,而在模块加载的阶段,.ko文件中的代码和数据的加载区域是根据section来加载的

比如:如果函数的定义中带有__init,那么这个函数的所有代码被放入.init.text的section中;

如果函数的定义中带有__initdata,那么这个函数的所有代码被放入.init.data的section中

之所以要使用这个宏定义,其中一个原因是标记为初始化的函数和数据,表明该函数和数据仅在初始化期间使用,在模块装载之后,模块就会将初始化函数扔掉。这样可以将该函数占用的内存释放出来。



你了解Linux内核中的常见符号?_设计制作_制造/封装
20
19
0
52

相关资讯

  1. 1、洪金宝拿影帝时,他踏进演艺圈,巅峰时黎明当他配角,今满头白发3668
  2. 2、中国最毒舌影评人凭什么如此严苛?497
  3. 3、低调成婚!38岁TVB艺人升级成人妻曾凭《溏心风暴3》走红3594
  4. 4、游戏改编电影《无主之地》开机,“大魔王”凯特·布兰切特主演3154
  5. 5、生活剧太多了!《学区房》和《小敏家》轮番上阵,四大原因是关键527
  6. 6、TVB又开新剧,李佳芯与陈豪再续前缘,江美仪升级与黎耀祥大谈恋爱2566
  7. 7、冷血笑疯《名捕2》刘亦菲、江一燕争风抢邓超279
  8. 8、阿sa冲浪不慎受伤,2厘米伤口惹人心疼,自侃这是好彩头2585
  9. 9、蝙蝠女侠第一张正式剧照;《猛禽小队》选出三代蝙蝠女1319
  10. 10、中国版《复仇者联盟》!刘镇伟继续挑战烂片下限,可惜了四位男神4522
全部评论(0)
我也有话说
0
收藏
点赞
顶部