构建自己的Linux内核模块

构建一个简单的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版本的驱动。这就需要我们自己来安装,安装驱动的过程就是编译和安装内核模块的过程。先从网上找到对应源码,编译后载入即可。