利用SD卡实现嵌入式Linux系统的自动升级
(2)判断SD卡中是否有内核映像文件
如果存在,则将其烧写到Flash相应的分区当中。实现这个功能需要使用到Uboot中的run_command函数,由于kernel的映像文件一般不会超过5 MB,所以在烧写kernel的时候不需要检查映像文件的大小。检查内核映像文件是否存在也是通过执行命令的方式,如果存在,那么Env环境变量fileexist的值就是YES,并且此时的内核映像已经存在于SDRAM当中,可以直接通过命令烧写到Flash相应的分区当中。具体的代码如下:

(3)判断SD卡中是否有文件系统映像文件
如果存在,则写入到相应的Flash分区当中。本实验设备上使用的文件系统是Yaffs2,通过Uboot命令烧写Yaffs2文件系统的时候,必须要知道它的实际大小。由于升级很可能导致文件系统大小的变化,所以这里必须将读取到SDRAM当中的文件大小记录下来,这个工作在Uboot中已经完成,我们只需要通过getenv(filesize)就可以获得载入SDRAM当中的文件大小,其他的步骤和烧写内核映像是一样的。具体代码如下:

经过上面3个步骤修改的Uboot程序可支持SD卡自动升级的功能,需要注意这段代码应该放在Uboot自动加载系统之前,推荐将这些代码放在main_loop函数中。
结语
本文通过定制扩展Uboot实现了用SD卡方式进行嵌入式设备操作系统的自动升级,这种方式不但克服了传统升级方式的局限性,而且具有一定商业价值。目前,该方法经过调试,系统运行正常。显然,要通过SD卡实现系统升级,需要嵌入式设备具有SD卡接口,因此,它并不适合所有的嵌入式系统,但是这种实现机制可供借鉴。本文引用地址:https://www.eepw.com.cn/article/148225.htm linux操作系统文章专题:linux操作系统详解(linux不再难懂)
linux相关文章:linux教程
评论