3.gendisk结构体

2023-11-16

在Linux内核中,使用gendisk(通用磁盘)结构体来表示一个独立的磁盘设备(或分区)。
1.gendisk结构体

  • major、first_minor和minors共同表征了磁盘的主、次设备号,同一个磁盘的各个分区共享一个主设备号,而此设备号则不同
  • fopsblock_device_operations,即块设备操作集合;
  • queue是内核用来管理这个块设备的I/O请求队列的指针;
  • private_data可用于指向磁盘的任何私有数据;
  • hd_struct成员表示一个分区; 而disk_part_tbl成员用来容纳分区表;part0和part_tbl两者的关系在于:
disk->part_tbl->part[0] = &disk->part0;

Linux内核提供了一组函数来操作gendisk,如下所示。
2.分配gendisk
gendisk结构体是一个动态分配的结构体,他需要特别的内核操作来初始化,驱动不能自己分配这个结构体,而应该使用下列的函数来分配。

struct gendisk *alloc_disk(int minors);

minors参数是这个磁盘使用的此设备号的数量,一般也就是磁盘分区的数量,此后minors不能被修改。
3.增加gendisk
gendisk结构体被分配后,系统还不能使用这个磁盘,需要调用如下函数来注册这个磁盘设备。

void add_disk(struct gendisk *disk);

特别要注意的是:对add_disk()的调用必须发生在驱动程序的初始化工作完成并能响应磁盘的请求之后
4.gendisk引用计数
通过get_disk()put_disk()函数可操作gendisk的引用计数,这个工作一般不需要驱动亲自做。

struct kobject *get_disk(struct gendisk *disk);
void put_disk(struct gendisk *disk);

前者最终会调用"kobject_get(&disk_to_dev(disk)->kobj);"
后者则会调用"kobject_put(&disk_to_dev(disk)->kobj);"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3.gendisk结构体 的相关文章

  • 无法在 64 位 Linux 上从汇编 (yasm) 代码调用 C 标准库函数

    我有一个函数foo以汇编语言编写 并在 Linux Ubuntu 64 位上使用 yasm 和 GCC 编译 它只是使用以下命令将消息打印到标准输出puts 如下所示 bits 64 extern puts global foo secti
  • 使用 inotify 的正确方法是什么?

    我想使用inotifyLinux 上的机制 我希望我的应用程序知道文件何时aaa被改变了 您能给我提供一个如何做到这一点的示例吗 文档 来自监视文件系统活动 inotify https developer ibm com tutorials
  • C - 为什么我无法映射较小(256UL 或更小)的内存?

    请告诉我 为什么我的简单应用程序无法映射较小的内存 而且 为什么有这样一个特定的边界 257UL define MAP SIZE 256UL or below fail define MAP SIZE 257UL ok include
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 查看 Linux 上的多核或多 CPU 利用率

    我有一个在 Linux 上运行的程序 我需要确定它如何利用所有 CPU 内核 有没有什么程序可以查看这些信息 跑过 top 命令并按下 1 查看各个核心
  • 在 Linux 上创建线程与进程的开销

    我试图回答在 python 中创建线程与进程有多少开销的问题 我修改了类似问题的代码 该问题基本上运行一个带有两个线程的函数 然后运行带有两个进程的相同函数并报告时间 import time sys NUM RANGE 100000000
  • XAMPP Windows 上的 Php Cron 作业

    嗯 我是这个词的新手CRON 据我所知 这是一个Unix安排特定操作在定义的时间间隔后执行的概念 我需要运行一个php文件 每小时更新一次数据库 但我的困惑在于安排执行 我在用XAMPP用于 Windows 7 上的本地开发测试 我发现了什
  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 使用 ProcessBuilder 运行 shell 脚本

    我正在尝试使用 Java 和 ProcessBuilder 运行脚本 当我尝试运行时 我收到以下消息 error 2 没有这样的文件或目录 我不知道我做错了什么 但这是我的代码 ps 我尝试只执行不带参数的脚本 错误是相同的 String
  • 在 Linux 控制台中返回一行?

    我知道我可以返回该行并用以下内容覆盖其内容 r 现在我怎样才能进入上一行来改变它呢 或者有没有办法打印到控制台窗口中的特定光标位置 我的目标是使用 PHP 创建一些自刷新的多行控制台应用程序 Use ANSI 转义码 http en wik
  • 可以作为命令行参数传递多少数据?

    在 Linux 下生成进程时可以发送多少字节作为命令行参数 gahooa 推荐了一篇好文章http www in ulm de mascheck various argmax http www in ulm de mascheck vari
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • 如何在文件夹中的 xml 文件中 grep 一个单词

    我知道我可以使用 grep 在这样的文件夹中的所有文件中查找单词 grep rn core 但我当前的目录有很多子目录 我只想搜索当前目录及其所有子目录中存在的所有 xml 文件 我怎样才能做到这一点 我试过这个 grep rn core
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 用于时间线数据的类似 gnuplot 的程序

    我正在寻找一个类似 gnuplot用于在时间轴中绘制数据图表的程序 类似 gnuplot 在 Linux 上运行 命令行功能 GUI 对我帮助不大 可编写脚本的语法 输出为 jpg png svg 或 gif 输出应该是这样的 set5 s
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na

