今天弄了整整一天,终于在赖子同学的帮助下将最简单的hello world模块加载上去了,发次博客将过程简单的记录下。
首先在home下新建一个工作目录hello_mod,然后编辑hello_module.c文件(编辑的时候记得不要把代码敲错了,今天就出现了这个问题的^_^)
#include <linux/kernel.h>
#include <linux/module.h>
static int __init mini6410_hello_module_init(void)
{
printk("Hello, Mini6410 module is installed !\n");
return 0;
}
static void __exit mini6410_hello_module_cleanup(void)
{
printk("Good-bye, Mini6410 module was removed!\n");
}
module_init(mini6410_hello_module_init);
module_exit(mini6410_hello_module_cleanup);
MODULE_LICENSE("GPL");
然后就是写Makefile啦,驱动里面的Makefile跟应用程序里Makefile的内容方面还是有很多区别的⊙﹏⊙b,目前还木有搞清楚区别,还需要多多学习啊...
ARCH := arm
CROSS_COMPILE := arm-linux-
#ifneq ($(KERNELRELEASE),)
obj-m :=module_test.o
#else
KDIR ?=/opt/FriendlyARM/mini6410/linux/linux-2.6.38
PWD := $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) modules
#endif
.PHONY:clean
clean:
rm -f *.ko *.order *.symvers *.o
注意ARCH 和CROSS_COMPILE 的填写。这里先留一个疑问,之前没有注释这三行(带#号的)直接在hello_mod里面make,结果没有错误,但是也没有生成*.ko文件。赖子同学重新帮我修改了Makefile,注释掉了三行(代码中带#的),再make就生成了*.ko文件,下到板子里insmod,OK!
PS:貌似需要按照Tiny6410提供的用户手册,讲内核顶目录中的一个配置文件(eg:config_mini6410_n43)cp为.config文件。执行一次make zImage,然后在编译模块文件...