wince系统运行中如何实现更新flash中的NK.BIN?持续探讨,欢迎关
总体思路是:底层驱动加应用层程序调用。驱动要完成的工作:接收应用层传递进来的要更新的NK.BIN在内存中的地址,长度信息,然后写flash,写完NK.BIN后还要写TOC信息,以便系统启动时加载整个镜像到内存。应用程序要完成的工作是:读取要更新的NK.BIN的内容到内存,然后调用驱动的IOCTRL函数实现写flash,当写完后软件重启系统。 ???? 由于是在系统运行状态下写flash,因此为了防止其他进程或线程同时调用同一个flash的读写函数,应该设置读写互斥锁,以保证并发访问不出错。由于我只要更新NK.BIN,之前的分区表都已经建立完成,也知道nk.bin是在flash中binfs分区里哪一块开始的位置,因此应该不用重新写MBR信息。http://www.voidcn.com/article/p-gdyujuyh-br.html? 这个帖子有大致介绍了如何实现,但上面并没有详细讲如何写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函数里的: 2012-06-06:终于可以实现在线更新内核镜像了。出于保密需要不便贴出详细做法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |