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

Linux/Android文件系统架构深度剖析

文章目录一、preface1、资料快车2、概述3、专业术语二、Linux文件系统架构1、文件系统框架图2、文件系统之块设备字符设备框架3、内核如何读取文件4、文件系统类型1持久文件系统1、本地文件系统2、网络文件系统2运行时文件系统3根文件系统4设备文件系统5小结1、不同阶段使用的文件系统2、文件系统的选用策略3、文件系统数据流5、文件系统应用程序1常用工具命令2文件系统应用工具一、preface1、资料快车1BSP/驱动开发者如何学习 Linux文件系统https://mp.weixin.qq.com/s/8DyBd6_0CodmbrI4nY9QSg2文件系统、分区、格式化与挂载实践https://blog.csdn.net/D2005_10_25/article/details/1497466683Linux 文件系统Linux FS详解从基础到实践https://geek-blogs.com/blog/linux-fs/4Linux 文件系统挂载全解析从基础到进阶实践https://geek-blogs.com/blog/mount-filesystem-linux/2、概述1文件系统作为内核的五大模块之一1、Linux的运行离不开文件系统2、驱动开发更离不开文件系统这个框架 (用户态与内核态的交互的基础)2虽然文件系统实现极其庞大复杂但实际开发项目中很少去开发文件系统功能bring up阶段我们要做的是几类工作1、配置文件系统类型2、配置分区 - GPT、fstab1增加customer客制化的分区2制作烧录bin、升级固件3、裁剪内容 - 根据存储器件容量调整分区3文件系统本质是内核和用户空间交互的”中间件“4文件系统是Linux的一个内核模块fuse则实现用户态文件系统-用户态字符设备5文件系统特点是总体理解不难(无非读写文件)但很杂乱多种文件系统并存理清这些关系是难点6Linux与Android的文件系统体系差异Android作为Linux一个发行版本主要是在分区、文件系统应用管理有差异3、专业术语1. sb : superblock 2. acl : access control list二、Linux文件系统架构Linux文件系统指的是整一套机制它不只是 ”磁盘上的文件管理机制“它更是Linux 内核对“可访问对象”的统一抽象模型。1、文件系统框架图1文件系统与设备驱动之间的关系2应用程序、VFS与设备驱动3全景图1、从上图可以看出linux非常依赖VFS文件系统呼应linux下一切皆文件后续再从代码中体会“文件”2、看看一切皆文件的威力比如经常接触到在用户态使用以下命令cat /dev/ttyS0 --串口 cat /sys/class/power_supply/test_battery/capacity --电源 cat /proc/interrupts --中断它不存在于磁盘、没有物理 inode 表、没有扇区也不会真正落盘。只是内核在读取时动态生成的一段数据。 dd if/dev/mmcblk0p1 bs512 count1 --块设备这其中包括了字符设备、块设备、电源、CPU中断他们是完全不同种类的设备但却都可以在用户态通过访问文件的方式来访问。3、总的来说Linux 并不是把所有内容 “变成文件” 而是把用户访问内核各种对象的方式统一成“文件接口形式”。2、文件系统之块设备字符设备框架1从中可以看出内核部分做了层层封装需要经过一系列的过程才能真正到达驱动调用硬件2两个关键点1通过svc进入内核2设备驱动程序需要将方法挂接到VFS中去3、内核如何读取文件1内核读取文件依然依赖文件系统提供的API但不同于应用态API 2内核读取文件的场景 1、加载内核模块insmod 最终通过内核的 kernel_read_file_from_fd() 读取 .ko 文件。 2、读取固件firmware设备驱动请求固件时内核会在 /lib/firmware 下查找并读取文件。 3、挂载文件系统挂载时需要读取超级块、目录等但这是通过具体的文件系统驱动完成的并非通用“文件操作”。 4、读写 /proc 或 /sys 中的内核数据虽然这些是虚拟文件但实现时也会使用类似 seq_file 的机制。 5、内核崩溃转储kdump将 vmcore 写入文件。 3内核API 1.打开关闭文件 /android/common/common14-5.15/common/fs/open.c struct file *filp_open(const char *filename, int flags, umode_t mode) int filp_close(struct file *file, fl_owner_t id) 2.读取文件 1) 读取文件到内核缓冲区 ssize_t kernel_read(struct file *file, void *buf, size_t count, loff_t *pos) 2) 从文件中读取数据到用户空间缓冲区 ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)4、文件系统类型1持久文件系统1、本地文件系统1常见的有ext4最常用、XFS高性能、Btrfs高级特性如快照、ext3ext4 的前身存在实体于FLASH/磁盘 2内核代码 linux/fs/ext4/file.c、dir.c 3Linux具备管理Flash/磁盘上的文件数据功能包括管理扇区、块、inode、超级块、io算法2、网络文件系统1NFSLinux/Unix 网络共享、CIFS/SMBWindows 网络共享。 2) 挂载命令 mount -t nfs 192.168.1.100:/data/nfs /mnt/nfs 3通信模型 主机1(VFS - NFS) - 网络 - 主机2(NFS - VFS)2运行时文件系统1、指的是Linux内核动态生成的文件没有在磁盘里存在的真实文件(而是内存数据)直接在RAM里面进行组织同样也对接VFS但不会存盘 2、切记一点就是临时的文件系统就是一堆新建的struct结构体ls查看时使用printk从串口打印出来 3、运行时文件系统由于读写都在RAM一般比较简单具备基本文件系统元素(VFS等的四大要素-superblokc/inode/file/dentry)但没有复杂的IO算法操作 2、常见的有devfs、tmpfs、devtmpfs 1tmpfs内存临时文件系统、sysfs系统设备信息、procfs进程信息。 2devfs是文件系统形式的device manager。tmpfs存在在内存和swap中因此只能保存临时文件。devtmpfs是改进的devfs也是存在内存中挂载点是/dev/3根文件系统1、根文件系统是持久文件系统和运行时文件系统的结合会存盘但在ram上直接运行2、Linux设备的rootfs一般作为过渡使用(切换到真正的文件系统之后不再使用)Android不仅用作启动还作为文件系统的顶层框架3、根文件系统的必要性-面对繁杂的嵌入式系统存储文件系统的设备种类非常多网络文件系统、磁盘、SD卡、EMMC等等Linux将文件系统拆分 根文件系统和用户文件系统这种分层设计大大提高系统组合灵活性4设备文件系统1、字符设备和块设备与其它文件系统稍微不同可以看做单独的特殊设备文件系统两部分组成chrdev(挂接file_ops) 和 tmpfs(创建文件 )组合完成Linux系统默认支持 2、 vfs_caches_init() ----bdev_cache_init(); ----chrdev_init() 3.设备文件系统-可以将字符设备块设备当做是是独立的文件系统VFS会调用到file记录的ops其它文件系统则跑new_sync_read /android/vendor/amlogic/common/kernel/common/fs/read_write.c ssize_t __vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) { if (file-f_op-read) return file-f_op-read(file, buf, count, pos); else if (file-f_op-read_iter) return new_sync_read(file, buf, count, pos); else return -EINVAL; }5小结1、不同阶段使用的文件系统Linux文件系统种类多纷繁复杂Linux系统还在不同阶段设置不同的文件系统以Android为例1、系统启动阶段 - 使用rootfs2、系统启动完成 - 使用ext43、系统运行阶段 - tmpfs / procfs / sysfs - 服务于系统设备虽说文件系统有差异但主心骨是一样的2、文件系统的选用策略3、文件系统数据流1、串口看到的内容如何映射到RAM和FLASH串口把结构体数据打印出来2、永久文件系统负责组织FLASH的文件当然最终还是得读到内存而临时文件系统则仿照后半部工作在内存里直接组织3、为什么临时文件系统不存盘存盘耗时临时文件系统都是动态生成的变化频率存盘意义不大还会导致不必要的耗时5、文件系统应用程序1常用工具命令cat/ls/mkdir/touch2文件系统应用工具以Ext2为例 1.系统应用层文件管理 /android/system/core/fs_mgr 2.系统应用层ext2fs管理工具 /android/external/e2fsprogs/lib/ext2fs

