请教高手,wince5.0不用EBOOT和NBOOT,如何在flash驱动里面实现分区呢?

milanmaldini   2009-6-18 11:07 楼主
我是用UBOOT事先引导的,那么我想实现nand flash分区的话,可不可以在flash的驱动里面实现分区呢?
如果可以的话,那么我该怎么做呢,要改哪些函数呢?请高手指点啊!

回复评论 (30)

估计能做
点赞  2009-6-18 11:13
引用: 引用 1 楼 xqhrs232 的回复:
估计能做

真的啊,那赶紧赐教啊,俺是急性子,来吧,我们就别磨蹭了....呵呵
点赞  2009-6-18 11:38
在驱动分区可以啊。

控制面板的存储管理分区实现就是调用 驱动的啊。

所以都做好了。楼主写一些应用就可以实现了。
点赞  2009-6-18 12:39
引用: 引用 3 楼 gooogleman 的回复:
在驱动分区可以啊。

控制面板的存储管理分区实现就是调用 驱动的啊。

所以都做好了。楼主写一些应用就可以实现了。

谢谢啊,俺现在正在你曾经的帖子里找方法呢
http://topic.eeworld.net/u/20080928/17/506bd2ff-20c0-4104-83ef-c4f02f12828b.html
点赞  2009-6-18 13:44
在http://bbs.driverdevelop.com/htm_data/48/0810/113863.html见到有类似的帖子,uboot引导的nandflash分区问题,有人回答说不行。
没做过这个,也希望有正解供学习,呵呵
点赞  2009-6-23 13:18
一定可以做,我本是身用ads compiler,bootloader是廠商提供的;
目前是用eboot分區,接下來下一步就是要移值到我的bootloader中

簡單來說可以去看open source的部份,或者是BP_Openpartition()這function對你的nand做了什麼
如法泡製即可

在我看來建立FATFS partion僅是寫MBR的16Byte而已,相關的format可以透過CE registry的設定,交給CE自行處理即可

這幾天也要開始試著移值看看,是不是真如我想的如此
点赞  2009-6-23 14:57
只要驱动写好,注册表设置正确,系统第一次上电启动会自动创建分区表,但是要做点手脚保证你的Flash中的NBOOT、Eboot、NK部分不被破坏:
在FMD_GetInfo中pFlashInfo->dwNumBlocks要等于小于Flash实际块数减去前面NBOOT、Eboot、NK等所占的块数;
在Flash的读写函数擦除函数等用到传入地址的函数中,把传入地址加上偏移量 ,偏移量为NBOOT、Eboot、NK等保留的大小。

这样系统第一次启动会创建分区表,但是根据容量大小会等很长一段时间,不过就第一次,容量越大时间越长,因为他要扫描坏块。
点赞  2009-6-23 17:00
还是没搞定呢,在对照一些高手的设置进行有样学样后,启动:
.....
1113 PID:87fc6bfa TID:87fc6bd6 OEMIoControl: Unsupported Code 0x101008c - device 0x0101 func 35
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\FSDMGR.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\SMFLASH.DLL'
   1132 PID:87fc6bfa TID:87fc6bd6 FMD::FMD_Init - pBSPArgs->nfsblk = 0x100000
   1132 PID:87fc6bfa TID:87fc6bd6 FMD::FMD_Init - READ_REGISTER_BYTE(pNFSBLK) = 0x0
   1132 PID:87fc6bfa TID:87fc6bd6 FMD::FMD_Init Softreset .....
   1133 PID:87fc6bfa TID:87fc6bd6 FMD::FMD_Init Done
   1133 PID:87fc6bfa TID:87fc6bd6 FMD_OEMIoControl: control code is 0X71f8c
   1133 PID:87fc6bfa TID:87fc6bd6 MID = 0xec, DID = 0xa1 4th Cycle : 0x0
....
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\MSPART.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\RELFSD.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\PM.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\DEVMGR.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\DEVICE.EXE'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\CEDDK.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\BUSENUM.DLL'
到这一步就挂了,为什么到总线枚举就不执行了呢?很纳闷啊
点赞  2009-6-24 11:31
引用: 引用 7 楼 ym_luo 的回复:
只要驱动写好,注册表设置正确,系统第一次上电启动会自动创建分区表,但是要做点手脚保证你的Flash中的NBOOT、Eboot、NK部分不被破坏:
在FMD_GetInfo中pFlashInfo->dwNumBlocks要等于小于Flash实际块数减去前面NBOOT、Eboot、NK等所占的块数;
在Flash的读写函数擦除函数等用到传入地址的函数中,把传入地址加上偏移量 ,偏移量为NBOOT、Eboot、NK等保留的大小。

这样系统第一次启动会创建分区表,但是根据容量大小会等…

