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

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

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

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

相关文章:

嵌入式知识点总结 Linux驱动 (三)-文件系统

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.什么是文件系统? 2.根文件系统为什么这么重要?​编辑 3.可执行映像文件通常由几部分构成,他们有什么特点? 1.什么是文件系统&a…...

【知识】可视化理解git中的cherry-pick、merge、rebase

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 这三个确实非常像,以至于对于初学者来说比较难理解。 总结对比 先给出对比: 特性git mergegit rebasegit cherry-pick功能合并…...

【deepseek】deepseek-r1本地部署-第二步:huggingface.co替换为hf-mirror.com国内镜像

一、背景 由于国际镜像国内无法直接访问,会导致搜索模型时加载失败,如下: 因此需将国际地址替换为国内镜像地址。 二、操作 1、使用vscode打开下载路径 2、全局地址替换 关键字 huggingface.co 替换为 hf-mirror.com 注意:务…...

新站如何快速获得搜索引擎收录?

本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/8.html 新站想要快速获得搜索引擎收录,需要采取一系列有针对性的策略。以下是一些具体的建议: 一、网站内容优化 高质量原创内容: 确保网站内容原创、…...

如何使用tushare pro获取股票数据——附爬虫代码以及tushare积分获取方式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据 总结 一、Tushare 介绍 Tushare 是一个提供中国股市数据的API接口服务,它允许用户…...

解决vsocde ssh远程连接同一ip,不同端口情况下,无法区分的问题

一般服务器会通过镜像分身或者容器的方式,一个ip分出多个端口给多人使用,但如果碰到需要连接同一user,同一个ip,不同端口的情况,vscode就无法识别,如下图所示,vscode无法区分该ip下不同端口的连接&#xff…...

Elasticsearch 自定义分成器 拼音搜索 搜索自动补全 Java对接

