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

  1. ........省略
  2. make -f scripts/Makefile.build obj=arch/ppc/boot/images arch/ppc/boot/images/uImage
  3. ppc_85xx-objcopy -O binary vmlinux arch/ppc/boot/images/vmlinux.bin (第一步)
  4. 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 (第二步)
  5. rm -f arch/ppc/boot/images/uImage
  6. /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文件,比如:

  1. nm elf文件         #得到符号表
  2. objdump -D elf文件 #反汇编,且汇编代码与源码混排

2. bin文件比较杯具,里面全是机器码,所以只能反汇编

  1. objdump -b binary -m powerpc uboot.bin

全是汇编代码......+_+

ELF文件和BIN文件相关推荐

  1. 【计算机】ELF文件和BIN文件

    原文:http://blog.chinaunix.net/uid-24148050-id-362928.html 红色为个人注解. 文件的内容: 1. BIN文件是 raw binary 文件,这种文 ...

  2. hex文件和bin文件区别

    HEX文件和BIN文件是我们经常碰到的2种文件格式.因为自己也是新手,所以一直对这两个文件懵懵懂懂,不甚了解,最近在做STM32单片机的IAP更新,其中要考虑HEX文件和BIN文件,所以需要学习下这两 ...

  3. C# 学习笔记(12)hex文件转bin文件小工具

    C# 学习笔记(12)hex文件转bin文件小工具 hex文件格式 hex文件格式网上有很多 我这里参考HEX文件格式详解https://blog.csdn.net/weixin_39752827/a ...

  4. axf文件、hex文件、bin文件区别

    axf文件.hex文件与bin文件都可以运行在stm32,都存储了源代码通过编译器生成的机器码. axf文件:编译默认生成的文件,包含代码数据和调试信息,在MDK里进行debug调试用的文件. hex ...

  5. BC5-MM、CSR867x的DFU更新流程之二:dfu文件转bin文件

    .dfu文件转.bin文件 在BC5-MM.CSR867x的DFU更新流程之一: DFU(.dfu)文件制作常用指令及DFU文件内容中,我们解析了制作DFU文件(.dfu)的常用指令: 但.dfu文件 ...

  6. HEX文件和BIN文件总结及hex文件流转bin文件流示例代码

    这几天在写STM32的ISP烧录工具,因此有涉及到输入hex文件或bin文件进行烧录的问题,所以对hex文件和bin文件进行了些总结. 1 hex介绍 Hex 全称 (Intel HEX)文件是由一行 ...

  7. linux中rpm.bin文件与bin文件的区别

    linux中rpm.bin文件与bin文件的区别 rpm.bin 你执行后会生成rpm打包的安装文件 你就可以使用命令 rpm -ivh xxx.rpm 来安装了 只能在redhat系的发行版上使用 ...

  8. hex文件和bin文件的区别和联系

    1.分析一下hex文件 HEX格式文件以行为单位,每行由":"(16进制为:0x3a)开始,以回车键结束(16进制为:0x0d,0x0a).行内的数据都是由两个字符表示一个16进制 ...

  9. C#【文件操作篇】S19文件转bin文件

    C#-S19文件转bin文件 控件布局 代码 运行结果 源码下载: 如果对于S19文件格式不懂,可见: S19文件格式详解(1):https://star-302.blog.csdn.net/arti ...

最新文章

  1. Qt分析:Qt中的两种定时器
  2. cisco路由器灌IOS
  3. 转帖:.net中的异常类小结
  4. 【百度地图API】如何制作多途经点的线路导航——驾车篇
  5. 【springboot】启动时指定lib目录
  6. Jackson学习笔记
  7. zedboard--zynq使用自带外设IP让ARM PS访问FPGA(八) 转载
  8. centos 的网关和什么相同_CentOS操作系统:为什么转移到CentOS流是一个大错误
  9. 修改IDLE查找历史命令为上箭头↑
  10. 中国银行外币汇率查询
  11. 测试环境的搭建和配置
  12. websocket与下位机通过netty方式通信传输行为信息
  13. java中set和get用法_java中 set 和 get
  14. MPB:山大倪金凤组-​​白蚁肠道微生物样品收集与制备
  15. 移动MM 支付SDK遇到的问题
  16. 杨幂晒七月孕肚揭怀孕只胖baby不胖身材的女星
  17. Gwallet小百科 | 阿里、腾讯等互联网巨头们的区块链布局
  18. 【Mybatis入门20221024】
  19. cod1,301,课程blog与学院blog
  20. 我认为还是得学会自己焊接贴片元件,有专门的贴片元件焊接练习板,虽然有SMT,就像无人机要练习飞自稳一样。我们不能什么都靠SMT

热门文章

  1. lwip连续发数据卡死_Mysteel:12月全球铁矿石发运量稳中微增 进口矿咋走?
  2. 在循环里创建数据库连接,严重影响数据库性能
  3. java web开发之 spring单元测试
  4. hystrix断路器引发的相关概念
  5. 实战演习-用wse上传下载文件
  6. Des与3Des加密解密
  7. Java排查问题随笔
  8. css 滤镜之AlphaImageLoader
  9. 项目管理之码云和git
  10. c# 路径空格---ProcessStartInfo参数问题