问题标签 [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 投票
1 回答
325 浏览

cocoa - IOSharedDataQueue 示例

我在哪里可以找到使用 IOSharedDataQueue 的示例代码(我想将数据从用户空间发送到内核空间)?

0 投票
1 回答
1725 浏览

c - 使用 IOKit 获取 IODeviceTree 路径

我正在尝试使用 IOKit 框架获取设备的 IODeviceTree 路径。我可以IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/SATA@B/AppleMCP79AHCI使用以下代码获取设备的 IOService 路径():

IODeviceTree但是,我需要在飞机上获取设备的路径。在IODeviceTree平面上,路径类似于IODeviceTree:/PCI0@0/SATA@B。我尝试简单地替换kIOServicePlane为,kIODeviceTreePlane但它什么也没返回。我没有经验IOKit,所以我很确定我在这里做的事情很明显。

谢谢

0 投票
1 回答
639 浏览

xcode - 在 Kexts 中链接 Dylib?

我为 OS X 编写了一个 kext,它使用 (IOKit) libusb 和 jpeglib 实现了一个基于 USB 的帧缓冲区。这两个都是 dylib,由于某种原因,它们无法在 XCode 中正确链接,并且操作系统在尝试加载 kext 时不会解决依赖关系。

整个事情的背景是三星制造了一个液晶相框,可以作为第二个显示器;唯一的问题是它不是 DisplayLink 或任何其他已知协议——仅限 Windows 的驱动程序会输出一个自定义标头,并且每个帧都被编码为 JPEG 并发送到设备。我的实现是为 OS X 做的,但我使用了 libusb,因为它是一个帧缓冲设备,需要在启动时加载——想要更多地处理驱动显示器而不是热插拔检测和 IOKit 的 USB 设备要求。

谢谢你的帮助!你们真棒。

0 投票
1 回答
1769 浏览

macos - AppleUSBCDCACMData IOClass 上的 IOServiceMatching:异常?

我正在尝试使用以下代码片段(只是苹果示例代码中的一些小规模修改)在我的 mac 中提取所有 AppleUSBCDCACMData IOClass 设备的列表。该设备是一个 USB 调制解调器,它创建了一些 7 个 /dev/cu.usbmodemx 设备节点。

我的观察是,IOServiceGetMatchingServices 返回的迭代器是空的(即没有可迭代的对象)。但是如果我将“AppleUSBCDCACMControl”作为参数传递给 IOServiceMatching,我会得到一个包含 7 个元素的列表的迭代器——这与 IORegistryExplorer 视图一致。在此处查看 IORegistryExplorer 的屏幕截图,http ://tumblr.deepak.dk/post/1666218968/ioregistryexplorer 似乎无法使用任意 IOClass 名称字符串查询 IORegistry?因为我也面临一些非标准专有 IOClass 的相同问题。这可以使用任何加载 AppleUSBCDC 驱动程序的 USB 调制解调器 (3g/HSDPA) 重现。

我究竟做错了什么?

0 投票
2 回答
1361 浏览

macos - 使用 IOServiceGetMatchingServices 获取 OS X 存储设备列表

我需要获取 OS X 系统上的物理存储设备列表。IOServiceGetMatchingServices 使用 kIOStorageClass 键为我提供了所有卷的列表,而不是所有硬件存储设备。我该怎么做呢?

0 投票
1 回答
643 浏览

cocoa - Cocoa 获取电源适配器状态

我目前正在开发一个备份应用程序,最近我收到了很多要求添加功能的请求,其中最重要的是添加一个复选框,例如 Time Machine 所具有的“使用电池供电时备份”之类的复选框。

那么,有没有办法可以获取电源适配器的状态(插入和插入)?我假设如果有人有一台桌面 Mac,比如 iMac 等,我可能会一直插电。因此,我需要检测计算机是否为便携式的方法。

我认为 IOKit 将是一个可供查看的库,但我在文档中根本找不到任何东西,在那个框架上几乎不存在。那么,由于它是一个较旧的 Carbon 框架,有没有办法注册一个回调,以便在电源状态更改时调用?这样我就可以正确实现此复选框的功能。

我很感激帮助澄清这个主题。

0 投票
1 回答
854 浏览

macos - 如何分配可能由操作系统回收的内存缓冲区以缓存在 Mac OS X 内核扩展中?

根据我阅读的文档和 xnu 源,我了解 Mac OS X使用统一缓冲区缓存 (UBC)缓存文件I/O。UBC 会根据可用 RAM 尽可能地增长,但是当内存变得更紧时,UBC 页面是最先被牺牲的页面。

在我的驱动程序中,我处理各种磁盘元数据。我希望能够使用 UBC 或类似机制来保留这些数据的 MRU 缓存以加快速度,同时让内核能够在需要时收回该内存。然而,元数据并不代表文件数据,因此不直接属于 UBC 的域。是否有我可以使用的较低级别的机制,或者我可以以某种方式仅使用 UBC 中处理缓冲区本身的部分?

我目前正在寻找 HFS+ 源代码,试图弄清楚它是否以及如何缓存文件系统元数据,尽管没有取得多大成功。

主要的替代方案当然是为缓存保留一个特定的内存区域并进行我自己的 LRU 剔除。我可以选择固定的缓存大小或使用某种启发式方法,但是当 RAM 充足时它总是会使用太少的内存,而当它不充足时它总是会使用太多的内存。

更新:

在搜索了更多之后,我发现IOBufferMemoryDescriptor可以使用该kIOMemoryPurgeable选项创建实例。这使您可以调用IOMemoryDescriptor::setPurgeable()它来标记要丢弃的内存“公平游戏”。我会尝试并用结果更新问题。

0 投票
1 回答
1552 浏览

objective-c - 如何从 IO 套件导入 IOPMLib.h?

我正在尝试使用以下代码唤醒 Mac,

我无法找到要导入的正确框架/标题。

我正在使用#import <IOKit/pwr_mgt/IOPMLib.h>,但编译器仍然抱怨。有什么建议么?谢谢。

编辑

我收到以下错误消息

0 投票
1 回答
469 浏览

iphone - 列出 Cocoa 中所有连接的 iDevices

我想为我的备份应用程序实现一种备份功能,但由于我无法在设备上执行此操作,因此我必须在 Mac 上执行此操作。我将如何在计算机上列出连接的 iDevices(主要是 iPhone 和 iPod Touch)?我想我可以枚举所有连接的 USB 设备的大量数组并检查具有 Apple 供应商代码的设备,但我知道有一些更好的方法。

我还假设我必须为此使用 IOKit,但我从未使用过它,所以我很感激一些示例代码和有用的提示,可以为我指明正确的方向。然后,我需要获取设备名称,并访问设备上的文件,但我想在我弄清楚设备之后这会很简单。

0 投票
4 回答
6309 浏览

c - 使用 I/O 套件访问串行到 USB 设备

我有以下问题:我有一个 Wintec WBT-202 GPS 设备,它能够通过 USB 将位置数据作为 NMEA 数据实时传输。在这个 USB 内部,它只是一个使用标准usbser.sys驱动程序在 Windows 下运行的 USB 到串行桥接器。

我的问题是让它在 Mac OS X 下工作。

USB GPS鼠标的硬件使用了Atmel AT91SAM7S256芯片,该芯片也负责USB接口。

Mac OS X 下的问题没有任何反应。没有创建新的字符设备/dev来使该设备可访问。

在 Windows 下使用标准驱动程序usbser.sys。只有一个 .inf 文件将 vendorID 和 productID 指向此驱动程序。通过在 Windows 上使用 Snoopy Pro(USB 嗅探软件),我知道一旦设备正确初始化,它会将数据作为 ASCII NMEA 字符串发送,这就是我想要的。

问题 1是否有usbser.sysMac OS X 的等价物?如果是,是否可以使用无代码 kext 来确保正确匹配驱动程序?

如果这不起作用,我将使用用户空间的 IOKit 向设备发送和接收消息。我仍然对这将如何详细工作有疑问,因为我不完全理解苹果的文档。如果连接了 USB 设备,则会发生驱动程序匹配。如果没有找到驱动程序会发生什么。

问题 2是否会加载一些通用 USB 驱动程序,我可以从用户空间在内核中“与之对话”?我如何知道是否加载了正确的驱动程序?

问题 3我看到 WWDC08 中有一个“I/O Kit 入门”环节,有没有办法访问这个环节的视频?

我附加了一些 USBProbe 日志和 I/O 注册表摘录。

任何关于我如何开始哪些文档提供体面教程的评论将不胜感激。

我查看了 Amit Singh 的Mac OS X Internals - A System Internals、Apple 的文档“I/O Kit 入门”、“I/O Kit Fundamentals Guide”和 USB 私有数据示例。

附录

USB 探头

IO 注册表

USB 探测登录设备附加

编辑:附加设备后从 console.app 中附加日志文件摘录