在linux中輸入vi Makefile 來實現創建Makefile文件
注意:命令行前必須加TAB鍵
例如:將兩個文件led.c和crt0.S彙編文件,製作一個Makefile文件
led.bin : crt0.S led.c
arm-linux-gcc -c -o crt0.o crt0.c
arm-linux-gcc -c -o led.o led.c
arm-linux-ld -Ttext 0x00000000 -g crt0.o led.o -o led_elf
arm-linux-objcopy -O binary -S led_elf led.bin
arm-linux-objdump -D -m arm led_elf > led.dis
clean:
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架構