WINCE应用BINFS
********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
时间:2012.03.02
类别:WINCE系统开发
********************************LoongEmbedded********************************
1. BINFS概述
BINFS(Binary ROM Image File System)是可以读取由Romimage.exe生成的.bin文件的二进制ROM镜像文件系统。.bin文件格式以具体的section来组织数据,每section有一个section头,此部分包含这section的开始地址、长度和检验码,见下图:
图1
Romimage.exe把逻辑section,比如一个应用程序的text或是.data区域的数据写到.bin文件中。
为了能在块驱动(block driver)的上层加载BINFS,我们必须在storage profile注册表项下面加入(enter)块驱动相应的注册表键,如下所示,下面的示例注册表信息表示我们可以增加自己块驱动的storage profile来指定BINFS为默认的文件系统。
; Bind BINFS to the block driver
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFlash]
"DefaultFileSystem"="BINFS"
"PartitionDriver"="mspart.dll"
"AutoMount"=dword:1
"AutoPart"=dword:1
"MountFlags"=dword:11
"Folder"="ResidentFlash"
"Name"="Samsung Flash Disk"
"BootPhase"=dword:0
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFlash\BINFS]
"MountHidden"=dword:1
"MountAsROM"=dword:1
2. 如何应用(implemnet)BINFS
我们可以应用BINFS在NAND或NOR闪存上来读取.bin文件。BINFS为最终的用户(end user)解析每个区域(比如xipkernel,nk.bin).bin文件的记录(record),为了使用BINFS,我们必须在bootloader中增加multi-bin区域技术,初始之外,还需要对config.bib文件进行必要的修改,从而使BINFS可以正确读取我们的运行时镜像文件。
为了应用BINFS,必须做下面的处理:
2.1 在bootloader中增加对BINFS的支持
如果一个bootloader包含对BINFS的支持,那么bootloader能够分区、格式化和写数据到存储介质中。Bootloader使用Bootpart库(bootpart.lib)来向闪存写数据和创建分区,在同一个储存设备中需要创建BINFS和其他文件格式(比如是FAT)的分区。Bootloader使用Bootpart库中的BP_OpenPartition()函数来创建BINFS分区和扩展分区。因为一旦Bootpart库对闪存进行了分区,那么OS就不能修改MBR(master boot record),所以OS需要这个扩展分区来创建一个或多个数据分区。
Bootpart库能够创建一个保存引导参数(boot parameter)的引导分区,闪存的块包含MBR扇区(sector)、BINFS存储区域、引导参数分区(根据需要来决定,可选)和扩展分区,如下图:
图2
BIFS和引导参数分区是只读,所以不能被格式化或删除。
对于bootloader,Bootpart使FMD(flash media driver)的代码比较抽象,这样使得bootloader创建一个分区和指定分区中的数据偏移量就可以进行读或写了,另外Bootpart还可以对闪存进行低层格式化(low-level format)。
2.2 修改config.bib的MEMORY部分来支持BINFS
为了应用BINFS,我们必须安装下面的步骤来config.bib下面的内容:
⑴ 加扩展区域(这里是指NK.bin,也即除了最小内核xipkernel.bin之外的其他OS部分)并且设置其类型为NANDIMAGE,这样可以防止把扩展区域的地址空间分配为RAM,config.bib中的示例配置如下图所示:
图3
镜像内核xipkernel为RAMIMAGE,见图3,xipkernel区域是为支持BINFS能够读取存储器上BINFS分区数据所需要的最小内核。因为这个内核必须存在于(reside in)RAM中和它是RAMIMAGE类型,所以包含在典型的情况下,xipkernel区域包含内核所需要的文件,而且xipkernel区域(xipkernel.bin)中必须包含下面的模块:
? Nk.exe
? Kernel.dll
? Coredll.dll
? K.coredll.dll
? Oalioctl.dll
? Filesys.dll
? Fsdmgr.dll
? Mspart.dll
? Romfsd.dll
? Binfs.dll
? Default.fdf or boot.hv
? Fpcrt.dll (ARM-only)
? Ceddk.dll (if required by your flash driver)
? Your flash driver
⑶如果我们的flash驱动被设备管理器加载,那么还需要增加device.dll、devmgr.dll、regenum.dll、busenum.dll和pm.dll到xipkernel中。
⑷如内核支持KITL,那么也需要把kitl.dll包含进来。
⑸如要支持debug,需要增加hd.dll、osaxst0.dll和osaxst0.dll到xipkernel。
⑹把其他剩下部分(remaining items)包含到扩展区域(nk.bin)。
2.3 修改config.bib的CONFIG部分来支持BINFS
config.bib中CONFIG部分必须指定RAM_AUTOSIZE=OFF和ROM_AUTOSIZE=OFF,XIPSCHAIN的值表示chain区域(chain.bin)的起始地址,这个值必须要和MEMORY部分指定的值一致,我们的BSP包中config.bib这部分内容如下:
图4
2.4 修改common.bib文件
如果我们的OS支持用户模式驱动(User Mode Drivers),要修改common.bib文件中驱动模块为非页对齐的(non-pageable)。WINCE6.0支持设备驱动运行在用户模式下,可是,如果导出PowerUp或PowerDown函数的用户模式驱动和驱动代码要求页对齐(demand-paged), BINFS分区中有这种类型的驱动,或是这种类型驱动在.bib文件的FILE部分,或是这种驱动保存在外部存储器中(external storage),这些情况都会发生页缺陷出错(a page fault error may occur)。
为了在BINFS中支持用户模式驱动,我们必须修改common.bib文件中这些模块的属性,内容如下:
⑴获取需要跟新模块的列表。
使用 findstr /m “PowerDown” *.map查找导出PowerUp和PowerDown函数的驱动,如下图:
图5
⑵打开common.bib文件。
⑶通过上面命令找到的驱动,然后相应在common.bib文件中添加M标识以表示此模块是非页对齐的(non-pageable),如下所示:
coredll.dll $(_FLATRELEASEDIR)\coredll.dll XIPKERNEL SHM
⑷保存common.bib文件。
另外在common.reg中需要增加下面的内容
[HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable]
"20"="BOOT"
"21"="BINFS"
WINCE应用BINFS相关推荐
- WinCE上BINFS实现详解
网上不少介绍三星24x0系列的BINFS启动方式实现,有些内容上描述的不是非常全面 下面就WinCE6上的BINFS实现,从基本原理到修改BSP,再到如何烧录启动做一个较全面的讲解 一 BINFS到底 ...
- S3c2440A WINCE平台HIVE注册表+binfs的实现
今天最大的收获莫过于把binfs和hive注册表同时在三星的平台上实现了,这可是前无古人啊(只是看到好多哥们说找不到三星的HIVE资料),哈哈哈.怕今天的成果日后成炮灰,还是写下来比较好,要养成这样的 ...
- 在SD/MMC卡上实现hive (Implement WinCE HIVEROM system on NAND or SD system )
本是个很简单的topic,但无奈的是很多客户都没有实现.所以只能写一个guide给客户,让他们依葫芦画瓢. 在SD卡上实现hive以及实现binfs最精髓的思想是,在boot stage 1依次加载s ...
- Wince 中如何实现注册表恢复原厂设置
理论: 使用HIVE注册表,系统在完成了第一阶段也就是加载完了boot.hv+binfs之后和加载系统HIVE注册表之前,filesys.exe都会调用OEMIoControl来查询是否需要清除保存在 ...
- wince中的BSP工程的相关文件介绍
一.pbcxml分析 每一个BSP都有一个工程文件,比如MyBSP.pbcxml,里面描述了BSP的信息.下面就来介绍一下BSP的pbcxml文件. 文件的大致格式应该是这样的: &l ...
- WINCE的BIB文件解析
BIB的全称为Binary Image Builder,在Wince编译过程中的最后MakeImage阶段会用到BIB文件,BIB文件的作用是指示构建系统如何构建二进制映像.所有的BIB文件会被合并成 ...
- WinCE BSP的BIB文件介绍
在WinCE中使用的一个重要的文件就是BIB文件,全称Binary Image Builder File.在WinCE的编译过程中会用到BIB文件,应该是在最后的Makeimg阶段.所有的BIB文件会 ...
- wince中BIB文件的详细介绍
wince中BIB文件的详细介绍 在WinCE中使用的一个重要的文件就是BIB文件,全称Binary Image Builder File.在WinCE的编译过程中会用到BIB文件,应该是在最后的Ma ...
- How to Use Hive-based Registry IN WINCE.NET
摘要: WINCE本身是一个完全在内存中运行的系统.每次启动都需要把NK.BIN拷贝到内存中相对应的地址.这样的系统就不需要了系统维护,但是如何"永久"的保存设置就成了问题.本文将 ...
最新文章
- oracle 删除补全日志组_【REDO】删除REDO LOG重做日志组后需要手工删除对应的日志文件(转)...
- c++ 预处理命令 #undef用法
- Android 的singleLine废弃解决
- CentOS7防火墙firewalld和iptable的设置和使用
- product text的language dropdown list里 没有对应语言的问题
- Apache Spark软件包,从XML到JSON
- free命令里的buffers/cache
- 零基础学python实战-零基础学习python_类和对象(36-40课)
- 《初级会计电算化应用教程(金蝶KIS专业版)》——1.4 会计核算软件
- 3DMAX的渲染后期丨怎么在PS里P出真实感的灯光?
- 微服务学习第四十七节 Nacos一致性协议:Distro协议
- 【Unity】Button基础-按钮更换图片样式
- javaweb+移动端 富文本
- 打印系统开发(63)——C# 实现虚拟打印机 HP Color LaserJet 4500 (2) True Type Font字体显示
- 如何计算机器人的工作范围,如何根据工业机器人的工作范围选择合适的机器人型号?...
- 国庆旅游3天,Python 把我的疲倦治愈了
- 【Mo 人工智能技术博客】基于耦合网络的推荐系统
- 哪些网站帮你打开了新世界的大门
- pixi.js 碰撞检测
- [VulnHub靶机]Lampiao_脏牛提权
热门文章
- 005_Button按钮
- 010_logback中的SocketAppender
- 001_JSON-lib下载和文档
- python开发环境anaconda_搭建Python开发环境,用Anaconda + PyQt + Pycharm
- python selenium 元素定位_python3+selenium入门04-元素定位
- RecyclerView优秀文集
- 互联网项目开始时需要去谈的产品需求分析:
- python全局解释锁_Python GIL 全局解释性锁介绍
- serum血清序列号_图文教程 将serum血清预制导入你的serum
- 二叉树的深度优先搜索c语言,C语言 二叉树按层打印、深度优先遍历、二叉树是否对称...