历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2021年04月15日 | ARM的嵌入式Bootloader实现自动升级

2021-04-15 来源:21ic

0 引言


作为一种32位的高性能、低成本、低功耗的嵌入式RISC(Reduced Instruction Set Computer)微处理器,ARM(Advanced RISC Machines)微处理器目前已经成为应用最广泛的嵌入式微处理器。和基于简单RTOS甚至没有使用任何操作系统的嵌入式程序设计相比,基于ARM- uClinux嵌入式系统的开发采用了成熟、高效、可靠、模块化、易于配置的操作系统,使程序具有良好的可移植性,博得众多嵌入式开发者的青睐[1]。嵌入式系统由硬件和软件两部分组成,软件部分主要包括Bootloader、内核和文件系统。但由于Bootloader与处理器的体系结构和具体嵌入式板级设备的配置密切相关,至今没有一个完全通用的Bootloader可以直接应用于各种嵌入式系统中,因此Bootloader成为运行嵌入式 Linux系统设计的一个关键问题。


通常在嵌入式系统中,首先通过专用烧录器将Bootloader烧写到目标板的Flash中,然后在Bootloader中,将内核映像文件和文件系统映像文件通过串口和网络下载并烧写到Flash中。若需对内核或文件系统升级,则按上述方法重新烧写新的Kernel,Romfs直接覆盖原来的 Kernel,Romfs。这种方法中,一方面必须将目标板和主机通过串口线或网线相连,需到现场去升级,比较麻烦;另一方面,通过串口或网络烧写映像文件,速度很慢。本文分析Bootloader的结构和主要任务,并针对实际项目开发中用到的Sigma Designs 公司的EM8624L芯片(ARM7TDMI处理器+uClinux)扩充Bootloader功能,实现了通过CF存储卡或硬盘对内核或文件系统映像文件的自动升级。对需要经常为Kernel,Romfs升级的嵌入式系统来说,克服了传统升级方法的局限,简化了升级方法,提高了升级速度。


1 ARM-uClinux嵌入式系统硬件平台


EM8624L是Sigma Designs公司的一款采用ARM7TDMI内核的高性能的嵌入式芯片,主要用于多媒体播放,尤其支持高清片源播放的场合。该芯片的特点:主频为 166MHz和200MHz(可选),没有内存单元(MMU),16KB的数据cache和16KB的指令cache,8KB的SRAM和2KB的 ISP、2KB的DSP,外围总线接口支持SDRAM、静态存储器、Flash并且有以太网(Ethemet10/100)、USB2.0接口,2个 UART接口等等,其总体设计硬件结构如图1:




15.jpg?imageView2/2/w/550


2 Bootloader分析


Bootloader是在操作系统内核运行之前运行的一段程序。通过此程序,可以初始化硬件设备、建立内存空间的映射图,以便为最终调用操作系统内核准备好正确的环境。


2.1 Bootloader结构及工作流程


大多数Bootloader都包含两种不同的操作模式[2]:


1)启动加载(Boot loading)模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。


2)下载(Down loading)模式:在这种模式下,目标机的Bootloader将通过串口或网络连接等通信手段从主机下载内核映像和根文件系统映像等,然后保存到目标机上的Flash类固态存储设备中。 Bootloader的这种模式通常在系统初次安装和更新时被使用。




基于ARM的芯片多数为复杂的片上系统(SoC),这类复杂系统里的多数硬件模块都是可配置的,因此大多数Bootloader都分为stage0 和stage1两大部分。依赖于CPU体系结构的代码,通常都放在stage0中,在这一部分,我们直接对处理器内核和硬件控制器进行编程,因此常常都用汇编语言来实现。而stage1则通常用C/C++语言来实现,这样可以实现更复杂的功能,而且代码具有更好的可读性和可移植性。


因此,Bootloader中stage0的主要任务如下:屏蔽所有中断,初始化相关GPIO(General Purpose IO),初始化SDRAM,拷贝Bootloader和Kernel到SDRAM中,关闭数据Cache,跳转到Stage1执行等。本实验在 Bootloader中实现进入stage0的代码如下:

//@EM8624Lhas internal memory at REG_BASE_CPUwww.51kaifa.com

ldr r1,=(REG_BASE_CPU + STAGE0_CRYPTO_STACK_SIZE)

mov sp , r1

//@callcrypto stage 0 entry function

