【问题标题】:USB driver not loading one USB image but loads another?USB驱动程序不加载一个USB图像而是加载另一个?
【发布时间】:2014-12-15 20:01:26
【问题描述】:
我有一个带有多个 IOKitPersonalities 的 USB 驱动程序,每个驱动程序都有一个 IOMediaIcon 条目。如果在加载 kext 后插入 USB 设备,则一切正常(kext 加载正常,已签名等)。但重启计算机后,只有一台 USB 设备显示标准的橙色默认 USB 映像。如果我拔下/重新加载 kext/重新插入 USB 设备,图像会得到纠正。
有什么想法吗?
(详情:
运行 Mac OS X 10.10.1(我认为我在优胜美地之前没有看到这个问题,在 10.6.8 上绝对不是问题),所有的个性都是相同的(除了 ID(我认为自从 USB如果我在加载 kext 后插入,设备会正确加载),所以这不会与个性错误...)
【问题讨论】:
标签:
icons
usb
osx-yosemite
iokit
kernel-extension
【解决方案1】:
我不知道如何解决您的具体问题,但我可以给您一些可能有用也可能没有帮助的建议(抱歉,评论有点太大,但不是正确的答案):
- 图标的东西是在用户空间处理的,理论上内核唯一要做的就是在注册服务之前设置IOMediaIcon。在个性中设置应该没问题。
- 在用户空间,磁盘仲裁接管。您可以从Apple's Open Source Site 下载(大部分?)它的源代码。
- 快速搜索发现磁盘仲裁源代码确实引用了 IOMediaIcon,在 DADisk.c
- 我不知道重新编译 diskarbitrationd 并用您自己的二进制文件替换 Apple 的二进制文件效果如何,但如果可行,也许您可以修改它以记录图标代码的输出,并以这种方式更接近您的答案?
- 我可能想到的另一个错误来源是,虽然系统获得了正确的图标信息,但它实际上找不到图标文件?我听说过 /System/Library/Extensions vs /Library/Extensions 上下文中与捆绑包和资源相关的各种错误,因为他们添加了后者。如果您的图标在您的 kext 包中,并且您已切换到 /Library/Extensions,请尝试切换回 SLE。
希望对您的调试工作有所帮助!