Переход с KEXT без кода на DEXT. USB интерфейсы исчезли - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь перейти с KEXT на DEXT. Мое USB-устройство не должно соответствовать драйверу classi c (в другом случае он не позволяет открывать устройство и интерфейс).

Я использую образец USB-приложения для тестирования.

Итак, перед установкой расширения системы я смог увидеть 1 устройство и 3 интерфейса. Однако, когда я устанавливаю системное расширение (следующее), я не могу найти никаких интерфейсов. Кажется, они потерялись. Для поиска интерфейсов я использую команду «ioreg -lir c IOUSBHostInterface».

Есть идеи, почему это могло произойти?

Информация о моем драйвере. plist файл

<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>IOKitPersonalities</key>
    <dict>
        <key>MyUserUSBInterfaceDriver</key>
        <dict>
            <key>CFBundleIdentifier</key>
            <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
            <key>IOClass</key>
            <string>IOService</string>
            <key>IOProviderClass</key>
            <string>IOUSBHostDevice</string>
            <key>IOUserClass</key>
            <string>MyUserUSBInterfaceDriver</string>
            <key>IOUserServerName</key>
            <string>sc.knight.MyUserUSBInterfaceDriver</string>
            <key>idProduct</key>
            <integer>4</integer>
            <key>idVendor</key>
            <integer>10978</integer>
        </dict>
    </dict>
    <key>OSBundleUsageDescription</key>
    <string>Example user space USB driver</string>
</dict>
</plist>

и файл прав драйверов

<plist version="1.0">
<dict>
    <key>com.apple.developer.driverkit</key>
    <true/>
    <key>com.apple.developer.driverkit.transport.usb</key>
    <array>
        <dict>
            <key>idVendor</key>
            <integer>10978</integer>
            <key>idProduct</key>
            <integer>4</integer>
        </dict>
    </array>
</dict>
</plist>

Результаты команды «ioreg -lir c IOUSBHostDevice» после установка расширения. Как видите ... 0 интерфейсов

admins-MBP:USBApp-updated-master-2 copy admin$ ioreg -lirc IOUSBHostDevice

+-o VXi Point@14300000  <class IORegistryEntry:IOService:IOUSBNub:IOUSBDevice, id 0x100000657, registered, matched, active, busy 0 (210 ms), retain 20>

.......

  | }

  | 

  +-o AppleUSBHostLegacyClient  <class IORegistryEntry:IOService:AppleUSBHostLegacyClient, id 0x10000065a, !registered, !matched, active, busy 0, retain 8>. 
  |   {

  |     "IOPowerManagement" = {"DevicePowerState"=0,"CurrentPowerState"=1,"CapabilityFlags"=65536,"MaxPowerState"=2,"DriverPowerState"=1}

  |   }

  |   

  +-o MyUserUSBInterfaceDriver  <class IORegistryEntry:IOService, id 0x10000065d, !registered, !matched, active, busy 0, retain 7>

      {

        ......

      }

1 Ответ

1 голос
/ 04 августа 2020

Я думаю, проблема может быть в следующем:

        <key>IOProviderClass</key>
        <string>IOUSBHostDevice</string>

Это будет соответствовать уровню root USB-устройства. Если вы это сделаете, ваш DEXT должен будет реализовать весь базовый c дескриптор USB, который IOKit обычно делает бесплатно.

Попробуйте изменить IOProviderClass на IOUSBHostInterface.

...