为什么我的内核扩展没有写入kernel.log

时间:2012-08-21 03:04:28

标签: macos kernel kernel-extension xnu

我有一个简单的内核扩展名:

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 个答案:

答案 0 :(得分:1)

由于某些原因,控制台应用程序似乎没有显示来自kexts的printf消息,但日志控制台程序确实如此。

我用以下神奇的词语取得了成功......

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

这将生成一个过滤流,仅显示与预定义模式匹配的消息。

答案 1 :(得分:-1)

sudo nvram boot-args="kext-dev-mode=1 debug=0x22"