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