Linux 内核源码分析---简单文件系统

news2024/11/15 16:22:17

顺序文件

debugfs 文件系统 允许只用几个函数调用,就实现一个双向的调试接口。

小的文件系统中的文件,通常用户层是 从头到尾顺序读取 的,其内容可能是遍历一些数据项创建的。
kprobe 机制包含了到上述 debugfs文件系统 的一个接口。一个顺序文件向用户层提供了所有注册的探测器。

顺序文件处理程序基本上,必须提供一个 struct file_operations 的实例,其中一些函数指针指向一些 seq_ 例程,这样就可以利用顺序文件的标准实现了。
在这里插入图片描述

唯一需要实现的方法是 open。实现该函数不需要多少工作量,简单的一行代码就可以将文件关联到顺序文件接口:
在这里插入图片描述
seq_open 建立顺序文件机制所需的数据结构,使用该指针建立了与 struct seq_file 的一个实例之间的关联, struct seq_file 中包含了顺序文件的状态信息:
在这里插入图片描述
从文件系统实现者的角度来看,最重要的成员是指针 op,它指向 seq_operations 的一个实例。这将通用的顺序文件实现与提供具体文件内容的例程关联起来。
在这里插入图片描述

使用 libfs 编写 FS

libfs 是一个库,提供了几个非常通用的标准例程,可用于创建服务于特定用途的小型文件系统。函数原型定义在<fs.h>中,没有<libfs.h>头文件! libfs 提供的例程通常带有前缀 simple_
使用 libfs 建立的虚拟文件系统,其文件和目录层次结构可使用 dentry 树 产生和遍历。

simple_dir_operations 数据结构
在这里插入图片描述
普通文件不能使用 libfs 的 file_operations 模板。至少要手工指定 readwriteopen 方法,这是必需的,read 负责从内核内存准备数据并将其复制到用户空间,而 write 可用于读取用户的输出并以一定方式应用它。文件系统还需要一个超级块。
libfs 提供了simple_fill_super方法,可用于填充给出的超级块:
在这里插入图片描述
一个 struct tree_descr 的数组用来描述初始的文件集合。
在这里插入图片描述

调试文件系统

使用了 libfs 函数的一个特别的文件系统是调试文件系统 debugfs。它向内核开发者提供了一种向用户层提供信息的可能方法。这些信息并不会编译到产品内核中。它只是开发新特性时的一种辅助手段。仅当内核编译时启用了 DEBUG_FS 配置选项,才会激活对 debugfs 的支持。
因而向 debugfs 注册文件的代码,都会被 C 预处理器条件语句包围,来检查 CONFIG_DEBUG_FS

编程接口:
由于debugfs代码非常干净、简单、文档情况良好,所以不必对其实现多加评注。只需讨论其编程接口就足够了。这是对 libfs 例程的非常好的应用。有3个函数可用于创建新的文件系统对象:
在这里插入图片描述

文件系统对象可以是普通文件、目录或符号链接。两个附加的操作可用于重命名和删除文件:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1996343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【模电笔记】——集成运算放大电路

tips&#xff1a;本章节的笔记已经打包到word文档里啦&#xff0c;建议大家下载文章顶部资源&#xff08;有时看不到是在审核中&#xff0c;等等就能下载了。手机端下载后里面的插图可能会乱&#xff0c;建议电脑下载&#xff0c;兼容性更好且易于观看&#xff09;&#xff0c;…

利用学校资源访问scientdirect等国外数据库

就直接点view pdf这样的下载按钮&#xff0c;会让你输入组织&#xff0c;搜索找到学校的名字&#xff0c;接下来可以能会要求输入学校邮箱或者其他身份认证信息&#xff0c;最后就可以享受学校已经出过钱买的服务啦&#xff01;如果不用那么你每个学期大几千的学费简直是暴殄天…

定制你的项目工作流:最适合的文档管理解决方案

国内外主流的10款项目文档管理软件对比&#xff1a;PingCode、Worktile、Teambition、Tapd、Tower、Confluence、Notion、Dropbox Paper、Quip、Basecamp。 在面对项目管理的复杂性时&#xff0c;选择合适的文档管理工具可以显著提高效率和团队协作。许多团队在文档管理上遭遇混…

灰度宣布推出SUI加密投资信托基金

灰度&#xff0c;这家推出受欢迎的BTC和ETH交易所交易基金&#xff08;ETF&#xff09;的投资公司&#xff0c;于8月7日宣布将开始提供两种新的加密基金Grayscale Sui Trust和Grayscale Bittensor Trust&#xff0c;这些基金投资于Layer-1区块链Sui&#xff08;SUI&#xff09;…

RTT-网络组件-AT命令-未完成

