linux内核模块编写

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

首先拿来书先搞个hello world吧,一步一步的搞。

可是make的时候怎么也不过,原来犯了一个低级错误,直接拷贝粘帖啊……“make -C”本应改是半角的,结果那个减号搞成全角的了,太坑爹了。

闲话少说直接上代码:

hello.c

#include <linux/module.h>

#include <linux/kernel.h>

int hello_init(void)

{

printk(KERN_INFO “Hello kernel module.\n”);

return 0;

}

void hello_exit(void)

{

printk(KERN_INFO “Goodbye kernel module.\n”);

}

module_init(hello_init);

module_exit(hello_exit);

Makefile:

obj-m += hello.o

KERNEL_VERSION = /lib/modules/$(shell uname -r)/build/

all:

make -C $(KERNEL_VERSION) M=$(PWD) modules

clean:

make -C $(KERNEL_VERSION) M=$(PWD) clean

执行make

CC [M] /home/imay/blog/hello_module/hello.o

Building modules, stage 2.

MODPOST 1 modules

CC /home/imay/blog/hello_module/hello.mod.o

LD [M] /home/imay/blog/hello_module/hello.ko

make[1]: Leaving directory `/usr/src/linux-headers-3.0.0-12-generic’

然后执行

sudo insmod hello.ko

此时模块已经插入内核中,使用lsmod命令来找到自己的module

lsmod | grep hello

结果如下所示:

hello 12421 0

这样自己编写的模块就在内核中了。

然后之前在程序中打印的那条log,可以使用dmesg命令找到

dmesg | tail -1

应该显示的结果如下

[ 5531.946244] Hello kernel module

好了,是时候吧module从kernel中拿出来了,使用rmmod命令

sudo rmmod hello

OK,再看看退出时的那条日志有没有好,同样执行

dmesg | tail -1

看到了如下就说明模块按照自己的设计来走了

[ 5874.821994] Goodbye kernel module.

到这里,一个简单的内核模块就这样在内核中走了一圈。

另外除了dmesg命令之外,也可以在/var/log/kern.log中观察kernel的日志。这个还是不错的,dmesg只能看这次启动的,这里能够找到历史运行的所有日志,有的历史日志已经被达成了压缩包节省空间资源。

不错不错

不曾见谁。则见朵花儿闪下来,好一惊。

linux内核模块编写

相关文章:

你感兴趣的文章:

标签云: