Linux设备驱动之第 2 章 预备知识

2.6. 预备知识

        内核是一个特定的环境,对需要和它接口的代码有自己的一些要求。大部分内核代码中都要包含相当数量的头文件,以便获得函数、数据类型和变量的定义。有几个头文件是用于模块的,必须出现在每个可装载的模块中。所有的模块代码中都包含下面两行代码:

#include <linux/init.h>

#include <linux/module.h>

linux/module.h包含有可装载模块需要的大量符号和函数的定义。linux/init.h包含指定初始化和清除函数。大部分模块还包含 linux/moudleparam.h头文件,这样,就可以在装载模块时向模块传递参数。尽管不是严格要求的,但模块应该指定代码所使用的许可证。只需包含MODULE_LICENSE行:

MODULE_LICENSE("GPL");

        内核能够识别的许可证有 "GPL"( 适用 GNU 通用公共许可的任何版本 ),"GPL v2"( 只适用 GPL 版本 2 ),"GPL and additional rights(GPL及附加权利)","Dual BSD/GPL(BSD/GPL双重许可证)","Dual MPL/GPL(MPL/GPL双重许可证)"以及"Proprietary(专有)"。如果一个模块没有显示地标记为上述内核可识别的许可证,则会被假定是专有的,而内核装载这种模块就会被污染。

        可在模块中包含的其它描述性定义包括 MODULE_AUTHOR ( 描述模块作者)、MODULE_DESCRIPION(用来说明模块用途的简短描述)、MODULE_VERSION(代码修订号)、MODULE_ALIAS(模块别名)以及MODULE_DEVICE_TABLE(用来告诉内核空间模块支持的设备)。

        上述MODULE_声明可出现在源文件中源代码函数以外的任何地方。但新近的内核编码习惯是将这些声明放在文件的最后。

猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/80917972