Apollo 升级系统——需求分析+概要..
时间:2010-10-08 来源:jiangjqian
1、需求分析
系统升级目标是提供安全、可靠和便捷的软件升级功能。目前要求支持U盘和网络升级两种形式。
2、概要设计
下面就软件中分区映像在升级系统中所要完成的功能展开討論,下图为概况:
U-Loader
U-Boot [Env] --- 提供可设置的启动标志($bootchoice),并据其启动相应的映像
升级映像 --- 读取U盘或网络升级分区中的文件,更新软件映像
App 映像 --- 菜单中提供软件升级选项,执行升级检测;如是网络中的升级包,则安全下载至网络升级分区;并设置$bootchoice,重启
网络升级分区 --- 存放升级包
2.1升级系统——U——boot部份
U-boot提供可设置的启动标志,并据其进行启动。
访标志适合存储在U-boot Env区(环境变量区),这里命名为bootchoile。
具体实现可参考Stb225上的实现,主要是对Env变量的组识和管理。
这里需要討論的另外一件事情是,Env区设计为U-boot访问,我们希望让应用方便地访问,包括如更改bootchoile,甚至于将来升级中也许更改 的mtdparts等。——所以实现中应包括一个小工具的实现,类下: #Uboot——Env (read/set/save) (envname) (value)
2.2升级系统——App映像部份
先定义软件版本字串:apollo-sw* *可以是任意字符串,比如版本号或日期等,
同时规定更大的字符串代表更新的版本,新版本可以更新旧版本,比如:
apollo-sw-01 <
apollo-sw-02 <
apollo-sw-02.patch.2010-09-01 <
apollo-sw-02.patch.2010-10-11
再规定特殊版本字串:apollo-sw,它是最小版本,可被任意版本升级,也是最大版本,可升级任意版本。
我们需要在U-boot Env 中增加本地版本字串$sw-package-version-str,若不存在,默认为“apollo-sw”.
现在谈检测:
应用程序读取本地版本字串,在U盘根目录下查找更高版本字串的文件,如果有则重启交给升级映像处理,升级后则置该字串为本地版本字串。
若U盘下未找到,则到网络中查找(更合理的做法是把本地版本字串,硬件ID等信息提交给服务器,由服务器决定合适版本),找到则下载至网络升级分区,同时 把软件包版本字串写入u-boot Env中,记录 为$net-package-str,重启交给升级映像,升级映像完成更新,应把$net-package-str置空。
略谈安全可靠问题:
A,升级包里有一个autorun.sh文件,该文件经过私钥加密,本地软件拥有公钥可以解密,即未经正确签名的autorun.sh文件,本地软件是不会通过认证加以使用的,以确保安全。
B,autorun.sh文件记录每个升级映像的CRC项,本地软件检验映像正确后利用,以确保数据可靠。
2.3升级系统—升级包结构
升级包采用Cramfs格式,因其只读和良好的压缩性能。
升级包里主要内容是映像文件,而升级过程由autorun.sh描述。
比如:
$/bin/sh
image_update -d /dev/mtdblock3 -m VmlinuX.bin -v r2.6.31-09 -c 0x32567081
image-update -d /dev/mtdblock4 -m rootfs.jffs2 -r rv31 -c 0x32324496
emmc_update -m emmc.img -v v99 -c 0x36aacdb5
env_update -m new-env.txt -c 0x65432109
注:因为应用程序分区可能发生改变,所以升级映像应靠前放在U-boot之后。
2.4升级系统-升级映像。
升级系统读取$net-package-str,如果非空,则mount网络升级分区,如果为空,则在U盘中查找最大版本串,进行mount.
升级系统执行升级包中的autorun.sh。
另外一方向,升级系统要求越‘小’越‘紧凑’越好,所以打算采用initramfs,在一个image中实现。
再有,即便升级系统,也要求良好的用户界面支持。
3、模块划分与计划。
根据上述概要设计,划分出各独立子模块。
*UBoot Env变量的组织和管理以便良好支持启动选择等 (1 day)
*#uboot_env:使应用程序访问UBoot Env分区 (2 day)
*升级包生成工具, (1 day)
*升级映像: a.显示问题, (2 day)
b.Nand读写 (1 day)
c.image-update/emmc_update/env_update等工具实现 (3 day)
4.initramf应用。 (3 day)