|
如何让基于ARM的嵌入式Bootloader实现自动升级
[复制链接]
作为一种32位的高性能、低成本、低功耗的嵌入式RISC微处理器,ARM微处理器目前已经成为应用最广泛的嵌入式微处理器。嵌入式系统由硬件和软件两部分组成,软件部分主要包括Bootloader、内核和文件系统。但由于Bootloader与处理器的体系结构和具体嵌入式板级设备的配置密切相关,至今没有一个完全通用的Bootloader可以直接应用于各种嵌入式系统中,因此Bootloader成为运行嵌入式Linux系统设计的一个关键问题。下面由卓跃教育为您介绍如何让基于ARM的嵌入式Bootloader实现自动升级的。 通常在嵌入式系统中,首先通过专用烧录器将Bootloader烧写到目标板的Flash中,然后在Bootloader中,将内核映像文件和文件系统映像文件通过串口和网络下载并烧写到Flash中。若需对内核或文件系统升级,则按上述方法重新烧写新的Kernel,Romfs直接覆盖原来的Kernel,Romfs。这种方法中,一方面必须将目标板和主机通过串口线或网线相连,需到现场去升级,比较麻烦;另一方面,通过串口或网络烧写映像文件,速度很慢。本文分析Bootloader的结构和主要任务,并针对实际项目开发中用到的SigmaDesigns公司的EM8624L芯片(ARM7TDMI处理器+uClinux)扩充Bootloader功能,实现了通过CF存储卡或硬盘对内核或文件系统映像文件的自动升级。对需要经常为Kernel,Romfs升级的嵌入式系统来说,克服了传统升级方法的局限,简化了升级方法,提高了升级速度。 大多数Bootloader都包含两种不同的操作模式:1)启动加载(Bootloading)模式; 2)下载(Downloading)模式。 基于ARM的芯片多数为复杂的片上系统(SoC),这类复杂系统里的多数硬件模块都是可配置的,因此大多数Bootloader都分为stage0和stage1两大部分。Bootloader中stage0的主要任务如下:屏蔽所有中断,初始化相关GPIO(GeneralPurposeIO),初始化SDRAM,拷贝Bootloader和Kernel到SDRAM中,关闭数据Cache,跳转到Stage1执行等。Stage1的主要任务如下:初始化计时器,初始化网络,初始化Flash,装载内核映像和文件系统映像,初始化命令控制台等。 基本原理 本实验对Bootloader的功能进行了扩充,加入自动升级的功能。即:用户需要对目标板的内核或文件系统进行升级,只需要将新的映像文件拷贝到CF存储卡或移动硬盘中,然后将CF卡或移动硬盘插入目标板相应的插槽,每次重启目标板时,先启动Bootloader,初始化硬件环境后,在应用程序运行前,判断是否存在要升级的文件,如果存在则先把Flash指定的位置的内容擦除掉,然后再把要升级的内核或文件系统的映像文件写进相应的位置,写完后立即删除CF存储卡或移动硬盘上的升级文件,即完成升级。
|
|