新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM的嵌入式Bootloader实现自动升级

基于ARM的嵌入式Bootloader实现自动升级

作者: 时间:2012-03-23 来源:网络 收藏

在系统初次安装或传统升级时烧写内核和文件系统时用Sigma Designs 公司提供的tera term软件烧写,步骤为:

1) cd ../armutils_2.5.80.0/bin

2) uuencode romfs-config-envision8624L-romfs-rom.bin.gz x > romfs-config-envision8624L-romfs-rom.bin.gz.uuencode //生成uuencode编码的文件(为ascii码,用于在windows环境下烧入flash);

3) 运行tera term出现boot >

4)运行config serial fast,然后选菜单setupàserial port,设置baud rate为115200(串口波特率);

5)在Boot>download serial romfs gz ,准备接受文件;

6)选菜单file-->send file,选中romfs-config-envision8620L-romfs-rom.bin.gz.uuencode,确定后,你会看到tera term下载文件;

7). Boot> flash romfs,把文件烧到flash中;

在本实验中,升级时将生成的内核和文件系统映像文件直接以二进制形式烧进去,不需要用uuencode转,即:把romfs-dtv-EM8624L-romfs.bin放在CF卡或移动硬盘相应的文件中进行升级即可。实现的伪代码为:

#define FLASH_SIZE 0X8000000

#define LOADER_FLASHBASE 0X46030000 //romfs存放的起始物理地址

if (fp = fopen(UPDATEFILE , ”rb”)) == NULL)return;www.51kaifa.com

else

{

Flash_erase_region(LOADER_FLASHBASE , romfs_len); //删除0x46030000开始的romfs_len长度的flash区域;

Flash_write_data(LOADER_FLASHBASE ,UPDATEFILE, romfs_len); //把要升级的romfs烧写0x46030000开始的romfs_len长度的flash区域中;

}

remove(UPDATEFILE); //升级完后删除CF卡或移动硬盘的升级文件,以免下次启动又要开始升级;

system("reboot"); //重启新系统

上述函数调用放在的stage1中执行。

4 结论

本文分析了嵌入式系统的的实现过程,并提出了通过CF卡或移动硬盘实现嵌入式系统的,一方面简化了升级过程,不需要通过串口将目标板与主机相连来实现系统升级,而只需插入CF卡或移动硬盘就可以完成,尤其对支持网络功能的嵌入式设备来说,只需远程地把要升级的文件通过网络拷贝到CF卡或硬盘中指定的目录下即可,不需要带着主机到现场去升级;另一方面,升级速度也大大提高,因为系统对CF卡或移动硬盘的存取速度远远高于串口。

本文作者创新点是:通过CF存储卡或移动硬盘在嵌入式系统的Bootloader中实现。经过调试,系统运行正常,达到自动升级的目的,具有一定的商业价值和社会价值,同时,对同类的嵌入式系统的产品开发具有一定的借鉴意义。

参考文献:

[1]王建,许毅平,周曼丽.7嵌入式系统中Bootloader分析与设计[J]. 微计算机信息,2006,5-2

[2] 詹荣开 . 嵌入式系统Bootloader技术内幕

http://www.ibm.com/developerworks/cn/linux/l-btloader/index.html

[3] 张治斌,乔应旭 . SST89C54与CF卡的接口设计与实现

http://www.chinaecnet.com/xsj06/xsj064331.aspwww.51kaifa.com

[4]Raj Kamal . Embedded Systems Architecture , Programming and Design 清华大学出版社

[5] 单承刚,戴学丰,刘树东,崔登志 .基于的嵌入式BootLoader设计与启动过程 . 微计算机信息2006,32期

[6]周立功等 .微控制器基础与实践[M] . 北京:北京航空航天大学出版社 . 2003


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