Почему мое расширение ядра не записывает в 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"'
Это создаст отфильтрованный поток, показывающий только те сообщения, которые соответствуют вашему предопределенному шаблону.