Я следил за Создание универсального расширения ядра с учебником по Xcode.
MyKext.c:
#include <sys/systm.h>
#include <mach/mach_types.h>
kern_return_t MyKext_start (kmod_info_t * ki, void * d)
{
printf("MyKext has started.\n");
return KERN_SUCCESS;
}
kern_return_t MyKext_stop (kmod_info_t * ki, void * d)
{
printf("MyKext has stopped.\n");
return KERN_SUCCESS;
}
Я также отключил csrutil, что позволяет мне загружать собственный kext.
# csrutil disable
Когда я загружаю свой собственный kext в ядро
$ sudo kextload -v /tmp/MyKext.kext
Результат printf() не записывается в /var/log/system.log.
Я также установил загрузочные аргументы
$ sudo nvram boot-args="original_contents debug=0x4"
Может кто-нибудь мне помочь?
printf()
должно бытьprintk()
- person user3629249   schedule 11.04.2017openlog()
,syslog()
,closelog()
- person user3629249   schedule 11.04.2017printf()
должно работать нормально. - person l'L'l   schedule 11.04.2017printf()
правильно в расширениях ядра macOS/OS X.IOLog()
работает одинаково, но чаще встречается в драйверах устройств. Какая версия ОС у вас работает? Начиная с 10.12, /var/log/system.log больше не является правильным местом для поиска, теперь вам нужно искать в новой службе системного ведения журнала, к которой вы можете получить доступ с помощью командыlog
.printk()
для Linux,syslog()
для пользовательского пространства. Отображается ли ваш kext в выводеkextstat
? Пожалуйста, не используйтеkextload
, используйте вместо этогоkextutil
, у него гораздо лучшая диагностика. - person pmdj   schedule 12.04.2017