【发布时间】:2012-08-16 09:21:57
【问题描述】:
我有一个简单的内核扩展:
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() 语句。知道为什么吗?
【问题讨论】:
-
你确定你的 kext 没有被意外地当作 C++ (IOKit) kext 对待吗?如果是,则不会调用 start/stop。
-
也许我在 xcode 中选择了错误的模板。我今晚去看看,谢谢。
-
不,我肯定选择了IOKit驱动。
-
那是你的问题,如果你想使用启动/停止功能,你需要使用“通用内核扩展”模板。
标签: macos kernel kernel-extension xnu