关于linux设备驱动中的register_chrdev_region()的问题

2023-11-22

我正在学习如何注册内核模块register_chrdev_region(dev_t from, unsigned count, const char * name);.

我注意到无论有没有这个函数,我的内核模块都按预期工作。我用于测试的代码:

first = MKDEV(MAJOR_NUM, MINOR_NUM);
register_chrdev_region(first, count, DEVICE_NAME);//<---with and without

mycdev=cdev_alloc();
mycdev->ops= &fops;
mycdev->owner = THIS_MODULE;

if (cdev_add(mycdev,first, count) == 0)
{printk(KERN_ALERT "driver loaded\n");}

我注释掉了该行register_chrdev_region(first, count, DEVICE_NAME);,以及printk消息仍然出现。我尝试从用户空间与驱动程序进行通信,无论有没有这个,两者都成功。

所以我的问题是,这个功能是register_chrdev_region()只是用来让我的驱动程序成为一个好的内核公民,就像告诉其他人“我正在用完主号码,请不要使用”?

我试图查看内核源代码char_dev.c理解这个功能,但我觉得太难理解了,有人熟悉这个吗?

Thanks!


这会起作用,因为它实际上不是必要的预先分配您的设备编号。事实上,许多内核开发人员认为使用动态(即时、按需)分配函数更可取alloc_chrdev_region.

无论您是预先静态执行还是根据需要动态执行,它is您应该做一些事情以避免与其他设备驱动程序发生冲突,这些设备驱动程序可能已遵守规则并被分配了您尝试使用的号码。即使您的驱动程序在没有它的情况下工作得很好,也不一定在每台机器上或将来的任何时间都是如此。

这些规则的存在是有原因的,特别是对于低级的东西,我们强烈建议您遵循它们。

See here有关设置过程的更多详细信息。

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

