日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

ELF文件和BIN文件

發布時間:2023/12/13 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 ELF文件和BIN文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件的內容:
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文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。