相关文章:

Linux/Android文件系统架构深度剖析

文章目录一、preface1、资料快车2、概述3、专业术语二、Linux文件系统架构1、文件系统框架图2、文件系统之块设备字符设备框架3、内核如何读取文件?4、文件系统类型1)持久文件系统1、本地文件系统2、网络文件系统2)运行时文件系统3&#xff0…...

双蒙皮声纳导流罩(Sonar Domes)技术情报报告

1. 概述 声纳导流罩(Sonar Dome)是安装在舰艇艏部或潜艇前端的流线型外壳,用于保护声纳换能器阵列,同时确保声学性能和水动力性能。现代声纳导流罩采用双蒙皮结构(Double-Skin Design),兼顾结构强度、轻量化、声学透明性和维护便捷性。 2. 双蒙皮结构设计特点 2.1 柯蒂…...

云凝结合计数器CNN粒子数浓度分析/python数据可视化

CCN-100是美国DMT公司(Drop Measurement Technologies)生产的一款经典仪器,专用于连续、实时测量大气中不同过饱和度下的CCN数浓度。它采用热梯度云室(Thermal Gradient Cloud Chamber)技术,模拟自然界中云…...

变深声纳(VDS)收放系统技术情报报告

1. 系统概述 变深声纳(Variable Depth Sonar, VDS)是现代反潜战(ASW)的关键传感器技术,通过将声纳拖体部署到舰艇下方一定深度,避开表层温跃层和舰艇自噪声,实现对常规潜艇的有效探测。VDS收放系统是确保声纳拖体安全部署、精确定位和可靠回收的核心机械系统。 2. 拖曳…...