关于linux设备驱动中的register_chrdev_region()的问题 的相关文章

  • C++ Singleton 类 getInstance (作为 java)[重复]

    这个问题在这里已经有答案了 可能的重复 谁能给我提供一份 C 中的 Singleton 示例吗 https stackoverflow com questions 270947 can any one provide me a sample
  • 使用 QTextCursor 选择一段文本

    使用 Qt 框架选择文本片段时遇到问题 例如 如果我有这个文件 没有时间休息 我想选择 ime for r 并从文档中删除这段文本 我应该如何使用 QTextCursor 来做到这一点 这是我的代码 QTextCursor cursor n
  • ZedGraph 缩放和调整大小

    当我绘制图形 放大和缩小并重新绘制图形时 图形的位置不会改变 我想要做的是 每当重新绘制数据时 视图都会更改以查看所有图形数据 如果您在重绘之前放大或缩小 这似乎会被禁用 Thanks 设置属性 IsZoomOnMouseCenter对于控
  • NUnit 测试运行顺序

    默认情况下 nunit 测试按字母顺序运行 有谁知道有什么方法可以设置执行顺序吗 是否存在这样的属性 我只是想指出 虽然大多数受访者认为这些是单元测试 但问题并没有具体说明它们是 nUnit 是一个很棒的工具 可用于各种测试情况 我可以看到
  • 使用 boost::iterator_facade<>

    我有一个链表结构 struct SomeLinkedList const char bar int lots of interesting stuff in here DWORD foo SomeLinkedList pNext 它是现有
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • “volatile void function( ... )” 做了什么?

    我见过从语法角度来看 C 函数中 volatile 关键字有多少种用法 https stackoverflow com questions 7643528 how many usage does volatile keyword have
  • 为什么Boost在“程序选项”中使用全局函数覆盖来实现自定义验证器

    这个例子 http www boost org doc libs 1 55 0 doc html program options howto html idp163429032显示一个名为validate在全局范围内定义重载函数boost
  • 使用成员函数作为 std::shared_ptr 的自定义删除器时出现问题

    我正在尝试弄清楚如何将 std shared ptr 与自定义删除器一起使用 具体来说 我将其与 SDL Surface 一起使用 如下所示 std shared ptr
  • 让 GCC/Clang 使用 CMOV

    我有一个简单的标记值联合 这些值可以是int64 ts or doubles 我正在对这些联合进行加法 但需要注意的是 如果两个参数都代表int64 t值 那么结果也应该有一个int64 t value 这是代码 include
  • 编译器在函数名称前添加下划线前缀的原因是什么?

    当我看到 C 应用程序的汇编代码时 如下所示 emacs hello c clang S O hello c o hello s cat hello s 函数名称以下划线作为前缀 例如callq printf 为什么这样做以及它有什么优点
  • 适用于 Windows 的键值数据库?

    除了 MongoDB 和 Memcached 之外 Windows 上还运行哪些键值存储 我见过的大多数似乎只能在 Linux 上运行 Hypertable Redis Lightcloud 相关链接 是否有经过商业验证的云存储 Key g
  • 在标准库中静态链接时如何支持动态插件?

    假设一个应用程序myapp exe是使用构建的g 它使用标志 static libstdc 这样就可以安装在没有环境的情况下libstdc so myapp exe还添加了对某些功能的插件支持plugf可以通过动态加载dlopen来自共享库
  • 一些涉及类析构函数和删除运算符的内存管理问题?

    在阅读了一些教程后 我仍然不清楚 C 中内存管理的一些观点 1 当使用 new 运算符声明的类超出范围时 是否会调用其析构函数并释放内存 是否有必要调用删除运算符来释放类的内存并调用其析构函数 class Test void newTest
  • 如何从句柄确定进程是 32 位还是 64 位?

    如何从使用 OpenProcess 获取的进程句柄中获取信息 无论进程是 32 位还是 64 位 是的 IsWow64Process 毫无用处 令人烦恼 它的真正意思是 启用了 32 位模拟 如果您在 32 位操作系统上运行 则返回 fal
  • 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

    我使用 Visual Studio 2017 使用 vcxproj 文件构建 C 桌面项目 我喜欢默认行为 其中输出目录是项目下面的子目录 例如 myproj sln myproj vcxproj x64 myproj release my
  • 将函数作为函数参数传递

    Unity C 似乎无法识别Func lt gt 作为函数委托的符号 那么 如何将函数作为函数参数传递呢 我有一个想法Invoke functionName 0 可能有帮助 但我不确定它是否实际上立即调用该函数 或者等待帧结束 还有别的办法
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数

