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文件的更多相关文章
- .hex文件和.bin文件的区别
博客转之于: http://mini.eastday.com/a/160627003502858.html HEX文件和BIN文件是我们经常碰到的2种文件格式.下面简单介绍一下这2种文件格式的区别: ...
- hex文件和bin文件区别
HEX文件和BIN文件是我们经常碰到的2种文件格式.因为自己也是新手,所以一直对这两个文件懵懵懂懂,不甚了解,最近在做STM32单片机的IAP更新,其中要考虑HEX文件和BIN文件,所以需要学习下这两 ...
- 工作总结 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 ...
- Keil生成汇编文件、bin文件
// 生成汇编文件:$K\ARM\ARMCC\bin\fromelf.exe --text -a -c --output=@L_asm.txt "!L" // 生成bin文件:$K ...
- Obj文件和Bin文件
本文导读:在用visual studio 编程时,会看到项目文件中含有bin和obj这两个文件夹,那么这两个文件夹具体包含一些什么东西的,具体作用是什么? 一.Bin文件夹 1.用来保存项目生成后程序 ...
- PHP hex文件及bin文件读取
背景:做物联网时经常会有软件上传这种操作,上传的软件包文件常见的是hex和bin这两种. 一 hex文件读取 1 首先我们需要了解hex文件内容格式 (图及下面说明来自网络,侵权必删) :(冒号)每个 ...
- 关于ELF文件和BIN文件
ELF文件执行过程 ELF文件有操作系统的加载器loader执行,比如linux,windows,对于3803处理器是grmon的load命令. 加载器会读取ELF文件program header,比 ...
- Keil开发环境如何生成BIN文件
为什么需要BIN文件呢? 有些烧录器只支持BIN文件. 进行OTA远程升级时,只能使用BIN文件. 使用JLink脚本文件进行一键烧录时,只支持BIN文件. BIN文件要比HEX和AXF文件小的多. ...
- 痞子衡嵌入式:探析开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序问题. 痞子衡之前写了一篇 <在IAR开发环境下为工程开启CRC ...
随机推荐
- Tomcat 启动图解
Tomcat server.xml结构 startup.bat执行流程 catalina.bat执行流程 Tomcat Server处理一个http请求的过程
- gradle Debug的使用
gradle 与maven 不同,运行完run debug后还需要再进行几部配置: 打开Run-DebugConfigurations-如图新建一个remote java application 然后 ...
- SDN前瞻 软件定义网络的一些概念
SDN的核心:可编程性 SDN的思想:SOA面向服务 面向服务的体系结构(service-oriented architecture SOA) 使网络连接的大量计算机易于合作,以 服务 而不是人工交互 ...
- Android SDK manager 闪退
在SDK安装目录找到tools文件夹,点击进入找到android.bat右键编辑:找到如下指令: rem Check we have a valid Java.exe in the path. set ...
- python 获取进程执行的结果
import subprocessp = subprocess.Popen([r'ls'],stdout=subprocess.PIPE) result = p.stdout.read()print( ...
- 【Python】单元测试框架unitest及其高级应用
Unittest Unittest是python的一个单元测试框架,但是它不仅适用于单元测试,还适用自动化测试用例的开发与执行.我们可以很方便的使用它组织执行测试用例,使用它提供的丰富的断言方法进行测 ...
- C#使用(NamedPipe)命名管道通信的例子
https://blog.csdn.net/yl2isoft/article/details/20228279
- IOS-适配iOS10以及Xcode8
现在在苹果的官网上,我们已经可以下载到Xcode8的GM版本了,加上9.14日凌晨,苹果就要正式推出iOS10系统的推送了,在此之际,iOS10的适配已经迫在眉睫啦,不知道Xcode8 beat版本, ...
- CC工具列表
QuasarRAT Adwind Adzok Arcom Babylon Blacknix Blue Banana Bozok Coringa DarkComet DRAT Gh0st Huige ...
- css单位长度
CSS长度单位 单位 含义 em 相对于父元素的字体大小 ex 相对于小写字母”x”的高度 gd 一般用在东亚字体排版上,这个与英文并无关系 rem 相对于根元素字体大小 vw 相对于视窗的宽度:视窗 ...