我有一个需要知道正在运行的OS X版本的kext。CocoaDev有一篇文章,其中描述了如何使用Gestalt()获取OS X版本信息,但该代码需要Cocoa。
我能从kext中调用Gestalt()吗?
如果可以,我应该使用哪个#include来定义它?
如果不行,还有其他解决方案吗?
我能从kext中调用Gestalt()吗?
如果可以,我应该使用哪个#include来定义它?
如果不行,还有其他解决方案吗?
背景:
我想在所有OS X版本(从10.4到10.7)中使用相同的kexts。
但是:kexts调用cdevsw_add
,这在狮子山中以不向后兼容的方式进行了更改。随着(显然)某些调用它的内核程序的更改,这些更改意味着 - 根据例程之前的评论 - 在10.7上应该使用不同的第一个参数调用cdevsw_add
,而在OS X 10.0到10.6上则不同。(Lion上为-12,在早期版本上为-1。)
如果kexts可以确定它们正在运行的OS X版本,那很容易。(如果不能,则可能会很麻烦 - 可能像构建两个不同版本的kexts并让kext加载代码选择要加载的版本一样可怕的修补程序。)
bsd_stubs.c
中关于向cdevsw_add(...)
发送-1
的注释。实际上,这个注释已经存在于XNU源代码中很长时间了--比如,在10.6.0版本的源代码中就有它的身影。从代码来看,我认为在Lion中使用-1仍然可以正常工作,即使这不是一个理想的值要发送... - Dave Peckbdev
/cdev
或者isfree
/add
?这是我得到的,可以自由检查:**10.0.0 - 10.4.11:必须严格传递-1
来自动插入;任何小于此值都会中止。10.5.0 - 10.7.5**:传递-1
会从0
开始搜索,建议使用-12
。(...) - user2975337_isfree
,现在建议使用-24
。 - user2975337