• nk.bin和nk.nb0文件格式分析


    nk.bin和nk.nb0文件格式分析

    作者:wogoyixikexie@gliet 

    借用别人的解释: 
         这里提到的bin是一种二进制镜像格式,以片断(section)为单位组织数据,每个片断都包括一个头,头里指定了起始地址,长度,校验值。Platform Builder调用工具将WINCE内核所有文件以bin格式合并成一个文件,默认文件名为nk.bin。BootLoader又以同样的格式将nk.bin分解成多个文件放到RAM中。可以在命令行中键入“viewbin nk.bin”来查看bin文件中具体包括了哪些内容。键入Cvrtbin命令转换.bin格式文件为.sre格式或者.abx格式。
    nb0格式是原始的二进制镜像,它不包括头,一般情况下将内核下载到设备的RAM中运行都采用nb0格式。要生成nbx格式的文件,需要在相关.bib文件中确定如下值:ROMSTART、ROMWIDTH、ROMSIZE

          那么nk.bin是如何生成的?

         

    Romimage.exe is a locator application that creates Windows CE binary image (.bin) files, usually limited to a single file called Nk.bin. This means that Romimage

    • Reads Ce.bib to determine which %_FLATRELEASEDIR% binaries and files to include in the run-time image.
    • Assigns physical memory addresses to these binaries and files. (这部是如何实现的?)
    • Creates the run-time image Nk.bin.

    For more information about Ce.bib, see Make Binary Image Tool.

         最近想搞multi bin后来发现我的bootloader是优龙的,不支持binfs分区格式化, 我想把eboot下的代码移植过来,应该可以的。

    但是我对则个binfs有点疑惑。按照道理说,binfs是针对nk.bin的,但是我们下载的时候却是nk.nb0,有些人下载nk.bin,但是下载完还是要解压成nk.nb0的。
    我想问,binfs是怎么和nk.nb0联系起来的?
    ==============================来看看bin文件的格式=========================

    一个bin 文件在存储上是按下面的结构存储的

         组成:标记(7)+Image开始地址(1)+Image长度(1) 
               记录0地址+记录0长+记录0校验和+记录0内容(文件内容)
            记录1地址+记录1长+记录1校验和+记录1内容(文件内容)
               ......
         最后一条记录是表示结束,Start = 0x00000000, Length = 0x8C072C3C是StartUp地址, Chksum = 0x00000000

         bin 文件的头部(不包括记录)可以用下面的结构表示
          struct BinFile{
                      BYTE signature[7]; // = { ''B'', ''0'', ''0'', ''0'', ''F'', ''F'', ''\a'' }
                      DWORD ImageStart
                      DWORD ImageLength
                };


    一般xipkernel.bin,nk.bin 都符合正常bin文件格式,包含记录开始0,1,2 记录为特殊记录,2做为cece的标记,其后4byte表示 TOC地址(指向ROMHDR结构的数据),3记录开始都是文件记录,
    ———但是,我们实际用到却是nk.nb0文件,这个文件才是和文件系统帮顶起来的。我等下要找出他的格式来。先去吃午饭。

    再借别人的解释

            首先,NK.BIN中的内容是被压缩过的,NK.NB0中的内容是没有压缩的。 两者大小的区别是因为在生成过程中BIN会将你设定的后面的NULL自动去掉,而NB0就不会。

            现在来用微软自带工具来看看这两个文件的格式到底有什么不同。

    这幅图结合上面的解释可以知道,这个NK.bin文件的标志是BOOOFF,nk.nb0是没有这个标志的,要知道具体的信息,还是看MSDN好。

    At   the   end   of   the   boot   loader   development   process   described   in   the   topic   How   to   Develop   a   Boot   Loader,   you   will   have   two   different   binary   images   for   the   boot   loader:   a   .bin   file   and   an   .nb0   file.   The   Microsoft   Windows®   CE   binary   image   data   format   (.bin)   file   is   the   most   common   format   for   Windows   CE   binary   images.   It   is   a   binary   file   that   consists   of   a   number   of   individual   records   with   associated   per-record   bookkeeping   data.   The   format   is   convenient   for   minimizing   the   amount   of   data   to   be   downloaded   to   the   target   device   by   removing   the   need   to   pad   between   records.   For   more   information   about   the   .bin   file   format,   see   Windows   CE   Binary   Image   Data   Format   (.bin).  
       
      The   .nb0   file   format   is   a   raw   binary   image   of   the   boot   loader.   The   image   is   as   it   appears   in   the   memory   on   the   target   device   and   does   not   contain   the   header   information   that   the   .bin   file   includes.   The   .nb0   file   is   typically   larger   than   the   .bin   file.   The   .nb0   file   is   useful   for   placing   the   initial   boot   loader   image   on   the   target   device.   This   is   usually   done   with   a   built-in   monitor   program   provided   by   the   board   manufacturer.   You   can   also   place   the   initial   boot   loader   image   on   the   target   device   through   a   JTAG   connection   using   a   JTAG   probe.   Once   the   .nb0   image   is   stored   on   the   device,   it   should   be   able   to   download   and   update   itself   using   the   .bin   file   format   from   then   on.  

    我使用的是ADS开发的bootloader,这个bin文件不存在什么段的问题吧,应该和微软不一样的,全局变量的问题在哪里呢?但是现在造成偶尔不能启动是什么原因呢?最后发现又回到了原点。看来ADS下的bin文件格式也要搞清楚才行哦。

  • 相关阅读:
    Add函数求两个数的和,不能使用+号或其它算术运算符
    小刘同学的第八十六篇博文
    小刘同学的第八十五篇博文
    小刘同学的第八十四篇博文
    小刘同学的第八十三篇博文
    小刘同学的第八十二篇博文
    小刘同学的第八十一篇博文
    小刘同学的第八十篇博文
    小刘同学的第七十九篇博文
    小刘同学的第七十八篇博文
  • 原文地址:https://www.cnblogs.com/gooogleman/p/1869760.html
Copyright © 2020-2023  润新知