電子工程網(wǎng)
標題:
在飛凌6410開(kāi)發(fā)板上運行hello.c內核模塊詳解
[打印本頁(yè)]
作者:
yh123
時(shí)間:
2011-10-18 13:06
標題:
在飛凌6410開(kāi)發(fā)板上運行hello.c內核模塊詳解
早上7點(diǎn),就被窗外一群敲鑼打鼓的響聲吵醒了,今天可是星期天啊,沒(méi)法睡了,起來(lái)做點(diǎn)有意義的吧。
昨天在OK6410開(kāi)發(fā)板上折騰了一下午,才正常把內核模塊的編譯和運行搞定,現在整理一下過(guò)程,待以后有個(gè)參考。
什么事情實(shí)際做起來(lái)總會(huì )比想象的復雜,特別是一開(kāi)始,本來(lái)是很簡(jiǎn)單的一段代碼如下:
#include
#include
MODULE_LICENSE("GPL");
MODULE_AUTHOR("David Xie");
MODULE_DESCRIPTION("Hello World Module");
MODULE_ALIAS("a simplest module");
static int __init hello_init()
{
printk(KERN_EMERG"Hello World!\n");
return 0;
}
static void __exit hello_exit()
{
printk(KERN_EMERG "Goodbye Cruel World!\n");
}
module_init(hello_init);
module_exit(hello_exit);
第一步當然是編譯了,遇到第一個(gè)問(wèn)題:要在6410上運行該內核模塊,如何設置交叉編譯器?首先想到的是makefile,打開(kāi)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 := /forlinux/kernel/linux-2.6.28
這個(gè)路徑由自己決定,移植的arm平臺下的linux源代碼放在什么地方就填什么路徑,如果指定錯誤的話(huà),會(huì )提示找不到
#include
#include
這兩個(gè)文件的。
然后指定交叉編譯器,CROSS_COMPILE=/usr/loacl/arm/4.2.2-eabi/usr/bin/arm-linux-
同樣這個(gè)路徑也是自己決定,放在哪個(gè)目錄就填哪個(gè)目錄。
makefile主要修改這兩個(gè)地方就OK了,保存關(guān)閉。
在控制臺命令下,進(jìn)入hello.c目錄,先make clean一下,再make,可以看到hello.ko內核模塊生成了,將它拷貝到ok6410板上:
insmod hello.ko
可以看到hello world打印信息,但是在rmmod的時(shí)候,確無(wú)法卸載,google了一把,需要在linux源碼目錄下,執行make prepare一下,修復bounds.h文件。
再rmmod hello
Goodbye Cruel World!
卸載成功。
原文出自:一路上you你 大神的搜狐博客
文章轉引自:飛凌嵌入式Linux討論區
www.witech.com.cn
歡迎光臨 電子工程網(wǎng) (http://selenalain.com/)
Powered by Discuz! X3.4
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页