AT指令文档 调用树 at_client_init();at_client_para_init();client_parser();struct at_client {rt_device_t device;at_status_t status;char end_sign;char *send_buf;/* The maximum supported send cmd length */rt_size_t send_bufsz;/* The length of last cmd */rt_si…

Prometheus+Grafana-2-Linux监控-四种指标类型

一、概念 1.时间序列 安装完成后prometheus会暴露一个/metrics的HTTP服务&#xff0c;默认会加上/metrics&#xff0c;Prometheus就会采集这里面的样本数据。 样本 ​ 样本数据会以时间序列的方式保存在内存数据库中&#xff0c;并且定时保存到硬盘上&#xff0c;时间…

CloudCompare—点云切片

文章目录 一、整体功能展示1、必要参数2、其他选项二、代码实现1、提取平面上的包络线2、将点投影到二维平面上3、提取二维凸包三、算法原理参考资料一、整体功能展示 整个点云切片的步骤如下动图所示: 激活点云后,选择切片功能(小立方盒),在点云视图中显示工具栏框,工具…

Javascript常见算法(每日两个)

合并两个有序链表 在JavaScript中&#xff0c;合并两个有序链表通常指的是将两个已经按照某种顺序&#xff08;如升序或降序&#xff09;排列的链表合并成一个新的有序链表。由于JavaScript本身不直接支持链表数据结构&#xff0c;我们通常会用对象或数组来模拟链表的行为。但…

【大模型从入门到精通15】openAI API 构建和评估大型语言模型(LLM)应用3

这里写目录标题 设置评估前的准备工作先决条件获取LLM响应 根据评估标准评估响应构建详细的评估标准评估过程示例评估 设置评估前的准备工作 先决条件 在开始评估过程之前&#xff0c;请确保必要的工具和配置已经到位&#xff1a; import os import openai from dotenv impo…

数据结构课程设计:航班订票系统的设计与实现

目录 1 系统功能及要求 2 系统功能框架 3 详细设计 3.1 录入航班信息模块 3.2 客户订票模块 3.3 客户退票模块 3.4 航班查询模块 3.5 订单查询模块 3.6 航班修改模块 参考文献 1 系统功能及要求 (1)录入信息。可以录入航班信息情况,数据存储在一个数据文件中;可以…

靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解+卷积长短期+注意力多元时间序列预测

靓图&#xff01;多点创新&#xff01;CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测 目录 靓图&#xff01;多点创新&#xff01;CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测效果一览基本介绍程序设计…

了解babel的作用、原理、基本使用,为什么有babel,以及在webpack中的babel-loader

一、为什么有babel&#xff1f; babel是一个工具链&#xff0c;如今大多数的浏览器都支持es6的语法和特性&#xff0c;但难免有些旧版本的浏览器是不支持的&#xff0c;为了兼容这些旧版本的浏览器&#xff0c;有了babel这一个 JavaScript 编译器。它能为我们做一些事情&#…

Linux中针对文件权限的解析

1.文件权限详细解析&#xff1a; -rw-r--r--. 1 root root 114 4月 10 16:32 100.txt 1)-rw-r--r--. 总共11位 第一个“-”和最后一个“.”不用去管&#xff0c;剩下 rw- r-- r-- 属主 属组 其他人 u g o 第一个是“-”表示普通文件 第一个是“d”表示文件目录 …

从BEVDET来学习如何生成trt以及如何去写这些C++内容

0. 简介 对于深度学习而言&#xff0c;通过模型加速来嵌入进C是非常有意义的&#xff0c;因为本身训练出来的pt文件其实效率比较低下&#xff0c;所以这里我们将以BEVDET作为例子&#xff0c;来向读者展示如何去生成trt&#xff0c;并完善engine加速。这里最近受到优刻得的使用…

autoX.js

一. 概述 AutoX.js 使用 JavaScript 作为脚本语言&#xff0c;目前使用 Rhino 1.7.13 作为脚本引擎&#xff0c;支持 ES5 与部分 ES6 特性。 下载地址&#xff1a; https://github.com/kkevsekk1/AutoX/releases 官方文档&#xff1a; AutoX.js 二. 用法 1. 首先在官网下…

如何快速从文本中找到需要的信息,字典和正则灵活运用

import re #打开文本文件 f open("stock_data.txt",encoding"utf-8") #单独读取第一行数据处理进行分割&#xff0c;末尾换行符去掉 headers f.readline().strip().split(,) print(headers) #定义一个字典&#xff0c;以股标代码做为KEY,每个行做为值 st…

嵌入式学习day14(shell脚本)

一丶概念 shell脚本的本质&#xff1a;shell命令的有序集合 shell既是应用程序又是脚本语言&#xff0c;并且是解释型语言&#xff0c;不需要编译&#xff0c;解释一条执行一条。 shell脚本编程&#xff1a;将shell命令结合一些按照一定逻辑集合到一起&#xff0c;写一个.sh文件…

springboot项目配置https证书

前言 springboot项目直接http访问不安全&#xff0c;如何开启https&#xff1f; 如何配置ssl 创建证书 注意:如果你有CA办法的数字证书&#xff0c;可以使用直接使用CA颁发的证书。非可信CA或者私人颁发的证书在浏览器地址栏会显示红色&#xff0c;不安全不受信任。 如果你没…

Mac/iPhone邮件APP绑定武大邮箱

Mac/iPhone邮件APP绑定武大邮箱 一、准备工作二、新增一个互联网账户三、设置收件箱和发件箱服务器 一、准备工作 武大邮箱账户&#xff0c;确保你知道自己的邮箱登陆密码。 下面的步骤是在Mac上操作&#xff0c;iPhone上的设置也是一样的&#xff0c;主要是收件箱和发件箱服…

DC-4 打靶渗透

一、信息收集 1、查看靶机MAC地址&#xff1a; 2、查看靶机的ip地址&#xff1a; nmap 192.168.13.0/24 3、查看靶机开放的端口&#xff1a; nmap -p- -sC -sT -sV -A 192.168.13.161 4、访问靶机的80端口&#xff1a; 5、扫描目录&#xff1a; dirsearch -u "http://192…