ldr r1 , =(STAGE0_CRYPTO_IMAGE_START) @new pc

mov lr , pc

mov pc , r1

uart_putc #’x’ , r10 , r11

Stage1的主要任务如下:初始化计时器,初始化网络,初始化Flash,装载内核映像和文件系统映像,初始化命令控制台等。进入stage1的汇编代码如下:

adr r0 , load_addr//@getstage1 entry point

ldr r9 , [r0 , #0x0c]

3 本实验基本原理




16.jpg?imageView2/2/w/550


本实验对 Bootloader的功能进行了扩充,加入自动升级的功能。即:用户需要对目标板的内核或文件系统进行升级,只需要将新的映像文件拷贝到CF存储卡或移动硬盘中,然后将CF卡或移动硬盘插入目标板相应的插槽,每次重启目标板时,先启动Bootloader,初始化硬件环境后,在应用程序运行前,判断是否存在要升级的文件,如果存在则先把Flash指定的位置的内容擦除掉,然后再把要升级的内核或文件系统的映像文件写进相应的位置,写完后立即删除CF存储卡或移动硬盘上的升级文件,即完成升级。如图2


项目开发板上有一块8M Byte的Flash和二块32M Bit的DDR SDRAM。Flash的起始地址映射到0x00000000,其布局如下[7]:




17.jpg?imageView2/2/w/550


如图所示,在虚拟地址位置0x00030000(实际物理地址为0x46030000)擦除和重写内核与文件系统映像文件。要对CF卡或移动硬盘进行文件存取,必须将CF卡或移动硬盘格式化成某种文件系统。本实验所编写的Bootloader主要支持3种文件系统:FAT16,FAT32,EXT2。系统启动时,Bootloader首先检测CF卡或移动硬盘的文件系统类型,然后按照相应的文件系统格式查询CF 卡或移动硬盘的所有文件。若发现有更新的映像文件,则读CF卡的操作,CF卡的驱动见文献[3],将映像文件读到SDRAM中,再从SDRAM烧写到嵌入式开发版的Flash中,实现升级。


生成内核和文件系统步骤如下:


1)进入linux的armutils_2.5.127.0目录下执行make linux-config,裁剪uClinux的配置;

2)make linux 生成kernel-2.4.22-dtv-EM8624L-romfs.bin ,这是uClinux的内核;

3)make rootfs 生成rootfs-dtv-EM8624L-romfs.ext2,这是root文件系统;

4)make romfs 生成romfs-dtv-EM8624L-romfs.bin.gz,这是rom文件系统。


Bootloader在系统初次安装或传统升级时烧写内核和文件系统时用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"); //重启新系统


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


4 结论


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


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

参考文献:

[1]王建,许毅平,周曼丽. ARM7嵌入式系统中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] 单承刚,戴学丰,刘树东,崔登志 .基于ARM的嵌入式 BootLoader设计与启动过程 . 微计算机信息2006,32期

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


推荐阅读

史海拾趣

风华邦科(FH-BK)公司的发展小趣事

在电子科技领域,FlyWin集团不断投入研发资源,致力于新技术的开发与应用。公司成立了专门的研发团队,专注于人工智能、物联网等前沿技术的探索。通过不断的技术创新,FlyWin成功推出了一系列具有自主知识产权的电子产品,如智能传感器、物联网解决方案等。这些产品不仅提升了公司的市场竞争力,也为公司的长远发展提供了强大的技术支撑。

EDAL公司的发展小趣事

随着技术的不断进步和市场的变化,EDAL公司意识到必须不断优化产品以满足客户的需求。公司投入大量研发资源,对EDA工具进行迭代升级,推出了更加智能化、用户友好的产品。同时,EDAL公司积极拓展市场,与全球各大芯片设计公司建立了合作关系,将产品销售到世界各地。

BROTHER公司的发展小趣事

随着全球环保意识的提高,BROTHER公司也积极践行环保理念,推动绿色生产。公司注重节能减排和资源循环利用,采用环保材料和生产工艺,减少对环境的影响。同时,BROTHER还开展了一系列环保公益活动,宣传环保理念,提高公众环保意识。通过践行环保理念,BROTHER不仅赢得了社会的认可和尊重,还为公司的可持续发展奠定了坚实基础。

以上五个故事只是BROTHER公司在电子行业发展历程中的一部分缩影。实际上,BROTHER的发展还涉及更多的细节和方面。但无论如何,BROTHER始终坚持创新、质量、服务和环保的理念,不断追求卓越和完美,为电子行业的发展做出了重要贡献。

