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 等可写型文件系统与 Cramfs 复合而成的文件系统作为嵌入式系统的根文件系统,使Cramfs 根文件系统启动时挂 载YAFFS/YAFFS2 文件系统,同时将应用程序存放在YAFFS/YAFFS2 文件系统中。这种方 法解决了应用程序对根文件系统的写操作问题,但由于在通常的根文件系统之外还增加了一 个额外的可写型文件系统,必然会增大整个根文件系统所占的存储空间,造成嵌入式系统存 储资源紧张。本文在实践的基础上,通过对Linux Cramfs 根文件系统的研究,发现了一种通 过修改根文件系统启动脚本和配置文件来实现根文件系统的可读、可写性的新方法,它不需 要新增额外的文件系统来支持应用程序的读、写要求,而是利用根文件系统本身的特性来构 造一个局部可写的根文件系统。

3 嵌入式Linux 根文件系统的配置

3.1 Cramfs根文件系统配置文件的分析

Cramfs 根文件系统中的配置文件存放在/etc 目录下,有22 个文件及文件夹,可分为以 下几类:

引导和登录/注销类,包括/etc/issue、/etc/issue。net、/etc/rc.d/rc、/etc/rc.d/rc.local、 /etc/rc.d/rc.sysinit、/etc/rc.d/rc/rcX.d 等文件,它们主要记录系统的启动信息及运行级别等。

文件系统类,包括/etc/mtab、/etc/fstab、/etc/mtools。conf 文件等,它们记录着系统文 件系统的安装、卸载信息,系统启动时可以被安装的文件系统以及在这些文件系统上所定 义的操作。

系统管理类,包括/etc/group、/etc/nologin、/etc/passwd、/etc/rpmrc、/etc/securetty、 /etc/usertty、/etc/shadow、/etc/shells、/etc/motd 等文件,它们记录着系统用户和用户组的登 录信息、加密后的用户帐号密码信息、用户组的权限信息等。

网络类,包括/etc/gated。conf、/etc/networks、/etc/protocols、/etc/gateway、/etc/services、 /etc/inetd。conf、/etc/sysconfig/netword、/etc/recolv。conf、/etc/rpc、/etc/exports 等文件,它们 记录着系统对网络接口的配置信息、网络服务程序、网络协议、网络文件系统配置等信息。

系统命令类,包括/etc/lilo。conf、/etc/logrotate。conf、/et/identd。conf、/etc/ld。so。conf、 /etc/inittab、/etc/termcp 等文件,这些文件记录着要独占地控制系统的系统命令及动态链接 程序配置等信息等。

linux根文件系统配置,嵌入式Linux的Cramfs根文件系统配置的解决方案相关推荐

  1. linux 直流电机驱动设计,嵌入式Linux直流电机驱动.PPT

    嵌入式Linux直流电机驱动.PPT 嵌入式Linux直流电机驱动实验 开发平台中直流电机驱动的实现 S3C2410芯片自带定时器,所以控制部分省去了三角波产生电路.脉冲调制电路和PWM信号延迟及信号 ...

  2. 嵌入式linux电子设计,基于嵌入式Linux的PMP系统设计与实现

    PMP系统简介 便携式多媒体播放器(PMP),也就是通常人们所说的MP4,已成为继MP3以后消费类产品的一个新热点.PMP的主要优点是:携带方便,能够直接播放高品质音/视频文件:也可以浏览图片,以及作 ...

  3. linux内核培训广州,嵌入式Linux驱动开发高级培训班-华清远见嵌入式培训中心

    课程目标 本课程以案例教学为主,系统地介绍Linux下有关FrameBuffer.MMC卡.USB设备的驱动程序开发.参加本课程学习的学员,因为具备了Linux设备驱动开发基础,所以本课程针对性较强, ...

  4. 嵌入式linux的发展历程,嵌入式Linux论文(历史发展分类及应用)

    嵌入式Linux 一.嵌入式Linux简介 1.1 嵌入式Linux历史 随着社会的发展,信息化技术的成熟和数字化产品的普及,让以计算机技术.芯片技术和软件技术为核心的嵌入式系统再度成为当前研究和应用 ...

  5. 嵌入式 linux ramdisk 保存文件,制作嵌入式linux文件系统(ramdisk,cramfs,squashfs)...

    一.什么是文件系统 (Filesystem): A directory structure contained within a disk drive or disk area. The total ...

  6. 嵌入式Linux文件提取,嵌入式 Linux系统编程(四)——文件属性

    嵌入式 Linux系统编程(四)--文件属性 一.文件属性概述 Linux 文件的属性主要包括:文件的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.文件属性示例如下 ...

  7. 嵌入式linux文件系统启动,嵌入式Linux之文件系统启动分析【原创】

    this.p={ m:2, b:2, loftPermalink:'', id:'fks_094068082086089066084084095095080087080066082082083075' ...

  8. 嵌入式linux开发环境 cpu,嵌入式Linux开发环境的搭建之:U-Boot移植-嵌入式系统-与非网...

    5.2  U-Boot移植 5.2.1  Bootloader介绍 1.概念 简单地说,Bootloader就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序.通过这段程序,可以 ...

  9. 嵌入式linux编译环境搭建,嵌入式Linux开发环境搭建

    整理下嵌入式Linux开发环境搭建过程笔记. 一.制作u-boot.bin文件: tar xjf u-boot-1.1.6.tar.bz2 cd u-boot-1.1.6 patch -p1 < ...

最新文章

  1. SQL中int类型与varchar类型的隐式转换
  2. TCP/IP详解学习笔记(2)-数据链路层
  3. linux安装cv2踩坑
  4. Apple Mac OS X每日一技巧026:Spotlight打开文件所在的文件夹
  5. ant java 返回_使用Ant自动化我们的java项目生成
  6. Java 7 对ArrayList和HashMap的性能的提升
  7. mysql合集_Mysql数据库知识点合集
  8. python开发内部管理系统_GitHub - JEmbrace/ZYPCManageSystem: 工作室的]内部管理平台
  9. xen-tools虚拟机快速部署
  10. spring相关记录
  11. 通过linux内核如何读取pmbus总线上的数据,linux PMBus总线驱动设计分析(示例代码)...
  12. VC++程序设计与应用--MFC应用程序概述
  13. C语言练习题:输入一行字符,统计其中的英文字符、数字字符、空格和其他字符的个数。
  14. 暑假视力如何保护?护眼台灯可以保护视力
  15. Android超声波识别技术,超声波指纹识别or光学指纹识别?屏下指纹识别技术大比拼-传感技术-与非网...
  16. SpringCloudGateway原理——Gateway集成eureka服务发现转发请求
  17. 从蚂蚁金服的BI和大数据团队建设,看透BI发展,再不懂就落伍了
  18. 电网负荷调度三维组态软件V2.0
  19. 怎么查找计算机蓝牙耳机,电脑搜索不到蓝牙耳机的解决方法
  20. win10系统使用VMware偶尔出现蓝盘的问题解决

热门文章

  1. VMware vSphere Client中启动虚拟机提示No boot filename received/Operating System not found解决方法
  2. “ u”到底是做什么的? “ git push -u原始主机”与“ git push原始主机”
  3. 无法在终端中显示Git树
  4. C#的简单不安全双向“混淆”
  5. 在Python中创建单例
  6. 检查字典中是否已存在给定键
  7. 如何重命名本地Git分支?
  8. 最大子序和的golang实现
  9. Zookeeper (一)集群简单搭建
  10. mac composer 使用