Linux内核编程06期:文件系统

本文将深入剖析Linux内核中的文件系统原理,从设备端到主机端,讲解磁盘格式化、挂载、VFS、设备文件、根文件系统和initramfs等关键概念,通过实例和源码解析,助你理解文件操作背后的内核机制。

Linux内核的哲学是:一切皆文件。

无论是普通的磁盘文件、还是鼠标、键盘、显示器、SD卡,网卡,都可以使用文件模型进行封装,通过标准的系统调用:open、close、read、write来访问。


本期课程录制背景

在嵌入式项目开发中,很多人可以很快解决工程上的问题:通过busybox制作根文件系统、格式化和挂载一个磁盘、设置root/init等启动参数去挂载不同的根文件系统,通过read/write去读写文件,但对于底层文件系统的细节可能就不是很清楚了,比如:

  • busybox到底是个什么东西?
  • 根文件系统和普通文件系统的区别?
  • 为什么需要挂载根文件系统?
  • U盘在使用前为什么要先格式化?
  • 格式化到底做了什么操作?
  • 数据在磁盘上是如何存储的?
  • 文件系统是如何读取数据的?
  • 文件系统的挂载是怎么回事?
  • 设备文件是不是也算文件?
  • ramdisk是什么?initrd呢?
  • 什么是rootfs?initramfs?
  • 根目录:/ 到底是个什么鬼?
  • 根文件系统和根目录之间有什么关系?
  • VFS是什么?有什么作用?
  • Linux内核为什么需要VFS?

文件系统分层太多,代码复杂,一些在项目和工程中留下的细节问题,需要花很多精力去探索,才能柳暗花明,找到想要的答案。为了讲清楚以上这些细节,又不得不花大量的时间,深入内核源码层寻找答案,为了更方便学习,作者特意、画了很多流程图,结合内核源码解读,更加直观,更加方便学员理解和吸收。

 

课程详细目录

本期课程的详细课程目录:

  • 00 本期课程主要内容
  • 01 什么是文件系统?:设备端
  • 02 磁盘的格式化与挂载
  • 03 什么是文件系统?:主机端
  • 04 文件系统核心数据结构:super_block
  • 05 文件系统核心数据结构:inode
  • 06 文件系统核心数据结构:dentry
  • 07 文件系统核心数据结构:file
  • 08 虚拟文件系统:VFS
  • 09 文件系统的注册过程分析
  • 10 文件系统的挂载(上)
  • 11 文件系统的挂载(下)
  • 12 文件的打开过程分析(上)
  • 13 文件的打开过程分析(下)
  • 14 文件创建过程分析
  • 15 文件读写过程:地址空间与页缓存
  • 16 文件读写过程:read内核流程分析
  • 17 什么是设备文件?
  • 18 设备文件的创建过程分析
  • 19 设备文件打开过程分析
  • 20 设备文件读写过程分析
  • 21 什么是根文件系统?
  • 22 根文件系统挂载(上):rootfs
  • 23 根文件系统挂载(中):root=分析
  • 24 根文件系统挂载(下):根目录切换
  • 25 使用initrd为根文件系统(上)
  • 26 使用initrd为根文件系统(中):CPIO
  • 27 使用initrd为根文件系统(下):ramdisk
  • 28 使用initramfs作为根文件系统
  • 29 initramfs挂载过程分析
  • 30 基于内存的文件系统:tmpfs
  • 31 文件系统的自动挂载
  • 32 文件系统的性能指标

课程总计32课时,4.5GB,1080P超高清录制,高清无码,观看体验更好。

课程特色

全网首家尝试从文件系统的设备端(磁盘)和主机端(文件系统驱动)结合起来讲解,让学员快速树立文件系统的整体框架:文件和目录到底在磁盘上是如何存储的,通过格式化挂载实验、王老师亲手扒数据dump分析,让你一清二楚,一目了然:

主机的VFS和文件系统是如何与磁盘进行交互的,深入内核源码,探寻知识盲点和以前忽略的细节:

 

学完本期课程的预期收获

学完本期课程,你讲获得以下预期收获:

  • 彻底搞清楚磁盘的格式化、挂载是怎么回事
  • 学会制作嵌入式Linux的根文件系统
  • 学会配置使用ramdisk、initramfs作为根文件系统
  • 通过内核源码细节,真正理解VFS层的作用和意义
  • 熟悉磁盘文件的创建、打开、读写内核流程
  • 熟悉设备文件的创建、打开、读写内核流程
  • 从磁盘到主机,树立完整的文件系统框架

《Linux内核编程》已经发布了6期,后面课程会陆续更新:

  • Linux内核编程00期:入门学习指南
  • Linux内核编程01期:模块机制
  • Linux内核编程02期:Kbuild子系统
  • Linux内核编程03期:系统调用
  • Linux内核编程04期:驱动中断编程实战
  • Linux内核编程05期:字符设备驱动
  • Linux内核编程06期:文件系统
Linux内核一直是学习的难点:将近3000万行代码,5万多个源文件,代码庞大繁杂、代码很难看懂。《Linux内核编程》将突破以往传统的学习方式,采取更有效和科学的学习方法,多角度地对内核进行多层次分析,不局限于形式,不拘泥细节,目的只有一个:更轻松、更高效地去理解内核、学习内核。为了更好地让学员掌握内核编程技能,更好地理解内核,本课程将采用并不局限于以下学习方法进行课程的录制:降维分析,化简为繁,将复杂的系统简单化用软件工程的方法分析内核:软件分层、模块化分解、框架迭代多角度立体分析Linux内核,目的只有一个:更好地理解内核利用Linux内核中的面向对象编程思想去分析复杂的子系统、子系统交互利用多任务编程的思想去分析Linux内核本套课程预计分为20个左右的小模块,每个模块一个专题,每个专题会陆续发布。拟录制的模块包括但不限于:模块机制、内核裁剪与配置、内核编译与启动、系统调用、中断、文件系统、调度、内存管理、内核同步、设备模型、字符驱动、块驱动、定时器、input、platform设备驱动、device tree、proc、sysfs、I/O...  本课程是《Linux内核编程》的入门篇,主要给大家介绍一下Linux内核开发、Linux驱动开发的就业行情、行业生态、需要掌握哪些技能、Linux内核的学习方法、如何搭建Linux内核的学习开发环境。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宅学部落-王利涛

just for test

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值