编写hellol.c文件
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL"); //许可
static int hello_init(void)
{
printk(KERN_ALERT "Hello, Wrold\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init); //insmod里调用它
module_exit(hello_exit); //rmmod时调用
Makefile文件:在ubuntu环境下,由于配置了相应的./vimrc文件,使得使用vi编写出来的makefile文件格式不对,出现如下的错误:
root@glose-desktop:~# make
make: 没有什么可以做的为 `all'。
后面通过在WINDOWS平台下用TXT方式重新写了一个makefile才能使用,在其中主要是由于tab键的问题。
编译成功后,使用insmod hello.ko,在终端没有输出,这应该与相应的系统环境的一些配置文件有关,通过查看log文件可以看到相应的输出。
root@glose-desktop:~# cat /var/log/syslog|grep Hello
Aug 19 16:17:43 glose-desktop kernel: [ 6510.102642] Hello, Wrold
root@glose-desktop:~# rmmod hello
root@glose-desktop:~# cat /var/log/syslog|grep Hello
Aug 19 16:17:43 glose-desktop kernel: [ 6510.102642] Hello, Wrold
root@glose-desktop:~# cat /var/log/syslog|grep Goodby
Aug 19 16:20:13 glose-desktop kernel: [ 6660.017955] Goodbye, cruel world
相应的makefile文件如下:
obj-m := hello.o
CURRENT_PATH:=$(shell pwd)
LINUX_KERNEL:=$(shell uname -r)
LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean