1、下载内核源文件
sudo apt-cache search linux-source
可以看到和当前操作系统统一版本的源码,例linux-source-2.6.32
安装源码sudo apt-get install linux-source-2.6.32
然后解压压缩包
cd /usr/src,可以看到linux-source-2.6.32.tar.bz2
解压内核源码文件,sudo tar jxf linux-source-2.6.32.tar.bz2 -C .
解压完成,在/usr/src/目录下,产生linux-source-2.6.32文件夹
2、初始化内核文件部分脚本
2.1 sudo make prepare (防止错误 类似include/linux/mmzone.h:18:26: error: linux/bounds.h: 没有该文件或目录)
如果碰到 make: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'. Stop.
sudo make localmodconfig 或者 sudo make menuconfig 或 sudo make oldconfig
2.2 sudo make scripts (防止错误 /bin/sh: scripts/mod/modpost: not found )
3、添加模块源文件
3.1 添加.c文件
#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT " Hello World enter\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT " Hello World exit\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_AUTHOR("test-author"); MODULE_DESCRIPTION("A simple Hello World Module"); MODULE_ALIAS("a simplest module");
3.2 添加Makefile
obj-m := hello.o
4、进行编译
make -C /usr/src/linux-source-2.6.32/ M=$(pwd) modules
5、加载内核模块
sudo insmod hello.ko
如果发生错误: insmod: error inserting 'hello.ko': -1 Invalid module format
说明使用的版本是不正确的
不妨试试 make -C /lib/modules/`uname -r`/build M=$(pwd) modules