我用的是UBOOT引导的,没用三星NBOOT和EBOOT,貌似UBOOT里面没找到关于分区的代码呢
点赞  2009-6-24 11:33
引用: 引用 9 楼 y_man18 的回复:
引用 7 楼 ym_luo 的回复:
只要驱动写好,注册表设置正确,系统第一次上电启动会自动创建分区表,但是要做点手脚保证你的Flash中的NBOOT、Eboot、NK部分不被破坏:
在FMD_GetInfo中pFlashInfo->dwNumBlocks要等于小于Flash实际块数减去前面NBOOT、Eboot、NK等所占的块数;
在Flash的读写函数擦除函数等用到传入地址的函数中,把传入地址加上偏移量 ,偏移量为NBOOT、Eboot、NK等保留的大小。

这样系统第一次启动会创建分…

我说的就是不要分区代码的,就是要改Flash FMD Driver
点赞  2009-6-24 15:23
引用: 引用 10 楼 ym_luo 的回复:
只要驱动写好,注册表设置正确,系统第一次上电启动会自动创建分区表,但是要做点手脚保证你的Flash中的NBOOT、Eboot、NK部分不被破坏:
在FMD_GetInfo中pFlashInfo->dwNumBlocks要等于小于Flash实际块数减去前面NBOOT、Eboot、NK等所占的块数;
在Flash的读写函数擦除函数等用到传入地址的函数中,把传入地址加上偏移量 ,偏移量为NBOOT、Eboot、NK等保留的大小。

我有点明白了,试试先,呵呵
点赞  2009-6-24 16:58
引用: 引用 8 楼 y_man18 的回复:
还是没搞定呢,在对照一些高手的设置进行有样学样后,启动:
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\MSPART.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\RELFSD.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\PM.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\DEVMGR.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\DEVICE.EXE'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\CEDDK.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\BUSENUM.DLL'

为什么用RAM-based Registry时候系统启动没问题,而添加HIVE-based Registry的时候,系统总是在运行到:
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\BUSENUM.DLL' 这一步的时候挂掉呢?
实在是想不明白了,请高手顺便指点一下吧...
点赞  2009-6-25 10:09
这个好像是由设备管理器调用,用来加载总线驱动的,我想你的HIVE 注册表中没有把相关部分加载进去。
建议看下device.exe的启动部分
点赞  2009-6-25 11:09
引用: 引用 12 楼 y_man18 的回复:
引用 8 楼 y_man18 的回复:
还是没搞定呢,在对照一些高手的设置进行有样学样后,启动:
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\MSPART.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\RELFSD.DLL'
Loaded symbols for 'F:\WINCE500\PBWORKSPACES\NEW2442\RELDIR\CABLE2442_ARMV4I_RELEASE\PM.DLL'
Loaded symbols for …

这应该是进行总线枚举时,枚举总线上某个驱动挂了
点赞  2009-6-25 11:29
引用: 引用 13 楼 nick_TS16949 的回复:
这个好像是由设备管理器调用,用来加载总线驱动的,我想你的HIVE 注册表中没有把相关部分加载进去。
建议看下device.exe的启动部分

不好意思啊,能不能具体一点呢,要添加哪些组件啊?我已经添加了HIVE-based Registry、FAT File System、ATAPI PCI/IDE Storage Block Driver了,难道还需要添加什么其他的组件吗?请明示!我将报以万分的感谢!
点赞  2009-6-25 11:45
偶也是在fmd.c里面把bootloader, args, nk.nb0,logo等全部划为坏块的,用HIVE很方便。
是没搞懂文档里面说的pdd+mdd什么的之后的无奈之举。

哪位能成功设置分区大小的?

ps: BUSENUM.DLL出问题的可能太多了,打开调试慢慢找,同nandflash没关系吧?
点赞  2009-6-26 01:53
帮楼主顶一个吧,以前用过EBOOT,好像是调用的Flash Driver做的
点赞  2009-6-26 07:59
在驱动中做,逻辑上会有问题。说说我考虑到的问题(也不一定就是问题):

如何判断flash已经分获?即在加载flash驱动的时候,调用 还是 不调用 分区功能?

flash驱动在每次系统启动的时候都会加载,从逻辑上如何判断是否调用分区功能,难道分区结束后要在注册表写个标志?请大家来谈谈自己的看法。
点赞  2009-6-26 08:20
我想请问大家,我的系统只有nandflash,没有norflash,那么所谓的boot.hv  system.hv  user.hv文件在经过编译后会放在什么位置呢?系统上电启动后是如何加载boot.hv的呢(就是说系统是怎么样、从什么位置将boot.hv搬到RAM里面执行的呢)?能不能麻烦大侠们给我讲解一下这个加载的流程呢?拜托了!!!
点赞  2009-6-26 09:48
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复