編譯在arm板上運行的內(nèi)核模塊
下面是我自己找的一個小實驗:
本文引用地址:http://m.butianyuan.cn/article/201611/319249.htm#include
#include
MODULE_LICENSE("GPL");
MODULE_AUTHOR("David Xie");
MODULE_DESCRIPTION("Hello World Module");
MODULE_ALIAS("a simplest module");
static int __init hello_init()
{
}
static void __exit hello_exit()
{
}
module_init(hello_init);
module_exit(hello_exit);
第一步是編譯,首先要做的是設(shè)置交叉編譯器,修改makefile,打開makefile文件,如下:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KDIR := /forlinux/kernel/linux-2.6.28
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
首先需要指定kernel的源代碼路徑:
我的是KDIR :=/opt/GTStudio/GT2440/opt/GTStudio/GT2440/linux-2.6.30.4/
這個路徑由自己決定,移植的arm平臺下的linux源代碼放在什么地方就填什么路徑,如果指定錯誤的話,會提示找不到下面兩個文件的。
#include
#include
然后指定交叉編譯器,CROSS_COMPILE=arm-linux-(前提是你的arm-linux-gcc安裝到根目錄下了,而且修改了環(huán)境變量,否則需指定安裝路徑)
makefile主要修改這兩個地方就OK了,保存關(guān)閉。
在控制臺命令下,進(jìn)入hello.c目錄,make,可以看到hello.ko內(nèi)核模塊生成了,將它拷貝到2440板上:
insmod hello.ko
可以看到hello world打印信息,但是在rmmod的時候,確無法卸載,需要在linux源碼目錄下,執(zhí)行make prepare一下,修復(fù)bounds.h文件。
再rmmod hello
評論