2017-05-08 3 views
0

Ni init, ni probe, ni start ne sont appelés. J'ai placé "PE_enter_debugger" au début de chaque, mais la machine de test ne tombe pas dans le débogueur.L'extension du noyau se charge mais ne fonctionne pas

je peux charger mon extension de noyau avec kextutil ou kextload, et il apparaît dans kextstat un peu de temps, mais disparaît. Je pense que certaines parties du noyau l'ont déchargé.

$ kextstat | grep MY 
155 0 0xffffff7f82940000 0x2000  0x2000  com.mydomain.MY2000 (1) 420AB8E0-E204-3992-90D8-A55A488448E4 <133 4 3> 

Je peux utiliser kextunload pour le décharger. Si j'utilise kextunload une seconde fois, il se plaint que l'extension du noyau n'est pas trouvée.

Chaque fichier et répertoire dans le fichier kext appartient à root avec la roue de groupe.

kextutil -tn n'a pas trouvé de problème.

Je Intégrité du système désactivés, et le mode de mise au point a permis que je peux utiliser les deux débogueur de la machine. J'ai deux autres extensions de noyau qui appellent PE_enter_debugger() et elles fonctionnent.

MY2000 est un périphérique USB composite. Ceci est finalement destiné à être un pilote pour trois des quatre interfaces de MY2000. La quatrième interface est un petit volume de stockage doté du programme d'installation du pilote Windows.

Dans mon Info.plist, j'ai essayé trois classes IOProvider différentes: USBHostDevice, USBHostInterface et AppleUSBHostCompositeDevice.

(Apple a changé le nom de certains de ses classes à El Capitan, je pense que, auparavant, ils étaient USBDevice et d'interface USB.)

<?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>CFBundleDevelopmentRegion</key> 
    <string>en</string> 
    <key>CFBundleExecutable</key> 
    <string>$(EXECUTABLE_NAME)</string> 
    <key>CFBundleIdentifier</key> 
    <string>com.mydomain.MY2000</string> 
    <key>CFBundleInfoDictionaryVersion</key> 
    <string>6.0</string> 
    <key>CFBundleName</key> 
    <string>$(PRODUCT_NAME)</string> 
    <key>CFBundlePackageType</key> 
    <string>KEXT</string> 
    <key>CFBundleShortVersionString</key> 
    <string>1.0</string> 
    <key>CFBundleVersion</key> 
    <string>1</string> 
    <key>IOKitPersonalities</key> 
    <dict> 
     <key>MY2000</key> 
     <dict> 
      <key>IOKitDebug</key> 
      <integer>65535</integer> 
      <key>IOClass</key> 
      <string>com_mydomain_MY2000</string> 
      <key>CFBundleIdentifier</key> 
      <string>com.mydomain.MY2000</string> 
      <key>IOProviderClass</key> 
      <string>AppleUSBHostCompositeDevice</string> 
      <key>IOMatchCategory</key> 
      <string>com_mydomain_MY2000</string> 
      <key>idVendor</key> 
      <string>0x1234</string> 
      <key>idProduct</key> 
      <string>0x2000</string> 
      <key>bInterfaceClass</key> 
      <string>0x10</string> 
      <key>bInterfaceSubclass</key> 
      <string>0x0</string> 
      <key>bInterfaceProtocol</key> 
      <string>0x0</string> 
     </dict> 
    </dict> 
    <key>NSHumanReadableCopyright</key> 
    <string>Copyright © 2017 My Company. All rights reserved.</string> 
    <key>OSBundleLibraries</key> 
    <dict> 
     <key>com.doequalsglory.driver.IOProxyFramebuffer</key> 
     <string>1.0.0d1</string> 
     <key>com.apple.kpi.iokit</key> 
     <string>16.5</string> 
     <key>com.apple.kpi.libkern</key> 
     <string>16.5</string> 
    </dict> 
</dict> 
</plist> 

Merci pour toute aide que vous pouvez me donner.

Répondre

1

Le Info.plist a:

 <key>idVendor</key> 
     <string>0x1234</string> 
     <key>idProduct</key> 
     <string>0x2000</string> 

"string" doit être "entier"

 <key>idVendor</key> 
     <integer>1234</integer> 
     <key>idProduct</key> 
     <integer>29193</integer> 

Dans l'éditeur de liste de propriétés, changer le type de chaîne par défaut Nombre.

FACEPALM.

Je ne devrais pas boire et le code.