一、 NK.BIN
NK.BIN是结构体文件,它是对NK.NB0文件进行了压缩,以方便下载操作,主要是节省下载时间,提高效率。下位机在接收到此文件后,可以解压缩后直接运行,也可以烧写到Flash上。
NK.BIN相比NK.NB0多了三个信息:
1. 映像文件起始地址: 指明此映像文件应该被装载到的地址
2. 文件大小
3. 启动地址: PC指针跳转到此,以启动此映像文件
NK.BIN主要的结构信息:
头标志(7个字节)+起始地址(4字节)+文件大小(4字节)
接跟着的是由下面的块信息组成的数据:
块地址(4字节)+块大小(4字节)+校验(4字节)+内容(长度为上面指定的块大小)
块地址指明内容数据应被装载到的地址
所有的这样的块信息组成了Nk.BIN文件结构
注意最后一个块信息的块地址为0,校验也为0,块大小的内容为启动地址(Lanuch Address)
将NK.BIN文件按照这些块信息可以解压或者说还原成NK.NB0文件。
二、NK.NB0
首先说一下TOC信息.在相对地址为0x40处,有两个四字节的数据,第一个为校验信息(ECEC),第二个即指明了ROMHDR结构体的地址.这个ROMHDR结构体包含了很多有用的信息,像映像文件的模块,文件等,还有一些段(Section)信息,如eboot就是用此来重定位全局变量。
typedef struct ROMHDR {
ULONG dllfirst; // first DLL address
ULONG dlllast; // last DLL address
ULONG physfirst; // first physical address
ULONG physlast; // highest physical address
ULONG nummods; // number of TOCentry's
ULONG ulRAMStart; // start of RAM
ULONG ulRAMFree; // start of RAM free space
ULONG ulRAMEnd; // end of RAM
ULONG ulCopyEntries; // number of copy section entries
ULONG ulCopyOffset; // offset to copy section
ULONG ulProfileLen; // length of PROFentries RAM
ULONG ulProfileOffset; // offset to PROFentries
ULONG numfiles; // number of FILES
ULONG ulKernelFlags; // optional kernel flags from ROMFLAGS .bib config option
ULONG ulFSRamPercent; // Percentage of RAM used for filesystem
ULONG ulDrivglobStart; // device driver global starting address
ULONG ulDrivglobLen; // device driver global length
USHORT usCPUType; // CPU (machine) Type
USHORT usMiscFlags; // Miscellaneous flags
PVOID pExtensions; // pointer to ROM Header extensions
ULONG ulTrackingStart; // tracking memory starting address
ULONG ulTrackingLen; // tracking memory ending address
} ROMHDR;
紧跟着这个ROMHDR的是所有的TOCentry结构,也就是模块信息,然后是所有的FILESentry结构,也就是包含的文件信息.
这些结构的定义可以在romldr.h文件中找到
具体的信息,可以参数WINCE自带的ViewBin.exe的源程序.位置在C:/WINCE420/PRIVATE/WINCEOS/COREOS/NK/TOOLS/ROMIMAGE/VIEWBIN