本文共 906 字,大约阅读时间需要 3 分钟。
我的linux是centos 6.7 64位。
Makefile 文件是用来对内核模块进行编译的。具体的写法如下:obj-m := [模块名].oCURRENT_PATH := $(shell pwd) //指定当前路径LINUX_KERNELS_PATH := /usr/src/kernels/$(uname -r) //说明所使用的内核版本all: make -C $(LINUX_KERNELS_PATH) M=$(CURRENT_PATH) modulesclean: make -C $(LINUX_KERNELS_PATH) M=$(CURRENT_PATH) clean
模块名可以和自己的.c文件名一样。上边的 obj-m 写法只是需要一个.o文件。多个的话是:
obj-m := modules.omodules.o := [模块1].o [模块2].o ……modules可以更改,注意,obj和-m之间没有空格。
接下来的两行是shell命令,用来给CURRENT_PATH和LINUX_KERNELS_PATH这两个变量赋值。内核版本的路径请查看自己的路径,这是我的路径,版本不同,保存的路径也不一样。
下来就是编译模块和清除模块。注意,make前边需要按TAB键,如果没有,则编译不通过。 拿书上的例子,插入和清楚模块,请以root权限运行。如果要看结果,也在root权限下操作。命令为:(sudo) tail (-n 20) /var/log/messages。加20,是因为tail默认最后10行,但是插入模块显示的东西有20行。 sudo出错的需要配置sudoers文件,所以直接用root运行就可以了。 这是编译出错的显示,错误会有说明。 这是编译成功的显示。 写脚本的时候一定要注意格式,脚本虽然很方便,但是格式比较奇怪。自己在一开始写完了脚本,但是编译不出来任何结果,查找后发现是make前没有加TAB键。在编译,有结果但出现错误,是.c文件错误,误按了一个字母。修改完后,编译成功。这是我自己的的编写和编译过程。转载地址:http://lpxii.baihongyu.com/