微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于嵌入式Cramfs 的根文件系统配置新方法

基于嵌入式Cramfs 的根文件系统配置新方法

时间:07-16 来源:互联网 点击:

摘 要:根文件系统是构建一个Linux 嵌入式系统的重要组成部分,目前嵌入式系统可以选 择的根文件系统有:Romfs、Cramfs、Ramfs、Jffs2、Ext2 等,而目前广泛使用的Cramfs 根文件系统是只读型文件系统,在实际应用中,应用程序往往需要对根文件系统进行读、写 操作的,因此,如果针对Cramfs 系统直接进行写操作就会造成系统错误。文中提出了配置 Cramfs 根文件系统的新方法,实验证明,该方法能够使Cramfs 满足应用程序的读、写要 求,并能够保障系统的正常稳定运行,同时也减小了根文件系统所占用的存储空间。

1 引言

随着电子产业的不断发展,基于 ARM 技术的系统设计和开发平台越来越多地在控制 类、消费类、通信类等电子产品中广泛应用。从软件角度上看,构建基于ARM 技术的linux 系统要涉及到引导加载程序、Linux 内核、文件系统、用户应用程序几部分的设计。 文件系统是操作系统中用来管理用户文件的内核软件层。文件可能存在于磁盘、网络或 者是一些虚拟的文件。文件系统包括根文件系统和建立于内存设备之上文件系统。根文件系 统是linux 系统的核心部分,包含系统使用的软件和库,以及所有用来为用户提供支持架构 和用户使用的应用软件,并作为存储数据读写结果的区域。由于嵌入式设备中Flash 资源很 紧张,如何有效地使用有限的存储空间是嵌入式开发者必须考虑的,合适的文件系统格式是 解决这一问题的关键所在。本文讨论了只读型压缩Cramfs 根文件系统的特点,并详细的说 明了NAND FLASH 上建立一个可读可写型嵌嵌入式Linux 的Cramfs 根文件系统的新方法。

2 Linux 根文件系统概述

2.1 Linux根文件系统

根文件系统不同于普通文件系统,它是在内核启动时挂载(mount)的第一个文件系统, 内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后把一 些基本的初始化脚本和服务程序等加载到内存中。

Linux 根文件系统是树型结构组织[1,3],它包含了内核和系统管理所需要的各种文档和程序等。一般来说,根目录“/”下顶层目录都有一些比较固定命名和用途,下面列出一

个Linux 根文件系统中的比较常见的目录结构。

/bin:存放二进制可执行命令的目录。

/dev:存放设备文件和目录。

/etc:存放系统管理和配置文件和目录。

/home:用户主目录,比如用户user 的主目录就是/home/user,可以用~user 来表示。

/lib:存放动态链接共享库的目录。

/sbin:存放系统管理员使用的管理程序的目录。

/tmp:公用的临时文件存储点。

/root:系统管理员的主目录。

/mnt:用以临时挂载其他的文件系统。

/proc:虚拟文件系统,可直接访问这个目录来获取系统信息。

/var:某些大文件溢出区。

/usr:存放应用程序和文件。

对于嵌入式 Linux 系统的根文件系统来说,由于受系统资源的限制,一般没有上述 那么复杂,仅保留一些常用的目录即可。如/bin、/dev、/etc、/lib、/proc、/var、/tmp、/usr、 /mnt 等[2]。 由于嵌入式系统的设计冗余度小、系统紧凑,通常存储容量有限,因此,必须选择 一个合适的根文件系统以使系统运行最佳。目前,嵌入式Linux 根文件系统主要的根文件系 统类型有:Romfs, JFFS2, RAMDISK, YAFFS/YAFFS2, Cramfs, Squashfs 等[1]。本文主要对 Cramfs 根文件系统进行讨论。

2.2 Cramfs根文件系统及其在实际应用中存在的问题

Cramfs 是Linux 的创始人 Linus Torvalds 参与开发的一种只读的压缩文件系统,它基于 MTD(Memory Technology Device,存储技术设备)驱动程序。在cramfs 文件系统中,每一页 (4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash 存储 空间,使系统可通过更低容量的FLASH 存储相同的文件,从而降低系统成本。

Cramfs 并不 需要一次性地将文件系统中的所有内容都解压到内存中,而只是在系统需要访问某个位置的 数据时,立即计算出该数据在Cramfs 中的位置,将其实时地解压缩到内存中,然后通过对 内存的访问来获取文件系统中需要读取的数据。Cramfs 中的解压缩以及解压缩之后内存中 的数据存放位置都是由Cramfs 文件系统本身进行维护的,用户并不需要了解具体实现过程, 因此这种方式增强了透明度,对开发人员来说,既方便又节省了存储空间。

由于 Cramfs 是只读型文件系统,而大多嵌入式应用程序需要在临时目录/tmp 进行创建 临时文件等写操作,如不对Cramfs 进行配置,则应用程序将不能正常运行,导致系统崩溃。 目前,解决些问题的方法是复合文件系统法,即使用YAFFS/YAFFS2 等可写型文件系统与

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top