问题标签 [kernel-extension]
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.
macos - 基于kernel.framework(Mac os x)的kext和app之间IPC的一些问题
我想在 Mac os 上实现 kext 和应用程序之间的 IPC。当我尝试将数据从应用程序传输到 kext 时遇到一些问题。
Internet 上的一些示例需要更多系统功能来在 Mac 上实现 Mach IPC 编程,例如设置服务器 (bootstrap_create_service) 或获取服务器端口 (bootstrap_look_up)。但是我不能使用除 kernel.framework 之外的其他框架或系统标准库进行 kext 编程。
所以这是我的问题:是否有任何替代方法可以在 kext 或其他方法中获得系统级支持(如 bootstrap_create_service 函数)在 kernel.framework 中实现 IPC?
非常感谢..
此外,在 kernel.framework 中,我不能使用 mmap()、open() 在 kext 和 app 之间共享内存。
来自http://flylib.com/books/en/3.126.1.90/1/的一个示例:例如:
服务器端代码:
客户端代码:
macos - 无法开始在 OS X 中进行 kext 开发
我正在尝试做 Apple 的“内核扩展”教程。我创建了一个项目文件,创建了 Info.plist,构建它,使用 kextlibs 来学习依赖项,将它们添加到 Info.plist,重建,复制到 /tmp,使用 kextutil 对其进行测试。到目前为止一切都很好。但是,当我尝试加载 kext 时,我的启动/停止/探测功能似乎从未被调用过。我的 IOLog 消息没有出现在 /var/log/system.log 中。
事实上,system.log 没有显示任何内容。kernel.log 在我使用 sysctl -w debug.kextlog=0x0007780E 激活 kext 日志记录之后执行。kernel.log 说:“Kext ch.digorydoo.driver.XinputDevice 成功解决了依赖关系。” 然后:“刷新未加载的 kext 和其他未使用的数据。” 也许我的班级会立即脸红?
我的课程出现在 kextstat 的末尾,但有 0 个引用。与 ioclasscount 相同。在 ioreg,我的班级没有出现。
我已经将 IOProviderClass 设置为 IOResources,所以它应该总是有一个引用,对吧?我已经正确设置了 IOMatchCategory。
有什么帮助吗?!!?!非常感谢!
编辑:这是我的 Info.plist:
xcode - 如何使用 pkgbuild 在 Xcode 中创建 kext 安装程序
我了解 PackageMaker 现在已弃用。我们现在应该使用 pkgbuild/productbuild。
但是,我似乎找不到为 kext 创建安装程序的示例。我希望将包构建为我的 kext Xcode 项目构建步骤的一部分。所以任何 bash/脚本文件都会很棒。
xcode - OS X 上的无代码 kext
好的,我正在开发一个 uController 项目(指针设备),我正在尝试编写用户空间驱动程序IOkit.framework
。
使用 idProduct 和 idVendor 我可以得到IOUSBInterfaceInterface300
obj
问题是当我尝试
kr = (*intf)->USBInterfaceOpen(intf);
它失败了kIOReturnExclusiveAccess
,很可能是因为HID
经理已经打开了具有独占访问权限的设备。
这里说无代码的 kext 可以防止 HID 管理器接管设备
idVendor
我用and创建了一个 kextidProduct
并使用 kextload 来加载它。我从 kextload取回“加载成功”
但不知何故我仍然无法打开界面?难道我做错了什么?
我通过创建一个文件名 Info.plist (内容与调整了 idProduct 和 idVendor 的帖子相同)来创建 kext,并将其放在名为 MyUSBDeviceTest.kext 的文件夹中
然后将所有者更改为 root:wheel 然后将 kext 复制到/System/Library/Extensions
then
我已尝试重新启动并重新连接设备,但我无法从HID
系统中获取接口
macos - 在 kext 的 OSBundleLibraries 中链接哪个版本的库?
我kextlibs
反对我的 kext,它告诉我使用:
这在我的开发机器(10.8)上运行良好。但是当我在另一台机器(运行 10.7)上运行它时,它不会加载,说:
如果我想针对一系列 Mac OS 版本(10.6 到 10.8),如何确定要链接的版本?
usb - Lion 32bit kext 无法加载纯虚函数,但 64bit 可以工作
我构建了一个虚拟 USB 总线(通过网络与 linux 盒通信)作为 OSX 的 kext。主类派生自 IOUSBControllerV3。
它在 10.6 32Bit、10.7.5 64bit、10.8 64bit 下工作,但由于(a?)纯虚函数而无法在 10.7.5 32bit 下加载。kextutil 告诉我这个。
我已经在同一系统下编译(Xcode 4.6)kext,尝试了很多针对目标系统或SDK版本的变体,但问题仍然存在?
我知道基类的标头中存在一些#ifdef LP64差异,尤其是在纯虚函数的上下文中。
但是经过两天的比较和比较纯虚函数的重载,我不知道为什么只有32位会出问题?
相同的代码在其他系统下工作,但 Lion 32 位不能。
非常感谢您的每一个提示,
关于马库斯
=========== 终端输出:
python - 以下错误“com.apple.kextd [38]:无法解析原始路径/System/Library/Extensions/ni488lock.kext”是什么意思?意思是?
我正在运行以下命令:
参考:http ://www.rau-deaver.org/Mac-PyVISA.html
系统日志
com.apple.kextd[38]:无法解析原始路径 /System/Library/Extensions/ni488lock.kext。
ReportCrash[395]:将 Python[383] 版本 2.7.2 (2.7.2) 的崩溃报告保存到 /Users//Library/Logs/DiagnosticReports/Python_2013-02-27-175134_Motions-Mac-mini.crash
崩溃日志
macos - 在 kext 上使用 libpcap.dylib
我正在为 OS X 编写一个 kext 驱动程序,并且想使用库中的函数libpcap.dylib
。Libpcap.dylib 位于 OS X 上的 /usr/lib 中。它可以从内核空间使用吗?如何使用 Xcode 从 kext 中使用 libpcap.dylib?
我设法编译——(-lpcap 作为链接选项出现)但是:
- 链接器发出警告
"unexpected dylib"
。很明显,它以某种方式放错了位置。 - kextload 无法解析 libpcap 依赖项。
- kextlibs 仅显示我通过 OsBundleLibraries 包含的库,表明我的 dylib 被忽略。
我知道类似的问题Linking Dylibs in Kexts? 但想知道是否有人在 kext 上使用过 libpcap。
macos - 在 MAC OS X 10.8.x 上,AppStore 应用程序如何安装内核扩展?
描述 我正计划开发一个需要安装内核扩展才能正常运行的科学沙盒应用程序。
代码相关问题 购买时app如何安装kext?我的意思是,它将如何部署?是否有一些(可可)API 可以调用?我没有任何运气就搜索了这个答案。似乎大多数应用程序不需要 kexts。
一般问题 我可以将这样的应用程序放在 appStore 上吗?我有疑问,因为安装内核扩展会破坏沙盒的目的。
xcode - OSX 中的代码设计和内核扩展 (Kext):不会加载
我正在开发一种包含内核扩展的产品,并且在我们的一台测试机器中发现了一个我找不到解决方案的奇怪问题。
在我的开发机器(OSX 10.8.3 和最新的 Xcode)中,我像这样对我们的 kext 进行代码设计:
一切正常,修改了 my.kext/Contents/MacOS/mykext 二进制文件(添加了签名),并创建了一个文件夹 my.kext/Contents/_CodeSignature,其中包含一个文件 CodeResources。
在我们的一台测试机器(OSX 10.7.5 和 Xcode 3.2.6,Darwin Kernel 11.4.2 x86_64)上加载这个 kext 时,它拒绝这样做:
如果我加载未签名的模块,则没有问题。还尝试从 Xcode 而不是从命令行对 kext 进行签名,结果相同。
我将签名证书移到那台麻烦的计算机上,并在那里签署了 kext。签名过程有所不同:
签名后,my.kext/Contents/MacOS/mykext 中的 kext 可执行文件未修改,文件夹 Contents/_CodeSignature 包含更多文件:CodeDirectory、CodeRequirements、CodeResources 和 CodeSignature。到目前为止,这个签名的 kext 似乎适用于所有设备。
所以问题是:
这是怎么回事?我在签名过程中做错了什么?如何在可在此“过时”机器上运行的更新设备中创建签名?我知道目标机器拒绝加载 kext,因为它不理解签名的二进制文件。从此设备进行签名会创建某种分离的签名,其中二进制文件未被触及。我无法让我的 codesign 做到这一点, -D 选项似乎没用,并且不会在包中创建 _CodeSignature 文件夹。
更新
从 XCode 4.6 开始,问题仍然存在。只有 i386 kext 以向后兼容的方式签名。某些 10.6 和 10.7 内核无法加载 x64 和混合的 arch kext,因为它们不了解嵌入到二进制文件中的签名。
用于此目的的codesign命令行工具有一个未记录的--no-macho标志,但似乎未实现。
更新 2
从 Xcode 4.6.2 4.6.3开始,问题仍然存在