http://blog.sina.com.cn/s/blog_6035432c0100jraf.html
最近开始学Linux驱动,就从最简单的开始练起,就从LDD-3里的第一个驱动程序hello world练起。
The following code is a complete "hello world" module:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/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);
保存为 hello.c
再写一个Makefile,代码如下:
obj-m := hello.o
KERNELDIR := /usr/src/kernels/2.6.9-42.EL-smp-i686
PWD := $(shell pwd)
all:
make -C $(KERNELDIR) M=$(PWD) modules
.PHONY: clean
clean:
rm -rf *.o *.ko
加载驱动:
查看驱动,lsmod hello已在,说明已经加载进去了。
网上查看,寻求解决之法,
说可以在/var/log/message中显示hello world!,但还是没有、
最后使用dmesg命令,看到了显示。
卸载驱动:
rmmod hello
途中问题:
加载驱动时遇到 insmod: error inserting 'hello.ko': -1 invalid module format 错误
我使用的PC内核版本如下:
在/usr/src/kernels/下有三个内核,选择和上面系统一样的内核。
修改 Makefile中的 KERNELDIR 为
KERNELDIR := /usr/src/kernels/2.6.9-42.EL-smp-i686
或者为 KERNELDIR := /lib/modules/$(shell uname -r)/build
cd /lib/modules/$(uname -r)/build/
这个目录实际上指向了:/usr/src/kernels/2.6.9-42.EL-smp-i686