文件的解析
由 的开发工具 编译生成的 操作系统及
的镜像文件主要由两种格式类型——以 为文件名后缀的记录型镜像文件和
以 为后缀的原始型()镜像文件,前者以记录()为单位组织镜像的数据,
后者则是镜像在嵌入式系统中运行时的二进制数据快照。
函数执行的第一步是调用 函数获知镜像文件的格式
类型。每一个 镜像文件在文件数据的起始位置都有一个 ! 字节的特征码
()"它与镜像文件的格式一一对应如下:
#$%%&'()——*+,(+-+,($%.
#'%%&'()——*+,(+-+,/*'
#%%&'()——*+,(+-+$
0
本文重点研究 BL_IMAGE_TYPE_BIN 类型的记录型镜像文件格式,该类型的镜像文件
均以.bin 为文件名后缀,DownloaderImage 函数调用 DownloadBin 函数处理这种类型的镜像
文件。在 BL_IMAGE_TYPE_BIN 类型的镜像文件中,紧随着最初的 7 字节特征码之后是
该镜像文件在嵌入式系统中的目的物理存储起始地址和以字节为单位的长度,各占 4 字节,
这两个数据的含义分别对应于 RegionInfo 结构体的 dwRegionStart、dwRegionLength 两成员。
接下来的便是具体存放操作系统为二进制数据的拥有相同结构的多条记录(Record),每
条记录由 4 字节的内存起始地址 dwRecAddr、4 字节的记录长度 dwRecLen、4 字节的校验
码 dwRecChk 和 dwRecLen 个字节的记录数据组成。DownloaderImage 函数依次从下载端口
读出各条记录并且对它们执行校验,校验也是以记录为单位,待校验无误以后将去除头信
息的记录数据存放到 dwRecAddr 指定地址的物理存储位置。如果记录的目的存储位置是
Flash 存储设备,则通常要先缓存在 RAM 内存中,待整个镜像文件全部下载完再一起写入
Flash。
11111本文以项目中定制的操作系统 NK.bin 为例进行分析。使用 UltraEdit 将其打开如图 1 所
示。
1
1111234456447图 1*使用 UltraEdit 打开系统镜像文件
111
从上图可以看出,文件头89:由 ! 个字节组成,内容是:;<===;>;>("即
“%%&?(),这是判断镜像文件是 类型的依据。镜像数据目的起始地址
(.,@A)由 ; 个字节组成,它定义了镜像文件解析后装载在内存中的
起始地址是 ?A@。镜像数据长度8*9"=B<:也由 ; 个字节组成,
它表示 镜像文件解析后在内存中占用的总的存储空间大小为(?<B=)。每条
记录()由 ; 字节的起始存储地址(.)、; 字节的数据长度
评论0
最新资源