APP下载

基于Uboot的嵌入式系统远程更新设计

2018-07-10罗正华

关键词:PC机内核以太网

罗正华,唐 帅

(成都大学 信息科学与工程学院,四川 成都 610106)

0 引 言

随着嵌入式系统在各个领域的广泛应用,嵌入式软件的维护变得日益重要.事实上,当嵌入式系统投入实际环境运行后,一方面,在软件开发过程中无法充分测试的错误会暴露出来,另一方面,用户也会对嵌入式软件提出新的功能要求和性能要求.因此,嵌入式软件的更新与升级逐渐成为嵌入式系统实际应用的一个重要方面[1].目前,对嵌入式系统的更新主要还是通过开机自动运行的引导代码Bootloader实现.Bootloader的主要任务包括:初始化最基本的硬件;将Bootloader本身拷贝到RAM中运行;将内核拷贝到 RAM中并调用内核等[2].由此可见,该更新过程会覆盖原来的镜像文件,一旦更新失败则会导致系统瘫痪.为解决此问题,本研究采用Uboot作为Bootloader,并提出一种可靠的更新机制.

1 系统设计

1.1 系统硬件平台结构

本系统硬件平台结构设计采用三星S5PV210芯片作为微处理器.S5PV210采用ARM Cortex-A8内核,ARM v7指令集,主频可达1 GHZ,内部集成了PowerVR SGX540的高性能图形引擎,支持3D图形流畅运行[3].Flash设计采用4 GB Nand Flash作为外部储存器,内存设计为DRR2 512 MB,以太网适配器采用DM9000CEP芯片,并提供SD卡启动支持、以太网接口和其他外围接口.系统硬件平台功能框图如图1所示.

图1系统硬件平台功能框图

1.2 系统软件更新流程

本研究设计的Bootloader和系统内核采用Uboot-1.3.4和Linux kernel,通过对Uboot和系统内核kernel的改造实现对ARM程序的更新,并通过挂载文件系统实现对应用程序的更新.系统上电后,首先运行的是Uboot程序,通过对Uboot内部分区表的修改对传统的Flash布局进行重新分区设计,保证了即使更新过程失败也不会损坏原来的系统[4].

同时,通过编写的C语言程序,实现上电检测是否更新.当检测到更新的系统内核映像和文件系统映像后,将TFTP下载到SDRAM中(为表述方便,以下将内核映像和文件系统映像统称为映像),再判断映像下载是否成功和校验映像是否正确,读取设置的启动点值,判断将映像烧录到存储区0还是存储区1,烧录完成后校验映像文件,修改启动点值,跳转到SDRAM中加载映像文件,然后启动系统.Uboot工作流程图如图2所示.

图2Uboot工作流程图

2 其他相关设计

2.1 Flash分区设计

2.1.1Flash分区机制.

为避免更新失败而导致初始系统瘫痪及提高系统更新的可靠性,本研究对Flash存储器的布局进行了重新设计,具体方法是:将内核存储区和文件系统存储区(为方便起见,统称为映像文件存储区),即将原来的1个映像文件存储区,设计为2个映像文件存储区,分别为存储区0和存储区1.其中,存储区0为默认存储区,在第1次烧录时,默认烧录到存储区0,并且将启动点值置1,等更新映像文件下载到SDRAM后,读取启动点值,将更新映像文件烧录到Flash中,并将启动点值清0,完成更新.当进行下次更新时,读取启动点值,将其烧录到存储区0,再将启动点值置1,这样如此循环完成每次更新.同时,为保证启动点值掉电不丢失,将其固化到Flash中高地址的参数分区.Flash布局如图3所示.

2.1.2MTD分区技术.

本设计通过MTD分区技术对Nand Flash进行分区[5],内核中的MTD分区信息在kernel/arch/arm/plat-s3c24xx/common-smdk.c中,通过结构体static struct mtd-partition smdk-default-nand-part[]实现.要在Uboot中通过MTD技术修改内核分区表,则需在Uboot中添加mtdparts命令,然后通过Uboot向内核传递参数来改变分区信息,

图3Flash布局示意图

set bootargs ′mtdparts=nand-flash:128k(u-boot)ro,64k(u-boot envs),3m(kernel),30m(root.yaffs)′

为使这个参数起作用,必须要支持内核中的MTD驱动,即在内核配置时,需要选择,

Device Drivers->Memory Technology Device(MTD) support->Command line partition table parsing.

