利用SD卡实现嵌入式Linux系统的自动升级
摘要:提出了一种扩展Uboot实现嵌入式设备操作系统维护与升级的方法。该方法将待升级的内核和文件系统映像放入SD卡中,当系统重启时,扩展后的Uboot会自动检测并读取SD卡中的映像文件,再烧写到嵌入式设备实现自动升级。该方法较传统的通过JTAG口、串口或者网口连接到主机,在主机上通过手动输入控制命令完成内核或者文件系统的升级方式更为便捷高效。
关键词:SD卡;Uboot;Linux;自动升级
引言
随着现代工业社会逐步向智能化社会的过度,嵌入式在现代经济生活中扮演着至关重要的角色。32位的高性能、低成本、低功耗的嵌入式RISC(Reduced InstructionSet Computer)微处理器——ARM(Advanced RISC Machines)已经成为应用最广泛的嵌入式微处理器。
目前,基于ARM的嵌入式系统在各个领域都有着广泛的应用,嵌入式系统的维护与升级也变的日益重要。由于新技术的不断涌现和对系统功能、性能等要求的不断提高,开发者必须能够针对系统进行升级和维护,以延长系统的使用周期,改善系统性能,增强系统适应性。
传统的嵌入式系统升级,首先通过JTAG接口将Bootloader烧写到目标板的Flash中,然后在Bootloader中,将内核映像文件和文件系统映像文件通过串口或者网络下载并烧写到Flash。若需对内核或文件系统升级,则要按照上述方法重新烧写新的映像文件,直接覆盖原来的映像文件。这类方法,一方面必须将嵌入式设备和主机通过串口线或者网线相连接;另一方面需要人工手动输入控制命令,而且通过串口或网络下载映像文件速度非常慢。
本文针对嵌入式Linux操作系统提出了一种新的升级机制,即通过将映像文件拷贝到SD卡中,由扩展后的Uboot实现系统自动升级,这个方法可以有效克服传统升级方法的局限,简化系统升级步骤,提高升级速度。
1 工作原理
一个嵌入式Linux系统从软件的角度看通常可以分为4个层次:Bootloader、Linux内核、文件系统和用户应用程序。这4个层次中,Boot loader一般是按照嵌入式系统的硬件配置定制的,是嵌入式系统加电以后运行的第一段软件代码。要对Bootloader升级只能通过人工手动完成,不过一般嵌入式系统在硬件平台没有变化的情况下是不需要对Bootloader进行升级的。用户应用程序只是运行在Linux操作系统上的一个程序,其升级方法简单,一般可以通过网络直接进行升级。Linux内核和文件系统的升级不像Bootloader那样基本不需要升级,也不像应用程序那样很容易完成升级。目前,对于Linux内核和文件系统的升级一般都是在Bootloader中实现的。
通过对Uboot的功能进行扩充,加入了系统升级的功能。例如,用户需要对嵌入式设备上的Linux内核或文件系统进行升级,只需要将新的Linux内核或文件系统映像,命名为指定的名称拷贝到SD卡中。如果此时系统处于非运行状态,只需要重新启动嵌入式设备即可进行升级
过程;如果系统处于运行状态,Linux系统会自动检测SD卡是否存在相应的升级文件,存在则自动reboot,这样也完成了系统的升级。
不论系统是否处于运行状态,真正的系统升级过程都是在Uboot中完成的。设备重启时,首先运行Uboot,在这过程中Uboot完成系统初始化之后,在引导内核之前先检查SD卡中是否有Linux内核或文件系统映像文件。若有,则读取映像文件到SDRAM当中,然后通过Uboot中的Flas h命令将内核或者文件系统映像烧写到相应的分区当中来完成升级;若无,则直接启动系统,具体流程如图1所示。
linux相关文章:linux教程
评论