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

上传人:白大夫 文档编号:3381542 上传时间:2019-08-20 格式:DOC 页数:2 大小:16KB
返回 下载 相关 举报
你了解Linux内核中的常见符号?.doc_第1页
第1页 / 共2页
亲,该文档总共2页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《你了解Linux内核中的常见符号?.doc》由会员分享,可在线阅读,更多相关《你了解Linux内核中的常见符号?.doc(2页珍藏版)》请在三一文库上搜索。

1、你了解Linux内核中的常见符号?THIS_MODULE模块是一种可以在内核运行过程中动态加载、卸载的内核功能组件。2.6内核中模块在被使用时,是不允许被卸载的。编程是需要用”使用计数”来描述模块是否在被使用。THIS_MODULE就充当了这个功能。likely在2.6的内核中经常看到这两个符号,表面上看if(likely(value)和if(unlikely(value)其实都等同于if(value),但是在实际上执行是不同,加likely的意识着value为真的可能性要大;unlikely与之相反;加上这两个宏编译器会对其进行优化,提高程序效率。BUG_ON#define BUG_ON(c

2、ondition) do if(unlikely(condiTIon) BUG(); while(0)一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构是相关的。大部分体系结构把BUG()和BUG_ON()定义成某种非法操作,这样自然会产生需要的oops。IS_ERR#define IS_ERR_VALUE(x) unlikely(x) =(unsigned long)-MAX_ERRNO)IS_ERR宏用来检测x地址是否有效;sta

3、TIc inline void *ERR_PTR(long error)return(void *) error;staTIc inline long PTR_ERR(const void *ptr)return(long) ptr;container_of/*container_of - cast a member of a structure out to the containing structure*ptr: the pointer to the member.*type: the type of the container structthis is embedded in.*me

4、mber: 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这些宏定义的作用是告诉编译器将这些函数或者数据放入相应的secTIon中,而在模块加载的阶段,.ko文件中的代码和数据的加载区域是根据section来加载的比如:如果函数的定义中带有_init,那么这个函数的所有代码被放入.init.text的section中;如果函数的定义中带有_initdata,那么这个函数的所有代码被放入.init.data的section中之所以要使用这个宏定义,其中一个原因是标记为初始化的函数和数据,表明该函数和数据仅在初始化期间使用,在模块装载之后,模块就会将初始化函数扔掉。这样可以将该函数占用的内存释放出来。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1