u-boot.img文件头解析

u-boot.img文件头解析
        昨天用mount解压cramfs镜像文件失败之后,我用UE打开此cramfs镜像文件,发现此文件不仅含有文件系统,还含有64字节的头,今天我就来解释一下,这64字节是什么,还有怎么通过命令来做这个头
1、在mkimage源码包里的image.h就对这64个字节进行了定义

2、查看u-boot.img文件头内容,每一个红色方框对应以上每一个定义

1)27 05 19 56 :ih_magic 固定不变
2)C5 8B C7 0C:ih_hcrc 头部校验,也就是这64个字节的CRC32校验
3)54 58 26 67: ih_time 创建此文件时的时间
4)00 00 50 00:ih_size 镜像文件大小
5)00 77 00 00:ih_load 镜像在内存中的加载地址
6)00 7B 00 00:ih_ep 镜像运行的入口点地址
7)0C A7 AE 20:ih_dcrc 镜像文件CRC32校验码
8)操作系统类型 9)CPU类型 10)镜像类型 11)镜像压缩方式 12)镜像名
3、如何编译生成文件头内容
#mkimage
Usage: ./mkimage -l image
-l ==> list image header information
./mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
-A ==> set architecture to 'arch' //对应CPU类型
-O ==> set operating system to 'os' //对应操作系统类型
-T ==> set image type to 'type' //对应镜像文件类型
-C ==> set compression type 'comp' //对应镜像文件压缩类型
-a ==> set load address to 'addr' (hex) //对应镜像文件压缩方式
-e ==> set entry point to 'ep' (hex) //对应指定镜像运行入口点地址
-n ==> set image name to 'name' //对应镜像文件名
-d ==> use image data from 'datafile' //对应镜像文件
-x ==> set XIP (execute in place) //对应执行位置

参数说明:

-A 指定CPU的体系结构:

取值                     表示的体系结构
alpha                       Alpha 
arm                           ARM 
x86                        Intel x86
ia64                          IA64
mips                        MIPS
mips64               MIPS 64 Bit
ppc                        PowerPC
s390                     IBM S390
sh                          SuperH
sparc                   SPARC
sparc64          SPARC 64 Bit
m68k                  MC68000

-O 指定操作系统类型:

可以取以下值:
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos

-T 指定映象类型:

可以取以下值:
standalone、kernel、ramdisk、multi、firmware、script、filesystem

-C 指定映象压缩方式:

可以取以下值:
none 不压缩
gzip 用gzip的压缩方式
bzip2 用bzip2的压缩方式

-a 指定映象在内存中的加载地址

映象下载到内存中时,要按照用mkimage制作映象时,这个参数所指定的地址值来下载

-e 指定映象运行的入口点地址

这个地址就是-a参数指定的值加上0x40(因为前面有个mkimage添加的0x40个字节的头)

-n 指定映象名

-d 指定制作映象的源文件

4、好!按照以上的文件头,总的编译命令如下:
#mkimage -n 'linux' -A arm -O linux -T standalone -C gzip -a 0x00770000 -e 0x007B0000 -d test.cramfs test.cramfs.img
5、Success!
6、文件头校验码计算方法
参考mkimage的源码内容和mkimage执行文件:http://download.csdn.net/detail/cinberella/8171909
可以发现文件头的CRC32校验方式为:把校验码的那四个字节填为00,然后保存头(含有创建时间),再把此文件头进行校验,此校验值即为ih_hcrc的值
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值