【问题标题】:How to interact with self made OSX Kernel extensions?如何与自制的 OSX 内核扩展进行交互?
【发布时间】:2014-07-16 22:03:31
【问题描述】:

如何与自制的 OSX 内核扩展交互?

我找到了以下关于创建扩展的教程:https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptKEXT/kext_tutorial.html 效果很好,但我找不到如何向我的扩展发送命令的方法。

如果有人能给我举个例子,那就太好了:)

或者甚至发布一个最小的例子:)

我为什么要问?

我知道几乎所有东西都在用户空间内工作。由于夏天快到了,我屋顶下的房间里的温度越来越高,看到我的 MacBook Air 慢慢沸腾,我真的很伤心。但是我偶然发现了这个 github.com/nanoant/DisableTurboBoost.kext。它似乎工作。但是除了手动加载和卸载 kext 之外,没有其他方法可以按需启用或禁用。我真的很想有一个小应用程序向我的扩展发送命令以设置或取消设置 Turbo Boost 位。

在爬取http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf 之后,我发现了很多有趣的功能可以使用。但我不知道如何从我的扩展程序中收集信息......你能给我举个例子吗?还是有用的书?

而且由于只有 kext 可以使用内核框架,我没有其他选择直接写入 CPU 寄存器...或者我有吗?你能给我举个例子吗?还是有用的书?

【问题讨论】:

标签: c macos kernel communication inter-process-communicat


【解决方案1】:

一般来说,用户很少(有意地)与内核模块进行交互。

考虑通用内核模块,例如 LAN 驱动程序、磁盘驱动程序、文件系统驱动程序等。实际上,用户一直在与这些内核扩展进行交互;但他们不知道。

这是一个与“用户空间”截然不同的环境。一般没有stdin、stdout、stderr流;您可以在其中从键盘向内核扩展输入命令,并在屏幕上查看结果。

内核扩展可以使用多种方式与用户交互(在用户空间中)。其中包括:

  • 系统调用
  • ioctl
  • 虚拟文件系统
  • 共享内存
  • TCP 套接字或连接
  • 文件系统事件
  • ...

归结为:内核扩展的目的是与内核交互,而不是直接与用户交互。

内核扩展与内核交互的方式有很多种;但是与用户的直接交互对于内核扩展来说是一个陌生的概念。

【讨论】:

  • 我知道几乎所有东西都在用户空间内工作。由于夏天快到了,我屋顶下的房间里的温度越来越高,看到我的 MacBook Air 慢慢沸腾,我真的很伤心。但是我偶然发现了这个github.com/nanoant/DisableTurboBoost.kext。它似乎工作。但是除了手动加载和卸载 kext 之外,没有其他方法可以按需启用或禁用。我真的很想有一个小应用程序向我的扩展程序发送命令以设置或取消设置 Turbo Boost 位。
  • 在爬取了intel.com/content/dam/www/public/us/en/documents/manuals/…之后,我发现了很多有趣的功能可以使用。但我不知道如何从我的扩展程序中获取信息......你能给我举个例子吗?还是一本有用的书?
  • 而且由于只有 kext 可以使用内核框架,我别无选择直接写入 CPU 寄存器......或者我有吗?你能给我举个例子吗?还是一本有用的书?
猜你喜欢
  • 2019-11-10
  • 2014-02-17
  • 2015-10-08
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 2012-09-11
相关资源
最近更新 更多