我已经按照Creating a Generic Kernel Extension with 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。
我也设置了boot-args
$ sudo nvram boot-args="original_contents debug=0x4"
任何人都可以帮助我吗?
答案 0 :(得分:3)
显然,至少从Sierra(10.12)起,他们重新组织了日志的编写方式(iOS支持?),所以你再也看不到system.log
了。尽管如此,在您的控制台应用程序中,您可以在侧边栏中找到Devices
部分,您可以在其中选择您的设备(通常是您的Mac系统),并在搜索框中查看仅限于“内核”的实时日志。所以我在使用kext load / kextunload时可以看到这些:
default 11:58:27.608228 +0200 kernel MyKext has started.
default 11:58:34.446824 +0200 kernel MyKext has stopped.
default 11:58:44.803350 +0200 kernel MyKext has started.
无需csrutil
和nvram
更改。
重要出于某种原因,我需要重新启动控制台以反映我的消息更改,否则它会显示上一版本中的那些(开始和停止)。确实很奇怪!
稍后要恢复旧日志,请尝试sudo log collect --last 1d
并使用Console
(more here)打开结果。
答案 1 :(得分:0)
很抱歉,死尸发布了,但是我发现将log(1)
与它的许多命令之一一起使用(如上述评论中的@pmdj所建议)比使用Console有用。从手册中:
log-访问由os_log,os_trace和其他日志创建的系统范围的日志消息 ging系统。
例如,一个人可以运行:
log stream
查看系统的实时输出,包括MacOS内核扩展中的printf()
。