Spring Boot 3.x强制JDK17?老项目迁移前必看的Java8兼容方案

Spring Boot 3.x强制JDK17?老项目迁移前必看的Java8兼容方案 对于许多企业级Java开发者来说,2023年是个分水岭——Spring Boot 3.x全面拥抱JDK17,官方Initializr默认不再提供Java8选项。但现实情况是,大量生产环境仍运行在JDK8上&…...

浅论虚荣心

浅论虚荣心虚荣心是人性中常见的一种心理倾向,是人们为了取得荣誉和引起普遍注意而表现出来的一种社会情感和心理状态。适度的虚荣心可以给生活带来激情,给工作带来动力,在一定条件下,它也能成为自尊心、自信心建立的促进剂——但…...

IDM 下载管理器 下载安装

链接: https://pan.baidu.com/s/1IJ4LrAAZCfVvPyZl9VVg8g 提取码: j9c9解压前请退出所有杀毒软件或添加排除项!!!此文件无毒,可放心使用!!!此文件为免费开源绿色软件,请勿利用于商业…...

23岁+计算机人注意!困在传统开发?这份大模型报告助你职场逆袭,薪资翻倍!

如果你是23岁以上的计算机相关从业者,正困在传统开发瓶颈里、想跳槽无优势、想转行怕踩坑,或是盯着职场晋升、薪资翻倍却找不到突破口,那这篇文章和这份重磅报告,一定要认真看完。 当下人工智能全面落地,大模型早已不是…...

应急响应-vulntarget-n-勒索病毒应急靶场

convert -f raw -O vmdk .\vuln_m-j6cegcrhehdcba0r5h4v_system.raw vuln_m-j6cegcrhehdcba0r5h4v_system.vmdk 将靶场的 raw 原始磁盘镜像,转换成 VMware 可以直接加载使用的 vmdk 虚拟硬盘文件。flag1先看一下history有记录,一条flag就在历史命令里fla…...

在Ubuntu里同时安装mozc和sogoupinyin输入法的后续故事

