linux驱动开发之HelloWorld
平台:QT210
CPU:三星S5PV210,ARM
Cortex-A8
交叉编译器:上海勤研电子提供的QT210的交叉编译器arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.tar
内核版本:2.6.35.7
源码:
hello.c
#include
#include
MODULE_LICENSE("Dual
BSD/GPL");
static int
hello_init(void)
{
printk(KERN_ALERT "hello world enter\n");
return 0;
}
static void
hello_exit(void)
{
printk(KERN_ALERT "hello world exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("yao
wang");
MODULE_DESCRIPTION("A simple
Hello World module");
MODULE_ALIAS("a simplest
module");
Makefile:
obj-m := hello.o
KERNELDIR :=
~/qt210/kernel-samsung //内核目录
CROSS_COMPILE
:=arm-none-linux-gnueabi- //交叉编译器
PWD := $(shell
pwd) //获得当前目录
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm *.ko *.mod.c *.o *.symvers *.order
调试:
通过tftp命令下载hello.ko文件到目标板,输入以下命令加载模块
insmod hello.ko
终端打印出hello world enter
输入lsmod查看已加载的模块,终端打印出
hello 678 0 - Live 0xbf006000
输入以下命令卸载模块
rmmod hello
终端打印出
hello world exit
可能遇到的错误:
rmmod hello报错:
rmmod: chdir(/lib/modules): No
such file or directory
解决办法:
在/lib目录下建立modules/2.6.35.7目录,即创建/lib/modules/2.6.35.7/目录(我的内核版本是2.6.35.7,因此在modules目录下建立2.6.35.7目录)
再次输入rmmod hello,仍然出错
[ 2240.105000] hello world exit
rmmod: module 'hello' not found
不用担心,此时模块已成功卸载,可通过lsmod查看
参考资料:
《Linux设备驱动开发详解》第4章Linux内核模块
2013-9-27
22:15:27
~遥望~