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

基于Uboot的嵌入式系统远程更新设计
罗正华;唐帅
【摘 要】IKRTV提出了一种基于Uboot的嵌入式系统远程更新设计,主要由三星S5PV210微处理器、DM9000网卡芯片、NAND Flash芯片以及SDRAM随机存储芯片组成,结合MTD分区技术和tftp下载命令,通过对系统内核和Uboot的修改,添加自定义启动命令,从而实现Flash分区设计和远程映像文件自动更新.
【期刊名称】《成都大学学报(自然科学版)》
【年(卷),期】2018(037)002
【总页数】4页(P173-175,190)
【关键词】嵌入式系统;Uboot;NAND Flash;tftp;远程更新
【作 者】罗正华;唐帅
【作者单位】成都大学 信息科学与工程学院,四川成都610106;成都大学 信息科学与工程学院,四川成都610106
【正文语种】中 文
【中图分类】TP368.1
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所示.
图2 Uboot工作流程图
2 其他相关设计
2.1 Flash分区设计
2.1.1 Flash分区机制.
为避免更新失败而导致初始系统瘫痪及提高系统更新的可靠性,本研究对Flash存储器的布局进行了重新设计,具体方法是:将内核存储区和文件系统存储区(为方便起见,统称为映像文件存储区),即将原来的1个映像文件存储区,设计为2个映像文件存储区,分别为存储区0和存储区1.其中,存储区0为默认存储区,在第1次烧录时,默认烧录到存储区0,并且
将启动点值置1,等更新映像文件下载到SDRAM后,读取启动点值,将更新映像文件烧录到Flash中,并将启动点值清0,完成更新.当进行下次更新时,读取启动点值,将其烧录到存储区0,再将启动点值置1,这样如此循环完成每次更新.同时,为保证启动点值掉电不丢失,将其固化到Flash中高地址的参数分区.Flash布局如图3所示.
2.1.2 MTD分区技术.
本设计通过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向内核传递参数来改变分区信息,
图3 Flash布局示意图
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
羊毛抛光轮
zreladdr-(CONFIG-MACH-SMDKV210):=0x30008000
params-phys-(CONFIG-MACH-SMDKV210):=0x30000100
再通过判断启动点值,在不同的启动地址加载内核和文件系统.此过程在启动后的那段检测更新的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 3;开始烧写内核到Flash,执行命令movi write kernel 30008000;开始烧写文件系统到Flash,执行命令movi write rootfs 30B00000 300000;执行save,保存所有环境变量.

本文发布于:2024-09-24 08:26:10,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/142972.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:映像   系统   启动
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议