嵌入式知识点总结 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.可执行映像文件通常由几部分构成,他们有什么特点?

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/961011.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AI大模型】提示词(Prompt)全面解析

文章目录 前言前置准备(非常重要)一、Prompt 提示词介绍1.1 Prompt 的重要性 二、Prompt 提示词元素构成与实践2.1 关键字2.2 上下文2.3 格式要求2.4 实践示例 三、Prompt 提示词编写原理3.1 清晰性3.2 具体性3.3 适应性 四、Prompt 提示词编写常用的分隔…

react native在windows环境搭建并使用脚手架新建工程

截止到2024-1-11,使用的主要软件的版本如下: 软件实体版本react-native0.77.0react18.3.1react-native-community/cli15.0.1Android Studio2022.3.1 Patch3Android SDKAndroid SDK Platform 34 35Android SDKAndroid SDK Tools 34 35Android SDKIntel x…

Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)

什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的…

[c语言日寄]越界访问:意外的死循环

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…

终极的复杂,是简单

软件仿真拥有最佳的信号可见性和调试灵活性,能够高效捕获很多显而易见的常见错误,被大多数工程师熟练使用。 空间领域应用的一套数据处理系统(Data Handling System),采用抗辐FPGA作为主处理器,片上资源只包含10752个寄存器,软仿也是个挺花时间的事。 Few ms might take …

第一个3D程序!

运行效果 CPP #include <iostream> #include <fstream> #include <string> #include <cmath>#include <GL/glew.h> #include <GLFW/glfw3.h> #include <glm/glm.hpp> #include <glm/gtc/type_ptr.hpp> #include <glm/gtc/…

vim如何解决‘’文件非法关闭后,遗留交换文件‘’的问题

过程描述&#xff1a; 由于我修改文件时&#xff08;一定得修改了文件&#xff0c;不做任何修改不会产生这个问题&#xff09;的非法关闭&#xff0c;比如直接关闭虚拟机&#xff0c;或者直接断开远程工具的远程连接&#xff0c;产生了以下遗留交换文件的问题&#xff1a; 点击…

t113_can增加驱动

1 基于太极派的SDK添加 //设备树添加can0: can2504000 {compatible "allwinner,sun20i-d1-can";reg <0x0 0x02504000 0x0 0x400>;interrupts <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;clocks <&ccu CLK_BUS_CAN0>;resets <&ccu RST_BUS_…

力扣【669. 修剪二叉搜索树】Java题解

一开始在想为什么题目说存在唯一答案。然后发现是二叉搜索树就合理了。如下图&#xff1a;如果0节点小于low&#xff0c;那其左子树也都小于low&#xff0c;故可以排除&#xff1b;对于4&#xff0c;其右子树也是可以排除。 代码如下&#xff1a; class Solution {public Tre…

WSL安装CUDA

WSL安装CUDA 参考文档&#xff1a; ​ 总安装文档&#xff1a;https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#wsl-installation 1. 下载cuda ​ 进入下载界面&#xff1a;https://developer.nvidia.com/cuda-downloads?target_osLinux&target_archx86_…

浅谈Linux的发展

目录 1.Linux背景 1.1 发展史 UNIX发展的历史 1.2开源 1.3官网 1.4.企业应用现状 1.5.发行版本 1.6 os概念&#xff0c;定位 1.Linux背景 1.1 发展史 学习Linux系统编程&#xff0c;你可能要问Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史…

Unbutu虚拟机+eclipse+CDT编译调试环境搭建

问题1: 安装CDT&#xff0c;直接Help->eclipse Market space-> 搜cdt , install&#xff0c;等待重启即可. 问题2&#xff1a;C变量不识别vector ’could not be resolved 这是库的头文件没加好&#xff0c;右键Properties->C Build->Enviroment&#xff0c;增加…

操作系统(Linux Kernel 0.11Linux Kernel 0.12)解读整理——内核初始化(main init)之缓冲区的管理

前言 当一个程序需要读取硬盘上的一个逻辑块时&#xff0c;就会向缓冲区管理程序提出申请。而请求读写的程序进程则进入睡眠等待状态。缓冲区管理程序首先在缓冲区中寻找以前是否已经读取过这块数据。如果缓冲区中已经有了&#xff0c;就直接将对应的缓冲区块头指针返回给程序并…

服务器上安装Nginx详细步骤

第一步&#xff1a;上传nginx压缩包到指定目录。 第二步&#xff1a;解压nginx压缩包。 第三步&#xff1a;配置编译nginx 配置编译方法&#xff1a; ./configure 配置编译后结果信息&#xff1a; 第四步&#xff1a;编译nginx 在nginx源文件目录中直接运行make命令 第五步&…

【算法】经典博弈论问题——威佐夫博弈 python

目录 威佐夫博弈(Wythoff Game)【模板】 威佐夫博弈(Wythoff Game) 有两堆石子&#xff0c;数量任意&#xff0c;可以不同&#xff0c;游戏开始由两个人轮流取石子 游戏规定&#xff0c;每次有两种不同的取法 1)在任意的一堆中取走任意多的石子 2)可以在两堆中同时取走相同数量…

linux挂载新硬盘,查看新硬盘,格式化分区,创建挂载点,挂载逻辑卷,整盘方式挂载,LVM方式挂载,查看linux 磁盘卷组的剩余空间,ext4与xfs区别

摘要 挂载新硬盘&#xff0c;本文作者整理了几乎所有相关的知识点 作者采用的是本文第二种挂载方式&#xff08;LVM&#xff09;&#xff0c;只用了下面6条命令搞定 # 说明&#xff1a; # /dev/mapper/appvg-mylv1 逻辑卷完整名称 # # /dev/mapper目录是Linux系统中用…

Golang并发机制及CSP并发模型

Golang 并发机制及 CSP 并发模型 Golang 是一门为并发而生的语言&#xff0c;其并发机制基于 CSP&#xff08;Communicating Sequential Processes&#xff0c;通信顺序过程&#xff09; 模型。CSP 是一种描述并发系统中交互模式的正式语言&#xff0c;强调通过通信来共享内存…

HTML5+SVG+CSS3实现雪中点亮的圣诞树动画效果源码

源码介绍 这是一款基于HTML5SVGCSS3实现雪中点亮的圣诞树动画效果源码。画面中的圣诞树矗立在雪地中&#xff0c;天上飘落着雪花。当鼠标滑过圣诞树时&#xff0c;可见到圣诞树上的灯光闪烁&#xff0c;同时左下角探出雪怪模样的半个脑袋&#xff0c;四处张望着。整体画面栩栩…

基于蓝牙6.0的RSSI和UWB融合定位方法,可行性分析

融合RSSI&#xff08;接收信号强度指示&#xff09;和UWB&#xff08;超宽带&#xff09;两种技术进行蓝牙6.0定位是完全可行的&#xff0c;并且可以带来更高的定位精度和稳定性。本文给出分析和MATLAB仿真结果 文章目录 技术优势RSSIUWB融合的优势 实现方案数据融合算法硬件要…

Openfga 授权模型搭建

1.根据项目去启动 配置一个 openfga 服务器 先创建一个 config.yaml文件 cd /opt/openFGA/conf touch ./config.yaml 怎么配置&#xff1f; 根据官网来看 https://github.com/openfga/openfga/blob/main/.config-schema.json 这里讲述详细的每一个配置每一个类型 这些配…