Недавно я столкнулся с этой проблемой с головной болью, я уже потратил неделю на эту проблему, но все еще не удалось. Надеюсь, вы можете помочь мне отбросить этот камень, большое спасибо.USBInterfaceOpen всегда сообщает об ошибке kIOReturnExclusiveAccess
Моя проблема: Наш компонентный USB-накопитель для iPhone, на самом деле в этом устройстве хранения есть SD-карта. Теперь мы хотим разработать приложение Mac для обновления прошивки для этого устройства хранения. Но каждый раз, когда я подключаю запоминающее устройство к Mac, Mac автоматически устанавливает его, и я всегда терпит неудачу с kIOReturnExclusiveAccess при вызове USBInterfaceOpen.
Я также пытаюсь написать codeless kext, чтобы увеличить оценку зонда, но он по-прежнему не работает. Я не знаю, что я ошибаюсь, или некоторые ошибки для написания кодового файла kext, например, написать неправильный идентификатор IOClass, неправильный идентификатор пакета.
Моего Codeless Kext info.plist является:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>14E46</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleIdentifier</key>
<string>com.mophie.MyDriverTest3</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>MyDriverTest3</string>
<key>CFBundlePackageType</key>
<string>KEXT</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0.3</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>6E35b</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>14D125</string>
<key>DTSDKName</key>
<string>macosx10.10</string>
<key>DTXcode</key>
<string>0640</string>
<key>DTXcodeBuild</key>
<string>6E35b</string>
<key>IOKitPersonalities</key>
<dict>
<key>MyDriverTest3</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.iokit.IOUSBFamily</string>
<key>IOClass</key>
<string>IOService</string>
<key>IOProviderClass</key>
<string>IOUSBDevice</string>
<key>bcdDevice</key>
<string>256</string>
<key>idProduct</key>
<integer>4369</integer>
<key>idVendor</key>
<integer>6631</integer>
</dict>
</dict>
<key>OSBundleRequired</key>
<string>Root</string>
</dict>
</plist>
Ниже результат от ioreg для моего устройства хранения:
space [email protected] <class IOUSBDevice, id 0x100001773, registered, matched, active, busy 0 (300 ms), retain 9>
+-o IOUSBCompositeDriver <class IOUSBCompositeDriver, id 0x100001775, !registered, !matched, active, busy 0, retain 4>
+-o [email protected] <class IOUSBInterface, id 0x100001776, registered, matched, active, busy 0 (293 ms), retain 8>
+-o IOUSBMassStorageClass <class IOUSBMassStorageClass, id 0x100001777, registered, matched, active, busy 0 (201 ms), retain 9>
+-o IOSCSIPeripheralDeviceNub <class IOSCSIPeripheralDeviceNub, id 0x100001779, registered, matched, active, busy 0 (99 ms), retain 7>
+-o IOSCSIPeripheralDeviceType00 <class IOSCSIPeripheralDeviceType00, id 0x10000177a, !registered, !matched, active, busy 0 (13 ms), retain 9>
+-o IOBlockStorageServices <class IOBlockStorageServices, id 0x10000177d, registered, matched, active, busy 0 (13 ms), retain 6>
+-o IOBlockStorageDriver <class IOBlockStorageDriver, id 0x10000177e, registered, matched, active, busy 0 (12 ms), retain 47>
+-o mophie SpacePack Media <class IOMedia, id 0x100001784, registered, matched, active, busy 0 (12 ms), retain 11>
+-o IOMediaBSDClient <class IOMediaBSDClient, id 0x100001785, registered, matched, active, busy 0 (0 ms), retain 6>
+-o IOFDiskPartitionScheme <class IOFDiskPartitionScheme, id 0x100001788, !registered, !matched, active, busy 0 (1 ms), retain 6>
+-o Untitled [email protected] <class IOMedia, id 0x10000178a, registered, matched, active, busy 0 (1 ms), retain 10>
+-o IOMediaBSDClient <class IOMediaBSDClient, id 0x10000178b, registered, matched, active, busy 0 (0 ms), retain 7>
Надеется, что вы можете мне помочь в этой проблеме, много много много спасибо , Я очень высоко ценю вашу помощь!
Большое спасибо за пример FTDI. он упомянул долгосрочное решение - изменить приложение, чтобы открыть последовательный порт уровня BSD для связи с оборудованием FTDI. Кратковременное решение состоит в том, чтобы внедрить бескальный kext. Возможно, мне нужны исследования долгосрочного решения. – FlyingMan
Я пробовал, как вы предлагаете, и все еще терпит неудачу. Я использую kextutil -n, он сказал: Предупреждения: Личность CFBundleIdentifier отличается от содержащего Kext (а не обязательно ошибки, но редко делается): MyDriverTest3 подписывания коды Отказ: не подписанный код Предупреждения: Личность CFBundleIdentifier отличается от содержащего kext (не обязательно ошибка, но редко делается): MyDriverTest3 /System/Library/Extensions/MyDriverTest3.kext представляется загружаемым (включая связь для библиотек на диске). Я также отключил кодовый знак: ** sudo nvram boot-args = kext-dev-mode = 1 ** – FlyingMan
Ну, это просто предупреждения, а не ошибки, поэтому, если вы устанавливаете kext в/Library/Extensions и подключаете в устройстве, что происходит? Вы получаете какой-либо выход на консоль? И т. Д. – pmdj