zoukankan      html  css  js  c++  java
  • 【原创】关于WinCE中config.bib的问题

    这两天在看关于bootloader的事情。以前的同事提到开机速度的问题,顺便也就提到了nk的大小的问题。这一连串的事情使得想回头再看看config.bib的事情。这篇文章也算来总结下。也接触过一些ARM的芯片以及对应的BSP包。config.bib文件在msdn上一段解释如下:

    The Config.bib file is the first place to declare how much memory will be made available to the kernel. A single entry is required and should indicate the default amount of RAM that is possible for the device.

    所以我们可以了解到config.bib的作用。接下来我们还是用实际的例子来做解释。例如,本人现在在使用A公司的芯片,该公司的image采用的是XIP的模式,他们BSP包中的config.bib中列出了xip中所设计内容的分配,具体如下:

    XIPKERNEL     80200000  00400000  RAMIMAGE
      NK                  80600000  03400000  NANDIMAGE
      CHAIN               83a00000  00001000  RESERVED

    我们来做一个简单的加减法,

    00400000+03400000+00001000 = 3801000 = 58724352

    这里大家晕了。3801000 = 58724352 其中 0x3801000 = 58724352Byte = 58M左右。

    呵呵。这下子就看懂了吧。然后我回头来看最终烧录到flash中的xip.nb0文件,就是58M。

    这个是一个非主流ARM的image。那我们在回头来看看2440是个什么样子的。

    本人手头上有个一个mini2440的板子,现在更新到最新的bsp wince5.0的。我们一起来看看他的config.bib片段。在这里mini2440采用的是nk.bin烧录的形式。原厂提供的nk.bin的大小是25M。好了。我们迫不及待的去看config了。下面是mini2440的config片段:

    MEMORY
        NK      80200000  01E00000  RAMIMAGE
        RAM     82000000  01E00000  RAM

    我们在来做一个进制转换01E00000  = 31457280 31M. 这里为什么会不一样了呢,我们在看看nk.nb0文件,是30.7M多。这里需要解释的是这两个文件的区别了:

    nk.bin和nk.nb0都是CE的镜像。然而,我们在下载的过程中常常会遇到,有时候下载nk.bin,有时确是下载nk.nb0,这两者到底有什么区别呢?
    首先,NK.BIN中的内容是被压缩过的,NK.NB0中的内容是没有压缩的。
    两者大小的区别是因为在生成过程中BIN会将你设定的后面的NULL自动去掉,而NB0就不会。
    NB0的大小就是第三个变量ROMSIZE所设置的大小。
    由于nk.nb0是非压缩的数据,里面的数据就是NK展开以后在内存里面的数据。
    而nk.bin是有压缩的数据,里面的数据是压缩以后类似于成块形的数据,被loader拷贝到内存以后没有区别。
    由于bin文件需要解压,因而其下载方式也不一样,
    通常,通过串口直接下载用nb0,pb下载用bin。
    其次,nk.nb0是可以直接烧到FLASH/ROM中的,是代码镜像,可以直接跳转到其入口执行。
    而nk.bin是Microsoft binary image格式的文件,必须按其格式定义解开到其指定的地址空间的位置才能执行。

    这是老生常谈了。我们赶紧看看文章中提及的ROMSIZE。ROMSIZE=01e00000。果不其然。

    这一下我们了解了两个知识。一个是config.bib的问题,一个是nk.bin/nb0的问题

    下面大家一起来分析一个问题,例如,我用过的S社现在也就是S&C社的一颗ARM芯片。下面我给出它的conifg片段,大家算算他的xip.nb0的大小,猜猜他nk.bin可能的大小:

     

        TINYNK        8CE50000        00600000        RAMIMAGE
        DRIVERS     82000000        00200000        NANDIMAGE
        NK          82200000        01D00000        NANDIMAGE

    答案很简单了。这里大家自己算算就好了。

  • 相关阅读:
    suse12安装详解
    Centos7上部署openstack mitaka配置详解(将疑难点都进行划分)
    菜鸟帮你跳过openstack配置过程中的坑[文末新添加福利]
    openstack中dashboard页面RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
    Multiple network matches found for name 'selfservice', use an ID to be more specific.报错
    查看 SELinux状态及关闭SELinux
    SELinux深入理解
    IP地址、子网掩码、网络号、主机号、网络地址、主机地址
    Oracle job procedure 存储过程定时任务
    POI文件导出至EXCEL,并弹出下载框
  • 原文地址:https://www.cnblogs.com/mercuryxu/p/1626761.html
Copyright © 2011-2022 走看看