在linux中輸入vi Makefile 來實現創建Makefile文件
注意:命令行前必須加TAB鍵
例如:將兩個文件led.c和crt0.S匯編文件,制作一個Makefile文件
1 1 led.bin : crt0.S led.c 2 2 arm-linux-gcc -c -o crt0.o crt0.c 3 3 arm-linux-gcc -c -o led.o led.c 4 4 arm-linux-ld -Ttext 0x00000000 -g crt0.o led.o -o led_elf 5 5 arm-linux-objcopy -O binary -S led_elf led.bin 6 6 arm-linux-objdump -D -m arm led_elf > led.dis 7 7 clean: 8 8 rm -f led_elf led.dis led.bin *.o
led.bin : crt0.S led.c 指的是依賴關系,led.bin是目標文件,:后面是依賴文件
arm-linux-gcc 編譯選項
- -o 編譯及鏈接,會生成一個exe可執行文件
- -Wall 指定產生全部的警告信息
- -O/-O2/-O3 數字越高,代表優化的更多,可以使生成的執行文件的提高執行效率
- -c 編譯不鏈接,會生成一個*.obj文件,若后面加了-o,則表示指定輸出文件名稱
- -static 靜態鏈接,生成的文件會非常大, 好處在於不需要動態鏈接庫,也可以運行
- -S 只激活預處理和編譯,就是指把文件編譯成為匯編代碼
例如:
arm-linux-gcc -c -o led.o led.c :編譯不鏈接
arm-linux-gcc -o led led.c :編譯以及鏈接
arm-linux-ld 連接選項
- -Ttext 0x00000000 指代碼段頭地址為0x00000000
- -T鏈接腳本 指使用鏈接腳本來進行更復雜的地址設置,包括了代碼段,數據段,bss段等
- -o 后面指的將多個文件連接在一起,生成一個obj文件,上面的名稱是led_elf。
- -pie 生成動態鏈接地址段,一般在新版uboot里會看到
arm-linux-objcopy 復制選項,支持格式轉換
- -O binary 用來指定生成文件按照后面的格式來輸出,其中binary是指生成二進制(.bin)文件。
- -S 不從源文件中復制重定位信息和符號信息到目標文件中去
arm-linux-objdump 反編譯選項
- -D 反編譯所有段
- -b binary 指定反編譯目標文件格式
- -m ram 指定反編譯目標文件所需的架構,這里是ram架構