1、linux源码的版本号与运行中的linux内核版本要一致(这里用的是Ubuntu 12.04 LTS; Kernel 为3.11.0)
2、安装开发工具(都安装了方便后面使用,有些没必要安装)
->sudo apt-get install build-essential autoconf automake1.9 cvs subversion kernel-package libncurses5-dev
->sudo apt-get install bison flex
重点安装的是build-essential和libncurses5-dev
3、查看内核版本并下载相应的版本源码:
切换到root:su
查看内核版本:uname -r
显示:3.11.0-15-generic
去下载对应版本的源码到/usr/src目录下,这里下载到的是linux-3.11.tar.xz
4、解压并且配置原码
xz -d linux-3.11.tar.xz
得到 linux-3.11.tar
tar xf linux-3.11.tar
得到 linux-3.11
改名: mv linux-3.11 linux-source-3.11.0
进入:cd linux-source-3.11.0
相关配置:make oldconfig
make prepare
make scripts
至此,已完成。
接下来可以编写hello.c以及Makefile来做测试了。
加载模块:insmod hello.ko 或 modprobe hello
卸载模块:rmmod hello
查看打印信息:
cat /proc/kmsg 会一直打印,需要Ctrl-C手动终止
dmesg 或 dmesg | tail -N ,N为一数字,表示显示最后N行
若在make时出现
WARNING: Symbol version dump /usr/src/linux-source-3.11.0/Module.symvers is missing; modules will have no dependencies and modversions.
且insmod时出现
insmod: error inserting ‘./hello.ko’: -1 Invalid module format
同时,在 dmesg 中出现
hello: no symbol version for module_layout
请参考: