bin和elf檔案 ARM 一

2021-06-07 08:53:55 字數 1184 閱讀 6036

嵌入式開發的時候,我們的編譯乙個*.s檔案,並最終生成bin檔案,編譯命令大致如下:

cc=arm-softfloat-linux-gnu-gcc

ld=arm-softfloat-linux-gnu-ld

objcopy=arm-softfloat-linux-gnu-objcopy

$(cc) -g $(cflag) -c boot.s     #先將boot.s檔案生成boot.o

$(ld) -g -bstatic -t$(ldfile) -ttext 0x12345600 boot.o --start-group -map boot.map -o boot.elf    #再將boot.o生成boot.elf, boot.elf通常就是可執行檔案,類似於gcc -o test test.c 中的test檔案,在linux shell下輸入./test就可以執行。

$(objcopy) -o binary boot.elf boot.bin    #接著將boot.elf->boot.bin,這樣可以縮小**尺寸。

執行arm-softfloat-linux-gnu-objdump -h boot.elf 可以檢視該檔案的資訊,但是如果變成

arm-softfloat-linux-gnu-objdump -h boot.bin會提示錯誤,為了看boot.bin檔案資訊,輸入:

arm-softfloat-linux-gnu-objdump -h -b binary -m arm boot.bin就可以了。哈哈我也是現學了一招,其中引數-h可以被替換成為-d, -s, -s等等,請用arm-softfloat-linux-gnu-objdump --help檢視器中表示的意義。

說說elf bin 檔案區別:

我們有了linux os,為了執行可執行檔案,他們是遵循elf格式的,通常gcc -o test test.c,生成的test檔案就是elf格式的,這樣就可以執行了。

arm-softfloat-linux-gnu-objcopy命令將去掉elf格式的東西,僅僅保留最純的彙編(不知道如何解釋),

在embedded中,如果上電開始執行,沒有os系統,如果將elf格式的檔案燒寫進去,包含一些elf格式的東西,arm執行碰到這些指令,就會導致失敗,如果用arm-softfloat-linux-gnu-objcopy生成純粹的彙編,程式就可以一步一步執行。

聯絡[email protected]就可以了。

ELF檔案和BIN檔案

檔案的內容 1.bin檔案是 raw binary 檔案,這種檔案只包含機器碼。2.elf檔案除了機器碼外,還包含其它額外的資訊,如段的載入位址,執行位址,重定位表,符號表等。所以elf檔案的體積比對應的bin檔案要大。檔案的執行 1.執行raw binary很簡單,只需要將程式載入到其起始位址,就...

ELF檔案和BIN檔案

檔案的內容 1.bin檔案是 raw binary 檔案,這種檔案只包含機器碼。2.elf檔案除了機器碼外,還包含其它額外的資訊,如段的載入位址,執行位址,重定位表,符號表等。所以elf檔案的體積比對應的bin檔案要大。檔案的執行 1.執行raw binary很簡單,只需要將程式載入到其起始位址,就...

ELF檔案和BIN檔案

檔案的內容 1.bin檔案是 raw binary 檔案,這種檔案只包含機器碼。2.elf檔案除了機器碼外,還包含其它額外的資訊,如段的載入位址,執行位址,重定位表,符號表等。所以elf檔案的體積比對應的bin檔案要大。檔案的執行 1.執行raw binary很簡單,只需要將程式載入到其起始位址,就...