wince系统运行中如何实现更新flash中的NK.BIN?持续探讨,欢迎关注
来源:互联网 发布:调查问卷挣钱知乎 编辑:程序博客网 时间:2024/05/16 03:51
总体思路是:底层驱动加应用层程序调用。驱动要完成的工作:接收应用层传递进来的要更新的NK.BIN在内存中的地址,长度信息,然后写flash,写完NK.BIN后还要写TOC信息,以便系统启动时加载整个镜像到内存。应用程序要完成的工作是:读取要更新的NK.BIN的内容到内存,然后调用驱动的IOCTRL函数实现写flash,当写完后软件重启系统。
由于是在系统运行状态下写flash,因此为了防止其他进程或线程同时调用同一个flash的读写函数,应该设置读写互斥锁,以保证并发访问不出错。由于我只要更新NK.BIN,之前的分区表都已经建立完成,也知道nk.bin是在flash中binfs分区里哪一块开始的位置,因此应该不用重新写MBR信息。http://blog.csdn.net/nanjianhui/article/details/2196466 这个帖子有大致介绍了如何实现,但上面并没有详细讲如何写TOC信息。因此,现在问题的焦点是如何获得NK.BIN文件中的TOC信息,然后写到TOC块里。由于系统启动时,要读取TOC信息,才能知道NK.BIN要加载到内存的起始地址,要加载多少个模块,以及各个模块的起始地址。还有个问题:应用程序是应该开辟一个NK.BIN大小的内存空间来先把NK.BIN都放到内存,然后把内存地址和长度告诉驱动,还是只能一块(128KB)一块地加载NK.BIN,然后告诉驱动一块一块地写flash呢?这两种方式哪个更合理?我觉得应该是后者。前者不合理之处:也许没有那么大(可能达到100MB)的连续内存空间,所以申请内存一般会失败。若是选择后者,则在应用程序里要先分析NK.BIN,读取NK.BIN中的TOC信息,然后告诉驱动,把TOC信息写到TOC块中。因为是一块一块地传递要写的镜像到驱动,驱动里没法再去分析和提取NK中的TOC信息。
以上是我的拙见,欢迎各路高手能留言批评指正,以实现如题的目的。本博客持续更新中,欢迎关注。谢谢。2012-05-29。
http://topic.csdn.net/u/20120508/09/2b3f14c4-9d68-44dd-a269-6c927710e827.html?seed=572493010&r=78705844#r_78705844 这边是讨论区。
2012-05-30:
eboot目录下的WriteFlashNK函数里的:
// find download manifest information for the NK
for(i = 0;i < g_pDownloadManifest->dwNumRegions;i++)
{
if(g_pDownloadManifest->Region[i].dwRegionStart == dwStartAddr &&
g_pDownloadManifest->Region[i].dwRegionLength == dwLength)
{
if(g_pDownloadManifest->Region[i].szFileName[0] == 0)
{
// If the DownloadManifest does not have a filename, use the default name
}
else
{
memcpy(g_pTOC->id[TOC_ENTRY_NK].ucString, g_pDownloadManifest->Region[i].szFileName, MAX_PATH);
}
break;
}
}
这些是什么意思?我只升级NK.BIN是否可以不用管它呀?
然后写TOC,重点好像要写如下几个参数:
g_pTOC->id[TOC_ENTRY_NK].dwLoadAddress = dwStartAddrOrg;
g_pTOC->id[TOC_ENTRY_NK].dwJumpAddress = dwStartAddrOrg; // TODO
g_pTOC->id[TOC_ENTRY_NK].dwStoreOffset = dwStoreOffset;
这三个参数从哪里获得?
2012-06-06:终于可以实现在线更新内核镜像了。出于保密需要不便贴出详细做法。
- wince系统运行中如何实现更新flash中的NK.BIN?持续探讨,欢迎关注
- wince nk.bin在nandflash中的位置
- 如何导出NK.bin中的内容
- WinCE NK.bin与NK.nb0
- WinCE NK.bin与NK.nb0
- WinCE NK.bin与NK.nb0
- WinCE中如何编译生成NK.nb0
- WinCE中如何编译生成NK.nb0
- WinCE中如何编译生成NK.nb0
- 如何减小wince内核(nk.bin以及nk.nb0)的大小
- WinCE下在系统更新NK调试小记
- 如何实现从SD卡更新NK?
- 如何实现从SD卡更新NK
- WinCE中命令行工具Viewbin简介(查看nk.bin中包含的文件)
- WinCE中命令行工具Viewbin简介(查看nk.bin中包含的文件)
- 精品android源码汇总。。欢迎关注,持续更新。
- 如何将nk.bin转换成nk.nb0
- PB是如何生成NK.bin的?
- kettle select value值 传参
- UBI文件系统
- php 不刷新页面,点击刷新验证码
- Ibatis sql语句中文乱码处理 .
- U-Boot中ubi和ubifs命令的使用
- wince系统运行中如何实现更新flash中的NK.BIN?持续探讨,欢迎关注
- 开发常用jar包用途
- undo只是逻辑还原
- linux vim+ctags
- CrossTab類型報表取得動態欄位值.
- 深入分析request_irq的dev_id参数作用
- sap 预留
- DML对undo的影响
- 关于对EASbos 分录设定默认值