随机推荐

  • jqplot - 单个值,而不是堆积图中的总计

    In a stacked bar chart we can show total of each series in every stack like this However I want value of each series to
  • Identity.EntityFramework OnModelCreating 是如何调用的

    我正在从事两个类似的项目 但我没有创建其中任何一个 它们都具有相同的本地上下文 如下所示 using Microsoft AspNet Identity EntityFramework public class LocalContext I
  • 如何将uuid存储为数字?

    根据问题的回答 MySQL 中的 UUID 性能 回答者建议将 UUID 存储为数字而不是字符串 我不太确定如何做到这一点 有人可以建议我一些东西吗 我的 ruby 代码如何处理这个问题 如果我理解正确的话 您在主列中使用 UUID 吗 人
  • 如何将 QBASIC PLAY 命令转换为更现代的命令?

    我的 QB 应用程序中有这样的播放命令 PLAY MSe8f 4f 8f 8g8a8b4 a4 g4 f 4 o0b8o1e8e8e4d8e2 我想以某种方式将它们转换为现代应用程序可以使用的东西 有什么想法吗 我目前正在 FreeBasi
  • min_member/2 的反直觉行为

    最小成员 分钟 列表 当 Min 是标准项顺序中最小的成员时为真 如果列表为空 则失败 min member 3 1 2 X X 3 当然 解释是变量在术语的标准顺序中位于所有其他术语之前 并且使用统一 然而 所报告的解决方案感觉有些错误
  • 如何将查询结果映射到 sqlalchemy 中的自定义对象?

    我正在寻找一种方法来告诉 sqlalchemy 将某些 tabes 上的复杂查询映射到自定义类MyResult而不是默认的RowProxy班级 这是一个简单的工作示例 create table foo id integer title te
  • itunesconnect apploader 无效段对齐问题

    伙计们 我想更新我的应用程序最新版本 但应用程序加载器一直给我同样的错误 那就是 错误 ITMS 9000 段对齐无效 此应用程序没有正确的段对齐 应使用最新版本的 Xcode 重新构建 如果您需要进一步帮助 请联系开发者技术支持 我快要疯
  • 防止 ProgressDialog 被 onClick 关闭

    我使用 ProgressDialog 向用户表明他必须等待 并在用户必须等待时使我的应用程序的表面 不可触摸 我向 ProgressDialog 添加了一个按钮 如果某些条件成立 它应该启动一些操作 问题是每次用户按下按钮时 progres
  • Java滑动JPanels

    我有一个显示各种按钮的菜单 我可以让按钮在单击时调用它们各自的 JPanel 问题是我想让 Jpanel 在调用时滑入 而不是立即弹出 我尝试使用补间引擎 作为 Java 初学者 我发现它真的让人不知所措 所以我决定使用定时动画 我能够使顶
  • Kafka Streams如何获取kafka headers

    我有下面的卡夫卡流代码 public class KafkaStreamHandler implements Processor
  • Rails ActiveRecord 创建或查找

    我正在开发 Rails 4 应用程序 在我的 api 的 post 方法中 我想根据用户尝试创建的内容查找记录 如果它不存在 则创建它 如果它确实更新它的参数有 我编写了一些实际执行此操作的代码 但执行起来需要一些时间 有没有其他方法可以用
  • 从 SSRS 2005 (VB.NET) 中的字符串中去除 HTML

    my SSRS数据集返回一个 HTML 字段 例如 b blah blah b i blah i 如何去除所有 HTML 标签 必须完成inline VB NET 更改表中的数据不是一种选择 找到解决方案 System Text Regul
  • 调整背景图像大小以适合

    我试图使背景图像尽可能专业 所以我认为最好根据浏览器的大小或分辨率调整它的大小 不确定通常使用什么 但我认为浏览器大小在这里有意义 这个想法是 如果查看器屏幕较小 则背景图像会变小 并且随着屏幕变大 图像会扩展以适合其最大尺寸 我会根据需要
  • Phylo BioPython 构建树木

    I trying to build a tree with BioPython Phylo module What I ve done so far is this image 每个名称都有一个四位数字 后跟 和一个数字 该数字指的是该序列
  • 动态更改选项卡文本标题

    我在 viewpager 下有一个带有四个选项卡的选项卡 我想在滑动选项卡时更改文本标题 我的问题是我无法分别处理选项卡 例如四个选项卡标题是 1 2 3 4 当我滑动时 它会显示为 1 9 3 4 或 1 2 9 4 但在我的例子中是 7
  • 从 aov 中提取 p 值

    我正在寻找从 R 中的方差分析生成的 p 值 这是我正在运行的 test lt aov asq 9 asq 187 summary test Yields Df Sum Sq Mean Sq F value Pr gt F asq 187
  • 如何避免在番石榴中延迟应用Lists.transform?

    Map
  • 使用命令输出中引用的条目在 Bash 中创建数组

    我在从标准输出形成 bash 数组时遇到问题 我把它归结为这个最小的例子 a echo 1 2 3 foo bar echo a 0 1 echo a 1 2 echo a 2 3 echo a 3 foo echo a 4 bar 我相信
  • 在 Julia 中检索 RNG 种子

    在 Julia 中 全局 RNG 的种子可以设置为 srand SEED 我如何检索全局 RNG 的种子或当前状态 例如稍后再来一次 目标是在任何给定时间点获取 RNG 的状态 并在不同的会话中重新创建它 而无需知道初始种子或同时发生的对
  • 关于linux设备驱动中的register_chrdev_region()的问题

    我正在学习如何注册内核模块register chrdev region dev t from unsigned count const char name 我注意到无论有没有这个函数 我的内核模块都按预期工作 我用于测试的代码 first