新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > arm 裸板程序編譯過程

        arm 裸板程序編譯過程

        作者: 時間:2016-11-09 來源:網絡 收藏
        看過編譯原理的人都知道我們一句簡單的arm-linux-gcc到達做了哪些工作。他并不是簡單的把我們的原文件編譯成我們可執行的二進制文件,在這個過程中他其實至少做了兩部工作。“編譯”和鏈接“當然這其中包含了很多關于編譯原理的至少,由于本人才疏學淺說以也只能夠簡單的把他說成編譯和鏈接了。如果需要跟深入的理解請查找相關”編譯原理的書籍吧“

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

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

        1.arm-linux-gcc-v 查看gcc版本號

        2.arm-linux-nm 查看一個.o文件所需要的庫。

        3.arm-linux-ld 鏈接命令

        3.arm-linux-gcc編譯命令

        4arm-linux-objdump -h test 查看符號

        -d 反匯編

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

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

        現在我們來寫一個arm裸板的LED閃燈程序非常簡單的。

        源代碼 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秒鐘的時間LED閃爍一次。非常簡單的一個程序。這里沒有使用定時器啊 什么的知識簡單的做循環來延時。注意 關于LED 的GPIO相關寄存器地址根據你自己的實際情況來。

        編譯過程

        1 編譯

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

        2.鏈接

        arm-linux-ld -Ttext=50008000 test.o -o test //注意這個鏈接地址不要鏈接到你arm開發板不能提供的內存地址。

        3 去掉elf頭信息

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

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

        現在我們通過任何你能夠使用的工具 把我們生成的 bin文件少些到ram的 0x50008000 這個地址。

        然后讓在bootloader中執行

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

        注意arm-linux-gcc版本。由于arm-linux-gcc-4.x.x 不支持arm-linux-ld -Ttext 這個參數還是其他的,具體沒深入研究。會出錯。

        只能使用arm-linux-gcc3.x.x的版本 這一點一定要注意。我今天就是因為這個原因郁悶了半天。如果有誰知道4.x.x版本的具體原因請告訴我并萬分感謝



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 扎鲁特旗| 沽源县| 邹城市| 阿荣旗| 连平县| 杭锦后旗| 馆陶县| 和顺县| 通城县| 刚察县| 综艺| 淮安市| 怀安县| 高碑店市| 遂昌县| 赤峰市| 隆林| 铜川市| 隆回县| 九台市| 西乌| 龙山县| 海林市| 海原县| 无棣县| 棋牌| 拉孜县| 丹东市| 石棉县| 浦东新区| 札达县| 喀喇沁旗| 镇康县| 承德县| 孟州市| 嵩明县| 泾阳县| 鹤庆县| 和顺县| 张北县| 阜康市|