ELF檔案和BIN檔案

2021-06-19 19:32:11 字數 2609 閱讀 6598

檔案的內容:

1. bin檔案是 raw binary 檔案,這種檔案只包含機器碼。

2. elf檔案除了機器碼外,還包含其它額外的資訊,如段的載入位址,執行位址,重定位表,符號表等。

所以elf檔案的體積比對應的bin檔案要大。

檔案的執行:

1. 執行raw binary很簡單,只需要將程式載入到其起始位址,就可以執行;

file *fp = fopen("vmlinux.bin", "rb");

fread(vmlinux_start, 1, vmlinux_size, fp);

((void (*)(void))vmlinux_start)();

2. 執行elf程式則需要乙個elf loader。

現在知道了吧,uboot和linux kernel啟動的時候是沒有elf loader的

所以燒在flash上的檔案只能是raw binary格式的,即映象檔案image

檔案的轉換:

1. 通過gcc編譯出來的是elf檔案

2. 通過objcpy可以把elf檔案轉換為bin檔案

cc=ppc-gcc

ld=ppc-ld

objcopy=ppc-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

$(objcopy) -o binary -r .note -r .comment -s boot.elf boot.bin

#接著將 boot.elf 轉換為 boot.bin

#使用 -o binary 

(或--out-target=binary)

輸出為原始的二進位制檔案

#使用 -r .note 

(或--remove-section) 

輸出檔案中不要.note這個section,縮小了檔案尺寸

#使用 -s 

(或 --strip-all)

輸出檔案中不要重定位資訊和符號資訊,縮小了檔案尺寸

編譯完uboot後生成:

u-boot 

elf檔案可用來除錯

u-boot.bin 

bin檔案用來燒在flash上

編譯linux生成:

vmlinux 

elf檔案可用來除錯

vmlinux.bin 

bin檔案,沒直接用過

zimage/vmlinuz/bzimage

將vmlinux.bin壓縮,並加上一段解壓**得到的,不可和bootloader共存?

uimage 

uboot專用的核心映象,在zimage前加了乙個64位元組的頭,描述核心版本、載入位址

生成時間,檔案大小等等。 其0x40後的內容和zimage一樣

它是由uboot的工具mkimage生成的。 

uimage相對於zimage的優點在於:uimage可以和uboot共存。

網上的乙個很強大,講解了arm平台的uimage的生成:

ppc平台uimage有點不同,make uimage後檢視源**目錄的verbose.log

........省略

make -f scripts/makefile.build obj=arch/ppc/boot/images arch/ppc/boot/images/uimage

ppc_85xx-objcopy -o binary vmlinux arch/ppc/boot/images/vmlinux.bin (第一步)

gzip -f -9 < arch/ppc/boot/images/vmlinux.bin > arch/ppc/boot/images/vmlinux.gz.$ && mv arch/ppc/boot/images/vmlinux.gz.$ arch/ppc/boot/images/vmlinux.gz (第二步)

rm -f arch/ppc/boot/images/uimage

/bin/sh /root/project/eldk4.2/ppc_85xx/usr/src/8541-reduece-ppc-linux-2.6.24/scripts/mkuboot.sh -a ppc -o linux -t kernel -c gzip -a 00000000 -e 00000000 -n 'linux-2.6.24.2' -d arch/ppc/boot/images/vmlinux.gz arch/ppc/boot/images/uimage (第三步)

檔案的除錯:

1. 我們除錯一般都是使用elf檔案,比如:

nm elf檔案  

#得到符號表

objdump -d elf檔案 

#反彙編,且彙編**與原始碼混排

2. bin檔案比較杯具,裡面全是機器碼,所以只能反彙編

objdump -b binary -m powerpc uboot.bin

全是彙編**......+_+

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檔案區別

elf檔案格式是乙個開放標準,各種unix系統的可執行檔案都採用elf格式,它有三種不同的型別 elf格式提供了兩種不同的視角,鏈結器把elf檔案看成是section的集合,而載入器把elf檔案看成是segment的集合。有一篇文章介紹elf檔案的格式以及載入過程介紹的很詳細,可以看一下,在linu...