文件的内容:
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文件 uboot.elf uboot.bin相关推荐

  1. ELF文件和BIN文件

    文件的内容: 1. BIN文件是 raw binary 文件,这种文件只包含机器码. 2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等. 所以ELF文件 ...

  2. exynos 4412 uboot的 bl2.bin 文件从何而来

    移植u-boot-samsung-dev的过程中一直在对比迅为的4412开发板的uboot,下面是最先运行的脚本文件  Build_uboot.sh #!/bin/shif [ -z $1 ] the ...

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

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

  4. fpga烧写bin文件_S3C2440移植uboot之编译烧写uboot

    @[TOC] 移植环境 主 机:VMWare--ubuntu16.04 开发板:S3C2440 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2012.04.01 ...

  5. 为海思u-boot快速生成reg_info.bin文件

    在海思平台的底层开发中,SoC的引脚.时钟的配置是通过一个Excel表格生成的reg_info.bin来实现的,这个reg_info.bin文件是在编译u-boot过程中需要的,可以通过查看最终的u- ...

  6. ELF与BIN文件的生成和转换

    Gcc编译出来的是ELF文件.通常gcc –o test test.c,生成的test文件就是ELF格式的,在linuxshell下输入./test就可以执行. Bin文件是经过压缩的可执行文件,去掉 ...

  7. elf文件解析以及和bin文件的区别

    其实是想搞嵌入式的,但是总是要补补这里的知识补点那里的知识 1.ELF的分类 现在PC平台流行的可执行文件格式(Executable)主要是Windows下的PE和Linux的ELF,他们都是COFF ...

  8. ELF(Executable Linkable Format)文件存储格式

    目录 1. 链接举例 2. ELF文件类型 2.1 可重定位目标文件(.o文件) 2.2 可执行目标文件(a.out文件) 2.3 共享对象文件(.so文件) 3. ELF文件作用 4. ELF文件格 ...

  9. 安装jdk后出现bash: ./java: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录

    cenos安装jdk会遇到的问题: 配置完环境变量后用java -version测试出现"bash: ./java: /lib/ld-linux.so.2: bad ELF interpre ...

  10. linux中elf文件的作用,Linux中ELF格式文件介绍

    一. ELF简介 ELF(Executable and Linkable Format)即可执行连接文件格式,是一种比较复杂的文件格式,但其应用广泛.与linux下的其他可执行文件(a.out,cof ...

最新文章

  1. 存储入门:存储区域网络SAN技术完全详解
  2. Memcache安全性
  3. js与C#服务端 json数据交互
  4. leetcode 1223 python
  5. 3月国内网站流量:腾讯夺第二 360安全中心降至第三
  6. 2021年中国一次性个人防护装备市场趋势报告、技术动态创新及2027年市场预测
  7. java中的基本算法
  8. 转载--批量更新数据(性能优化)
  9. ios13 文件 连接服务器 您已离线,iOS13,终于可以屏蔽系统更新了
  10. php把amr转换成mp3,PHP 将amr音频文件转换为mp3格式
  11. Python学习(4)证件照底色变换
  12. 等比缩放公式_等比缩放算法
  13. 大学计算机专业吐槽,大学专业吐槽集锦:分分钟让你感觉“前途无亮”!
  14. 学的计算机专业但是键盘打字非常慢怎么办,win10系统下键盘打字反应慢迟钝的解决方法...
  15. LightOJ-1012-Guilty Prince [DFS]
  16. 英语单词:flight; fly
  17. 2021/06/27 Uncaught SyntaxError: Cannot use import statement outside a module
  18. java关键字汉化_Java关键字 - 乱流的个人空间 - OSCHINA - 中文开源技术交流社区
  19. SuperMap GIS的TIN地形数据处理十问
  20. 动真格了!苹果下架超5万款游戏App, 辛好我有企业签

热门文章

  1. mysqldump备份过程中都干了些什么
  2. Linux上vi(vim)编辑器使用教程
  3. flume学习(四):Flume Channel Selectors使用
  4. Access denied (403) see security.limit_extensions
  5. 18.11 LVS DR模式搭建
  6. JAVA接口和抽象类的特点
  7. C#:异步编程和线程的使用(.NET 4.5 )
  8. $().index() 两种用法
  9. AJAX学习笔记 一:简单的XMLHTTPRequest示例和asp.net异步更新。
  10. 推荐:“创建MOSS2007自定义字段类型实例”