WinCE EBOOT中的BootPart分析

应该说BootPart算是微软提供的一个用于分区的模块,可以在EBOOT中使用。不过说实话,我很少使用它,知道有些厂商的BSP里面支持这个功能,而且也算是EBOOT的一部分,所以还是介绍一下。先看一下架构,如图:

 

EBOOT中,BLCOMMON处于最上层,这个在以前已经介绍过,BootPart模块会被OEM函数来调用,而BootPart模块要操作存储设备需要Flash Driver的支持。这里要说的是Flash Driver是指WinCE下的Flash驱动,也就是FMD_xxx接口的驱动。所以要使用BootPart模块,首先要有Flash的驱动的支持。BootPart模块在”/WINCE600/public/common/oak/drivers/ethdbg/bootpart”下面可以找到源代码,主要的实现都在bootpart.cpp中。Bootpart模块主要提供对Flash设备的分区功能和对BinFS的支持。下面介绍一下会用到的函数:

 

1. BOOL BP_Init (LPBYTE pMemory, DWORD dwSize, LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut)

该函数可以说是BootPart模块的初始化函数,看看代码就知道他会调用FMD_Init来初始化Flash设备并初始化一块内存。该函数一般会在OEMPlatformInit函数中被调用。pMemory指向一块内存来存放MBR信息,dwSize为内存的大小,lpActiveRegpRegInpRegOut会被FMD_Init用到,一般可以设置为NULL

 

2. BOOL BP_LowLevelFormat(DWORD dwStartBlock, DWORD dwNumBlocks, DWORD dwFlags)

该函数用于低级格式化,它会格式化Flash设备中的Block,重新创建MBR并将MBR存到第一个Blockd的第一个扇区中。dwStartBlock为起始BlockdwNumBlocks为多少个BlockdwFlags为格式化标记位,表示采用何种格式化方式。该函数会根据需要来由EBOOT中的函数调用。

 

3. PPARTENTRY BP_GetPartitionInfo (HANDLE hPartition)

该函数用于获得某个分区的信息。hPartition为某一个分区的句柄,返回相应的分区信息。

 

4. HANDLE BP_OpenPartition(DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwCreationFlags)

该函数用于打开或者创建一个分区,可以通过该函数在Flash设备上面创建分区。dwStartSector为起始逻辑扇区,dwNumSectors为该分区中包含多少个扇区,dwPartType表示分区的类型,fActive为是否是激活分区,dwCreationFlags表示是创建分区还是打开分区,执行成功后返回该分区的句柄。

 

5. BOOL BP_WriteData(HANDLE hPartition, LPBYTE pbBuffer, DWORD dwLength)

该函数负责向某一个分区写入数据,一般EBOOT可以通过这个函数将WinCE image写入分区中。hPartition为被创建的分区的句柄,pbBuffer为要写入数据的BufferdwLength为要写入数据的长度。

 

6. BOOL BP_ReadData(HANDLE hPartition, LPBYTE pbBuffer, DWORD dwLength)

该函数负责从一个分区中读出数据,EBOOT可以通过这个函数将WinCE image读到RAM中。hPartition为被创建的分区的句柄,pbBuffer为要读出数据的BufferdwLength为要读出数据的长度。

 

7. BOOL BP_SetDataPointer (HANDLE hPartition, DWORD dwAddress)

该函数用于设置某一个分区的数据指针,实际上数据指针是指在该分区中下一次被读或写的位置。一般会配合BP_ReadData(..)BP_WriteData(..)两个函数来用。hPartition为被创建分区的句柄,dwAddress为数据指针的新位置。

 

 

一般比较常用的就是这些函数。最后简单总结一下,微软提供的这个模块主要是用于在Flash设备上进行分区,或者说就是帮助我们来对Flash进行Layout。在EBOOT中要使用它,首先要实现Flash的驱动才可以。其实看看代码就会发现,这些函数无论是创建MBR,还是创建分区,本质上就是在Flash里面写了一些标记性信息,封装了一些函数给用户使用。我很少使用BootPart模块,更习惯整个Flash都由自己来管理,感觉更清楚些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】语义化版本 2.0.0

转自:语义化版本 2.0.0 | Semantic Versioning 语义化版本 2.0.0 摘要 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的 API 修改,次版本号:当你做了向下…

心情随笔

不好意思,在这里又要让大家听我的牢骚了,但是我实在是没有地方可以发泄,所以只好对不起大家了,在近两个月的找工作历程中心智成熟了很多,同时言语也少了很多,知道没有用的话是白费口舌所以很少发表自己的意…

wince编译问题

一般来说,在VS2008中修改注册表文件,不需要从新编译内核,只需要copy files to release directory和make run-time image即可。但发现不好用,暂时不知道为什么。 看了看BSP目录下的文件,手动修改了X:\WINCE600\PLATFOR…

【转】Ubuntu:永久修改MAC地址

