当前课程知识点:Linux 内核分析与应用 >  第8章 文件系统 >  8.7 动手实践-编写一个文件系统(下) >  Video

返回《Linux 内核分析与应用》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《Linux 内核分析与应用》慕课在线视频列表

Video课程教案、知识点、字幕

大家好 本节视频继续来给大家分享myfs

上一节视频

已经给大家分享了创建文件夹和文件的过程

本节视频来给大家分享一下

实现open read和write的方法

首先在open方法中

只打印一行字符 已打开文件

在read和write方法中

实现的方式有很多

这里给大家分享使用KFIFO环形缓冲区来实现

大家可以参考下张天飞老师的《奔跑吧,Linux内核》

环形缓冲区通常有一个读指针和一个写指针

读指针指向环形缓冲区可读的数据

写指针指向环形缓冲区可写的数据

通过移动读指针和写指针

来实现缓冲区的数据读取和写入

Linux也实现了KFIFO的环形缓冲区

可以在一个读线程和一个写线程并发执行的情况下

不用使用锁机制来保证环形缓冲区的数据安全

在Linux内核中

KFIFO机制的API

在include/linux目录下的

kfifo.h文件中

来看代码 首先

使用DEFINE_KFIFO

来初始化一个环形缓冲区

环形缓冲区中有64个字符类型的数据

在write操作中

使用kfifo_from_user()函数

将用户空间的数据写入环形缓冲区

actual_write变量保存成功复制数据的数量

用作返回值

在read操作中

使用kfifo_to_user()

来将读取出环形缓冲区中的数据

复制到用户空间中

这三个便是自己实现的

struct file_operation结构体

来看一下文件系统数据结构图

需要注意的是 不管是

file_operations还是inode_opreations

都是在inode结构体中的

我们再来看

inode_operations中有

lookup()函数 mkdir() rmdir()函数

而file_operations则是对文件的操作

read() write() open()

那么在初学文件系统时 就会有一个疑问

mkdir() rmdir()应该是对目录的操作

而目录的操作为什么不在dentry结构体中

实际上是因为

在linux中一切皆文件

不管是文件夹还是文件 都由dentry和inode共同描述

也就是文件夹有自己的dentry和inode结构体

文件也有自己的dentry和inode结构体

inode用来存放元数据

当它是文件夹时

则执行

inode_operations中的操作 当是文件时

则执行file_operations操作

接下来编译内核模块

来插入内核模块

可以看到已经正确插入内核模块了

接下来需要执行挂载

也就是执行mount命令

mount是进行挂载 什么叫挂载

.简单来说就是系统本身有一个从

/开始的一颗文件树

而我们自己的MYFS是一根树枝

挂载就是将这根树枝镶嵌到树上

并且以后可以从树找到这根树枝

mount命令执行后 会调用sys_mount系统调用

在源代码中简要看下这一过程

首先系统调用是SYSCALL_DEFINE5()函数

位于fs文件夹下namespace.c文件中

来看源代码

之后它会调用do_mount()函数

进入do_mount()函数

由于我们这里是第一次执行mount操作

所以调用的是这里的do_new_mount()函数

进入

在这里又可以看到之前分析过的vfs_kern_mount()函数

即用来创建根dentry和根inode结构体

之后执行do_add_mount()

把源文件系统挂载到目的文件系统

这里又执行vfs_kern_mount()函数

由于之前我们插入内核模块时已经执行了一次

所以在这里获取的就是我们刚刚执行

生成的结构体

首先进入根目录

创建一个文件夹

执行mount操作

先来打印内核消息

这里打印出了相关的一些信息

现在我们来进入我们的文件夹

可以看到已经生成了

在内核态代码中想要生成的两个文件夹

First和Second

使用ls –l命令来查看

可以看到这里的权限和我们预期是一致的

d代表目录文件

这里也生成了两个文件one two

有可写的权限

好 接下来使用用户态测试程序来测试

myfs文件系统

实际上我们可以在这里使用cat命令

来查看文件 打印内核消息

可以看到已打印出了已打开文件

等消息

证明已经执行了open和read操作

现在来执行用户态测试程序

在用户态测试程序中 依次执行

open

write和read

在这里定义read_buffer

用来保存环形缓冲区中读取出来的数据

写入和读出的数据是I am myfs

来对文件进行编译

执行

可以看到打印出的信息

I am myfs就是读取出来的数据

一共是10个字节

另外在调试代码的时候 可以多使用printk语句

这是调试代码最普遍使用的方法

在每个函数中使用一个变量