介绍 通常用于将文档中的文本数据拆分成易于索引的词项(tokens)。有时,默认的分词器无法满足特定应用需求,这时就可以创建 自定义分词器 来实现定制化的文本分析。 自定义分词器组成 Char Filters(字符过滤器&#x…...

基于物联网设计的疫苗冷链物流监测系统

一、前言 1.1 项目开发背景 随着全球经济的发展和物流行业的不断创新,疫苗和生物制品的运输要求变得越来越高。尤其是疫苗的冷链物流,温度、湿度等环境因素的控制直接关系到疫苗的质量和效力,因此高效、可靠的冷链监控系统显得尤为重要。冷…...

RocketMQ消息是如何存储的?

大家好,我是锋哥。今天分享关于【RocketMQ消息是如何存储的?】面试题。希望对大家有帮助; RocketMQ消息是如何存储的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RocketMQ 使用了一个高性能、分布式的消息存储架构…...

Ubuntu 16.04安装Lua

个人博客地址:Ubuntu 16.04安装Lua | 一张假钞的真实世界 在Linux系统上使用以下命令编译安装Lua: curl -R -O http://www.lua.org/ftp/lua-5.3.3.tar.gz tar zxf lua-5.3.3.tar.gz cd lua-5.3.3 make linux test 安装make 编译过程如果提示以下信息…...

【JavaSE】String类常用字符串方法总结

目录 1. length() 求字符串长度 2. isEmpty() 判断字符串是否为空 3. String对象的比较 3.1 equals() 判断字符串是否相同 3.2 compareTo() 比较字符串大小 3.3 compareToIgnoreCase 忽略大小写比较 4. 字符串查找 4.1 charAt() 返回指定索引处的字符 4.2 indexOf() 4…...

python3+TensorFlow 2.x(二) 回归模型

目录 回归算法 1、线性回归 (Linear Regression) 一元线性回归举例 2、非线性回归 3、回归分类 回归算法 回归算法用于预测连续的数值输出。回归分析的目标是建立一个模型,以便根据输入特征预测目标变量,在使用 TensorFlow 2.x 实现线性回归模型时&…...

机器人抓取与操作概述(深蓝)——1

工业机器人:① “臂”的形态 ② “手”的形态 ③ 视觉,力和触觉 1 机器人的不同形态 “臂”的形态 “手”的形态 2 常见的操作任务 操作:插入、推和滑 抓取:两指(平行夹爪)抓取、灵巧手抓取 落地-产…...

简单聊聊“DeepSeek”

目录 DeepSeek一夜火爆并受到广泛关注的优势 技术实力与创新 低成本与高效率 开源与免费 市场策略与应用领域 团队与资金优势 行业认可与媒体关注 DeepSeek在推理效率上的特别之处 多头潜在注意力(MLA) 多词元预测(MTP)…...

使用 Docker + Nginx + Certbot 实现自动化管理 SSL 证书

使用 Docker Nginx Certbot 实现自动化管理 SSL 证书 在互联网安全环境日益重要的今天,为站点或应用部署 HTTPS 已经成为一种常态。然而,手动申请并续期证书既繁琐又容易出错。本文将以 Nginx Certbot 为示例,基于 Docker 容器来搭建一个…...

粒子群算法 笔记 数学建模

引入: 如何找到全局最大值:如果只是贪心的话,容易被局部最大解锁定 方法有:盲目搜索,启发式搜索 盲目搜索:枚举法和蒙特卡洛模拟,但是样例太多花费巨量时间 所以启发式算法就来了,通过经验和规…...

【C语言】结构体与共用体深入解析

在C语言中,结构体(struct)和共用体(union)都是用来存储不同类型数据的复合数据类型,它们在程序设计中具有重要的作用。 推荐阅读:操作符详细解说,让你的编程技能更上一层楼 1. 结构体…...

es6.7.1分词器ik插件安装-和head插件连接es特殊配置

es6.7.1分词器ik插件安装-和head插件连接es特殊配置 如果对运维课程感兴趣,可以在b站上、A站或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频 1.查看es6.7.1和es-head安装位置和es插件路径 [ro…...

java求职学习day18

常用的设计原则和设计模式 1 常用的设计原则(记住) 1.1 软件开发的流程 需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级 1.2 常用的设计原则 (1)开闭原则(Open Close Principle…...

单链表专题(上)

链表的定义与创建 线性表: 1. 物理结构上不一定是线性的 2. 逻辑结构上一定是线性的 链表是一种物理存储结构上非连续,非顺序的存储结构 链表也是线性表的一种,但是在物理结构上不是连续的 链表是由一个一个的节点组成,需要数…...

【stm32学习】STM32F103相关特性

| 名称 | 缩写 | 频率 | 外部连接 | 功能 | 用途 | 特性 | |--------------------|------|----------------|---------------|------------|--------------|----------------| | 外部高速晶体振荡器 | HSE | 4~16MHz …...

PostGIS笔记:PostgreSQL中表、键和索引的基础操作

创建、查看与删除表 在数据库中创建一个表,使用如下代码: create table streets (id serial not null primary key, name varchar(50));这里的表名是streets,id是主键所以非空,采用serial数据类型,这个数据类型会自动…...

蓝桥杯python语言基础(3)——循环结构

一、for语句 理解range函数 range(start, stop, step) start: 序列开始的数字(默认为0)。stop: 序列结束的数字(不包含stop)。step: 步长(默认为1)。 练习 输出在 l 和 r 之间的所有偶数: pri…...

微服务网关鉴权之sa-token

目录 前言 项目描述 使用技术 项目结构 要点 实现 前期准备 依赖准备 统一依赖版本 模块依赖 配置文件准备 登录准备 网关配置token解析拦截器 网关集成sa-token 配置sa-token接口鉴权 配置satoken权限、角色获取 通用模块配置用户拦截器 api模块配置feign…...

23【进制的理解】

很多人可能听过计算机的最底层是2进制执行,但是原理并不知道,我们今天先不讨论那么复杂的问题,先讨论什么是进制 1910,10并不是1个字符,而是2个字符,也就是说在10进制里面没有“10”这个字符,1…...

jemalloc 5.3.0的tsd模块的源码分析

一、背景 在主流的内存库里,jemalloc作为android 5.0-android 10.0的默认分配器肯定占用了非常重要的一席之地。jemalloc的低版本和高版本之间的差异特别大,低版本的诸多网上整理的总结,无论是在概念上和还是在结构体命名上在新版本中很多都…...

【Convex Optimization Stanford】Lec3 Function

【Convex Optimization Stanford】Lec3 Function 前言凸函数的定义对凸函数在一条线上的限制增值扩充? 一阶条件二阶条件一些一阶/二阶条件的例子象集和sublevel set关于函数凸性的扩展(Jesen Inequality)保持函数凸性的操作非负加权和 & 仿射函数的…...

深入 Rollup:从入门到精通(三)Rollup CLI命令行实战

准备阶段:初始化项目 初始化项目,这里使用的是pnpm,也可以使用yarn或者npm # npm npm init -y # yarn yarn init -y # pnpm pnpm init安装rollup # npm npm install rollup -D # yarn yarn add rollup -D # pnpm pnpm install rollup -D在…...

wangEditor富文本编辑器,Laravel上传图片配置和使用

文章目录 前言步骤1. 构造好前端模版2. 搭建后端存储3. 调试 前言 由于最近写项目需要使用富文本编辑器,使用的是VUE3.0版本所以很多不兼容,实际测试以后推荐使用wangEditor 步骤 构造好前端模版搭建后端存储调试 1. 构造好前端模版 安装模版 模版安…...

chrome源码剖析—进程通信

Chrome 浏览器采用多进程架构(multi-process architecture),这种架构使得每个浏览器标签、扩展、插件、GPU 渲染等都在独立的进程中运行。为了确保不同进程之间的高效通信,Chrome 使用 进程间通信(IPC, Inter-Process …...