1. 环境
采购回来的mini2440开发板,uname -a显示为
[root@FriendlyARM /]# uname -a
Linux FriendlyARM 2.6.32.2-FriendlyARM #8 Fri Jan 3 19:49:00 CST 2014 armv4tl unknown
2. 内核编译要用配置文件config_mini2440_t35,我的mini2440的显示器是T35的。
[root@localhost linux-2.6.32.2]# cp config_mini2440_t35 .config
[root@localhost linux-2.6.32.2]# make zImage
3. 准备hello文件夹,放在/development/onedriveroneweek/hello/driver
vi hello.c
1 #include <linux/kernel.h> 2 #include <linux/module.h> 3 4 static int __init mini2440_hello_module_init(void) 5 { 6 printk("Hello, Mini2440 module is installed !\n"); 7 return 0; 8 } 9 10 static void __exit mini2440_hello_module_clean(void) 11 { 12 printk("Good-bye, Mini2440 module was removed !\n"); 13 } 14 15 module_init(mini2440_hello_module_init); 16 module_exit(mini2440_hello_module_clean); 17 MODULE_LICENSE("GPL"); 18
vi Makefile
1 obj-m := hello.o 2 KERNELDIR := /development/linux-2.6.32.2 3 PWD := $(shell pwd) 4 5 modules: 6 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 7 8 .PHONEY: clean 9 clean: 10 rm -f hello.mod.c hello.o modules.order 11 rm -f hello.ko hello.mod.o Module.symvers
执行make命令,启动tftpd服务器器,将hello.ko下载到mini2440中
[root@FriendlyARM /]# tftp -r hello.ko -g 192.168.1.3 [root@FriendlyARM /]# insmod ./hello.ko Hello, Mini2440 module is installed !
[root@FriendlyARM /]# rmmod hello
Good-bye, Mini2440 module was removed !
rmmod: module 'hello' not found
最后一行,提示信息应该是个错误,应该使用命令rmmod hello.ko,但这个命令看不到mini2440_module_clean的打印信息。
4. FAQ
<Q1> ERROR: Kernel configuration is invalid.
<A1> make oldconfig && make prepare
<Q2> WARNING: Symbol version dump /development/linux-2.6.32.2/Module.symvers
is missing; modules will have no dependencies and modversions.
<A2> cd /development/linux-2.6.32.2
make modules
<Q2> hello: version magic '2.6.32.2 mod_unload modversions ARMv5 ' should be '2.6.32.2-FriendlyARM mod_unload ARMv4 '
<A2> make menuconfig
General setup --->
()Local version - append to kernel release
FriendlyARM
<Q3>
[root@localhost linux-2.6.32.2]# vim .config
[root@localhost linux-2.6.32.2]# make menuconfig
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2
<A3> yum -y install ncurses-devel.i386