来作为错误标志

可以在每个函数首部尾部打印这个字段的值

来观察代码执行过程的正误

另外可以在proc目录下

查看现在系统当中的文件系统

也可以看到myfs

另外在kernel.org网页中

有官方的一些参考资料 在Documentation里面

我们可以看到

linux内核中的文件系统

这里的资料非常详细 大家可以进行参考

好 这就是给大家分享的myfs文件系统

谢谢大家

Linux 内核分析与应用课程列表:

第1章 概述

-1.1 Linux操作系统概述

--1.1 Linux 操作系统概述

-1.2 Linux内核结构以及内核模块编程

--Video

-1.3 Linux内核源码中的双链表结构

--Video

-1.4 源码分析-内核中的哈希表

--Video

-1.5 动手实践-Linux内核模块的插入和删除

--Video

-第1章 概述--章节测验

-第1章导学--引领你进入Linux内核的大门

第2章 内存寻址

-2.1 内存管理之内存寻址

--Video

-2.2 段机制

--Video

-2.3分页机制

--Video

-2.4 动手实践-把虚拟地址转换成物理地址

--Video

-第2章 内存寻址--章节测验

-第二章导学-从零打造自己的操作系统

第3章 进程管理

-3.1 进程概述

--Video

-3.2 Linux进程创建

--Video

-3.3 Linux进程调度

--Video

-3.4 动手实践-打印进程描述符task_struct中的字段

--Video

-3.5工程实践-基于内核模块的负载监控

--Video

-第3章 进程管理--章节测验

-第三章导学-进程背后琳琅满目的宝贝到哪里挖?

第4章 内存管理

-4.1 Linux内存管理机制

--Video

-4.2 进程用户空间管理机制

--Video

-4.3 物理内存分配与回收机制(上)

--Video

-4.4 物理内存分配与回收机制(下)

--Video

-4.5 动手实践-Linux内存映射基础(上)

--Video

-4.6 动手实践-Linux内存映射实现(中)

--Video

-4.7 动手实践-Linux内存映射测试(下)

--Video

-4.8 初学者对内存管理的常见疑惑

--初学者对内存管理的常见疑惑(一)

--初学者对内存管理的常见疑惑(二)

--初学者对内存管理的常见疑惑(三)

-第4章 内存管理--章节测验

第5章 中断

-5.1 中断机制概述

--Video

-5.2 中断处理机制

--Video

-5.3 中断下半部处理机制

--Video

-5.4 时钟中断机制

--Video

-5.5 动手实践-中断上半部的代码分析及应用

--Video

-5.6 动手实践-中断下半部的代码分析及应用

--Video

-第5章 中断--章节测验

第6章 系统调用

-6.1 Linux中的各种API

--Video

-6.2 系统调用机制

--Video

-6.3 动手实践-添加系统调用(系统调用日志收集系统)

--Video

-第6章 系统调用--章节测验

第7章 内核同步

-7.1 内核同步概述

--Video

-7.2 内核同步机制

--Video

-7.3 动手实践-内核多任务并发实例(上)

--Video

-7.4 动手实践-内核多任务并发实例(下)

--Video

-第7章 内核同步--章节测验

第8章 文件系统

-8.1 虚拟文件系统的引入

--Video

-8.2 虚拟文件系统的主要数据结构

--Video

-8.3 文件系统中的各种缓存

--Video

-8.4 页高速缓存机制以及读写

--Video

-8.5 动手实践-编写一个文件系统(上)

--Video

-8.6 动手实践-编写一个文件系统(中)

--Video

-8.7 动手实践-编写一个文件系统(下)

--Video

-第8章 文件系统--章节测验

第9章 设备驱动

-9.1 设备驱动概述

--Video

-9.2 I/O空间管理

--Video

-9.3 设备驱动模型

--Video

-9.4 字符设备驱动程序简介

--Video

-9.5 块设备驱动程序简介

--Video

-9.6 动手实践-编写字符设备驱动程序

--Video

-9.7工程实践-编写块设备驱动的基础(上)

--Video

-9.8 工程实践-块设备驱动程序分析(中)

--Video

-9.9 工程实践-块设备驱动程序实现(下)

--Video

-第9章 设备驱动--章节测验

致谢与说明

-致谢与说明

--Video

直播视频:从Linux内核学习到自主操作系统研发

-从Linux内核学习到自主操作系统研发

附录:实验代码、课件以及相关素材

-各章实验代码

-《Linux内核分析与应用》课件

-《Linux操作系统原理与应用》教材课堂视频

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。