檔案的內容:
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...