1.       NK.bin

Bin:Microsoft Windwos CE binary image data format(.bin)文件格式中包含若干个独立的记录(record),以记录(record)为单位来组织数据,每个record都包含了起始地址,长度,检验码和这个record中包含的数据内容,Platform Builder调用工具RomImage.exe将WINCE内核所有文件以bin格式合并成一个文件(至于RomImage.exe是怎么合成NK.bin的,后面需要好好深入了解),默认文件名为nk.bin。BootLoader又以同样的格式将nk.bin分解成多个文件放到RAM中,NK.bin这个文件在存储上是按照下面的结构来存储的:

标记(7)

Image开始地址(1)+Image长度(1) 
记录0地址+记录0长+记录0校验和+记录0内容(文件内容)

记录1地址+记录1长+记录1校验和+记录1内容(文件内容)

………………………..

也就是

"B000FF/x0A" //7 字节大小

ImageStartAddress, ImageLength //8 字节大小

RecordAddress, RecordLength, RecordChecksum, Data…….// module/file toc 信息

RecordAddress, RecordLength, RecordChecksum, Data…// modulese 信息

RecordAddress, RecordLength, RecordChecksum, Data…// files 信息

RecordAddress, RecordLength, RecordChecksum, Data 为 0x43454345 // ROM signature

RecordAddress, RecordLength, RecordChecksum, Data 为 0x43454345 // TOC pointer

RecordAddress, RecordLength, RecordChecksum, Data 为 0x43454345 // copylist 信息

RecordAddress, RecordLength, RecordChecksum, Data 为 0x43454345 // romhdr 信息

………………………………

0x00000000 , JumpAddress , 0x00000000 // 启动地址startup 地址

请注意,最后的record的jumpAddress是OAL层的startup函数的地址,这个函数在/Src/Oal/Oallib/startup.s中定义,通过viewbin –r nk.bin可以看到nk.bin的组织格式:

………………………………….

可以知道OAL层的startup函数的地址是0x802C1AF8

我们在download NK.bin的时候,先是读取出magic number(也就是"B000FF/x0A"),用来判断download的是什么样格式的NK(在这里是bin格式的),接着读取出NK.bin的image start地址及image length,然后就是接下来以record的格式来读取record的数据到RAM中。Bin文件格式可以使得映像文件最下,加载时间短,但需要bootloader给予解释加载才能运行,这个解析的工作是在DownloadBin函数中进行的。

2.       NK.nb0

Nb0:nb0文件就是可执行映像的原始Flash映像,它不包括头,一般情况下将内核下载到设备的RAM中运行都采用nb0格式,nb0文件的尺寸比bin大,但是可以直接运行,要生产NK.nb0,就需要在congfig.bib中加入下面的内容

ROMSTART = 80200000

ROMWIDTH = 32

ROMSIZE = 02300000

ROMSTART指WINCE image在内存中的起始地址,ROMWIDTH指数据总线的宽度,ROMSIZE指WINCE image的大小。现在我们的系统的NK.bin大小是26889KB,生成的NK.nb0大小为

现在我们设置ROMSIZE=01A00000,NK.bin=26889KB > 01A0000(26MB),也就是说如果WINCE image大小大于ROMSIZE指定的大小的时候,除了生成NK.nb0之外还会生成NK0.nb1,NK.nb2,….,下图是ROMSIZE=01A00000设置时生成的NK.nb0及NK.nb1的大小和ROMSIZE(01A00000)指定的大小一致的。

而如果把ROMSIZE=00800000时,生成的文件如下:

NK.nb0=NK.nb1=NK.nb2=NK.nb3=8192KB,也就是0x800000,所以从中可以看出NK.nbn的大小时由ROMSIZE来指定的。

如果把ROMSIZE=01B00000时,这时NK.bin=26889KB< 01B0000(27MB),所以只要生成的WINCE image大小小于ROMSIZE指定的大小的时候,就只会生成NK.nb0,见下图:

3.       NK.bin和NK.nb0的区别

NK.bin和NK.nb0的区别主要有以下这些区别:

⑴NK.BIN中的内容是被压缩过的,而NK.NB0中的内容是没有压缩的,两者大小的区别是因为在生成过程中BIN会将设定的后面的NULL自动去掉,而NB0就不会。由于NK.NB0是非压缩的数据,里面的数据就是NK.BIN展开以后在内存里面的数据。而NK.BIN是有压缩的数据,里面的数据时压缩以后类似于record的数据,被loader拷贝到内存以后没有区别,由于BIN文件需要解压,因而其下载方式也不一样,通常,通过串口直接下载nb0,pb下载用BIN。

⑵NK.BIN和NK.NB0都可下载到RAM中,如果下载到RAM的是NK.BIN文件,因为是压缩的,显然需要先通过bootloader进行解压才能往NAND Flash中烧写。而如果下载到RAM中的NK.NB0就不需要解压了,可以直接烧写到NAND Flash即可。