好久没有玩Ubuntu了。最近小龙虾真的是如火如荼的,想凑个热闹,就把16年的电脑革掉,安装上了Ubuntu 22.04.5 LTS。安装完了才想起来,我这台老电脑压根就没有独显,电脑自己的本地龙虾,是铁定装不上了。龙虾的…...

领英大规模账户攻击事件技术溯源与反钓鱼防御体系研究

摘要 2026 年 4 月初,全球职业社交平台 LinkedIn 被披露遭遇大规模账户安全威胁,涉及海量用户身份凭证与会话信息面临窃取、劫持风险,引发全球网络空间安全预警。本次攻击以社交工程为核心、结合浏览器插件扫描、评论区批量注入、短链接混淆、…...

手把手教你封装OCCT_Window:一个可复用的Qt Widget组件(附完整源码)

手把手教你封装OCCT_Window:打造高复用Qt 3D显示组件 在工业软件和CAD应用开发中,将Open CASCADE的3D显示能力无缝集成到Qt界面是一个常见需求。传统做法往往需要开发者深入理解OCCT的窗口系统与Qt的交互机制,导致大量重复劳动。本文将展示如…...

03-Linux网络故障排查:从DNS配置到防火墙设置的全面指南

1. 当Linux告诉你"Name or service not known"时 第一次在Linux终端看到"Name or service not known"这个错误提示时,我正急着要下载一个重要的软件包。那种感觉就像你明明知道朋友家的地址,导航却死活找不到路。这个看似简单的网络…...

Python MCP服务器开发面试必考题全解析:从协议设计到并发压测,97%候选人栽在这3个盲区

第一章:Python MCP服务器开发面试全景概览Python MCP(Model-Controller-Protocol)服务器并非标准框架术语,而是近年来在微服务与协议网关场景中逐渐形成的工程实践模式——强调以协议适配为核心、模型驱动行为、控制器协调生命周期…...

基于深度学习的轴承故障诊断:CNN-LSTM架构演进与核心代码逻辑拆解

基于深度学习的轴承故障诊断:CNN-LSTM架构演进与核心代码逻辑拆解前言 在设备健康管理(PHM)的实战中,面对凯斯西储大学(CWRU)轴承数据集,直接将几十万个采样点的振动信号塞给模型是行不通的。即…...

【稀缺首发】PyTorch 3.0静态图分布式训练性能基线报告(A100×8实测:静态图提速2.7×,通信开销下降63%)

第一章:PyTorch 3.0静态图分布式训练配置概览PyTorch 3.0 引入了原生静态图(Static Graph)支持,通过 torch.compile() 默认后端 inductor 与分布式运行时深度协同,显著提升多卡训练的启动速度与稳定吞吐。静态图模式下…...

CSMS详细学习,CIA网络安全接口协议和CSMS的关系

CSMS详细学习,CIA网络安全接口协议和CSMS的关系 一、CSMS的定义与核心目标 CSMS(Cybersecurity Management System) 是由 UN R155法规 强制要求建立的一套组织级网络安全管理体系。其本质是通过制度化的流程、策略和资源分配,确保…...

ai赋能开发:让快马平台智能生成带数据分析的dht11温湿度监测应用

最近在做一个智能家居相关的项目,需要用到DHT11温湿度传感器。本来以为就是简单读取数据显示一下,但突然想到能不能加点智能分析功能,让数据更有价值。正好发现了InsCode(快马)平台,它的AI辅助开发功能帮我省去了大量编码时间&…...