Clever Little Box公司的发展小趣事

Clever Little Box公司成立于1964年,当时正值电子行业的蓬勃发展时期。创始人凭借对音频和电子技术的深厚理解,以及对市场的敏锐洞察,决定成立这家公司,专注于音频和电子组件的分销。创业初期,公司面临着资金短缺、市场竞争激烈等诸多挑战,但创始人凭借坚定的信念和不懈的努力,逐渐在市场中站稳了脚跟。

ETERNA公司的发展小趣事

ETERNA公司起源于1856年,由格斯塔夫·罗斯切尔德和约翰·乌尔里希在瑞士的圣伊米尔创立。自成立之初,ETERNA便以精湛的制表工艺和不懈的创新精神闻名于世。公司不断推出具有划时代意义的腕表产品,其中最具代表性的是其“五点星座”设计,这一设计成为了品牌的象征,并引领了制表业的新潮流。ETERNA通过不断的技术创新和设计突破,逐渐在电子行业中崭露头角。

Chiplus Semiconductor Corp公司的发展小趣事

Chiplus自成立以来,始终致力于技术创新和产品研发。公司团队不断深入研究SRAM和LED驱动IC的设计与开发,成功推出了多款高速度、低功率的产品。这些产品以其卓越的性能和稳定性,赢得了全球客户的广泛认可。同时,Chiplus还积极投入研发资源,探索新的应用领域,不断拓展产品线,为客户提供更多元化的解决方案。

问答坊 | AI 解惑

大家第一个项目都做了多久啊?

最近调试项目都快吐了,想看看牛人们都用了多少时间完成自己第一个项目的啊,大家交流交流~…

查看全部问答>

VS2005里面,我自己创建的类(没有通过类向导创建)怎么突然不能增加成员函数了(昨天还是可以的),增加成员变量是可以的,怎么回事啊?!

VS2005里面,我自己创建的类(没有通过类向导创建)怎么突然不能增加成员函数了(昨天还是可以的),增加成员变量是可以的,怎么回事啊?!…

查看全部问答>

200分求解两个嵌入式问题,我块崩溃了

我的开发板是北京一家公司搞的叫YC2440,和S3C2440差不多 我的电脑主板是昂达N61,没有串口和并口。买了一根USB转串口,一根PCI转并口 调式用的是WIGGER接JTAG,AXD,RO和RW配置应该没问题,但是程序一跑就一直RUNNING IMAGE,这是第一个问题,我 ...…

查看全部问答>

请问VxWorks下网络上传的文件和直接拷贝的文件有什么不同吗?

我需要在目标机上放置大量的.DAT数据文件以供程序读取运行,将目标机硬盘接到主机上直接将这些文件拷贝到目标机硬盘上,然后恢复目标机即可正常运行,但是将这些文件直接通过网络ftp上传到目标机硬盘上后,却没能正常的读取这些文件。请问这可能是 ...…

查看全部问答>

请问一个usb的问题

问一下 pdiusbd12中检查它的型号的时候,为什么要读取两次? U32 tmp;                 D12Cmd = 0xfd;         tmp = D12Dat;         tmp = tmp…

查看全部问答>

HP的待遇以及文化!!

帮我拿个主意!!我最近去了一家培训公司面试,面试的是HP的电话技术支持工程师 400多个人面试,最后通过的就六个人,其中有我一个!!! 通知我明天去复试,是HP亲自面试,各位说我去不去??? 最主要的是这家公司要岗前培训,有费用4800多元 ...…

查看全部问答>

BKP寄存器改不了?

指令:  *(vu16 *) (BKP_BASE + 1) = 0x5a5b;…

查看全部问答>

MSP430的稳定性

         我在学校的项目和课程中接触过freescale的s12x单片机、51单片机和MSP430单片机。当初老师对我们说过,MSP430单片机是低功耗便携式设备的不二之选。但MSP430的稳定性不太好,在强磁场或高压复杂环 ...…

查看全部问答>

求个能用的2812开发板空板

最近申请了ti的样片,但是感觉自己做板子不划算,所以来论坛求块dsp2812开发板的空pcb 希望能外扩sram和flash,除了电源和地之外的引脚全部引出,最好是经过验证的,先谢谢了…

查看全部问答>