冰块的博客

日拱一卒 不期而至

EROFS file-backed image

EROFS 文件后端

09 · 特性专题:文件后端(file-backed image / fileio) 对应配置:CONFIG_EROFS_FS_BACKED_BY_FILE 主源码:fileio.c(不到200行,是 EROFS 里最小的特性文件之一) 本文回答六个问题:为什么需要它(缘由)→ 为什么会这样设计(理念)→ 它长什么样(架构)→ 用到哪些结构体 → 关键函数在做什么 → 一次读的...

EROFS core struct

EROFS 核心结构体

08 · 核心结构体:关键字段与它们之间的联系 本文档是参考手册,不是阶段教学。读完整条路线后回头查字段最有用; 也适合在读 03/04 章(读路径)时作为对照表放在旁边。 本文档目标(读完你应该能做到什么) 说出 EROFS 里 5 层核心结构体分别管什么,以及它们在什么文件里 看到 sbi->blkszbits、vi->datalayout、map.m...

EROFS practise and contribute

EROFS 动手实践

阶段 7:动手实践与贡献 本章的目标是让你真正跑起来,并能提交第一个补丁。 本章所有命令都在本机验证过(不能用的会明确标注)。 本阶段目标 读完这一章,你应该能够: 造出各种 datalayout 的镜像,并用 dump.erofs 验证 知道本环境能做什么、不能做什么(以及为什么) 知道 EROFS 的运行时观察手段(ftrace、sysfs) 有一份”第...

EROFS advanced features

EROFS 高级特性

阶段 6:高级特性 本章的特性都”挂在主干上”,没有一个独立成体系。 按挂载点分类记忆,比按字母顺序背清单有效得多。 📌 先看这里:本章是概览,深度内容在特性专题(09–18) 本章用「① 解决什么问题 → ② 磁盘上怎么表示 → ③ 内核怎么用 → ④ 现状与坑」 四段式覆盖 9 个特性,每个约百行——目的是让你先建立全景。 若要深入理解某个特性(关键结构体、主要函数、...

EROFS back-end decompression

EROFS 后端解压

阶段 5:解压后端 本章聚焦解压后端的设计与实现:算法如何抽象、如何挂接, 同步与异步如何取舍,硬件加速如何接入。 读完你应该能说清”一个解压请求从发出到完成,中间经过了哪些设计决策”。 本阶段目标 读完这一章,你应该能够: 说出 EROFS 的解压后端是怎么抽象和挂接的 区分四种压缩算法的特点与适用场景,知道各自的 Kconfig 开关 解释同步解压与异步解压...

EROFS compressed reading-path

EROFS 压缩读路径

阶段 4:压缩读路径 这是全套材料最难的一章,也是最有价值的一章。 压缩相关代码(zmap.c + zdata.c + zutil.c)占全树约 33%。 建议分三步走:先看 zmap(映射),再看 zdata(状态机), 最后看两者如何联动。不要试图一次读懂整个压缩路径。 本阶段目标 读完这一章,你应该能够: 解释为什么压缩文件的”逻辑偏移 → 物理位置”不能靠...

EROFS uncompressed reading-path

EROFS 非压缩读路径

阶段 3:非压缩读路径 本章会做一件很爽的事:把阶段 1 里 dump.erofs 看到的现象, 和产生它的那段代码一一对上。 本阶段目标 读完这一章,你应该能够: 说出 EROFS 的读入口有哪几个,以及它们为什么都走 iomap 画出一次非压缩读从 read() 到设备的完整调用链 读懂 erofs_map_blocks(),并解释它如何对应阶段 1 的实测...

EROFS mount and metabuf

EROFS 挂载与元数据原语

阶段 2:挂载与元数据原语 本章最重要的内容是 erofs_buf 三件套。 它是 EROFS 取元数据的唯一方式——搞懂它,后面每个阶段的代码你都能读懂一大半。 本阶段目标 读完这一章,你应该能够: 说出挂载从 mount 命令到”能访问根目录”经过了哪几步 解释 superblock 校验时”拒绝不兼容特性”的必要性 说出 sbi 里 6~8 个关键字段...

EROFS on-disk format

EROFS 镜像格式

阶段 1:on-disk 格式 本章所有数字都来自真实镜像,不是编造的示例。 你可以照着 1.9 节的命令一步步复现,看到和我一样的结果。 本阶段目标 读完这一章,你应该能够: 说出 EROFS 镜像里什么位置固定、什么位置自由 解释 superblock 里那几个关键字段各自”内核拿它来干什么” 给你一个 nid,算出这个 inode 在磁盘的哪个字节 说...

EROFS Prerequisites

EROFS 前置知识

阶段 0:内核存储栈前置 这一章不出现任何 EROFS 代码。 但如果你跳过它,后面每一章你都会觉得”这句话在说什么”。 本阶段目标 读完这一章,你应该能够: 说出一次 read() 从用户程序到硬件经过哪几层,每层负责回答什么问题 说清 super_block / inode / dentry / file 四个对象各自代表什么 解释 page cache 为...