当前位置: 首页 > article >正文

嵌入式知识点总结 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:存放系统必须的用户命令,如 lscpmv 等。

/sbin:存放系统管理命令,如 ifconfigshutdown 等。

/lib:存放共享库文件,操作系统运行时需要的库文件。

/etc:存放系统配置文件,如 /etc/fstab/etc/passwd 等。

init 进程和系统启动

Linux 系统的启动是由 init 进程 启动的,它是根文件系统中最早被加载的进程,通常位于 /sbin/initinit 进程负责启动系统的其他进程,并根据 /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 目录包含了系统引导和修复过程中必需的基本命令(如 lscpmv 等),而 /sbin 目录包含了系统管理命令(如 shutdownreboot 等)。这两个目录下的文件是在根文件系统的帮助下被加载和执行的。

/lib 目录

/lib 目录包含了操作系统启动时需要的共享库文件,支持根文件系统和内核所需的基础操作。

/dev 目录

/dev 目录包含设备文件,用于表示系统中的硬件设备(如硬盘、串口、USB 设备等)。这些设备在根文件系统中是可以访问的。

/tmp 目录

/tmp 用于存放临时文件,系统运行时的一些短期数据存储通常保存在这个目录中。

3.可执行映像文件通常由几部分构成,他们有什么特点?

可执行映像文件通常由以下几部分构成。
一个或多个代码段,代码段的属性为只读。
零个或多个包含初始化数据的数据段,数据段的属性为可读写。
零个或多个不包含初始化数据的数据段,数据段的属性为可读写。

  • 代码段:只读,存储执行代码。
  • 数据段:可读写,存储初始化和未初始化的全局变量及静态变量。
  • 堆和栈:动态分配和存储局部变量、函数调用信息等。
  • 只读常量数据段:只读,存储常量和字符串数据。
  • 符号表和调试信息:用于调试和链接。
  • 程序头表:描述如何加载文件到内存。

http://www.kler.cn/a/522778.html

相关文章:

  • 51单片机开发:独立键盘实验
  • Cannot resolve symbol ‘XXX‘ Maven 依赖问题的解决过程
  • PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践
  • vue和reacts数据响应式的差异
  • react native在windows环境搭建并使用脚手架新建工程
  • Android 启动流程
  • Linux 35.6 + JetPack v5.1.4之编译器升级
  • 在Rust应用中访问.ini格式的配置文件
  • vim如何解决‘’文件非法关闭后,遗留交换文件‘’的问题
  • 第3章 基于三电平空间矢量的中点电位平衡策略
  • 无人机+固定机巢 ,空地协同作业技术详解
  • Hive:Hive Shell技巧
  • 回顾:Maven的环境搭建
  • 第32章 测试驱动开发(TDD)的原理、实践、关联与争议(Python 版)
  • 【设计模式-行为型】迭代器模式
  • 构建自定义 AI 模型服务:集成到 Spring AI 处理特定任务
  • 算法刷题Day28:BM66 最长公共子串
  • AAAI2024论文合集解读|Multi-granularity Causal Structure Learning-water-merged
  • 82,【6】BUUCTF WEB .[CISCN2019 华东南赛区]Double Secret
  • 电脑怎么格式化?格式化详细步骤
  • App UI自动化--Appium学习--第一篇
  • 【机器学习】自定义数据集 使用tensorflow框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • LabVIEW相位差测量系统
  • [微服务]服务保护原理
  • Redis数据库笔记——数据类型及其底层实现
  • stm32内存溢出怎么办