随机推荐

  • CentOS 7下安装nginx+php+mysql

    目录 一 安装Nginx 1 安装make 2 安装g 3 安装PCRE库 4 安装zlib库 5 安装ssl 6 下载和解压nginx 7 添加nginx用户和用户组 8 配置nginx安装参数 9 编译并且安装nginx 10 启动ng
  • Windows下的mingw-Qt开发环境安装及helloworld实现

    Windows下的mingw Qt开发环境安装及helloworld实现 我用的是Qt5 7 因此本次总结是基于Qt5 7 0的 我在自学的时候使用的IDE是Qt自带的Qt creator 上手简单 配置属于自己顺手的设置很方便 此外 如果
  • element主题色切换

    在网上搜了很多主题切换方案 发现没有适合自己项目的 不得已结合根据实际情况做一个子主题切换的功能 其中参考了element 官方的theme chalk preview 感兴趣的可以自己研究一下 主要功能是基于less切换主题色 可以自定义
  • 网络安全工程师需要学什么?零基础怎么从入门到精通,看这一篇就够了

    网络安全工程师需要学什么 零基础怎么从入门到精通 看这一篇就够了 我发现关于网络安全的学习路线网上有非常多看似高大上却无任何参考意义的回答 大多数的路线都是给了一个大概的框架 告诉你那些东西要考 以及建议了一个学习顺序 但是这对于小白来说是
  • 计算机退出程序的四种方法,退出windows10系统账户的四种方法

    网友反馈说Win10系统打开某些程序时 经常会弹出提示 你要允许以下程序对此计算机进行更改吗 每回都要手动关闭 而且频繁的弹出影响办公效率 有什么办法能将此窗口给永久关闭 退出微软账户即可 接下去看下具体操作方法 退出Win10账户的方法
  • 同步与异步的区别(一看则懂)

    前端面试经常被问 同步与异步的区别是什么 答案呢 大家都知道 只是在于你怎么表达 这种问题也不是很复杂 建议在回答的时候最好结合自己的实际项目开发以及自己的理解来回答 这样的效果会比较好 面试上提的问题本来目的就是想考察你是否熟悉 是否有用
  • TSN协议之冗余协议——IEEE 802.1 CB

    在车载通信领域 我们时常面临一个困惑 要是通信线路异常断开了怎么办 这里的异常断开不仅指物理上的断开 也可能是受电磁干扰等导致线路通信功能的异常等 解决此类问题 一个显而易见的解决方案就是增加冗余路径 即把数据传输2 N份以进行备份 这样就
  • 【转载】阿里数据技术大图详解

    架构图从下往上看 从数据采集和接入为始 抽取到计算平台 通过OneData体系 以 业务板块 分析维度 为架构去构建 公共数据中心 基于公共数据中心在上层根据业务需求去建设消费者数据体系 企业数据体系 内容数据体系等核心数据资产 深度加工后
  • JS判断数组是否包含其他数组中的一个值

    Test var a 2 3 4 5 6 7 8 9 10 var b 2 3 var c 1 var x S1 var y S2 c findIndex val gt x y a includes val Demo POC primary
  • 读取nacos配置_Nacos入门指南01 Nacos是什么?

    你好 欢迎阅读 本文是系列文章中的第1篇 Part1 Nacos 是什么 Part2 Nacos 环境搭建 Part3 Nacos 服务发现实践 Part4 Nacos 分布式配置实践 本文的目标是理解 Nacos 的概念作用 并理解服务发
  • 【发布】ChatGLM又开源了一个6B多模态版本

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 OpenAI 的GPT 4样例中展现出令人印象深刻的多模态理解能力 但是能理解图像的中文开源对话模型仍是空白 近期 智谱AI 和清华大学 KEG 实验室开源了基于 ChatGLM
  • Quartus Ⅱ 15.1 将Verilog模块程序封装

    将模块程序封装 我们可以更加直观查看每个模块间的联系 先放一张成果图 博主做完数电实验就忘干净了 所以自己又摸索了一遍 最后成品可能不是太好看 怪自己手残 下面是详细步骤 首先要在files一栏 右击想要封装的模块 然后选择 Create
  • 如何在PC上查看一个web页面在移动端的展示效果

    最近在chrome上发现一个东东 emulation 这个果断可以用来模拟web页面在移动端的显示结果 F12的界面 点击 Show drawer 就可以看到这个界面了 这里可以选择各种设备 选中之后 点击emulate就可以模拟了 这个就
  • python 基础语法使用Demo

    基本模型 usr bin python coding UTF 8 print 你好 世界 一行显示多条语句 方法是用分号 分开 print hello print world 编写格式注意点 没有严格缩进 在执行时会报错 if True p
  • tw8836flash制作

    TW8836 Flash的bin制作 2 选bitmap 在选menu 3 4 压缩需勾选 5 添加图片 制作bin文件 6 改生成的MRLE为Bin后缀 BIN文件为烧写 INF文件为图片存储信息 代码要用到 7 这里用到BIN文件作为烧
  • chapter6可视化(不想看版)

    pip install visdom python m visdom server 直接使用 http localhost 8097 def linspace start stop num 50 endpoint True retstep
  • [个人笔记] origin学习 入门教程

    良心官方 已经入驻bilibili 官号 Origin Pro软件官方 投稿了许多基础教程 还有技术交流群等 打算学习的同学可以去找一下看看 2020 7 5官号只有三级 快去欺负 晚了就欺负不到了 图片中包含引用于官方视频教程的图片左下角
  • 手写数字识别代码详解

    文件目录如下 其中数据集data目录运行时在与手写数字识别同级目录自动生成 具体文件内代码见下文 一 conf py文件 项目配置 import torch train batch size 128 训练批次大小 表示每次训练神经网络时每次
  • 为什么不建议给MySQL设置Null值?《死磕MySQL系列 十八》

    大家好 我是咔咔 不期速成 日拱一卒 之前ElasticSearch系列文章中提到了如何处理空值 若为Null则会直接报错 因为在ElasticSearch中当字段值为null时 空数组 null值数组时 会将其视为该字段没有值 最终还是需
  • 3.gendisk结构体

    在Linux内核中 使用gendisk 通用磁盘 结构体来表示一个独立的磁盘设备 或分区 1 gendisk结构体 major first minor和minors共同表征了磁盘的主 次设备号 同一个磁盘的各个分区共享一个主设备号 而此设备