本实验是将uboot直接烧写在NAND Flash的chunk中,uboot在剩余的空间上挂载YAFFS2文件系统,并将zImage和ramdisk写入文件系统。当系统运行起来后,在相同的NAND Flash空间上挂载YAFFS2文件系统后,可以看到和编辑uboot写入的zImage和ramdisk。同样uboot在启动时也可以看到kernel写入NAND Flash的文件。这样就实现了在uhoot和kernel中都可以升级和更新系统。
2.2 YAFFS2文件系统制作
YAFFS(Yet Another Flash File System)文件系统是专门针对NAND闪存设计的嵌入式文件系统,它是一种类似于JFFS2的日志型文件系统。相对于JFFS2,YAFFS减少了一些功能,因此速度更快、占用内存更少,并且对NAND Flash具有很好的保护机制,能够延长NAND Flash的使用寿命。因此,YAFFS文件系统的出现,使得价格低廉的NAND Flash芯片具有高效性和健壮性。基于NANDFlash的YAFFS文件系统结构框图如图4所示。目前有YAFFS和YAFFS2 2个版本,2个版本的主要区别之一在于YAFFS2能够更好地支持大容量的NAND Flash芯片。
嵌入式Linux内核本身并不支持YAFFS2文件系统,实现Linux内核对YAFFS2文件系统的支持有2种方法:一种是直接把YAFFS2编译到内核,另外一种是将YAFFS2编译成单独的模块进行加载。为了方便调试,本文选用第二种方法。首先下载YAFFS2源码,这里要注意uboot中的YAFFS2应该和内核中的版本一致。然后将YAFFS2源码解压缩,进行相应的代码修改,编译生成yaffs2.ko模块。将此模块加到ramdisk中,系统启动后挂载yaffs2.ko模块,此时就可以对NAND Flash进行读写。
结语
本文针对嵌入式Linux操作系统,基于uboot和内核对YAFFS2文件系统的支持,利用NAND Flash实现对嵌入式系统的远程更新。本系统从NAND Flash中引导内核与文件系统,可以省去NOR Flash,降低成本。通过以太网对远程嵌入式终端进行自动更新,具有操作简单、更新速度快的特点。
联系客服