2023年12月10日发(作者:)

广达新网专栏●运营商专栏●运维管理●实践应用●行业动态●一种基于Android平台机顶盒的

按键修复Recovery系统方法黄荣铭 叶宇煌 福州大学物理与信息工程学院摘要: 本文对基于Android平台机顶盒升级模块Recovery的研究,介绍了一种通过按键修复损坏的Recovery系统的方法,包括按键软硬件设计,通过Uboot对按键监听响应设计和修复Recovery系统的设计,从而提高了机顶盒升级的稳定性、安全性和可靠性。关键词:Android机顶盒 Recovery 修复 Uboot●

数字电视1 引言为了使得用户有更好的用户体验,Android平台的机顶盒利用Recovery模式进行系统升级更新。获取系统升级压缩包的方式一方面可以通过标准在线升级方式(OTA升级)将系统升级压缩包下载到机顶盒Flash固定分区存放,另一方面可以通过与机顶盒接口相连接的U盘等存储设备存放从官网下载的系统升级压缩包。系统的升级都是启动机顶盒Recovery模式将系统升级压缩包分别烧写入机顶盒对应的Flash分区中完成升级更新操作。但当Recovery模式发生意外修改,或者Recovery系统发生损坏,使得用户无法进入Recovery的升级设置界面进行相应的升级操作,而且用户一般都不具备专业的知识和专门的工具可以对发生问题的Recovery进行修复操作,2 整体构造系统升级更新的过程是通过Uboot加载机顶盒Flash中Recovery分区的内核映像进行相应的升级,升级成功后会覆盖Flash中原有的分区,包括Recovery分区。当存储在机顶盒Flash中的Recovery分区发生损坏或者人为的修改,Uboot无法加载启动该Flash中的内核映像时,用户就无法对系统进行升级更新,而目前市面上的机顶盒并无对此的修复保护措施,而且用户一般不具备专门的烧写工具和专业的知识能自己进行重新烧写。所以对于用户,在Android机顶盒上设置一个外置按键,通过按键就能自动修复损坏的Recovery系统或者是对系统进行升级更新是非常有必要的。本文中提出的按键修复Recovery系统方法由按键模块,机顶盒中Uboot生处理响应,按键模块主要用于用户在开机阶段长按此按键能产生信号让Uboot采集到。U盘中存储修复系统所需要的系统升级包和镜像文件。3 具体实现3.1 整体流程Android机顶盒的按键修复Recovery如图2所示,具体说明如下。(1)当用户发现机顶盒本地的Recovery无法进行升级操作,或者系统发生了损坏,此时用户可以从运营商提供的网站上下载所需的系统升级包,系统升级包一般为Zip压缩包,解压出里面的,将系统升级包和一起存放在U盘,将U盘插入机顶盒USB接口。(2)机顶盒开机重启,用户按下修复按键,若按键时长小于3秒,不导致用户无法再对新的系统进行升级,监听处理模块,U盘存储设备模块三从而无法得到新的用户体验,针对以上问题,本文提出了一种基于Android平台机顶盒的按键修复Recovery系统方法,提高了Android机顶盒升级的稳定性、安全性和可靠性。部分组成,如图1所示。图1中,Uboot启动监听模块在机顶盒开机阶段运行,能监听是否有按键按下的动作并产图129广电风向标●技术前沿●广电网络●数字电视●NGB综合技术实验室专栏●3.3 Uboot对按键的监听响应设的各个镜像文件写入到对应的分区中,计操作。升级更新操作是把系统升级包里其中也包括Recovery分区,这样也就实现了对发生修改或损坏的Recovery的修复。(6)升级更新完成后会自动重启机顶盒进入Android系统。

3.2 按键的软硬件设计GPIO(General Purpose I/O Ports)为通用输入/输出端口,有单独的方向控制位,可以通过它们输出高低电平或者通过它们读入引脚的状态,是高电平还是低电平。用户可以通过GPIO口和硬件进行数据交互,控制硬件工作,读取硬件的工作状态。是由于GPIO有这些特性,特别是通过读入引脚的高低电平来读取硬件的工作状态,很适合用来作为对于按键信息的读取,而且对于GPIO的控制只要通过几句代码就能实现,简单方便,图2所以本次就用GPIO作为对于按键信做任何操作直接进入Android主系统;息的读取。

