一、需要用到的符号与头文件
(1)linux/init.h
module_init();
module_exit();(2)linux/module.h
MODULE_LICENSE(_licence);
二、源代码
1、hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
2、Makefile
obj-m:=hello.o
KERNELBUILD :=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
make -C $(KERNELBUILD) M=$(PWD) modules
三、上机操作
硬件环境:PC
软件环境:Windows XP(主机操作系统)、Vmware Workstation、Ubuntu 10.10(虚拟机操作系统)、Putty(SSH客户端)
max@max-virtual-machine:~$cd workspace/ldd
max@max-virtual-machine:~/workspace/ldd$mkdir hello
max@max-virtual-machine:~/workspace/ldd$ vim hello.c
max@max-virtual-machine:~/workspace/ldd$ vim Makefile
max@max-virtual-machine:~/workspace/ldd$ make -n
make -C /lib/modules/2.6.35-22-generic/build M=/home/max/workspace/ldd modules
max@max-virtual-machine:~/workspace/ldd$ make
make -C /lib/modules/2.6.35-22-generic/build M=/home/max/workspace/ldd modules
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.35-22-generic'
CC [M] /home/max/workspace/ldd/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/max/workspace/ldd/hello.mod.o
LD [M] /home/max/workspace/ldd/hello.ko
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.35-22-generic'
max@max-virtual-machine:~/workspace/ldd$ su
密码:
root@max-virtual-machine:/home/max/workspace/ldd# insmod hello.ko
root@max-virtual-machine:/home/max/workspace/ldd# dmesg
。。。
。。。
。。。
[ 6174.596217] Hello, world
root@max-virtual-machine:/home/max/workspace/ldd# rmmod hello
root@max-virtual-machine:/home/max/workspace/ldd# dmesg
。。。
。。。
。。。
[ 6174.596217] Hello, world
[ 6275.920652] Goodbye, cruel world
四、参考文献
《Linux设备驱动程序》
《Linux设备驱动开发详解》
《嵌入式系统原理与设计》