Below you will find pages that utilize the taxonomy term “Kext”
Chameleon下kext安装注意事项
Snow Leopard 有两个引导器,BootThink和Chameleon,二者各有特色。很常见的问题,就是同样的kext,在Bootthink下运行正常,换了Chameleon,轻则不加载,重则kernel panic。在测试过无数遍后,终于……比较通用的方法出现了……
首先,BootThink对于放在/Darwin/SystemSL/Extensions下的kext是全部加载的。它不会对kext做什么校验,检查,只要放在这个目录下,就一定会被加载。其次,BootThink自带了很多kext。这些kext以mkext(kext缓存文件)的形式保存在Darwin/SystemSL下,这就是为什么不需要任何kext,BootThink也能驱动PS/2设备的原因。但是Chameleon和它不一样。对于放在/Extra/Extensions下的kext,Chameleon并不会全部加载,只有Info.plist中包含OSBundleRequired且值为Root时才会被载入(注意,这并不是总是正确。很多时候,Info.plist中的OSBundleRequired值并不为Root,但仍然可以被加载)。而且,Chameleon不会自动处理kext的依赖关系。也就是说,如果你想在Extra/Extensions中放一个VoodooHDA.kext,那么你必须打开Info.plist,找到OSBundleLibraries项,把它所依赖的kext都放近来(注意,这一般是正确的,但存在少数例外,比如AtherosFix.kext。似乎不需要把那些位于/System/Library/Extensions下可以自动加载的kext复制过来。我的意思是,如果是纯粹的依赖关系,那么位于/System/Library/Extensions下的kext需要复制,如果位于/System/Library/Extensions下的那个kext可以自动加载,就不需要复制)。
对于kext的插件(Contents/PlugIns),也需要对OSBundleRequired进行修改。举个例子,BootThink不需要任何额外kext就可以驱动PS2设备,但是Chameleon不行。无论是VoodooPS2Controller还是ApplePS2,最多都只可以驱动PS2键盘,鼠标是永远识别不到的。我的解决方案是,打开VoodooPS2Controller(ApplePS2在我这里连键盘都无法驱动),找到Contents/PlugIns/VoodooPS2Mouse.kext/Contents/Info.plist,修改OSBundleRequired的值为Console(为什么是Console而不是Root?因为VoodooPS2Controller可以驱动我的键盘,VoodooPS2Keyboard的Info.plist中写的是Console)。
有一些对于Bootthink来说很好用的kext,在Chameleon上根本无法使用。举个例子,我的无线网卡是AR5005G芯片组的,厂商ID是0x168c,设备ID是0x001a。用BootThink的时候,装上一个IO80211Family.kext就可以用了,没有任何问题,但是换成Chameleon,无论如何也不行。系统自带的IO80211Family.kext中并没有这个设备的ID,但这个kext竟然还是会自动加载,而且在关机的时候会导致kernel panic。就算把下载的IO80211Family.kext放到Extra/Extensions中也不行,这样会导致系统开机后AirPort失去响应,几分钟后整个系统挂掉。经过测试,最终找到的方案是去http://files.netkas.org/10.6.2/AtherosFix.kext.zip下载一个AtherosFix.kext,装上后在Info.plist中添加我自己的设备ID就没问题了。神奇的是这个kext似乎没有包含任何文件,除了一个Info.plist,而且Info.plist中也只是添加了对系统IO80211Fammily.kext的依赖,同时加入了我自己的设备ID而已……实在想不通为什么它会使原先导致kernel panic的系统自带IO80211Family.kext运行正常。