由于本设计包含存储区0和存储区1,那么,就会有2个不同的kernel和文件系统分区,通过修改kernel/arch/arm/kernel/head.S文件,设置2个不同的内核和文件系统启动地址,映像文件存储区0启动地址,

# override for SMDKV210

再通过判断启动点值,在不同的启动地址加载内核和文件系统.此过程在启动后的那段检测更新的C程序里实现.

2.2 更新程序设计

为实现上电后自动检测是否更新,本设计通过运行自定义的Uboot命令myuboot实现,再通过tftp命令下载更新,设置启动点值,判断是否下载成功,并烧写映像文件到相应存储区.

在Uboot中,每个命令都使用一个struct cmd-tbl-s结构体定义,该定义在uboot/include/command.h中实现,添加自定义命令:

1)添加命令行配置信息,在uboot/include/configs/x210-sd.h中添加#define CONFIG-CMD-MYUBOOT;

2)编写命令行对应的源程序,在uboot/common中添加文件cmd-myuboot.c(对应的命令名叫myuboot,对应的函数叫do-myuboot函数);

3)在添加编译uboot/common/Makefile中,添加COBJS-y+=cmd-myuboot.o;

4)更改环境变量bootcmd=myuboot(开机首先执行此命令),执行set bootcmd myuboot,然后,执行save;

5)重新编译烧录.编译步骤为:make distclean;make x210-sd-config;make.

2.3 TFTP下载映像及烧写到Flash

本设计采用简单文件传输协议TFTP,利用以太网接口快速烧写映像文件到Flash存储区.其中,Uboot程序基于TFTP通信协议,这样,能充分提高对文件的下载速度,以PC机作为TFTP服务器端,嵌入式目标平台作为TFTP客户端[6],通过Uboot中自带的tftp命令,将PC机/tftpserver目录下的映像文件下载到SDRAM,再烧写到Flash中.

将网线的一端连接到硬件平台的以太网口,一端连接到PC机的以太网口,其中,PC机为Windows操作系统,通过安装在PC机的TFTP服务器上位机,实现与开发板之间的通信,再通过movi命令将映像文件烧写到Flash中,具体步骤为:设置好PC机的IP地址,如:192.168.1.10;设置好TFTP服务器的指定目录,如:/tftpserver;设置Uboot的ipaddr(保证与主机在同一个网段):set ipaddr 192.168.1.20;设置Uboot的serverip为主机的IP地址:set serverip 192.168.1.10;开始tftp下载,执行命令tftp 30008000 zImage和tftp 30B00000 rootfs.ext3;开始烧写内核到Flash,执行命令movi write kernel 30008000;开始烧写文件系统到Flash,执行命令movi write rootfs 30B00000 300000;执行save,保存所有环境变量.

需注意的是,由于TFTP是基于UDP协议,因此,必须在程序中添加能够保证数据有效传输的机制来及时处理分组丢失的情况,在程序中设置定时机制来达到超时重传的目的,同时,采用CRC32来校验最终内核文件是否完好,以确保传输数据的可靠性.

3 测试与结果

在测试中,用网线将PC机与硬件平台以太网口相连,用USB转串口线,将硬件平台的串口与PC端的USB口相连,用于检测是否更新成功,同时,接上电源线.系统硬件连接如图4所示.

当系统上电启动后,Uboot加载映像文件之前,先执行自定义myuboot命令,判断是否接收更新,更新则通过tftp命令下载到SDRAM中,然后烧写到Flash相应分区中.PC端软件监视结果如图5所示.

图4系统硬件连接图

图5软件监视图

测试结果表明,系统各项功能运行正常.

4 结 语

本研究提出了一种通过向Uboot中添加自定义命令实现远程更新的方案,并基于三星S5PV210微处理器进行开发实现,具体包括:Flash分区思路与实现技术,自定义命令设计理念及添加方法,TFTP烧写映像文件过程.同时,为保证传输的可靠性,对Flash进行了分区设计,并对传输文件进行超时重传、CRC32校验等处理.采用本研究的设计方案,可以实现一种既可靠又快捷的嵌入式系统远程更新升级机制.

猜你喜欢

PC机内核以太网
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
VC.NET下实现dsPIC单片机与PC机的通信
谈实时以太网EtherCAT技术在变电站自动化中的应用
排除OLT设备登录故障
浅谈EPON与工业以太网在贵遵高速公路中的应用