写一个简单的Linux module

在SMEP的测试中需要在kernel态去执行标志有user bit的一段内存代码,所以需要写一个简单的module来模拟。了解了一下写一个Linux module的基本方法,下面总结一下。
0. 准备一个linux系统,当让GCC、Make等基本的工具是需要有的。
1. 安装kernel源代码:在Ubuntu上可以用 apt-get install linux-headers-$(uname -r),在RHEL等上可以用yum install kernel-devel来安装。或者去kernel.org下载代码包来解压到/usr/src目录。
2.写一个Makefile:mkdir hello; cd hello; vim Makefile
一个简单的Makefile文件的示例如下:


3.写一个简单的module:hello.c 示例如下

4. 编译这个module,命令:make。 编译好后,可以看到生成了hello.ko这个module。
5. 安装这个module:insmod hello.ko (之后可以用lsmod | grep hello来查看是否安装成功)
6. 查看加载module的log:dmesg | tail; 或者 tail /var/log/messages; 可以看到在hello.c中写一些Kernel info。
dmesg中示例为:
[136161.503081] Loading hello module…
[136161.503083] Hello, Jay.
/var/log/messages中示例如下:
Sep 15 22:22:03 jay-intel kernel: [136161.503081] Loading hello module…
Sep 15 22:22:03 jay-intel kernel: [136161.503083] Hello, Jay.
7.modinfo hello来查看module的一些信息(在hello.c中写的作者、表述、License、版本等信息),本文示例为:

8. 卸载module: rmmod hello; 卸载后,可以看到dmesg中有我留下的信息“Goodbye, Jay”。
至此,你已经看到了linux中写一个最简单的module的步骤了。

参考资料:
http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html
http://www.tldp.org/LDP/lkmpg/2.6/html/index.html

master

Stay hungry, stay foolish.

发表评论

电子邮件地址不会被公开。 必填项已用*标注