現在、独自のドライバーを開発しています。i/ o kitDriverテンプレートで開発しています。コードをビルドすると、正常に実行されますが、ターミナルで問題が発生します。ヘッダーファイルで以下のようにコードを開発しました
#include <IOKit/IOService.h>
class com_osxkernel_driver_IOKIT : public IOService
{
OSDeclareDefaultStructors(com_osxkernel_driver_IOKIT)
public:
virtual bool init (OSDictionary* dictionary = NULL);
virtual void free (void);
virtual IOService* probe (IOService* provider, SInt32* score);
virtual bool start (IOService* provider);
virtual void stop (IOService* provider);
};
.cppで
#include "IOKIT.h"
#include <IOKit/IOLib.h>
#define super IOService
OSDefineMetaClassAndStructors(com_osxkernel_driver_IOKIT, IOService)
bool com_osxkernel_driver_IOKIT::init (OSDictionary* dict)
{
bool res = super::init(dict);
IOLog("IOKI::init\n");
return res;
}
void com_osxkernel_driver_IOKIT::free(void)
{
IOLog("IOKIT::free\n");
super::free();
}
IOService* com_osxkernel_driver_IOKIT::probe (IOService* provider, SInt32* score)
{
IOService *res = super::probe(provider, score);
IOLog("IOKIT::probe\n");
return res;
}
bool com_osxkernel_driver_IOKIT::start(IOService*provider)
{
bool res = super::start(provider);
IOLog("IOKIT::start\n");
return res;
}
void com_osxkernel_driver_IOKIT::stop(IOService*provider)
{
IOLog("IOKIT::stop\n");
super::stop(provider);
}
次に、IOKIT-info.plistの後に上記のコードを正常にビルドします
IOKitPersonalities辞書以下の5つのコンテンツを追加しました
Key Type Value
CFBundleIdentifier String com.osxkernel.${PRODUCT_NAME:rfc1034identifier}
IOClass String com_osxkernel_driver_IOKIT
IOMatchCategory String com_osxkernel_driver_IOKIT
IOProviderClass String IOResources
IOResourceMatch String IOKit
その後
OSBundleLibraries辞書に2つのエントリを追加しました
Key Type value
com.apple.kpi.iokit String 11.3.0
com.apple.kpi.libkern string 11.3.0
その後、私は再びそれをうまく構築します
ターミナルローディングに来る私は以下の手順に従います
ターミナルの前にkextファイルパスを見つけ、そのバンドルを/ system / library /extension/にコピーします
その後、ターミナルに移動します
以下の方法で実行する
ensiss-Mac-mini:~ ensis$ sudo su
Password:
sh-3.2# chown -R 775 /System/Library/Extensions/IOKIT.kext
sh-3.2# sudo kextload /System/Library/Extensions/IOKIT.kext
/System/Library/Extensions/IOKIT.kext failed to load - (libkern/kext) validation failure
(plist/executable); check the system/kernel logs for errors or try kextutil(8).
sh-3.2#
やあみんな私を助けてください、そして重要なことの1つは私が汎用ドライバーによって開発されたkextファイルを実行するときはいつでもそれがターミナルで非常にうまく実行されることです。
また、私はこのカーネルプログラミングの初心者です