嵌入式知识点总结 Linux驱动 (三)-文件系统
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。
目录
1.什么是文件系统?
2.根文件系统为什么这么重要?编辑
3.可执行映像文件通常由几部分构成,他们有什么特点?
1.什么是文件系统?
根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行,里面包含了 Linux系统能够运行所必需的应用程序、库等,比如可以给用户提供操作 Linux的控制界面的shel程序、动态连接的程序运行时需要的glibc库等
我们要明白文件系统和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误。
在 嵌入式 Linux 中,文件系统(File System)是操作系统用于管理存储设备(如 NAND、eMMC、SD 卡、硬盘等)上数据存储、文件创建和操作的机制。它提供了一个组织、存取和管理数据的结构,允许用户、应用程序和操作系统对存储介质上的数据进行方便的读写操作。
文件系统是用于组织、存储和管理数据的基础组件。它负责将数据存储在设备上,并提供文件的读写接口。由于嵌入式设备通常资源有限,文件系统需要根据具体的硬件和应用需求来选择和设计。常见的文件系统有 EXT2/EXT3/EXT4、FAT、JFFS2、UBIFS、SquashFS 等,每种文件系统都有其适用场景和特点。
2.根文件系统为什么这么重要?
根文件系统提供基础环境:
在 Linux 系统中,根文件系统(rootfs) 是文件系统的起点,它是 Linux 系统引导过程中的第一个文件系统。在启动时,根文件系统包含了系统启动所必需的关键文件,如 init
进程、命令行工具、配置文件、库文件等。如果没有根文件系统,系统就无法正确启动。
根目录“/”:
根文件系统的根目录是 /
,所有的其他文件和目录都是从这个根目录开始的。所有挂载的文件系统和外部设备(如硬盘、SD卡等)都会在根文件系统的某个子目录下进行挂载。根文件系统是整个文件系统树的起点。
启动时的核心文件:
根文件系统包含了启动时必须的核心文件和应用程序。例如,/etc/fstab
文件中存储了系统挂载分区的信息,init
进程的启动文件通常位于 /etc/init.d
或 /sbin/init
中。没有这些文件,系统无法进入正常的工作状态。
启动时挂载其他文件系统:
根文件系统本身可能比较小,且通常是只读的。因此,嵌入式系统或服务器在启动后,根文件系统会挂载其他的文件系统(如 ext4
, squashfs
等)来扩展存储空间和功能。这些挂载信息通常保存在根文件系统中的 /etc/fstab
文件里。
必需的执行文件和库:
根文件系统中包含了 Linux 系统必须的执行文件和库文件,例如:
/bin
:存放系统必须的用户命令,如 ls
、cp
、mv
等。
/sbin
:存放系统管理命令,如 ifconfig
、shutdown
等。
/lib
:存放共享库文件,操作系统运行时需要的库文件。
/etc
:存放系统配置文件,如 /etc/fstab
、/etc/passwd
等。
init
进程和系统启动:
Linux 系统的启动是由 init
进程 启动的,它是根文件系统中最早被加载的进程,通常位于 /sbin/init
。init
进程负责启动系统的其他进程,并根据 /etc/inittab
或 /etc/systemd/
目录下的配置文件来管理系统运行级别和服务。没有根文件系统,init
进程无法运行,系统无法进入多用户模式。
Shell 和用户空间的操作:
在 Linux 系统中,Shell(如 bash
)是用户和内核之间交互的主要界面。Shell 命令、脚本和应用程序通常都存放在根文件系统的 /bin
或 /sbin
目录中。没有根文件系统,Shell 也无法执行,因此用户无法与系统交互。
设备挂载和外部设备:
根文件系统不仅是系统启动的基础,还提供了挂载其他文件系统(如外部存储、网络文件系统等)的必要机制。通过根文件系统,其他文件系统可以按需挂载在指定位置(如 /mnt
或 /media
目录)。这些挂载操作的配置通常存储在 /etc/fstab
文件中。
/etc
目录:
这个目录包含了系统的配置文件。比如:
/etc/fstab
:定义了挂载分区的信息。
/etc/passwd
:存储用户账户信息。
/etc/hostname
:定义主机名。
/etc/network/interfaces
:网络配置文件。
/bin
和 /sbin
目录:
/bin
目录包含了系统引导和修复过程中必需的基本命令(如 ls
、cp
、mv
等),而 /sbin
目录包含了系统管理命令(如 shutdown
、reboot
等)。这两个目录下的文件是在根文件系统的帮助下被加载和执行的。
/lib
目录:
/lib
目录包含了操作系统启动时需要的共享库文件,支持根文件系统和内核所需的基础操作。
/dev
目录:
/dev
目录包含设备文件,用于表示系统中的硬件设备(如硬盘、串口、USB 设备等)。这些设备在根文件系统中是可以访问的。
/tmp
目录:
/tmp
用于存放临时文件,系统运行时的一些短期数据存储通常保存在这个目录中。
3.可执行映像文件通常由几部分构成,他们有什么特点?
可执行映像文件通常由以下几部分构成。
一个或多个代码段,代码段的属性为只读。
零个或多个包含初始化数据的数据段,数据段的属性为可读写。
零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
- 代码段:只读,存储执行代码。
- 数据段:可读写,存储初始化和未初始化的全局变量及静态变量。
- 堆和栈:动态分配和存储局部变量、函数调用信息等。
- 只读常量数据段:只读,存储常量和字符串数据。
- 符号表和调试信息:用于调试和链接。
- 程序头表:描述如何加载文件到内存。