嵌入式文件系统

本文详细介绍了嵌入式文件系统的基本概念,包括文件与文件系统,重点阐述了Linux虚拟文件系统VFS及其作用。接着深入探讨了Linux根文件系统的内容与目录结构,强调了BusyBox工具集在构建根文件系统中的应用。文章最后介绍了根文件系统的启动流程以及如何构建根文件系统映像,涵盖了从BusyBox配置到根文件系统烧写的完整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                               嵌入式文件系统

>>基本概念              

一、文件

文件是一个抽象概念,它是存放数据和信息的仓库。

文件的载体通常是磁盘。

二、文件系统

文件系统是磁盘文件的管理系统,根据用户提供的逻辑地址(路径和文件名)查找文件的物理地址。

包括了所有磁盘分区、目录、存储设备和文件的一个集合体。

功能:1、用户通过文件系统可直接与操作系统交互,是操作系统的一部分,负责即时检索、读写、操作等。

2、文件的即时存储、访问数据和程序。

 

 >>虚拟文件系统VFS

一、功能

为了在不同文件系统之间可以方便地交换数据和管理,支持任意地挂载不同现代操作系统,大多都在系统内核和文件系统之间提供一个叫做虚拟文件系统VFS的标准接口。

1、        Linux虚拟文件系统是各逻辑文件系统的管理者。

2、        Linux虚拟文件系统是一组内核函数,是用户程序的系统调用接口或操作界面。

二、基本概念

1、文件:是文件描述符,存放打开的文件与进程之间进程交互的有关信息的对象,此对象仅当进程访问文件期间存在于内存中。

2、索引节点:是文件系统中的基本对象,存放关于磁盘上具体存在的文件一般信息。每个文件都有此对象,每个对象对应一个索引节点号,此号唯一地标示着一个文件。

3、超级块:是存放系统中已安装的文件系统有关信息的对象,对于基于磁盘的文件系统,这类对象通常对应于存放在磁盘上的文件系统控制块(FCB),也就是说,每个文件系统都对应一个超级块对象,此对象也称作文件系统是索引节点的集合,其中有一个节点被称作根节点。(root

二、ext2文件系统

1、是Linux默认的文件系统类型。

普通文件是三级索引结构

目录文件是树型结构

设备是特殊文件。

3、        磁盘的空间结构

引导块

超级块

索引节点位图

索引节点表

……

Linux文件系统用位图来管理磁盘和索引节点,位图分为块位图和索引节点位图,占用一个磁盘块,用“10”表示磁盘空闲、占用。

三、Linux支持的文件系统

除了安装Linux可选择ext3\reiserfs\ext2外,还支持苹果的HFS,也支持其它UNIX操作系统的文件系统,比如:XFSJFSminixfsUFS,也支持windows文件系统NTFSFAT,还支持网络文件系统NFS

 

>>嵌入式文件系统

一、设计原则

使用便捷

安全性、可靠性高

及时响应

开放的体系结构:开放性、可移植性

二、嵌入式系统中的数据存储和管理

嵌入式系统的存储器是常用的FLASH

FLASH分为:

1、        NOR FLASH,一般小于16M,文件系统通常是JFFS(日志闪存文件系统)

2、        NAND FLASH,一般大于16M,文件系统通常是YAFFS文件系统。

三、YAFFS文件系统

类似于JFFS/JFFS2,是专门为NAND闪存设计的嵌入式文件系统,适用于大容量的存储设备,是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。

YAFFS是按层次结构设计的,分为文件系统管理层接口、YAFFS内部实现层和NAND接口层,简化了其它系统的接口设计,可以方便地集成到系统中。

1、        YAFFS文件组织结构

将文件组织成固定大小(512B)的数据段,每个文件都有一个页面专门存放文件头。

2、        YAFFS物理数据组织

YAFFS利用NAND闪存提供的每个页面16B的备用空间,备用空间中6B被用作页面数据的ECCError Correction code)。2B用作块状态字和数据状态字,其余8B有来存放文件系统的组织信息,即元数据。

3、        YAFFS擦除块和页面分配

用数据结构来描述每个擦除块的状态。该数据结构记录了块状态,并用一个32b的位图来表示块内各个页面的使用情况。

4、        YAFFS垃圾收集机制

是一种多策略混合的算法来进行垃圾回收,将贪心策略和随机选择策略按一定比例混合使用:当满足特定的小概率条件时,垃圾回收器会试图随机选择一个可回收的页面,而在其它情况下,则使用贪心策略回收“赃”块。

 

>>构建Linux根文件系统

一、Linux根文件系统包含内容

内核启动的最后一步:挂载根文件系统

包含内容:init进程

Shell

文件系统、网络系统等等的工具集

系统配置文件

链接库

二、Linux根文件系统目录结构

Bin:必要的用户命令(二进制文件)

Sbin:必要的系统管理员命令

Dev:设备文件及其它特殊文件

Etc:系统配置文件

Lib:必要的系统链接库

Mnt:临时挂载的文件系统的挂载点

Proc:提供内核和进程信息

Tmp:临时文件目录

Usr:多数用户使用的应用程序和目录

Var:监控程序和工具程序存放的可变数据

*boot:引导加载程序的静态文件

*home:用户主目录

*opt:附加软件的安装目录

*rootroot管理员主目录

*嵌入式Linux可选的目录

三、BusyBox工具集

Busy Box在嵌入式Linux中有“瑞士军刀”,是一个很小的应用软件,但提供完整的工具集。

http://www.busybox.net

BusyBox配置和交叉编译步骤:

1、        下载BusyBox,busy-box.tar.bz2

2、        解压该压缩文件

Tar xvfj busy-box.tar.bz2

3、        进入解压目录

Cd busy-box

4、        进行配置,选择配置菜单

Make menuconfig

5、        选择BusyBox的编译方式

Build options

Build BusyBox as a static binary(no shared libs)缺省配置为使用链接库

6、        配置交叉编译器

Build Options

Do you want to build BusyBox with a cross compile?(/usr/local/arm/3.4.1/bin/arm-linux-)

7、        配置安装路径

(./_install)BusyBox installation prefix

8、        配置其他工具集

Init Utilities

[]init

[]support reading an inittab file

[]support runnig init from within an initrd?

9、        编译BosyBox

Make dep

Make

Make install

四、根文件系统的启动流程

内核启动之后,执行第一个进程init,实际上执行的就是BusyBox/sbin/init

Init的工作是根据/etc/inittab脚本来进行系统的初始化

::sysinit:/etc/init.d/rc.S指定运行的第一个程序/脚本

::respawn:/bin/bash若该进程结束,init会启动下面脚本

:ctraltdel:/bin/umount –a –r 指定用户按下ctrl-alt-del后执行的命令

/etc/init.d/rc.SrcS中挂载文件系统,并且执行脚本/usr/etc/rc.local

/usr/etc/rc.local继续设置,并运行用户的启动运行脚本init.sh

五、根文件系统烧写流程

一、下载根文件系统yaffs文件系统挂载目录/mnt/yaffs

二、设置vivi的启动参数

Root=/dev/mtdblock/1

实验:构建根文件系统映像

1、        进入BusyBoxmake menuconfig

2、        Make

3、        Make install

生成./_install目录

4、        cp –af ./_instll root

5、        mkcramfs root root.cramfs

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值