发布时间:2012-07-23 17:13:12
如已提到的, 模块初始化函数注册模块提供的任何功能. 这些功能, 我们指的是新功能, 可以由应用程序存取的或者一整个驱动或者一个新软件抽象. 实际的初始化函数定义常常如: static int __init initialization_function(void){ /* Initialization code here */}module_init(initialization_function); 初.........【阅读全文】
发布时间:2012-07-23 17:03:49
大部分内核代码包含了许多数量的头文件来获得函数, 数据结构和变量的定义. 我们将在碰到它们时检查这些文件, 但是有几个文件对模块是特殊的, 必须出现在每一个可加载模块中. 因此, 几乎所有模块代码都有下面内容: #include #include moudle.h 包含了大量加载模块需要的函数和符号的定义. 你需要 init.h 来指.........【阅读全文】
发布时间:2012-07-23 16:56:54
linux 内核头文件提供了方便来管理你的符号的可见性, 因此减少了命名空间的污染( 将与在内核别处已定义的符号冲突的名子填入命名空间), 并促使了正确的信息隐藏. 如果你的模块需要输出符号给其他模块使用, 应当使用下面的宏定义: EXPORT_SYMBOL(name);EXPORT_SYMBOL_GPL(name); 上面宏定义的任一个使得给定的.........【阅读全文】
发布时间:2012-07-23 16:48:03
编译模块点击(此处)折叠或打开如下书写你的 makefile: # If KERNELRELEASE is defined, we've been invoked from the# kernel build system and can use its language..........【阅读全文】
发布时间:2012-07-23 16:22:10
在我们深入之前, 有必要强调一下内核模块和应用程序之间的各种不同.不同于大部分的小的和中型的应用程序从头至尾处理一个单个任务, 每个内核模块只注册自己以便来服务将来的请求, 并且它的初始化函数立刻终止. 换句话说, 模块初始化函数的任务是为以后调用模块的函数做准备; 好像是模块说, " 我在这里, 这是我.........【阅读全文】