问题标签 [iokit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
377 浏览

macos - 我可以采取哪些步骤来消除代码中的错误?

我在 I/O Kit Driver 模板中编写代码如下:

构建此代码时,出现四个错误:

  1. 函数声明符后的预期函数体
  2. stray '\357' in program
  3. stray '\277' in program
  4. stray '\274' in program

你能看到错误吗?

0 投票
2 回答
4408 浏览

macos - 如何在终端中加载 i/o 套件驱动程序扩展?

现在我正在开发自己的驱动程序。我在 i/o kitDriver 模板中开发。我构建了我的代码,它成功执行但终端出现问题。我在头文件中以以下方式开发了代码

在.cpp

然后我在 IOKIT-info.plist 之后成功构建了上面的代码

IOKitPersonalities 字典我添加的以下五个内容

之后

在 OSBundleLibraries 字典中,我添加了两个条目

之后我再次成功构建它

来到终端加载我按照以下步骤

在终端之前,我找到 kext 文件路径并将该包复制到 /system/library/extension/

然后去终端

执行以下方式

嘿伙计们,请帮助我,重要的事情之一是每当我执行由通用驱动程序开发的 kext 文件时,它都会在终端中非常成功地执行。

我也是这个内核编程的初学者

0 投票
1 回答
833 浏览

macos - 我可以使用哪些命令在终端中加载 i/o 套件驱动程序?

我是新内核编程。我已经尝试加载此驱动程序 3 天。

我使用了很多命令来加载这个 kext 文件。但每次问题都是

终端。请任何人帮助我。

ensis-Mac-mini:~ ensis$ sudo su

sh-3.2# chown -R root:wheel /System/Library/Extensions/Driver.kext

sh-3.2# kextutil -n -t /System/Library/Extensions/Driver.kext 没有指定内核文件;

使用正在运行的内核进行链接。

/System/Library/Extensions/Driver.kext 无效;无法解决依赖关系。

/System/Library/Extensions/Driver.kext 无效;无法解决依赖关系。

/System/Library/Extensions/Driver.kext 无效;无法解决依赖关系。

/System/Library/Extensions/Driver.kext 的诊断:

验证失败:

警告:

发送到 IO 目录:

如何解决上述程序

更新: Info.plist:

0 投票
1 回答
841 浏览

filesystems - 从混合视频 DVD 安装 HFS+ 和 UDF

我开发了一个 Mac 软件(使用 DiscRecordingFramework 和 IOKit)来创建混合 Video-DVD。生成的 DVD 与 Video-DVD 规范完全兼容。混合磁盘托管 HFS+、UDF 和 ISO 文件系统。现在的问题是 Mac 系统自动挂载 HFS+ 文件系统,但 Mac 上的默认 DVD 播放器无法从 HFS+ 文件系统播放受 CSS 保护的电影。作为一种解决方法,我开发了一个脚本,它可以将 UDF 文件系统与 HFS+ 文件系统一起安装。该脚本实际加载 UDF2.1 内核扩展并挂载 UDF 文件系统。该解决方案有效,但不可取,因为它需要 root 密码。

是否可以开发一种自动检测混合磁盘并同时安装 HFS+ 和 UDF 文件系统的解决方案?此解决方案不应损害系统安全性。如果它一生中需要 root 密码一次,那是可以的,但如果每次使用磁盘时都需要 root 密码,则不可取。

任何帮助将不胜感激。

0 投票
1 回答
1151 浏览

iphone - 如何开始为 iOS 开发配件?

我们希望开发可插入 30 针基座连接器的 iOS 配件。对于初学者来说,是否有一个很好的起点来讨论 EAAccessory 框架可以做什么和不能做什么?

Apress 在 2010 年 6 月发布了一本关于 EAAccessory 框架的书。这仍然相关吗,还是从那时起 Apple 引入了许多新的 API?是否有其他可用资源?

0 投票
3 回答
3496 浏览

macos - 从 KEXT 与 Daemon 通信并阻塞直到从 Daemon 返回结果的最佳方式

在 KEXT 中,我正在通过 vnode 或文件范围侦听器侦听文件关闭。对于某些(非常少的)文件,我需要将文件路径发送到我的系统守护程序,它会进行一些处理(这必须在守护程序中发生)并将结果返回给 KEXT。在我得到守护进程的响应之前,需要阻止文件关闭调用。根据结果​​,我需要在近距离通话中进行一些操作并成功返回近距离通话。论坛上有很多关于KEXT通信相关话题的讨论。但它们不是决定性的,而且看起来很老(2002 年左右)。这个需求可以通过FtlSendMessage(...)Win32 API 来处理。我正在寻找 Mac 上的等价物

以下是我看过并想总结一下我的理解:

  1. Mach 消息:提供非常好的双向通信方式,使用发送者和回复端口以及队列机制。但是,mach 消息 API(例如mach_msgmach_port_allocatebootstrap_look_up)似乎不是 KPI。mach_msg_send_from_kernel可以使用mach API ,但仅此一项对双向通信没有帮助。我的理解对吗?
  2. IOUserClient:这似乎更多地与从用户空间到 KEXT 的通信有关,然后从 KEXT 进行一些回调。我没有找到一种方法来启动从 KEXT 到守护程序的通信,然后等待守护程序的结果。我错过了什么吗?
  3. 套接字:这可能是最后一个选项,因为我必须实现从 KEXT 到守护进程的整个双向通信通道。
  4. ioctl/ sysctl: 我对他们了解不多。根据我的阅读,它不推荐使用,特别是对于双向通信
  5. RPC-Mig:同样我对它们了解不多。从我所看到的看起来很复杂。不确定这是否是推荐的方式。
  6. KUNCUserNotification:这似乎只是从 KEXT 向用户提供通知。它不符合我的要求。

支持的平台是(10.5 起)。因此,查看要求,有人可以就该主题提出建议并提供一些指示吗?

提前致谢。

0 投票
1 回答
583 浏览

xcode - OSDictionary * Injection in IORegistry

I'm trying to create a new Dictionary and inject it in the IORegistry. I've managed to inject simple strings or data values but thats it.

My approach is via a modified IOPCIFamily.kext, and it's not for a specific purpose but just for learning.

My code for 1 line values is something like this

and another approach

propTable is the Parent Dictionary, so i must create a child Dictionary to which i can inject values with setObject parameter.

Does anyone have an idea on how to do this? I suspect it must be something like this:

but i didn't figure how to create the newTable for propTable to insert it in the existing one of what ever product == ids it finds.

Thank you very much, sorry if it's confusing. Not used to explain code related stuff in english.

0 投票
1 回答
11071 浏览

macos - Mac - 虚拟串口

我需要创建一个 Cocoa 应用程序,它将创建一个可用于其他应用程序的虚拟串行端口,这意味着在 IO Kit Registry 中注册。

该应用程序的要点:

  • 创建一个虚拟串口(在 /dev 中列出并在 IOKit Registry 中注册)
  • 启动到另一台计算机的 tcp 连接
  • 将虚拟串行端口上收到的所有内容代理到网络,反之亦然。

此应用程序将由与计算机上的串行端口通信的第三方应用程序使用,从而允许在网络上定位特定的串行设备。Cocoa 和网络部分没有问题,我已经编写了几个通过网络通信的应用程序。我的挂断是串口。

我已经使用 socat/netcat/minicom 进行了测试,以验证它是否可以通过网络代理 pty/tty 流量,但我使用的 tty 并没有显示为可供随机应用程序使用,因为它没有在 IO Kit 中注册注册表。

虽然我可以使用 pty/tty 主/从进行通信,但我需要这个从 tty 才能显示给 Mac 应用程序。非常方便的是在 IO Kit Registry 中注册 tty 的方法。

我真的需要创建一个在 Cocoa 应用程序运行时注册的自定义 IOKit kext 驱动程序吗?如果是这样,我前面有一个很大的学习曲线。我应该从哪里开始阅读?或者,我可以使用 IOKit 创建一个虚拟串行端口并将其注册为应用程序的可用串行端口,而无需加载任何内核扩展?

感谢您提供的任何帮助,
有状态的

0 投票
2 回答
907 浏览

objective-c - Mac 鼠标/触控板速度以编程方式

我正在尝试更改我正在处理的应用程序的鼠标跟踪速度(注意:不是加速)。我到处寻找一种方法来做到这一点,但找不到任何东西。我怀疑这与我在 IOKit/hidsystem 框架上的这个函数中给出的值有关:

作为 mouseAcceleration 值,我怀疑有一个定义加速度和速度的十六进制值。

有没有人遇到过这个问题并可以帮助我?

提前致谢

0 投票
1 回答
4594 浏览

c - 来自 OS X (C) 接口的 MAC 地址

这可能是一个愚蠢的问题,如果这里已经解决了,我深表歉意,但我已经搜索了很多,但运气不佳。我正在尝试在 C 中获取接口的硬件地址,并且正在使用 OS X (x86-64)。我知道如何获取它ifconfig,但我希望我的程序能够为任何计算机自动获取它,至少是 OS X 计算机。我发现另一个发布此链接的线程几乎可以满足我的要求(进行了一些修改),但我无法在其中创建iokit函数链接ld(我的编译器是gcc)。我尝试将标志添加到-lIOKit命令行,但仍然遇到相同的链接错误。这是我的代码的链接:headersource-framework IOKitgcc