转自:Ubuntu:永久修改MAC地址 - YeeYang - BlogJava 前面发了一篇文章:Ubuntu:修改网卡的MAC地址,最后提到了重启后MAC地址会还原的问题,本文将介绍如何永久修改MAC地址(当然不能重装系统&#…

陌生的是人心,是人性,是社会,是世道

偶然中得到这样一本书,它是一本都市小说,写自己的经历,不是很乏味的经历;它是一本职场小说,有着对每个人的、不同侧重点的、外表及心理刻画,披露了鲜为人知的职场黑幕;它又是一本悬疑小说&#…

【转】PF_INET 和 AF_INET 的区别

转自:PF_INET 和 AF_INET 的区别 - 52php - 博客园 在写网络程序的时候,建立TCP socket: 1 sock socket(PF_INET, SOCK_STREAM, 0); 然后再绑定本地地址或连接远程地址时需要初始化sockaddr_in结构,其中指定address family时一…

可以让你少奋斗10年的工作经验

第一:不要认为停留在心灵的舒适区域内是可以原谅的。     每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰,不愿意被push,不愿意和陌生的面孔交谈,不愿意被人指责,不愿意按照规…

【转】PF_RING学习笔记

转自:Qt迭代器(Java类型和STL类型)详解 1、PF_RING简介 PF_RING是Luca研究出来的基于Linux内核级的高效数据包捕获技术。简单来说PF_RING 是一个高速数据包捕获库,通过它可以实现将通用 PC 计算机变成一个有效且便宜的网络测量工具箱,进行数…

WinCE系统的编译过程详解

在WinCE系统中,当我们完成了相关的开发和系统定制工作以后,会编译WinCE系统,最后生成NK.bin和NK.nb0。下面介绍一下WinCE系统的编译过程,大致分为4个阶段:编译阶段(Compile phase),系统产生阶段(Sysgen pha…

使用HtmlParser解析HTML

如果要对HTML进行解析,提取HTML的数据或者修改HTML数据,HtmlParser是一个不错的选择.使用HtmlParser可以解析本地和网络上的HTML数据:Parser parser newParser( newWinista.Text.HtmlParser.Http.HttpProtocol(newUri("uriString")));Parser parser newParser( newWi…

【转】VScode快捷键(超无敌详细版)

转自:VScode快捷键(超无敌详细版)_但行好事,莫问前程-CSDN博客 通用快捷键: 快捷键作用CtrlShiftP,F1展示全局命令面板CtrlP快速打开最近打开的文件CtrlShiftN打开新的编辑窗口CtrlShiftW关闭编辑器 基础编辑快捷键: 快捷键作用…

WinCE中得Catalog Items前的标记图标的意义总结

先看下来自微软对Platform Builder里的图标解释,在以后的CE里,也类似。 The Catalog window and the OSDesignView tab contain a number of icons used to represent object types. The icons make it possible for you to differentiate between Catal…

JavaScript 图片上传预览效果

图片上传预览是一种在图片上传之前对图片进行本地预览的技术。 使用户选择图片后能立即查看图片,而不需上传服务器,提高用户体验。 但随着浏览器安全性的提高,要实现图片上传预览也越来越困难。 不过群众的智慧是无限的,网上已经有…

【转】GigE Vision简介

转自:GigE Vision简介_计算机视觉小菜鸟的专栏-CSDN博客_gige vision GigE Vision是由AIA制定的通信协议,用来实现在机器视觉领域利用千兆以太网接口进行图像的高速传输。该标准是基于UDP协议,与普通网络数据包不同之处在于应用层协议&#…

如果C++程序要调用已经被编译后的C函数,该怎么办?

C语言支持函数重载,C 语言不支持函数重载。函数被C编译后在库中的名字 与C 语言的不同。假设某个C函数的声明如下: void foo(int x, int y); 该函数被C编译器编译后在库中的名字为_foo,而C编译器则会产生像_foo_int_int之类的名字用来支持函数…

在Sql Server 2005使用公用表表达式CTE简化复杂的查询语句

公用表表达式CTE是Sql Server 2005引入的一种新的表表达式。CTE在许多方面都类似于派生表。逻辑上CTE是一个临时结果集,它仅仅存在于它发生的语句中。您可以在SELECT、INSERT、DELETE、UPDATE或CTEATE VIEW语句中建立一个CTE。 CTE的优点 与派生表不同,C…

【转】搞机:window10安装Linux子系统(WSL)及迁移到非系统盘

转自:搞机:window10安装Linux子系统(WSL)及迁移到非系统盘_泛泛之素-CSDN博客_wsl移动到非系统盘 痛点: 在电脑上想要使用linux又想使用windows系统只能安装双系统,因为虚拟机的性能差且使用麻烦&#xf…

关键字static、const、volatile的作用

关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1、在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2、 在模块内(但在函数体外&…

IE8中解决Cell华表插件不显示方法!

最近一不小心更新了IE,从IE7一跃变成了IE8用户,但网上目前对IE8的评价不是很好,有很多东西不兼容,尤其是在IE7下开发的系统不兼容的地方还是存在的。就Cell来说也是一样的,调试好久,虽然没找到原回&#xf…

【转】CMake Error: The current CMakeCache.txt directory CMakeCache.txt is different than the directory

转自:CMake Error: The current CMakeCache.txt directory is different..._万俟淋曦的进击手记-CSDN博客 零、问题描述 开始学ROS时,需要编译别人的功能包,常常把别人的工作空间拿过来使用,但编译时会出现各种错误,如…