新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 編譯在arm板上運(yùn)行的內(nèi)核模塊

        編譯在arm板上運(yùn)行的內(nèi)核模塊

        作者: 時(shí)間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
        前兩天被這個(gè)事情搞暈了,看視頻的時(shí)候感覺編譯一個(gè)內(nèi)核模塊很簡(jiǎn)單的,就是修改makefile的兩個(gè)地方,但是自己一做就出現(xiàn)問題了,因?yàn)槲沂亲约鹤詫W(xué)的,身邊沒有可以指導(dǎo)的人,所以很多都要靠自己摸索了,我自己編譯的時(shí)候出現(xiàn)很多警告信息和錯(cuò)誤,提示找不到頭文件,還有一些看不懂的信息,到處找資料,但是都沒有說清楚,看了很久也沒看出什么對(duì)自己有用的東西,看的頭暈,準(zhǔn)備放棄了,今天在學(xué)習(xí)的時(shí)候又去看結(jié)果看到一篇博文,才煥然大悟,makefile里面要改的源代碼路徑是移植到arm板上的linux源代碼,才突然想起來,我自己改錯(cuò)了,就是要把路徑指上你開發(fā)板上運(yùn)行的linux內(nèi)核源代碼的頂層路徑,我是用的通過nfs啟動(dòng)系統(tǒng)的,是按照國(guó)嵌的視頻一步步做的,所以我的路徑在我的nfs所在的路徑。這些問題對(duì)于一些學(xué)了很久的人來說可能很低級(jí),但是對(duì)于初學(xué)者來說可能碰到后半天搞不好,所以寫下來供參考。。。

        下面是我自己找的一個(gè)小實(shí)驗(yàn):

        本文引用地址:http://www.104case.com/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()
        {
        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);
        第一步是編譯,首先要做的是設(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/
        這個(gè)路徑由自己決定,移植的arm平臺(tái)下的linux源代碼放在什么地方就填什么路徑,如果指定錯(cuò)誤的話,會(huì)提示找不到下面兩個(gè)文件的。
        #include
        #include

        然后指定交叉編譯器,CROSS_COMPILE=arm-linux-(前提是你的arm-linux-gcc安裝到根目錄下了,而且修改了環(huán)境變量,否則需指定安裝路徑)
        makefile主要修改這兩個(gè)地方就OK了,保存關(guān)閉。
        在控制臺(tái)命令下,進(jìn)入hello.c目錄,make,可以看到hello.ko內(nèi)核模塊生成了,將它拷貝到2440板上:
        insmod hello.ko
        可以看到hello world打印信息,但是在rmmod的時(shí)候,確無法卸載,需要在linux源碼目錄下,執(zhí)行make prepare一下,修復(fù)bounds.h文件。
        再rmmod hello



        關(guān)鍵詞: 編譯arm板內(nèi)核模

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 玉环县| 平顶山市| 筠连县| 金溪县| 鄂尔多斯市| 周口市| 射洪县| 来凤县| 西林县| 毕节市| 韩城市| 和田市| 宽城| 平塘县| 甘洛县| 文山县| 揭东县| 渭南市| 光山县| 盱眙县| 固安县| 江安县| 漳州市| 敖汉旗| 九龙县| 克东县| 罗江县| 霸州市| 美姑县| 区。| 北票市| 蒙山县| 循化| 章丘市| 横山县| 南开区| 兴隆县| 云和县| 穆棱市| 高青县| 松原市|