一、Android系统相关的基本概念
(1) Bootloader分区:Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。Bootloader百度百科链接
(2) Boot分区:存放boot,linux操作系统引导分区。
(3) recovery分区:实际上是一个简单的Linux系统,当内核启动完毕后,开始执行第一个程序init(init程序是Linux系统所有程序 的老祖宗)。init会启动一个叫做recovery的程序(recovery模式的名称也由此而来)。通过recovery程序,用户可以执行清除数 据,安装刷机包等操作。一般的手机厂商都提供一个简单的recovery刷机。Recovery百度百科链接
(4) system:是一般发布的ROM的主要功能程序分区了,我们说的ROM功能和自带程序的定制应该就是基于这个分区的修改和编译了。
(5) Kernel分区:Linux内核。
(6) misc分区:有Bootloader Control Block(BCB),主要是用于存放Recovery引导信息。
(7) userdata:用户数据。
(8) Cache:缓存。
二、Android系统启动模式
Android系统启动后可能会进入的几种工作模式:
若正常启动,即开机没有按组合键,bootloader会读取位于MISC分区的启动控制信息块BCB(Bootloader Control Block)。它是一个结构体,存放着启动命令command。根据不同的命令,系统又 可以进入三种不同的启动模式。结构体的定义如下:
struct bootloader_message{
char command[32]; //存放不同的启动命令
char status[32]; //update-radio或update-hboot完成存放执行结果
char recovery[1024]; //存放/cache/recovery/command中的命令
};
(1)command=="boot-recovery"时,系统会进入Recovery模式。Recovery服务会具体根据/cache/recovery/command中的命令执行相应的操作(例如,升级update.zip或擦除cache,data等)。
(2)command=="update-radia"或"update-hboot"时,系统会进入更新firmware(更新bootloader),具体由bootloader完成。
(3)command为空时,即没有任何命令,系统会进入正常的启动,最后进入主系统(main system)。这种是最通常的启动流程。
三、DVB升级的实现方式
(1)离线升级之USB升级:
优点:实现难度小,依赖性小,适合单个升级。
缺点:大批量升级效率较低,需要额外U盘设备。
有通用bootloader如u-boot来实现USB升级,通常我们可以在u-boot的引导kernel的之前做相关升级处理;
(2)在线升级之IP升级:
优点:简单。
缺点:依赖于网络,需要服务端支持。
我们在开发中使用TFTP来做烧写处理,被认为是最简单的方式,同样只要用户终端有网络,并被获知需要升级,和已知TFTP服务端及文件名,便能很容易的实现升级,在TFTP升级中,我们不需要额外修改tftp的代码,只需要为自动参数传递升级的命令即可。
在uboot中需要先设置serverip参数,然后使用
tftp内存地址服务端的文件名如:tftp80000000 vmlinux.ub
在CFE中可以直接使用
flash–noheader服务器IP:文件路径分区
如:flsah–noheader 192.168.1.100:/vmlinuz flash0.kernel
考虑到网络的连通的不确定性以及丢包的问题,一般我们在内网中使用或者可以在工厂批量升级使用。
(3)在线升级之OTA升级:
优点:用户参与少,直接由前端控制,适合大批量升级
缺点:依赖前端码流,依赖机顶盒tuner。
OTA升级(OnTheAir),又称空中升级,是指用户终端直接通过信号通道接收下载方式来升级软件。是厂家最重要的一种升级方式,用于大批量用户升级。在手机,以及其他一些移动终端也有用到,它们主要是通过3G或者Gprs等无线升级方式,也可以总体概括到网络升级中。只是具体区别于通常所说的电信网络以及这里的无线网络和我们将讨论的数字电视网络。机顶盒的OTA升级数据可以根据不同厂商自己的方式封装,打包成TS流,然后播放,机顶盒终端接收到流,通过解析NIT等相关表来获取升级信息。
不同平台的OTA实现也不尽相同,但思路都是需要针对具体平台对锁频,接收和解析码流,最后烧写到flash中。
四、DVB升级简单总结
DVB升级无论是在线升级还是离线升级,最终都是要进入recovery安装update.zip升级包。
五、升级应用相关的好文章,前面写的都算是抛砖,玉都在这里。
1、基于linux的数字电视机顶盒几种升级方式的设计与实现;
2、 Android系统Recovery工作原理之使用update.zip升级过程分析(一)---update.zip包的制作这个要从一一直看到八估计收获不小。