请教:BinFS相关的问题

fishly_0 2007-10-27 09:48:45
只知道BinFS是由Romimage.exe产生的用于读取.bin文件的一种文件格式. 那么在WinCE里面的什么地方要用到BinFS, 我们的nk.bin就是存在在BinFS里的吗? BinFS跟普通的FAT文件系统有什么区别呢?我只知道用nandflash作为引导的时候,第一个块存放nboot,第二个块存放TOC,第三个块放eboot,那么接下去就是存放nk.bin的BinFS分区,然后再接下去是用户可以存放文件的FAT文件系统吗? 知道的帮忙解答下了^_^
...全文
919 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwillbeback008 2009-01-03
  • 打赏
  • 举报
回复
想看看BP_Init()函数的具体功能,结果来到这里,路过学习了!
gooogleman 2008-10-16
  • 打赏
  • 举报
回复
俺也经历了你的历程。唉,继续文件系统。
gooogleman 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yashi 的回复:]
binFS就是直接把原始的2进制文件按顺序存放在煤质上,它和FAT的区别太大了。
[/Quote]

的确是这样的。学习了
slyzhang 2007-10-29
  • 打赏
  • 举报
回复
关于 FAT 肯定是在这个配置以后了。。
有操作系统来进行配置, 也许这个时候就用到了 loader.h 中关于 NKLEN的 配置了吧。
slyzhang 2007-10-29
  • 打赏
  • 举报
回复
1.要分析 BINFS 的最好办法莫过于 分析原代码
2、先看 Loader.h

//
// OEM Reserved (Nand) Blocks for TOC and various bootloaders
//

// NAND Boot (loads into SteppingStone) @ Block 0
#define NBOOT_BLOCK 0
#define NBOOT_BLOCK_SIZE 1
#define NBOOT_SECTOR BLOCK_TO_SECTOR(NBOOT_BLOCK)

// TOC @ Block 1
#define TOC_BLOCK 1
#define TOC_BLOCK_SIZE 1
#define TOC_SECTOR BLOCK_TO_SECTOR(TOC_BLOCK)

// Eboot @ Block 2
#define EBOOT_BLOCK 2
#define EBOOT_SECTOR_SIZE FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE)
#define EBOOT_BLOCK_SIZE SECTOR_TO_BLOCK(EBOOT_SECTOR_SIZE)
#define EBOOT_SECTOR BLOCK_TO_SECTOR(EBOOT_BLOCK)

#define NK_BLOCK (EBOOT_BLOCK+EBOOT_BLOCK_SIZE)
#define NK_BLOCK_SIZE (31*1024*1024/512/32+1)

#define RESERVED_BOOT_BLOCKS (NBOOT_BLOCK_SIZE + TOC_BLOCK_SIZE + EBOOT_BLOCK_SIZE)

// Images start after OEM Reserved Blocks
#define IMAGE_START_BLOCK RESERVED_BOOT_BLOCKS
#define IMAGE_START_SECTOR BLOCK_TO_SECTOR(IMAGE_START_BLOCK)

也许这里确定了 启动的Loader部分的分区情况。

3.在 BOOL OEMPlatformInit()中的
// Try to initialize the boot media block driver and BinFS partition.
//
if ( !BP_Init((LPBYTE)BINFS_RAM_START, BINFS_RAM_LENGTH, NULL, NULL, NULL) )
{
EdbgOutputDebugString("WARNING: OEMPlatformInit failed to initialize Boot Media.\r\n\r\n");
g_bBootMediaExist = FALSE;
}
else
g_bBootMediaExist = TRUE;


// Try to retrieve TOC (and Boot config) from boot media
//
if ( !TOC_Read( ) ) {

// use default settings
TOC_Init(DEFAULT_IMAGE_DESCRIPTOR, (IMAGE_TYPE_RAMIMAGE|IMAGE_TYPE_BINFS), 0, 0, 0);
}


4.在 /*
@func BOOL | WriteRegionsToBootMedia | Stores the image cached in RAM to the Boot Media.
The image may be comprised of one or more BIN regions.
@rdesc TRUE = Success, FALSE = Failure.
@comm
@xref
*/
BOOL WriteRegionsToBootMedia(DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr)
{
中,
我们看到了创建:
hPart = BP_OpenPartition( (IMAGE_START_BLOCK+1)*PAGES_PER_BLOCK, // next block of MBR
SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(dwBINFSPartLength))*PAGES_PER_BLOCK, // align to block
PART_BINFS,
TRUE,
PART_OPEN_ALWAYS);

也许所有的 以后的nk.bin数据都是从这个地方开始的吧。



和大家一起学习。。。
fishly_0 2007-10-29
  • 打赏
  • 举报
回复
请问yashi的,是否nk一定要放在BinFS里. 我在bsp的相关代码里,都没有找到这部分.能说下代码哪部分有创建BinFS分区吗. 网络上讲FAT基本都是说点皮毛BinFS基本没什么资料,yashi你有没有相关的一些资料能否发些给我,大致能建立一下概念就可以了,或者介绍一些这也的论坛也可以,我的邮箱chenyihuaz@163.com,谢谢了.
fishly_0 2007-10-29
  • 打赏
  • 举报
回复
多谢slyzhang,我去研究下这个代码^_^
大家还有什么资料多发写上来,谢谢了^_^
fishly_0 2007-10-27
  • 打赏
  • 举报
回复
在WinCE的什么地方可以找到BinFS的相关信息呢?
在网上找到了这么一段话:
WinCE的Flash分区大体分为Nand BootLoader(NBL)区,Binfs区和文件区,NBL区存放BootLoader和烧写Image的工具程序,Binfs分区存放MBR、image的XIPKERNEL.bin、Chain.bin和NK.bin等OS的数据。文件区一般格式化为FAT分区让WinCE上层的磁盘和分区管理程序管理。Flash的分区是由UT在烧入image的时候决定的,包括每个分区的起止块地址,分区的大小和类型等。

难道nandflash的分区是UT在烧写image的时候决定的?UT是什么啊?我都是用dnw烧写nboot,eboot的。晕死了,真是感觉越问越不懂.
yashi 2007-10-27
  • 打赏
  • 举报
回复
binFS就是直接把原始的2进制文件按顺序存放在煤质上,它和FAT的区别太大了。

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