wince6.0下如何实现系统运行起来后升级更新NK.BIN?

zhengmeifu 2012-05-08 09:50:51
如题,应该要写个驱动,接收应用层指令,然后读取外部存储器(如U盘)里的NK.BIN进行更新,更新时要读写MBR,TOC吗?这个驱动该如何写?有做过成功的代码示例吗?跪谢分享。
...全文
590 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wind_Cloud2012 2012-06-01
  • 打赏
  • 举报
回复
如果在应用层直接写Flash,要解决几个问题:
1 应用层操作Flash的接口,http://blog.csdn.net/nanjianhui/article/details/2196466 这个贴子中有说到怎么实现, A)打开"DSK1:"失败, B)修改FMD.cpp中FMD_OEMIoControl函数,但不知哪个。
to zhengmeifu, 你试验过,这个可以实现吗?
2 要知道NK在Flash中起始位在哪,我看了EBOOT的代码,没找到在哪。
3 正在运行的应用程序允许擦除吗?
zhengmeifu 2012-06-01
  • 打赏
  • 举报
回复
我现在的想法是直接块写原来NK.BIN所在的块,写完后就写TOC,这样不知是否可以。看eboot下的代码是先打开binfs分区,然后传入分区句柄来更新nk.bin。
Wind_Cloud2012 2012-05-31
  • 打赏
  • 举报
回复
在应用程序来直接更新内核,在/WINCE600/PUBLIC/COMMON/OAK/DRIVERS/BLOCK/MSFLASHFMD/下有多个FMD.cpp, fasl\, ram\, sdnpci\, sdnpci\, strata\下各自都有一个 不知是在哪个里改FMD_OEMIoControl。
另外DeviceIoControl传进去的句柄如何得到,通过CreateFile(TEXT("DSK1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)得到的是INVALID_HANDLE_VALUE
zhengmeifu 2012-05-30
  • 打赏
  • 举报
回复
在线等高手指点。。。。
zhengmeifu 2012-05-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhengmeifu/article/details/7611501 我的博客记录了我的想法。欢迎去看看。
zhengmeifu 2012-05-29
  • 打赏
  • 举报
回复
我的前面的问题欢迎多探讨呀。谢谢!
Wind_Cloud2012 2012-05-28
  • 打赏
  • 举报
回复
我也打算做一个,我的想法是系统起来后,在应用程层将待更新的NK_new.bin放到NandFlash的一个目录中,然后下次开机时,在EBOOT起来后,找到这个目录下的文件,然后覆盖原来的NK。但这里有个问题,EBOOT下如何找到那个目录。
zhengmeifu 2012-05-28
  • 打赏
  • 举报
回复
应用程序可以开辟100MB的内存空间吗?应用层把NK.BIN读取到内存,然后传地址给驱动,让驱动连续地把NK.BIN写入到flash。还是只能一块一块(128KB)地传到驱动,然后驱动也一块一块地写进flash?
zhengmeifu 2012-05-28
  • 打赏
  • 举报
回复
是呀,谁做过?分享一下经验和代码。谢谢
Wind_Cloud2012 2012-05-28
  • 打赏
  • 举报
回复
在应用层直接更新NK所在Flash对应块的话,NK的大小变化很大的话,就有可能把原来的应用程序也覆盖了,总有点不放心。因为我的内核中并没有包函应用程序,主要是方便分开升级。
zhengmeifu 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 的回复:]
我也打算做一个,我的想法是系统起来后,在应用程层将待更新的NK_new.bin放到NandFlash的一个目录中,然后下次开机时,在EBOOT起来后,找到这个目录下的文件,然后覆盖原来的NK。但这里有个问题,EBOOT下如何找到那个目录。
[/Quote]
你的这种做法需要在eboot下分析flash的文件系统,比较麻烦。最好还是在系统运行过程中直接写flash,然后软件重启。
zhengmeifu 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 的回复:]
我也打算做一个,我的想法是系统起来后,在应用程层将待更新的NK_new.bin放到NandFlash的一个目录中,然后下次开机时,在EBOOT起来后,找到这个目录下的文件,然后覆盖原来的NK。但这里有个问题,EBOOT下如何找到那个目录。
[/Quote]
你的这种做法需要在eboot下分析flash的文件系统,比较麻烦。最好还是在系统运行过程中直接写flash,然后软件重启。
myearth 2012-05-28
  • 打赏
  • 举报
回复
EBOOT去做这事
WINCEANDROID 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

CE5.0和6.0机制不一样,CE5.0在应用层可以直接操作flash的扇区,而6.0不可以,所以贴出来意义也不大引用 6 楼 的回复:
引用 5 楼 的回复:
CE5.0上我们实现过,但是6.0实现起来够呛~

5.0如何实现的?能否贴一下代码?我改改看能否在6.0上实现。这样大家都可以学习一下。谢谢!
[/Quote]

CE6.0做个驱动就好,意议还是挺大的。
zhengmeifu 2012-05-24
  • 打赏
  • 举报
回复
顶一下,谁有系统起来后的升级NK.BIN的驱动源码呀?谢谢分享!
DAISARU 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]
还是没有告诉如何详细操作的具体结果!!
[/Quote]

具体原理就是这样啊,代码是木有的
DAISARU 2012-05-22
  • 打赏
  • 举报
回复
就是一个以驱动形式存在的EBOOT,可以这样理解。
DAISARU 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
你的思路是对的。
三星内部有这个东东,是以驱动的形式存在的。

哦?在哪里?能告诉我哪个文件或目录下吗?谢谢!
[/Quote]

韩国三星内部有这个代码,未公开 ,不在BSP中。就是一个
zhengmeifu 2012-05-22
  • 打赏
  • 举报
回复
还是没有告诉如何详细操作的具体结果!!
zhengmeifu 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
你的思路是对的。
三星内部有这个东东,是以驱动的形式存在的。
[/Quote]
哦?在哪里?能告诉我哪个文件或目录下吗?谢谢!
加载更多回复(15)

19,498

社区成员

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

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