ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BIN文件和ELF文件

2022-02-24 10:32:34  阅读:186  来源: 互联网

标签:BIN 文件 binary ELF boot bin elf


文件的内容:
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文件

    1. CC=ppc-gcc
    2. LD=ppc-ld
    3. OBJCOPY=ppc-objcopy
    4.  
    5. $(CC) -g $(CFLAG) -c boot.S
    6. #先将boot.S文件生成boot.o
    7.  
    8. $(LD) -g -Bstatic -T$(LDFILE) \
    9. -Ttext 0x12345600 boot.o \
    10. --start-group -Map boot.map -o boot.elf
    11. #再将boot.o生成boot.elf
    12.  
    13. $(OBJCOPY) -O binary -R .note -R .comment -S boot.elf boot.bin
    14. #接着将 boot.elf 转换为 boot.bin
    15. #使用 -O binary (或--out-target=binary) 输出为原始的二进制文件
    16. #使用 -R .note  (或--remove-section)    输出文件中不要.note这个section,缩小了文件尺寸
    17. #使用 -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共存。


标签:BIN,文件,binary,ELF,boot,bin,elf
来源: https://www.cnblogs.com/sudochen/p/15930560.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有