查看: 3166|回復: 0
打印 上一主題 下一主題

在飛凌6410開(kāi)發(fā)板上運行hello.c內核模塊詳解

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2011-10-18 13:06:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
早上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
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页