MySQL数据库(基础语法篇

MySQL数据库(基础语法篇 这份文档详细梳理了MySQL数据库的核心语法体系,涵盖了从基础的数据定义、操纵、查询,到进阶的多表连接、视图、存储过程以及最佳实践。 一、MySQL优势 MySQL作为世界上最流行的开源数据库之一,具有诸多显著特点与优势…...

新手福音:在wsl2中用快马生成你的第一个python命令行工具

最近在学WSL2开发环境搭建,发现对新手最头疼的不是写代码,而是配环境、记命令这些前期准备。好在发现了InsCode(快马)平台,用它生成的Python命令行工具项目特别适合练手,连我这种Linux小白都能半小时跑通全流程。记录下这个超适合…...

Agent可观测性工程:监控、追踪与告警的最佳实践

Agent可观测性工程:监控、追踪与告警的最佳实践 一、 引言 (Introduction) (一)钩子 (The Hook) 你是否有过这种令人抓狂的经历?凌晨三点,手机突然弹出刺耳的告警提示音,内容是“你的金融风控Agent集群延迟飙升至27秒,核心交易拒单率突破5‰阈值!”。你从床上弹起来,…...

Maxwell永磁体磁场仿真:从表面强度到空间分布的全流程解析

1. 永磁体磁场仿真入门指南 第一次接触永磁体磁场仿真时,我也被各种专业术语搞得晕头转向。后来在实际项目中才发现,掌握这项技能对电机设计、传感器开发等工作至关重要。Maxwell作为电磁场仿真领域的标杆软件,能帮助我们直观地看到肉眼看不见…...

HFSS 2023 R1实战:手把手教你从ADS优化到Wilkinson功分器建模(附完整模型文件)

HFSS 2023 R1实战:从ADS优化到Wilkinson功分器三维建模全流程解析 在射频工程领域,将电路仿真结果准确转化为三维电磁场模型是一个关键但常被忽视的环节。许多工程师在ADS中完成了理想的参数优化后,却对如何在HFSS中实现同等性能感到困惑。本…...

QT: 二维码生成与自定义渲染实战

1. 二维码基础与QT开发环境搭建 二维码本质上是用黑白矩形图案表示二进制数据的图形化编码方案。相比传统条形码,它的核心优势在于二维方向上的数据存储能力,以及强大的容错机制。我在实际项目中发现,即使用户拍摄的二维码有部分污损或遮挡&a…...

17步拆解!一张图看懂AIAgent全流程,轻松掌握大模型应用开发核心!

本文通过一张图详细拆解了AIAgent从用户提问到结果返回的17步全流程,深入探讨了提示词、Agent、大模型、MCP和工具等关键要素在智能体架构中的作用。文章揭示了它们如何共同构建从自然语言意图到智能决策、工具执行再到结果反馈的完整闭环,为开发者提供了…...

4道高频面试题,吃透时间复杂度(递归_堆_贪心_快排)

4道高频面试题,吃透时间复杂度(递归/堆/贪心/快排) 前言:时间复杂度是算法面试的“必考题”,也是区分初级与中级开发者的核心考点。很多开发者能写出正确的算法代码,却无法清晰、严谨地分析其时间复杂度&am…...

音频算法可视化实战:用Android自定义View绘制专业级EQ/DRC曲线图

音频算法可视化实战:用Android自定义View绘制专业级EQ/DRC曲线图 在音频处理领域,EQ(均衡器)和DRC(动态范围控制)是两大核心算法。对于已经掌握这些算法原理的开发者来说,如何将它们直观地呈现给…...

从MATLAB R2022b升级到R2024a,我的Python脚本为啥跑不起来了?

从MATLAB R2022b升级到R2024a:Python混合编程兼容性危机与系统化解决方案 上周三凌晨两点,当我在服务器上完成MATLAB R2024a的升级部署后,原本稳定运行的数据分析流水线突然崩溃——那些精心编写的Python-MATLAB混合脚本像多米诺骨牌一样接连…...

Coze开发自能体的费用

Coze(扣子)的计费体系在 2026 年进行了全面升级,目前主要分为 国内版 (coze.cn) 和 国际版 (coze.com) 两套独立的定价逻辑。以下是具体的费用构成:1. 国内版 (coze.cn) 计费模式国内版目前采用的是订阅制 资源包的模式&#xff…...

DFS连通域统计:岛屿数量问题及其变形

0.前言 本文我们来学习一下算法题中颇为著名的岛屿数量问题,我将会从问题本身入手,详细分析解题思路,给出完整代码并进行解析,最后简单了解一下几个岛屿问题的变种题目。 1. 问题描述 题目给出一个只含有 0 和 1 矩阵,…...