构建一个简单的Linux内核模块
我们要构建一个简单的内核模块,假设名字为simplemodule
。
File: Makefile
obj-m := simplemodule.o
File: simplemodule.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/sched.h>
int init_simple(void)
{
printk("in init module simple\n");
return 0;
}
void cleanup_simple(void)
{
printk("in cleanup module simple\n");
}
module_init(init_simple);
module_exit(cleanup_simple);
File: make.sh
make -C /lib/modules/`uname -r`/build M=$PWD modules
编译
[root@dev24 modules]# sh make.sh
make: Entering directory `/usr/src/kernels/2.6.32-431.el6.x86_64'
CC [M] /data/kernel-linkedin/modules/simplemodule.o
Building modules, stage 2.
MODPOST 1 modules
CC /data/kernel-linkedin/modules/simplemodule.mod.o
LD [M] /data/kernel-linkedin/modules/simplemodule.ko.unsigned
NO SIGN [M] /data/kernel-linkedin/modules/simplemodule.ko
make: Leaving directory `/usr/src/kernels/2.6.32-431.el6.x86_64'
查看一下有哪些文件
[root@dev24 modules]# ls -a
. .tmp_versions simplemodule.ko
.. Makefile simplemodule.ko.unsigned
.simplemodule.ko.cmd Module.symvers simplemodule.mod.c
.simplemodule.ko.unsigned.cmd make.sh simplemodule.mod.o
.simplemodule.mod.o.cmd modules.order simplemodule.o
.simplemodule.o.cmd simplemodule.c
载入模块到内核
insmod simplemodule
查看是否载入
[root@dev24 modules]# lsmod | grep simp
simplemodule 999 0
删除模块
rmmod simplemodule
查看错误信息
[root@dev24 modules]# lsmod | grep simp
[root@dev24 modules]# dmesg | tail -2
内核模块编译的应用
如果台式机安装了Ubuntu桌面版,可能没有无线网卡的驱动,一般官方也不会提供Linux版本的驱动,官方只会提供Windows、Mac版本的驱动。这就需要我们自己来安装,安装驱动的过程就是编译和安装内核模块的过程。先从网上找到对应源码,编译后载入即可。