⑶NK.NB0就是NK.BIN展开后的文件,bootloader可以支持下载NB0,也可支持下载BIN,一般的做法是对于NB0的文件下载到RAM后就直接烧写到NAND Flash中,对于BIN的文件下载后先解压然后再烧写到NAND Flash上,其实也可以做成BIN烧写到NAND Flash中,然后启动的时候load出来后再解压,但这样会加长启动时间,这种方法一般只会用在NAND Flash空间不够的情况。

4.

NK.bin和NK.nb0学习相关推荐

  1. nk.bin和nk.nb0

    nk.bin和nk.nb0都是CE的镜像.然而,我们在下载的过程中常常会遇到,有时候下载nk.bin,有时确是下载nk.nb0,这两者到底有什么区别呢? 首先,NK.BIN中的内容是被压缩过的,NK. ...

  2. NK.bin和NK.nb0详解

    1.       NK.bin Bin:Microsoft Windwos CE binary image data format(.bin)文件格式中包含若干个独立的记录(record),以记录(r ...

  3. NK.bin与NK.nb0格式

    转自: http://hi.baidu.com/luckdst/item/8b893ec69622a863f6c95d36 NK.bin与NK.nb0格式 借用别人的解释:这里提到的bin是一种二进制 ...

  4. WinCE NK.bin与NK.nb0

    in config.bib(应为boot.bib?) , set    ROMSTART=xxxx    ROMWIDTH=xxxx    ROMSIZE=xxxxxx 这3个变量必须被赋值. 可以参 ...

  5. 如何将nk.bin转换成nk.nb0

    1.进入目录,该目录含有viewbin与nk.bin C:>viewbin nk.bin ViewBin... nk.bin Image Start = 0x00220000, length = ...

  6. 如何导出NK.bin中的内容

    如何导出NK.bin中的内容 收藏 需要的工具:1.viewbin和cvrtbin:这两个是PB自带的工具,在\PUBLIC\COMMON\OAK\BIN\I386目录下. 2.dumprom:网上下 ...

  7. WinCE中命令行工具Viewbin简介(查看nk.bin中包含的文件)

    Viewbin是微软提供的一个命令行工具,在WinCE5.0和WinCE6.0中,可以在"/WINCE600/PUBLIC/COMMON/OAK/BIN/I386"找到他.View ...

  8. 深入理解.bin文件和.nb0文件的结构

    .bin文件是一个描述性质的映像文件,它由文件头(head).镜像数据目的起始地址(ImageStart).镜像数据长度(ImageLength)和多条相对独立的记录(record)构成. 文件头(h ...

  9. wince7下将NK.bin文件转为NK.nb0

    NK.bin文件和NK.nb0文件区别: 1.NK.bin中的内容是被压缩过的,NK.nb0中的内容是没有压缩过的. 2.NK.nb0的大小由C:\WINCE700\platform\ZYNQ7000 ...

最新文章

  1. 【力扣网练习题】整数反转
  2. 在读研、竞赛和实习中追求平衡
  3. B-Tree与B+Tree的区别
  4. python如何高效办公_Python教你高效办公,自制屏幕翻译工具
  5. 面向对象程序设计要考虑的7个原则
  6. 开发指南专题一: JEECG微云快速开发平台前言
  7. linux 脚本返回值
  8. SPOJ DISUBSTR Distinct Substrings 后缀数组
  9. 计算机系统日志指什么内容,系统日志
  10. Rect类基本函数使用
  11. UE4 layered blend per bone 节点详解
  12. 如何抓取图片php,PHP网络爬虫之图片抓取
  13. Vue基础渲染及修饰符
  14. 02.图像分类任务介绍线性分类器(上).1080P
  15. 分布式系统概念和设计-操作系统中的支持和设计
  16. Formality笔记
  17. 在移动硬盘里移动视频文件到移动硬盘 另外一个文件夹 显示正在计算_稳定可靠的数据之仓 柯达X200 SSD固态移动硬盘体验评测...
  18. 错误ID:10005,错误信息:DCOM 遇到错误“无法启动服务,原因可能是它被禁用或与它相关联的设备没有启动。 ”,试图以参数“”启动服务 SENS 以运行服务器:...
  19. ajax 传对象数组到后台
  20. cannot find module ‘xxx‘ 解决办法

热门文章

  1. 051_Unicode字符官方标准二
  2. python修改linux网卡信息,linux下修改网卡接口名称
  3. python重命名文件或目录_Python重命名多个文件的实例方法
  4. mysql 创建用户 %_mysql-创建用户和授权
  5. Google Guava官方教程
  6. 自定义控件:侧拉删除
  7. oracle11g中rman基本使用方法
  8. CAD2019软件安装教程
  9. 开关电源反馈环路设计matlab,开关电源控制环路设计(初级篇).pdf
  10. Day3-springmvc注解的方式进行跳转的配置