当前位置: 首页 > 面试题库 >

如何从用户空间与Linux内核模块通信,而不会在新节点上乱扔/ dev?

靳富
2023-03-14
问题内容

从用户空间与内核模块进行通信的方式有哪些?通过通信,我的意思是在内核模块和用户空间进程之间发送信息和命令。

我目前知道两种方式:

  1. 在已发布的设备节点上打开/关闭/读取/写入/ ioctl。
  2. 读取/写入已导出并挂钩的/ proc文件。

更具体地说,有人可以建议与实际上不驱动任何硬件的内核模块通信的最佳方法,因此不应使用仅用于ioctl调用的存根节点乱扔/
dev吗?我最需要检查其各种状态变量,并使用请求类型标记将其发送给数据块,然后查看请求是否成功。


问题答案:

Netlink套接字也针对此类要求而设计。

另见

  • 男子7网络链接
  • libnl-Netlink库
  • libnl档案


 类似资料:
  • 问题内容: 我正在为Linux内核编写模块,并且我想在init函数中创建一些设备节点 我还希望内核为我的第一个节点分配一个次要编号,然后由我自己分配其他节点的次要编号。 我该如何在代码中做到这一点。我不想使用mknod从外壳创建设备 问题答案: 要更好地控制设备编号和设备创建,您可以执行以下步骤(而不是): 致电以获取一个主要号码和一系列次要号码。 使用创建设备类的设备。 对于每个设备,调用并将字

  • 问题内容: 似乎在Windows 32位上,内核将从全部4G用户虚拟内存空间中保留1G虚拟内存,并将 某些 内核空间映射到此1G空间中。 所以我的问题是: 在32位Linux上是否有类似情况? 如果是这样,我们如何看到整个内存布局? 我认为 只能看到某些过程的用户空间布局。 谢谢! 问题答案: 实际上,在32位Windows上,如果没有引导选项,内核将映射到线性地址空间的前2GB,剩下2GB的空间

  • 问题内容: Linux内核内部用户内存和内核内存的区别是什么 (就给内核空间提供安全性而言)? 我可以从用户空间在内核地址空间中写入什么不同的方式? 我知道的一种方法是通过系统调用 。我们可以使用多个系统调用,但最后它们都是系统调用。即使在系统调用中,我们也将数据发送到内核空间,在此它(驱动程序或相应的模块)调用诸如copy_from_user()之类的函数将数据从用户空间复制到内核空间。在这里,

  • 问题内容: 我正在尝试打电话 直接,但获得EFAULT错误代码。出现此错误是因为 buf 指向内核空间中的内存。 那么,是否有可能从内核分配用户空间内存? 与 内核内存相似并返回指向内核内存的指针。 问题答案: 您可以使用以下方法临时禁用内存地址有效性检查:

  • 问题内容: 我在Linux中编写了一个自定义设备驱动程序,该驱动程序必须能够非常快速地响应中断。用户空间实现中已经存在处理此问题的代码,但是它太慢了,因为它依赖于软件不断检查中断线的状态。经过研究,我发现您可以从内核模块注册这些中断线,并执行由函数指针提供的功能。但是我们要执行的代码是在用户空间中,是否有一种方法可以从内核空间模块调用用户空间中的函数? 问题答案: 从内核调用用户空间功能很不走运,

  • 问题内容: 我有一个同时具有两个外部内核模块和一个用户空间守护程序的应用程序。我想在启动时从用C编写的守护程序代码中加载模块,然后在干净退出时将其卸载。我可以用比使用相应的方式更干净的方式加载它们吗? 问题答案: 最小的可运行示例 使用此简单的参数打印机模块,在QEMU + Buildroot VM和Ubuntu 16.04主机上进行了测试。 我们使用/ 和 Linux系统调用。 Linux内核为