新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM入門篇之(二)工具

        ARM入門篇之(二)工具

        作者: 時間:2016-11-21 來源:網絡 收藏
        (1) 交叉工具鏈,可以理解為交叉工具集

        ?交叉,指在宿主機上編寫編譯好代碼,生成目標機能夠運行的格式文件,通過數據線連接宿主機與目標機,從宿主機上下載程序到目標機內

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

        工具鏈,就是交叉?編譯器(arm-linux-gcc),交叉連接器(arm-linux-ld),交叉轉換器(arm-linux-objcopy),交叉ELF文件閱讀器(arm-linux-readelf),交叉反匯編器(arm-linux-objdump)等工具的集合

        ?

        (2)Makefile管理

        ?makefile,描述了整個程序的編譯,鏈接等的規則

        包括:什么樣的源文件需要編譯,鏈接;使用什么工具編譯,鏈接;編譯,鏈接時依賴哪些文件;?最后產生我們先要的最終執行文件

        而上面這一個過程只要你編寫好makefile這個文件,再用make命令就可一步生成最終想要的可執行文件?

        makefile由規則和變量構成

        規則:描述了如何通過依賴文件,使用什么工具命令,最終生成?目標文件

        格式如下:

        目標:依賴??

        [Tab]命令

        例如:

        start.o:start.S

        ?[Tab]arm-linux-gcc -g -o start.o -c start.S

        ?變量:

        系統定義的變量:($@)代表目標,($^)代表所有依賴,($<)代表第一個依賴,(%)通配符?

        例如上面的例子用變量就是:

        %.o:%.S

        [Tab]arm-linux-gcc -g -o $@ -c $^??

        默認情況下,make命令會自動找到文件名叫makefile的文件,當你把makefile改名后,可以用命令:

        make -f 文件名?

        (3)鏈接腳本(.lds)

        段:一個可執行程序通常由代碼段,數據段。bss段構成,所以在腳本文件中也要體現出來

        ?鏈接腳本大概如下:

        ?OUTPUT_FORMAT("elf32littlearm",“elf32littlearm”,“elf32littlearm”)

        指定輸出文件格式為elf,32位,小端,arm指令

        OUTPUT_ARCH(arm)

        ?指定輸出平臺為ARM

        ENTRY(_start)

        指定入口_start

        ??SECTIONS{

        . = 0x50000000 設置程序開始地址(OK6410首地址)

        . = ALIGN(4) 代碼四字節?對齊

        ?.text: 指定代碼段

        {

        start.o(.text)? 第一個部分代碼為Start.o

        *(.text)? 其他部分代碼放在start.o代碼后面

        }?

        .= ALIGN(4)?

        ? .data:{ *(.data) }? 數據段

        . = ALIGN(4)

        bss_start = . ? bss段的開始位置

        .bss:{ *(.bss) } bss段

        bss_end = .? bss段的結束位置

        }?

        ?



        關鍵詞: ARM入門工

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 襄汾县| 渝中区| 阳新县| 八宿县| 泗洪县| 安泽县| 余庆县| 南靖县| 延川县| 烟台市| 彰化市| 逊克县| 淮北市| 永福县| 红河县| 静海县| 邯郸县| 宁武县| 新竹市| 岳普湖县| 廊坊市| 固镇县| 邯郸县| 固原市| 都兰县| 宜州市| 汝南县| 会昌县| 和政县| 惠州市| 搜索| 始兴县| 运城市| 武夷山市| 柯坪县| 遂昌县| 益阳市| 彭水| 台安县| 山东省| 江津市|