Сейчас я разрабатываю свой собственный драйвер. Я разрабатываю шаблон ввода / вывода 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 ниже пять содержания, которые я добавил
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 я добавил две записи
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#
Эй, ребята, пожалуйста, помогите мне, и одна из важных вещей - всякий раз, когда я выполняю файлы kext, разработанные универсальным драйвером, они очень успешно выполняются в терминале.
А еще я начинающий программировать это ядро