【发布时间】:2016-09-15 02:20:41
【问题描述】:
我确实有一个使用 IOKitPersonalities 的 USB 设备的内核扩展。重新插入其中一个设备,kext 将始终按预期加载,但对于在启动时已连接的设备,这有时会失败。在这种情况下,设备本身可以被系统识别,并且可以在 SystemInformation/USB 中找到。 Icon 是来自苹果的标准黄色图标,而不是我们 kext 提供的绿色图标。 一个有趣的事实: 当我连接了两台设备时,一台直接在 mac pro 上,另一台在键盘集线器上,可能只有集线器上的一个会触发 kext 加载。这个在 syslog 中总是比另一个晚大约 2 秒:
27.04.16 10:17:58,000 kernel[0]: USBMSC Identifier (non-unique): 000003448813 0x64f 0x3e9 0x100, 1
...
27.04.16 10:17:59,000 kernel[0]: USBMSC Identifier (non-unique): 000000506497 0x64f 0x3e9 0x100, 1
...
27.04.16 10:18:01,000 kernel[0]: XXXXXXX KEXT.5G/K64 (Version: 5.20.078 - G) loaded.
如果所有设备都被成功识别,“Kext 加载行”将在每个设备之后找到。
关于 kext 的一些事实:
- 它被安装到 /Library/Extensions (系统/库/前 Mavericks 的扩展)。根据http://asciiwwdc.com/2013/sessions/707 去的地方。
- 已签名(在 SystemInformation/Software/Extensions 中验证)
- 安装需要重启
- 触摸 /System/Library/Extensions 和
- 在安装结束时调用 touch /Library/Extensions
- 安装后内核缓存似乎更新了
我最初认为系统可能不会在重启时重新构建预链接的内核,但在 syslog 中发现了这一点:
28.04.16 17:02:28,000 kernel[0]: Resetting IOCatalogue.
28.04.16 17:02:29,253 com.apple.kextd[47]: '/' updating, delaying reboot.
28.04.16 17:02:29,254 com.apple.kextcache[874]: rebuilding //System/Library/PrelinkedKernels/prelinkedkernel
28.04.16 17:02:29,257 com.apple.kextcache[878]: / locked; waiting for lock.
28.04.16 17:02:30,424 com.apple.kextcache[879]: kext file:///System/Library/Extensions/JMicronATA.kext/ is in hash exception list, allowing to load
28.04.16 17:02:34,645 com.apple.kextcache[880]: / locked; waiting for lock.
28.04.16 17:02:52,470 com.apple.kextcache[879]: Created old kernelcache copy "/System/Library/Caches/com.apple.kext.caches/Startup/kernelcache"
28.04.16 17:02:52,470 com.apple.kextcache[879]: Created prelinked kernel "/System/Library/PrelinkedKernels/prelinkedkernel"
28.04.16 17:02:52,470 com.apple.kextcache[879]: Created prelinked kernel using "/System/Library/Kernels/kernel"
28.04.16 17:02:52,490 com.apple.kextcache[874]: /System/Library/PrelinkedKernels/prelinkedkernel not cached.
28.04.16 17:02:52,000 kernel[0]: hfs: mounted Recovery HD on device disk0s3
28.04.16 17:02:52,513 mds[62]: (Volume.Normal:2464) volume:0x7fd77c06be00 ********** Bootstrapped Creating a default store:0 SpotLoc:(null) SpotVerLoc:(null) occlude:0 /Volumes/Recovery HD
28.04.16 17:02:52,565 fseventsd[48]: Logging disabled completely for device:1: /Volumes/Recovery HD
28.04.16 17:02:53,100 com.apple.kextcache[874]: Successfully updated disk0s3.
28.04.16 17:02:53,000 kernel[0]: hfs: unmount initiated on Recovery HD on device disk0s3
28.04.16 17:02:53,154 com.apple.kextd[47]: / is still busy, delaying reboot.
28.04.16 17:02:53,154 com.apple.kextcache[878]: Lock acquired; proceeding.
28.04.16 17:02:53,157 com.apple.kextcache[878]: /: helper partitions appear up to date.
28.04.16 17:02:53,157 com.apple.kextd[47]: / is still busy, delaying reboot.
28.04.16 17:02:53,157 com.apple.kextcache[880]: Lock acquired; proceeding.
28.04.16 17:02:53,159 com.apple.kextcache[880]: /: helper partitions appear up to date.
28.04.16 17:02:53,160 com.apple.kextd[47]: up to date; unblocking reboot.
28.04.16 17:02:53,160 shutdown[871]: reboot by ls:
28.04.16 17:02:53,000 kernel[0]: Kext loading now disabled.
28.04.16 17:02:53,000 kernel[0]: Kext unloading now disabled.
28.04.16 17:02:53,000 kernel[0]: Kext autounloading now disabled.
28.04.16 17:02:53,000 kernel[0]: Kernel requests now disabled.
28.04.16 17:03:02,000 bootlog[0]: BOOT_TIME 1461855782 0
时间和地点:
- 我在 10.11.4 上确实遇到过这个问题,但在 10.10 上也看到过这个问题
- 我的印象是,如果它在安装后直接工作,它永远不会失败。所以我认为问题可能与某些“启动时加载列表”中缺少的kext有关。
我希望有人知道我可以在哪里进行研究。
【问题讨论】:
-
@trojanfoe apple.stackexchange.com 用于系统管理员/用户级别的问题;这显然是一个只与 kext 开发相关的问题,因此是这里的主题。 (尤其是在 kext 和 iokit 标签中)
-
@pmdj 我没有得到 OP 正在开发这个内核扩展的印象,只是他们“拥有它”。如果这是真的,那么它不是主题。
-
这是关于 kext 开发的,尽管我希望它不必更改 kext 本身。
标签: macos usb iokit kernel-extension