Mobile的SD卡升级系统之一:两种升级方式

      公司现在要实现sd卡升级操作系统,我查了下相关资料。发现目前有两种方式,在CE下和在bootloader下都可以实现更新NK。
(1)在CE下,可以直接用文件系统API读出NK.bin,放到内存buffer中,在通过DEVICEIOCTL的方式来调用nand驱动的一些接口来直接对nand flash进行写操作。
好处:跳过boot section,FAT/FAT32文件系统的解析;对内存大小无要求。
缺点:NAND驱动需要暴露读写的IOCTL,必须进入OS才能更新OS,如果OS挂了的话,无法更新。

(2)bootloader下,直接对SD CONTROLLER操作来对SD卡进行读写,解析FAT/FAT32格式,找到NK.BIN,并能将其读取到内存中,再假设NK.BIN如下载一般到内存中,将其烧写到nand flash中。
好处:只要bootloader不挂,就可以对OS进行更新;
缺点:需要自己解析BOOT SECION,FAT/FAT32文件系统;需要至少和NK.BIN大小相同的剩余RAM。
      为了节省时间,暂时绕开fat文件系统解析,我准备在CE下更新NK。目前已经在nand驱动里开放了write read erase接口。我的想法是在ce查找nk.nb0文件(nb0是直接的可运行文件),然后直接读取文件内容,通过DEVICEIOCTL写入到nand flash里对应的地方,将nk直接覆盖掉。我想请教下:用这种方式更新WINCE,需要进行哪些操作,是直接将整个nb0文件写入就可以了吗,nb0文件应该是可以直接执行的文件了?
      网友评析1:如果直接在CE下把NK.NB0文件写进去的话,TOC也要修改。如果使用multi-bin的形式这种方法搞不好会有些问题,因为OS镜像中的一些东西仍然在NAND中存储,而不是全部在RAM中。这种方法更新过程中不能断电,一断电下次又进不了OS,无法再进行更新。

      如果是EBOOT中读SD卡的话实际上和通过USB或者以太网的下载是一样的方法,只需要读取NK.BIN然后像其它方式一样解压缩再更新就可以了。不管是哪种方法都建议使用BIN文件更新,因为解压缩的过程中会有校准,文件出错的话就不进行更新,如果直接使用NB0更新的话不能检查数据是否有错。

      网友解析2:SD卡升级要修改bootloader来加入这个功能。主要的技术有2个,一个是flash的操作,这个和USB升级是差不多的;另外一个就是SD卡的读操作,这涉及到SD卡的协议需要了解;第三个,就是涉及到对FAT格式的解析。

 

参考原文:http://topic.csdn.net/u/20100812/16/d0d5108b-dce1-4535-9e15-6f87bad57e43.html

参考原文:http://topic.csdn.net/u/20081009/17/4E0F5E66-C7A0-43D2-B33F-14E132280F70.html

你可能感兴趣的:(api,OS,Flash,mobile,buffer,WinCE)