LDD3学习笔记(一) --hello world模块

 

Hello world 源程序

 

 说明

        init.h包含初始化和清除函数,module.h包含有可装载模块需要的大量符号和函数的定义。

        模块定义了两个函数, 一个在模块加载到内核时被调用( hello_init )以及一个在模块被去除时被调用( hello_exit ).

        另一个特别的宏 (MODULE_LICENSE) 是用来告知内核, 该模块带有一个自由的许可证。

        用到了一个内核函数:prinfk,内核运行时不依赖于C库,内核模块只能调用内核导出的函数。

 

Makefile 文件

 说明:

                 make -C $(KERNEL_DIR) M=`pwd` $(MAKE_ENV) modules

        这个命令开始是改变它的目录到用 -C 选项提供的目录下( 也就是内核源码目录 ). 它在那里会发现内核的顶层 makefile. 这个 M= 选项使 makefile 在试图建立模块目标前, 回到你的模块源码目录.让内核顶层的Makefile包含模块源代码目录下的makefile,包含以后获取obj-m:=hello.o.(表明有一个模块要从目标文件 hello.o 建立. 在从目标文件建立后结果模块命名为 hello.ko.)

 

Makefile文件也可以写成下面这样

obj-m:=hello.o

编译时不能直接make,要写成这样  make -C 内核源代码目录 M=`pwd` modules

 

如果你有一个模块名为 module.ko, 是来自 2 个源文件( 姑且称之为, file1.c 和 file2.c ), 正确的书写应当是:

obj-m := module.o
module-objs := file1.o file2.o
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章