新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > arm 裸板程序編譯過(guò)程

        arm 裸板程序編譯過(guò)程

        作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
        看過(guò)編譯原理的人都知道我們一句簡(jiǎn)單的arm-linux-gcc到達(dá)做了哪些工作。他并不是簡(jiǎn)單的把我們的原文件編譯成我們可執(zhí)行的二進(jìn)制文件,在這個(gè)過(guò)程中他其實(shí)至少做了兩部工作。“編譯”和鏈接“當(dāng)然這其中包含了很多關(guān)于編譯原理的至少,由于本人才疏學(xué)淺說(shuō)以也只能夠簡(jiǎn)單的把他說(shuō)成編譯和鏈接了。如果需要跟深入的理解請(qǐng)查找相關(guān)”編譯原理的書(shū)籍吧“

        這里我們先介紹一下常用的GCC命令.

        本文引用地址:http://www.104case.com/article/201611/317872.htm

        1.arm-linux-gcc-v 查看gcc版本號(hào)

        2.arm-linux-nm 查看一個(gè).o文件所需要的庫(kù)。

        3.arm-linux-ld 鏈接命令

        3.arm-linux-gcc編譯命令

        4arm-linux-objdump -h test 查看符號(hào)

        -d 反匯編

        5arm-linux-as ls.S -o ls.o 將匯編原文件編譯成.o文件

        6arm-linux-objcopy -I elf32-littlearm-O binary test test.bin 去掉二進(jìn)制文件elf頭。

        現(xiàn)在我們來(lái)寫(xiě)一個(gè)arm裸板的LED閃燈程序非常簡(jiǎn)單的。

        源代碼 led_test.c

        void main()
        {
        int i=0;
        volatile long *GPKCON0 = 0x7F008800;
        volatile long *GPKDAT = 0x7F008808;
        volatile long *GPKPUD = 0x7F00880C;

        *GPKCON0 &= ~(0XFFFF <<16);
        *GPKCON0 |= (0X1111 <<16);
        while(1){
        *GPKDAT &= ~(0XF <<4);
        i=0xfffff;
        while(i--)
        ;
        *GPKDAT |= (0XF <<4);
        i=0xfffff;
        while(i--)
        ;
        }
        }

        每隔大概3秒鐘的時(shí)間LED閃爍一次。非常簡(jiǎn)單的一個(gè)程序。這里沒(méi)有使用定時(shí)器啊 什么的知識(shí)簡(jiǎn)單的做循環(huán)來(lái)延時(shí)。注意 關(guān)于LED 的GPIO相關(guān)寄存器地址根據(jù)你自己的實(shí)際情況來(lái)。

        編譯過(guò)程

        1 編譯

        arm-linux-gcc-c -march=armv4 test.c -o test.o

        2.鏈接

        arm-linux-ld -Ttext=50008000 test.o -o test //注意這個(gè)鏈接地址不要鏈接到你arm開(kāi)發(fā)板不能提供的內(nèi)存地址。

        3 去掉elf頭信息

        arm-linux-objcopy -I elf32-little -O binary test test.bin

        這樣 我們需要的LED裸板閃燈代碼就生成了。

        現(xiàn)在我們通過(guò)任何你能夠使用的工具 把我們生成的 bin文件少些到ram的 0x50008000 這個(gè)地址。

        然后讓在bootloader中執(zhí)行

        bootm 0x50008000 看到你的燈閃木有。

        注意arm-linux-gcc版本。由于arm-linux-gcc-4.x.x 不支持arm-linux-ld -Ttext 這個(gè)參數(shù)還是其他的,具體沒(méi)深入研究。會(huì)出錯(cuò)。

        只能使用arm-linux-gcc3.x.x的版本 這一點(diǎn)一定要注意。我今天就是因?yàn)檫@個(gè)原因郁悶了半天。如果有誰(shuí)知道4.x.x版本的具體原因請(qǐng)告訴我并萬(wàn)分感謝



        關(guān)鍵詞: arm裸板程序編譯過(guò)

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 任丘市| 奉化市| 金寨县| 正镶白旗| 莱芜市| 且末县| 沽源县| 高阳县| 大庆市| 横峰县| 九江县| 射阳县| 玛纳斯县| 仁怀市| 垦利县| 察雅县| 正阳县| 两当县| 乳山市| 镇坪县| 霞浦县| 墨玉县| 龙井市| 义马市| 福贡县| 栾城县| 弋阳县| 沁阳市| 化隆| 屯留县| 赣榆县| 平乐县| 桐柏县| 济阳县| 珲春市| 广灵县| 隆昌县| 海丰县| 北海市| 调兵山市| 呼伦贝尔市|