若按键时长大于3秒,Uboot收到需要在机顶盒上找一个空闲的GPIO加载U盘的信息。按键管脚,将该GPIO管脚焊接上四角轻时长设置为3秒是为了防止用户不小触开关作为按键,长按按键来表示输心触碰而进行不必要的修复操作。入高电平,松开按键表示输入低电平,(3)Uboot检测USB是否挂载有用程序读取当按下按键持续时间大于U盘设备。若否,输出无U盘挂载设3秒,即输入高电平的持续时间大于3备的提示信息;若是,Uboot读取U秒,则视为Uboot检测到有信号输入。盘中的信息。初始化该管脚,该管脚设置为输(4)检测U盘或Sdcard是否存入状态,用如下代码实现:储了的镜像文件。若否,setbits_le32(P_PREG_PAD_输出存储设备无的镜像GPIO0_EN_N,1<<24);文件提示信息;若是,Uboot将加载读取管脚信息:的镜像文件到RAM中,readl(P_PREG_PAD_GPIO0_I);并启动Recovery内核。这样GPIO进行初始化后,就能(5)进入到Recovery的UI界面,受Uboot控制去监听按键的信号,根根据提示和需要就可以进行升级更新据传来的信号做相应的处理。30《有线电视技术》 2017年第5期 总第329期在Android机顶盒中,开机上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的Boot Loader程序,Uboot是一种普遍用于嵌入式系统中的Bootloader,通过它,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的软硬件环境,为最终调用操作系统内核做好准备。Uboot的主要运行任务就是将内核映像从硬盘或者eMMC)上读到RAM中,然后跳转到内核的入口点去运行,即开始启动操作系统。Uboot启动过程如图3所示。在Android机顶盒中,Android主系统的内核映像和Recovery的内核映像是分开的,二者是两个独立的系统,这从系统升级包中可以看到。Android主系统的内核映像为,而Recovery的内核映像为。Uboot在将内核映像从硬盘读取到RAM时,会根据用户的选择对要加载哪一个内核映像进行选择,这样就能分别启动不同的系统完成不同的操作。正常情况下开机启动后Uboot会将硬盘上的Android主系统加载到RAM中并启动Android内核,而当要进行升级更新时,Uboot会将硬盘上的Recovery内核映像加载到RAM中并启动Recovery内核。当Uboot检测到有按键响应这个动作后,就会检测USB接口是否有U盘插入,若没有U盘插入,在电视屏幕上输出无U盘设备的信息,如下代码: if(usb_stor_scan( )!=1) {

ui->Print("can not find USB

(e.g. NAND flash广达新网专栏运营商专栏运维管理●●●devicen");统,这样我们就不需要使用机顶盒}else {…};Flash中的Recovery分区,这样即使该若有,则判断U盘中是否有分区损坏我们也能正常启动Recovery系文件,如果有就执行以下统,当Recovery系统启动后会进入一个代码:UI界面,如图4所示。run_command("fatload udisk

通过图4的Recovery UI界面即可${loadaddr} ",0);选择U盘中的升级包进行升级操作,run_command( "bootm

升级的过程即是覆盖Flash各个分区的${loadaddr}",0);fatload udisk ${loadaddr}

过程,这个过程也将原有的Recovery是从u盘中把里面的recovery系统读分区进行了覆盖,这就修复了原先发出来,放到内存中,放置的内存地址生改动或者损坏的Recovery分区。为loadaddr。bootm ${loadaddr}}的意思4 测试结果是从内存的loadaddr启动系统,也就是启动Recovery内核。当用户对Android机顶盒进行这样就实现了从U盘读取Recovery升级过程中,发现本机的升级模块镜像文件并启动U盘中的Recovery系Recovery发生损坏无法进行升级操作,图3图4实践应用行业动态●●用户只需从运营商提供的网站上下载所需的升级压缩包和,存储在U盘中,将U盘插入Android机顶盒的USB接口。重启机顶盒,长按修复按键,这样机顶盒就会加载U盘中的Recovery系统进入UI界面,用户可以根据电视遥控器选择对机顶盒进行升级操作,并且会重新升级已经损坏的本地升级模块Recovery,用户可以在数字电视屏幕上看到升级的过程,升级完成后会自动重启。这样用户完成升级的同时,在下一次进行升级时,会发现原来发生损坏的本地升级模块Recovery已经修复完成,所以●

数用户下一次仍然可以使用本地升级模字块Recovery进行升级操作。电视5 结束语本文介绍了一种基于Android的数字电视机顶盒的修复升级模块Recovery的方法,该方法具有设计简单,操作方便的特点。用户无需专业知识通过一个按键即可对损坏或发生改动的升级模块Recovery进行修复操作,提高机顶盒升级的稳定性、安全性和可靠性,而无须返厂重新烧写系统。这样一方面为使机顶盒多一层的保护机制,同时也减少了厂方维护人员的成本,具有一定的实际应用价值。参考文献[1] 刘道春. 有线电视机顶盒升级系统的研究[J]. 电视技术,2006(8):58-60.[2] 李文钊. 基于Android平台的GPIO操控方法[J]. 数字技术与应用,2013(11):151-152.

[3] 叶阳.基于多核的电视机顶盒关键技术实现[D]. 华中科技大学,2014.[4] Mladen Kovacev, Krsto Lazic, Nenad

Jovanovic, Aleksandar Stefanovic, Ivan Petrovic.Implementation of Disaster Recovery Agent within

Android based set-top box[C]. 2013 IEEE Third

International Conference on Consumer Electronics

Berlin(ICCE-Berlin) , 2013:31