Драйвер PCI Проблемы при переходе с IOKit kext на Driverkit dext - PullRequest
0 голосов
/ 13 июля 2020

Я переношу свой драйвер PCI с iokit на dext с помощью PCIDriverkit. Я загружаю образец "MyUserUSBInterfaceDriver", изменяю компиляцию, подписываю и запускаю. dext может загружаться, но есть много ошибок:

kernel: serviceMatchesCDHa sh: требуется cdha sh 3 ... 3 в личности не соответствует служебному ядру: DK: IOUserServer (s c .knight.MyUserUSBInterfaceDriver-0x1000064a c) :: exit (CDHa sh проверка не удалась) ядро:

(выше: эта ошибка повторяется 5 раз) ............ ............ ............ ............ ............ .. .......... ............ ....

ядро: (s c .knight.MyUserUSBInterfaceDriver.dext) test init init

ядро: (s c .knight.MyUserUSBInterfaceDriver.dext) test init init fini sh 1

ядро: (s c .knight.MyUserUSBInterfaceDriver.dext) ядро: ( AppleMobileFileIntegrity) AMFI: SIP выключен, разрешает дамп ядра для pid 9259 (s c .knight.MyUser), ядро: (AppleMobileFileIntegrity) AMFI: SIP выключен, разрешает дамп ядра для pid 9259 (s c .knight.MyUser) )

ReportCra sh: Разбор данных трупа для pid 9259

ReportCra sh: Разбор данных трупа для pr ocess s c .knight.MyUser [pid 9259]

ReportCra sh: (AppStoreFoundation) [com.apple.appstorefoundation: по умолчанию] Сообщение об ошибке чтения: Error Domain = NSCocoaErrorDomain Code = 260 "Файл «Квитанцию» не удалось открыть, так как такого файла нет ». UserInfo = {NSFilePath = / Library / SystemExtensions / 0 ... 0 / s c .knight.MyUserUSBInterfaceDriver.dext // Contents / _MASReceipt / чек, NSUnderlyingError = 0x7fcc681d4b70 {Error Domain = NSPOSIXErrorDomain Code = NSPOSIXErrorDomain Code = No such file = directory "}}

(вверху: вызывается функция драйвера init () и повторяется много раз)

............ ..... ....... ............ ............ ............ ....... ..... ............ ....

ядро: (s c .knight.MyUserUSBInterfaceDriver.dext) test init init

ядро: (s c .knight.MyUserUSBInterfaceDriver.dext) test init init fini sh 1

ядро: (s c .knight.MyUserUSBInterfaceDriver.dext) ядро: (AppleMobileFileIntegrity) AMFI: SIP выключен, разрешен дамп ядра для ядра pid 10191 (s c .knight.MyUser): Процесс [10191] потерпел крах: s c .knight.MyUser. Создается слишком много трупов. kernelmanagerd: Получено уведомление о загрузке kext: (вверху: это последняя ошибка)

............................ ........................................

Вот мое право

<?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>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.developer.driverkit</key>
    <true/>
    <key>com.apple.developer.driverkit.transport.pci</key>
    <array>
        <dict>
            <key>IOPCIPrimaryMatch</key>
            <string>0xbbbbaaaa</string>
        </dict>
    </array>
</dict>
</plist>

Это мой 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>OSBundleUsageDescription</key>
    <string>Example user space PCI driver</string>
    <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>IOResourceMatch</key>
            <string>IOKit</string>
            <key>IOMatchCategory</key>
            <string>IOService</string>
            <key>IOPCITunnelCompatible</key>
            <true/>
            <key>CFBundleIdentifier</key>
            <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
            <key>IOClass</key>
            <string>IOService</string>
            <key>ProductID</key>
            <integer>bbbb</integer>
            <key>VendorID</key>
            <integer>aaaa</integer>
            <key>IOProviderClass</key>
            <string>IOPCIDevice</string>
            <key>IOPCIPrimaryMatch</key>
            <string>0xaaaabbbb</string>
            <key>bConfigurationValue</key>
            <integer>1</integer>
            <key>IOUserClass</key>
            <string>MyUserUSBInterfaceDriver</string>
            <key>IOUserServerName</key>
            <string>sc.knight.MyUserUSBInterfaceDriver</string>
        </dict>
    </dict>
</dict>
</plist>

Это часть исходного кода.

class MyUserUSBInterfaceDriver: public IOService

boolMyUserUSBInterfaceDriver::init()
{
    bool result = false;

    os_log(OS_LOG_DEFAULT, "test %{public}s init", __FUNCTION__);

    result = super::init();
    ivars = IONewZero(MyUserUSBInterfaceDriver_IVars, 1);

    os_log(OS_LOG_DEFAULT, "test %{public}s init finish %{public}d", __FUNCTION__, result);
Exit:
    return result;
}

У меня 2 вопроса.

1, «требуемый cdha sh в личности не соответствует услуге», что это значит? Неправильный формат прав?

2, почему мой декст разбился? Вызывается функция init (), но перед вызовом start () вызывается cra sh. Я что-то пропустил или сделал что-то не так?

Большое спасибо за любую помощь.

...