"热更新"是我自己起的名字,意思就是说在ce中彻底更新系统,包括bootloader和内核.其实原理还是很简单的,就是用MmMapIoSpace映射好nand的寄存器,然后把对nand的操作从别的程序移植过来.
没错,一切都在ce中运行的一个应用程序中完成的.本来以为这个项目失败了,今天偶然看了一下原来的源代码,原来是指针没有解引用,这么一个低级的失误导致失败的...汗~...还有两个nand的操作语句没有加,不符合nandflash操作时序,改正之后,FlashID读出来了!0xec76!这证明在ce的应用程序中彻底更新自己是可行的!
之后从sjf项目中移植了对nand的写和读代码,稍作修改,ok了!首先完成了nboot1 nboot2以及usb-downloader的烧写,没有问题,一切正常!!然后就是最关键的内核烧写了.开始的几次倒是可以烧,但是因为烧写位置还有ecc的问题,在重新启动这个内核后还是无法校正ecc.然后又按照eboot的源代码加了ecc写入,这次手工加载内核没有出现ecc问题了,意味着内核已经被成功写入了flash.
但是目前最大的问题,恐怕是唯一的问题就是在bootloader加载内核之后会不停的重启.不论4.2还是5.0...郁闷,还不知道是怎么回事.
还有一个功能可能需要完成,就是刷新内核后更新toc.这个还是比较麻烦的,首先要把toc从block1读出来,然后按照toc的数据结构配置好,再写入block1.不难,但是工作量很大.年前估计弄不出来了,年后吧,做一个完善的CEUpdater!