Почему мое расширение ядра не записывает в kernel.log

У меня есть простое расширение ядра:

kern_return_t HelloWorld_start (kmod_info_t *ki, void * d) {
    printf("Hello World\n");
    return KERN_SUCCESS;
}

kern_return_t HelloWorld_stop (kmod_info_t * kid, void * d) {
    printf("Goodbye World\n");
    return KERN_SUCCESS;
}

Который я компилирую и загружаю через:

sudo kextload HelloWorld.kext

И это появляется в списке kextstat:

...
  129    0 0xffffff7f80fac000 0x4000     0x4000     com.apple.driver.AppleProfileThreadInfoAction (85.2) <123 6 4 3 1>
  130    0 0xffffff7f80fb0000 0x4000     0x4000     com.apple.driver.AppleProfileTimestampAction (85.2) <123 5 4 3 1>
  132    0 0xffffff7f807c6000 0x2000     0x2000     sk-r-d.HelloWorld (1) <4>

Тем не менее, у меня ничего нет в kernel.log (или system.log) - я должен видеть свои операторы printf(). Есть идеи почему?

2 ответа

По какой-то причине консольное приложение, похоже, не отображает сообщения printf от kexts, а консольная программа журнала.

Я имел успех со следующими волшебными словами...

log stream --predicate 'eventMessage contains "YourMatchingPatternHere"'

Это создаст отфильтрованный поток, показывающий только те сообщения, которые соответствуют вашему предопределенному шаблону.

sudo nvram boot-args="kext-dev-mode=1 debug=0x22"
Другие вопросы по тегам