文件的内容:
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. .hex文件和.bin文件的区别

    博客转之于:  http://mini.eastday.com/a/160627003502858.html HEX文件和BIN文件是我们经常碰到的2种文件格式.下面简单介绍一下这2种文件格式的区别: ...

  2. hex文件和bin文件区别

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

  3. 工作总结 1 sql写法 insert into select from 2 vs中 obj文件和bin文件 3 npoi 模板copy CopySheet 最好先全部Copy完后 再根据生成sheet写数据 4 sheet.CopyRow(rowsindex, rowsindex + x); 5 npoi 复制模板如果出现单元格显示问题

    我们可以从一个表中复制所有的列插入到另一个已存在的表中: INSERT INTO table2SELECT * FROM table1; 或者我们可以只复制希望的列插入到另一个已存在的表中: INSE ...

  4. Keil生成汇编文件、bin文件

    // 生成汇编文件:$K\ARM\ARMCC\bin\fromelf.exe --text -a -c --output=@L_asm.txt "!L" // 生成bin文件:$K ...

  5. Obj文件和Bin文件

    本文导读:在用visual studio 编程时,会看到项目文件中含有bin和obj这两个文件夹,那么这两个文件夹具体包含一些什么东西的,具体作用是什么? 一.Bin文件夹 1.用来保存项目生成后程序 ...

  6. PHP hex文件及bin文件读取

    背景:做物联网时经常会有软件上传这种操作,上传的软件包文件常见的是hex和bin这两种. 一 hex文件读取 1 首先我们需要了解hex文件内容格式 (图及下面说明来自网络,侵权必删) :(冒号)每个 ...

  7. 关于ELF文件和BIN文件

    ELF文件执行过程 ELF文件有操作系统的加载器loader执行,比如linux,windows,对于3803处理器是grmon的load命令. 加载器会读取ELF文件program header,比 ...

  8. Keil开发环境如何生成BIN文件

    为什么需要BIN文件呢? 有些烧录器只支持BIN文件. 进行OTA远程升级时,只能使用BIN文件. 使用JLink脚本文件进行一键烧录时,只支持BIN文件. BIN文件要比HEX和AXF文件小的多. ...

  9. 痞子衡嵌入式:探析开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序问题. 痞子衡之前写了一篇 <在IAR开发环境下为工程开启CRC ...

随机推荐

  1. Hadoop运维手记

    1.处理hadoop的namenode宕机 处理措施:进入hadoop的bin目录,重启namenode服务 操作命令:cd path/to/hadoop/bin ./hadoop-daemon.sh ...

  2. 我的第一个Windows服务

    代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  3. 【分页问题】elasticsearch 深分页问题以及解决方法

    本文主要参考: 1.https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html ...

  4. Windows下查看文件MD5值

    有时候因为某些原因我们需要查看文件的MD5值,在Linux下这个就非常简单,只需要用md5sum命令即可,但是在Windows上却不知道对应的命令.今天就在网上查了一些,果然其实Windows也有对应 ...

  5. 理解if __name__ == '__main__':

    一开始没怎么注意这个语句,这两天在模拟知乎登陆时准备刨根问底了,先看两行代码片段 第一个例子:这是在login.py文件的一部分,其他我们忽略,只关注print()函数的内容 import time ...

  6. Spring之核心容器bean

    摘要:Spring的核心容器实现了Ioc,其目 的是提供一种无侵入式的框架.在本文中,首先讲解了Spring的基础bean的相关知识,然后介绍了Spring是如何对bean进行管理的. 在Spring ...

  7. bzoj3223: Tyvj 1729 文艺平衡树 splay裸题

    splay区间翻转即可 /************************************************************** Problem: 3223 User: walf ...

  8. UVA-11613 Acme Corporation (最大费用最大流+拆点)

    题目大意:有一种商品X,其每每单位存放一个月的代价I固定.并且已知其每月的最大生产量.生产每单位的的代价.最大销售量和销售单价,还已知每个月生产的X能最多能存放的时间(以月为单位).问只考虑前m个月, ...

  9. UVA-1343 The Rotation Game (IDA*)

    题目大意:数字1,2,3都有八个,求出最少的旋转次数使得图形中间八个数相同.旋转规则:对于每一长行或每一长列,每次旋转就是将数据向头的位置移动一位,头上的数放置到尾部.若次数相同,则找出字典序最小旋转 ...

  10. sqlserver版本分类下载以及各个版本之间的区别是什么

    很多用visual studio做开发的朋友经常会用到sqlserver数据库,但是往往在选择的时候就不知道该使用哪个版本了,今天亦是美网络就给大家分享一下sqlserver各个版本之间的区别,以及各 ...