.bin文件是一个描述性质的映像文件,它由文件头(head)、镜像数据目的起始地址(ImageStart)、镜像数据长度(ImageLength)和多条相对独立的记录(record)构成。
文件头(head)由7个字节组成,内容是:42 30 30 30 46 46 0A,即“B000FF/x0A”,这是判断镜像文件是.bin类型的依据。
镜像数据目的起始地址(ImageStart)由4个字节组成,它定义了镜像文件解析后装载在内存中的起始地址。
镜像数据长度(ImageLength)也由4个字节组成,它表示.bin镜像文件解析后在内存中占用的总的存储空间大小。
每条记录(record)由4字节的起始存储地址(RecordStart)、4字节的数据长度(RecordLength)、4字节的校验码(RecordCheckSum)和RecordLength个字节的记录数据(RecordData)组成。
由以上.bin的文件格式可知,.bin文件不是内存程序空间的一个简单的拷贝。所以它不能直接用串口烧写进内存或FLASH空间来直接运行,必须通过PB下载,通过EBOOT按照.bin文件的格式解析出来具体的内容并重新装载后才能运行。
而.nb0文件就不一样,它是内存运行程序映像的一个硬拷贝,其数据内容和程序运行时在内存中的数据是一样的。鉴于此,.nb0可以通过串口下载到指定的位置直接运行。很明显,.nb0是一个不存在格式的映像文件。
下面,我通过一个具体的.bin文件以及对应的nb0文件来帮助大家加深对以上概念的理解:
用UltraEdit打开我们要分析的NK.bin文件和NK.nb0文件,为了方便分析,我分别截取了NK.bin和NK.nb0文件的一小部分:
NK.bin文件的部分内容:
00000000h: 42 30 30 30 46 46 0A 00 00 00 80 64 67 FA 00 00
00000010h: 00 00 80 04 00 00 00 EB 01 00 00 FE 03 00 EA 40
00000020h: 00 00 80 08 00 00 00 EE 02 00 00 45 43 45 43 1C
00000030h: 48 FA 80 48 00 00 80 04 00 00 00 5