新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > GNU ARM匯編--(二)匯編編譯鏈接與運行

        GNU ARM匯編--(二)匯編編譯鏈接與運行

        作者: 時間:2016-11-26 來源:網絡 收藏

        [cpp]view plaincopy
        1. CROSS=arm-linux-
        2. CFLAGS=-nostdlib
        3. beep.bin:start.Sbeep.S
        4. ${CROSS}gcc$(CFLAGS)-c-ostart.ostart.S
        5. ${CROSS}gcc$(CFLAGS)-c-obeep.obeep.S
        6. ${CROSS}ld-Tbeep.ldsstart.obeep.o-obeep.elf
        7. ${CROSS}objcopy-Obinary-Sbeep.elfbeep.bin
        8. rm-f*.o
        9. clean:
        10. rm-f*.elf*.o
        11. rm-fbeep.bin

        編譯后將beep.bin文件燒寫到dram中,就可以聽到聲音了.雖然可以運行了,但還是有兩個疑問:

        1.lds編譯鏈接文件的寫法和技巧 //后續要繼續追

        2.elf文件的格式 //elf格式是比較新的可執行文件格式,目前在很多OS上都是用這種格式.這個格式可以在有操作系統的情況下直接運行,但是對于裸機的情況,必須對elf文件 做objcopy處理 后續也要繼續追

        hello world的例子如下:

        helloworld.S:

        [cpp]view plaincopy
        1. .data
        2. msg:.asciz"hello,world"
        3. .text
        4. .align2
        5. .global_start
        6. _start:
        7. ldrr1,=msg@address
        8. movr0,#1@stdout
        9. movr2,#13@length
        10. swi#0x900004@sys_write
        11. movr0,#0
        12. swi#0x900001@sys_exit
        13. .align2

        makefile:

        [cpp]view plaincopy
        1. all:
        2. arm-linux-ashelloworld.S-ohelloworld.o
        3. arm-linux-ldhelloworld.o-ohelloworld

        將elf文件放到跑有linux的arm板子中,運行就輸出hello world.也可以在ubuntu中qemu-arm helloworld模擬.

        對比x86下同樣用系統調用來輸出hello world的程序:

        [cpp]view plaincopy
        1. .data
        2. msg:.string"hello"
        3. len=.-msg
        4. .text
        5. .global_start
        6. _start:
        7. nop
        8. movl$len,%edx
        9. movl$msg,%ecx
        10. movl$1,%ebx
        11. movl$4,%eax
        12. int$0x80
        13. movl$0,%ebx
        14. movl$1,%eax
        15. int$0x80

        它們有幾點不同:

        1.arm是用swi指令來進行軟中斷,陷入內核態來實現系統調用的.而x86是用int $0x80

        2.x86的系統調用號是用eax寄存器表示的,是第一個參數.而arm的swi直接帶有系統調用號,0x900004是0x900000+4,其中0x900000是base.

        根據google,做了上面的總結,對GNU ARM匯編有了認識,并且對系統調用軟中斷,中斷處理,uboot異常向量表等等有了探究的欲望,也對elf格式和編譯鏈接有了興趣,根據自己的方向和精力,后續對這些內容做一個或深或淺的學習.


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 潍坊市| 新宾| 杭州市| 兴文县| 会宁县| 肥城市| 马关县| 岳普湖县| 伊金霍洛旗| 黑龙江省| 舒城县| 武宁县| 辽宁省| 凉城县| 宁河县| 金堂县| 新蔡县| 寿宁县| 瓦房店市| 清水县| 徐州市| 尖扎县| 北流市| 武邑县| 平阴县| 大名县| 灵璧县| 留坝县| 宝应县| 安岳县| 岳普湖县| 绥棱县| 电白县| 渭南市| 彰化县| 娄烦县| 玛沁县| 德昌县| 隆回县| 井冈山市| 兖州市|