在linux中把彙編或c程式交叉編譯成二進位制檔案燒錄開發板過程詳解
嵌入式開發中在宿主機中要編譯能在目標機中執行的程式檔案需要用到一種工具:交叉工具鏈。其中我們常用的交叉工具有以下幾種:交叉編譯器,交叉聯結器,交叉轉換器,交叉ELF檔案工具,交叉反彙編器。以下通過例項將這些做一些介紹。
分解以下講一個led.S檔案編譯成可燒錄的二進位制檔案的詳細過程:
首先需要編譯生成.o檔案,使用到了交叉編譯器 arm-linux-gcc:arm-linux-gcc -g -c led.S 生成led.o檔案。
其次連線檔案需要用到交叉聯結器:arm-linux-ld -T led.lds -o led.elf led.o 生成:led.elf檔案。注意:led.lds是聯結器指令碼
此時需要用到檔案格式轉換器將ELF格式轉換為二進位制.bin格式:arm-linux-objcopy -o binary led.elf led.bin 生成:led.bin檔案。
這樣就可以想開發板中燒錄二進位制檔案,實現你需要的功能。
以上還有兩個沒有涉及到:交叉ELF檔案工具arm-linux-readelf ,它是用來讀取elf檔案格式的一些資訊,比如執行命令arm-linux-readelf -a led.S
交叉反彙編器 arm-linux-objdump可以將c程式碼反彙編為彙編程式。
以上交叉編譯連線過程如果檔案又大又多會非常繁瑣,因此linux中運用更有效率的工具makefile
Makefile中最重要的組成部分是“規則”
規則:用於說明如何生成目標檔案,規則的格式
如下:
targets : prerequisites
command
目標 依賴 命令
特別提供:命令需要使用【TAB】鍵空格