admin 管理员组文章数量: 1184232
2024年4月12日发(作者:大连web前端培训)
《工业控制计算机}2012年第25卷第6期
Li n ux智能手机上自动升级模块的设计与实现
Design and Implementation of Auto-upgrade Module in Linux Smart Phone
胡祝华 (海南大学应用科技学院,海南海口571101)
赵瑶池 (海南大学信息科学技术学院,海南海口570228)
胡诗雨 (上海交通大学安泰经济与管理学院,上海200052)
摘 要
为了在基于ARM内核的Linux智能手机上实现固件的自动升级功能,基于奔峰的DM规范提出了一套完整的实施方
案。该方案对Flash进行了重新布局,重新规划了Bootloader的结构,实现了UA的自动跳转,同时对Flash的读、擦、写算
法进行了优化实现。实验表明该方案具有较好的时效性,在bug修复、新功能的扩展方面具有较好的应用价值。
关键词:ARM,固件,DM,自动升级
Abstract
In order to upgrade firmware automatically in the Linux Smart Phone based ARM Kernel,this paper presents a com—
plete design scheme based BitFone S Standard about DM This scheme includes the re-layout of the Flash,re-planning the
structure of the bootloader,setting the status flags to automatically jump to the UA module,and optimizing the algorithm
about reading and writing the flash.
Keywords:ARM.firmware,Device Manager,auto upgrade
目前,基于ARM的嵌入式终端设备(如:PDA、移动电话、电 SDRAM内存空间和128MB Flash空间。Flash片选连接到了
子仪表、MP4等)上的软件系统出现了bug,或有新的应用功能
PA×270的nCS0上,对应地址为0x0,SDRAM片选连接到了
需要扩展,或相关系统配置需要更新管理时,往往需要到特定的
PAX270的nSDCSO上,对应映射地址为0xaO000000。
客服中心进行软件刷新,费时费力,况且嵌入式设备的系统参数
C K onenaad
和硬件配置差异性很大,客服中心需要维护这些待更新软件,也
是件非常繁琐的事情。
tC ̄F.4WECAVD
美国奔峰公司提出了一套通用规范——DM(Device Man-
IN11,鼗 V
agement),即开放移动联盟(OMA)无线方式管理终端规范的简
i 由eI 1_
A ,0 /1 I 雌RA^羞【tKB)I
称。该规范可以对放置在远程服务器需更新的软件差分包(即待
更新软件版本和当前软件版本的差异信息包)进行管理,并通过
、
/1
、J^ d|I 吲 I l—
OMA下载(DL)协议与移动终端进行数据的交互,并触发终端
Dat ̄0:lS)
的自动更新动作,完成软件版本的自动升级 I o本文主要针对
、\l l 嘲I
DM底层的UA(Update Agent)规范在Linux智能手机上实现
图1 PXA270与OneNAND连接示意图
固件的自动升级。
在此架构上,要实现底层的升级功能,必须从Bootloader
该实施方案对Linux智能手机上的Flash进行了重新布
中实现UA模块的跳转,然后从Flash位置0x07500000读出升
局,对Bootloader进行了重新规划,对差分包的读、擦、写算法
级差分包,并执行升级动作。UA的底层升级示意图如图2所示。
进行了优化实现。实施结果和实测数据表明,提出的方案能很好
同时考虑到嵌入式Linux系统的相关应用较多、配置较复杂以
的满足终端软件的自动升级功能,方案的优化处理使得用户在
及bug较多的情况,可能会导致两个相邻版本之间的差分包出
使用上也能得到较满意的用户体验。
现很大的情况。因此,必须给差分包预留出足够的空间,本方案
本文主要参考DM的客户端规范,前后版本差分包的获取
中,为了避免在升级过程中系统出现异常,差分包被放置在
可从网络服务器上自行下载,然后通过数据线拷贝到嵌入式设
》正常纛动 /受囊詹敝车
备存储器的指定位置上(也可通过无线网络直接下载到终端),
Linux
重启手机终端后通过检查特定位置是否有差分包文件即可决定
kernel-I ̄h'opim I
是否启动升级工作。因此即使针对没有带无线通信模块的Linux
嵌入式终端设备,本方案也可实施。
]R ̄Iu 厄
1 实施方案
———
__——_1/
Cz)I
一杼丹纽
本方案是基于Intel PAX270应用处理器圜和三星OneNAND
竺 竺 !!r
LASH:0x075000 ̄0
Flasht0 的硬件架构,在该处理器上运行Linux内核和应用软件。
SDRAM:口xA0帅0000
硬件连接方式如图1所示。其中选取的OneNAND具有64MB
图2 UA升级流程示意图
海南大学青年基金资助项目(qnjjl185);海南大学应用科技学院院基金资助项目(yykj—ky-2010-3)
12
Flash的末端(0x07500000的
攒留块
位置),分配了40个Block
靛分甑
(Block936至Block976,一个
Block为128KB)的空间。修改
用户文件系统
后的Flash的布局情况如图3
鬣惰息
所示。
檄文件系统
另外,考虑到速度的因素,
Linuz内棱
在执行升级动作时,必须使能
DMUA
MMU和D—Cache,同时进行
硬件潮试
LCD和uart的初始化,以便用
onoaderl I
户可以看到升级过程和开发人
I
0
doB如r2
员从串口打印调试信息。
图3 Flash整体布局
PAX270采用的是MarvelI公
B B
司的XScale架构,执行ARM V5TE架构指令 ,MMU和D—
Cache的使能代码如下:
呲 晰 胁
枷
mrc pl5,0,rO,cl,cO,0
err rO,rO.#0x1
orr r0,r0,#0x4
mcr pl 5,0,rO,cl,cO,0;enable MMU and D—Cache
. .
\
2关键工作及优化实现
2.1 Bootloader的重新规划
UA升级模块所在的存储空间地址位于内核之下,因此必须
重新规划现有的Bootloader。版本升级时,需要在Bootloader2
中引导出UA,在UA中调用Ua_doUpdate
()函数完成Flash的擦写,实现升级工作。这
Bootloader]
里没有把UA和Bootloader2整合在一起,
BootIoader2
而放在一个独立的分区中,主要的目的有两
lUa loader I
个:①如果服务器侧的差分包生成算法或数
UA l
据结构有变化的话,可以进行自升级动作;
②便于模块的维护。重新规划后的Boot一图4重新规划后
loader如图4所示。 的Bootloader
目前Bootloaderl和Bootloader2共占用一个Block,UA
分区也占用一个Block,存储区中总共有8个分区,分区信息保
存在gstXSRPartl的结构体全局变量中,规划代码如下:
gstXSRPa ̄l nNumOfPartEntry=8:
/ bootloader /
gstXSRPart1.stPEntry [O】nID =PARTITION—ID—NBL1 IPARTI-
TION
IDNBL2;
gstXSRPart1.stPEntry[0]nAttr=BML—PI—ATTR—RO;
gstXSRPartl stPEntry[0].nlstVbn=O:
gstXSRPa ̄l stPEntry[0].nNumOfBIks=1:
/ DM UA /
gstXSRPartl stPEntry[1】nlD=PARTITION—USER—D
EF
BASE I PARTITION
—
ID
—
NBL3;
gstXSRPartl stPEntry[1]nAttr=BML—PI—ATTR—RO;
gstXSRPart1.stPEntry[11 n1 stVbn:3:
gstXSRPartl sfPEntryf1】nNumOfBIks=1:
2l2标志位的设置与更新
把差分包放置到存储器的指定位置,终端若发现在指定的
位置上有差分包存在,则设置好标志位,并通知用户是否需要进
行升级工作,若需要则重启终端,Ua loader能够通过标志位判
断是否需要启动UA。为了防止异常修改,标志位被放置在差分
包分区的最后一个Block的位置,即FLASH—STATUS_ADDR:
Linux智能手机上自动升级模块的设计与实现
D×079EO00O。在终端设备重启后,Ua_loader先从FLASH—STA—
TUS
_
ADDR的位置读出一个32位的无符号整数,uaw_flash—read
((UINT8 )(&isUpdate),(volatile UINT8 )(FL-ASH—STATUS_AD
DR),4):然后再用读出的isUpdate值与更新状态值进行逻辑与。
更新完成后,需要对更新标志位进行复位,同时设置更新完
成状态标志位,在FLASH—STATUS—ADD+4的位置写入更新结
果,写入该值的目的是一旦更新失败,可以调出该值分析失败原
因。状态值的设置如下:
#define UA_UPDATE_STATUS—BIT(0x01<<3)//bit 3为0则不更
新,为1则实施更新
#define U UPDATE
—
STATUS
—
REPORT(0x01<<1)//bit 1为1
则更新成功,为0表示更新失败
2,3 UA引导
实现UA的引导,首先要设定一个在SDRAM上的映射地
址,然后从flash中读出UA镜像到SDRAMD的映射地址,并
在该地址处开始执行,连接器找到汇编人口点,在init s[5】中跳
转到UA主函数C—StartUp开始执行UA更新。引导示意图如
图5所示。主要代码如下:
主要代码如下:
#define UA
_
SHADOV ADDR
—
BASE 0xA0000000//定义映射地址
pJumpAdd r=ShadowtoUA(nVo1);//装载UA image到SDRAM,并
返回映射地址
run=(void( )(void))pJumpAddr;//跳转到UA执行
run():
图5引导示意图
2.4读、擦、写算法的优化实现
要把版本差异信息进行解释后更新到当前的版本中,就必
须针对差分包特点实现对Flash的读、擦、写操作,考虑到篇幅,
以写操作为例进行说明,传统算法说明如下。
步骤1解析参数,获取第一个要写的扇区号,并计算得到
要写入的总扇区数,以及对Block取余后的剩余字节数。
步骤2把Flash中要擦写的块备份到SDRAM。
步骤3根据差分包信息对SDRAM中的块进行相应的修改。
步骤4擦除Flash中需要修改的块。
步骤5把SDRAM中修改完成的块写入Flash。
该算法可以完成写操作,但考虑到Flash为Nand Flash,
对擦、写速度有一定的影响,另外,DM要求可以对Flash的任意
地址,任意字节进行读、擦、写操作。该算法对任意地址和任意人
小的写操作都实施了同样的操作流程,显然当擦写的数据块很
多,很频繁时则会耗费很长的时间。
为了减少冗余操作,提高在升级过程中条件匹配的命l{J率,
将会大大减少升级所需的时间。优化后的算法如图6所示。 其
中,备份到SDRAM中的地址为:0xa0600000,nSpareSct的值
为(ua_u32)addresso/)oSCTOR—SIZE,nSpareSctS的值为size%
B B
呲
《工业控制计算机》2012年第25卷第6期 13
SCTOR
—
SIZE。一个扇区的大小定义为#define SCTOR—SIZE
步骤2在升级前获取当前时间的秒数;升级完成后再获取
0x200。
一
次系统时间。
步骤3相减后可得出升级所需的秒数。
参教:
Addre ̄:目
3.3实验结果及数据分析
uaw lfash wrl ̄(ad>/ Soizuer;ce数t据文涌羞
正确性验证实验结果参见表1所示。
表1正确性验证结果
解拆参数,获取nSpareSct
和nSpareSctSl ̄值
编 实验项目 升级结果
号 (通过:√失败:×)
1 修改了linux kerne1 √
2 修改了应用功能 √
3 扩展新功能 √
4 修改配置信息 √
直接耐块进行写操佧l I 蔷份块到sdram
‘
5 升级过程中断电重启 √
I 修改Idnm中的块
r ‘
通过表1的实验结果,可看出该方案不仅可行而且在健壮性
( 缀雍 ) I在写八之前擦除褶应的块
上有较好的表现。由于篇幅限制,实验样本数据没有全部列出。
● ●
一 撇焉
差分包的更新时效分析参见图7所示。
由图7中的对比数据说明. 600
图6优化后的算法
算法优化后的时效性比优化前 500
3验证及结果分析
得到了显著的提高。说明条件匹
3.1软硬件环境
配的命中率还是可观的。因为 200
500KB的差分包已非常大,在 10
0
(1)硬件环境
O
CPU:lntel Xscale PXA270
实际情况中很少出现,所以。优 50 100 200 300 400 500
Flash:三星OneNAND
化后的升级时间用户完全可以 n包划、(
LCD:240 320,通过LED驱动芯片驱动4个串联LED。
接受。另外,需要说明的是,差分 图7更新时间对比图
(2)软件环境
包的大小和升级时间不成线性关系,甚至可能出现差分包小,而
Bootloader:PXA270 bootloader
升级时间更长的情况。这是因为升级时间主要由需要擦写块的
OS:Linux kernel
多少和是否需要频繁擦写来决定的。
APP:qt+qtopia
3-2实验方法
参考文献
从两方面进行实验验证。
[1]奔峰电子(北京)有限公司.一种电子设备及其管理系统:中国,CN18
(1)软件升级的正确性
63095[P]2006—1 1—15
步骤1分别修改Linux Kernel、修改应用功能、添加新应
[2]伍春天,段哲民.基于PXA270的智能手机硬件系统设计[J]微处理
用功能、修改配置信息后生成四个对应的新软件版本,用新版本
机,2009(3):119-121
制作出四个与原始软件版本的差分包。用下载工具把差分包事
[3]陈晓风OneNAND Flash的操作性能与应用研究[J].海峡科学,2008
(12):48—52
先放置在Update package分区,更新标志位置为1,分别做四
[4]兰婧,朱怡安,袁磊.基于PXA270嵌入式系统的Bootloader研究与
次升级验证。
实现[J]计算机工程与设计,2009(21):4881—4883+4906
步骤2在升级过程中断电,重启终端后,看是否能重启升
[5]Andrew N.Sloss,Dominic Symes,Chris Wright.ARM嵌入系统开
级动作。
发一软件设计与优化[M]沈建华,译北京:北京航空航天大学出版
(2)升级所需的时间
社.2005
步骤1设计一个获取当前系统时间的函数,时间值以秒为
f收稿日期:2012.1.31]
单位。
(上接第10页)
参考文献
经过主、备切换以后,原备用控制器升为主控制器。此时新
[1]朱耿华.工业控制器冗余方案的设计与实现[J]自动化博览,2008
控制器需要完成如下工作:通过USART1的USART1_TX引脚
(6)
发送自己的“心跳”信号;继续运行主、备切换之前原主机运行的 [2]萄冬荣,刘海清.双机容错计算机系统的设计与实现[J].计算机工
任务以及定时将采集到的数据和运算结果同步地传输到现在的
程,2008,34(15)
备用控制器端;同时,发出报警信息提示原主控制器发生故障,
[3]毛南.实时双机嵌入式容错系统的研究及应用[D]北京:中国农业大
通知维修人员及时进行维修。
学.2007
5结束语
[4]杨云波二模容错计算机系统研究与设计[D].西安:西北工业大学,
实践表明该系统能够实现主/备身份确认、数据输入/输出,
2002
能够实现故障自检、主/备切换。
[5]张金森.基于ARM9 DCS主机冗余系统的设计和实现[D]西安:西
安石油大学.2008
f收稿日期:2012.2.21]
版权声明:本文标题:Linux智能手机上自动升级模块的设计与实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1712866094a610105.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论