hello.c
/*======================================================================
A simple kernel module: "hello world"
The initial developer of the original code is Baohua Song
<author@linuxdriver.cn>. All Rights Reserved.
======================================================================*/
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_INFO " Hello World enter/n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO " Hello World exit/n ");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Song Baohua");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_ALIAS("a simplest module");
1. 编写Makefile
obj-m := hello.o
2. 切换到root用户(若不是root用户则执行不了下面的Makefile), 执行如下命令:make -C /usr/src/linux-headers-2.6.32-21-generic M=$(pwd) modules , 生成hello.ko
Note:我所使用的系统为Ubuntu系统, 在/usr/src目录下有 linux-headers-2.6.32-21-generic 和 linux-headers-2.6.32-21 两个目录,make -C 指定驱动头文件目录时必须选择 linux-headers-2.6.32-21-generic,否则会出现编译通不过的现象
3. insmod hello.ko 加载hello驱动 ,rmmod hello 卸载hello驱动, modinfo可获得模块的信息(模块的作者,模块的说明,模块所支持的参数)
在执行完insmod hello.ko 后会打印 Hello World 信息,其前提时执行完insmod hello.ko命令后执行dmesg命令,此命令打印系统的开机信息,内容比较多,可以执行 dmesg -c命令,此命令能够清楚缓冲区的内容
~