mac ox系統的驅動安裝常規操作:
下載到 *.kext 的驅動以后,都可以直接把它拖到 /System/Library/Extensions/ 下替換掉原來的文件。替換了以后,還需要修復權限才能夠正常使用。因為 Mac OS X 是基於 FreeBSD 的操作系統,因此 Unix 下對文件權限的依賴就被繼承了下來了。大家在替換了 *,kext 文件以后,必須要打開終端,輸入如下命令:
sudo -s
chmod -R 755 /System/Library/Extensions
chown -R root:wheel /System/Library/Extensions
rm -rf /System/Library/Extensions.*
diskutil repairpermissions /
sudo -s (這個命令是把當前用戶升級到系統管理員用戶,當然,還要輸入管理員密碼。)
chmod -R 755 /System/Library/Extensions (這個命令是把 Extensions 下的所有文件的權限都設置成 755,關於權限數字的意義,請參考 Linux/Unix 的命令解釋,限於篇幅,這里不說了。)
chown -R root:wheel /System/Library/Extensions (這個命令把 Extensions 下的所有文件的所有者和組別都設置成為 root:wheel。換句話說,Extensions 下的所有文件都設置成為管理員為所有者)
rm -rf /System/Library/Extensions.* (這個命令將刪除系統的內核擴展緩存。為了加快啟動速度,Mac OS X 把本機的驅動制作成一個 內核擴展緩存,開機時只加載這個緩存,而不必全部 kext 都要加載。我們為了讓系統加載新更換的驅動,一定要把緩存刪除才行。不過要注意,最后的 .* 是必不可少的。因為 rm -r 是一個遞歸操作,如果不加 .* 的話,這個命令將會把 Extensions 整個文件夾刪除!)
diskutil repairpermissions / (這個命令將修復 / 下的所有文件的權限。diskutil 是一個只有 Mac OS X 才有的命令,其作用就是檢測和修復磁盤權限。)
舉例:
[MAC]基於X86的蘋果系統驅動程序的安裝。
蘋果系統是基於UNIX的操作系統,其驅動的安裝也類似於UNIX的。在真正的蘋果電腦中安裝OSX是根本不許要手動安裝任何驅動的,但我們的想法是在普通機器上安裝OSX,那就沒那么好的運氣保證你所有的硬件都能被OSX識別了,大部分時候我們需要手動安裝驅動,網上有很多類型的驅動,甚至有蘋果愛好者自己開發的驅動,而大多都是以驅動文件的形式存在,需要手動安裝。
當你下載下來驅動之后,會發現所有的驅動文件后綴名字都是以kext結尾的,例如AppleAC97.kext為Intel版蘋果的AC97聲卡驅動。
安裝驅動一般的步驟為:注意,UNIX系統區分大小寫,所以務必看好以下命令的大小寫
1、將驅動文件解壓縮為.kext文件,放到桌面上。
2、打開終端(相當於windows中的命令行)。
3、輸入cd ~/desktop (這一行的意思是進入桌面,使桌面成為當前目錄)
4、輸入sudo chown -R root:wheel *.kext (*.kext就是你的驅動文件,這一行的作用為為后面的操作賦予管理員權限)
5、輸入你的root密碼,然后回車,如果密碼沒有可以直接回車。
6、輸入sudo chmod -R 755 *.kext (將驅動導入)
7、sudo kextload -v *.kext (加載驅動,如果正常就可以看到你設備的名稱了)
8、如果驅動不正常,請輸入sudo kextunload *.kext 然后再進行一便4~7,如還是不行那么舊得考慮驅動是否適合你的硬件了。
9、驅動正常后需要保存設定,使下次啟動也能生效,輸入sudo cp -R *.kext /system/library/extensions
10、重建驅動緩存sudo kextcache -k/*.kext
重新啟動就可以使用你的新硬件了!
----------------------------------
本人在MAC OSX 下使用開源的LIBUSB驅動實現USB設備的SCSI命令通訊相關應用程序的開發時, 使用libusb_claim_interfaces函數總是返回3(即訪問禁止),解決辦法: 1.訪問設備之前使用系統命令kextunload停止系統驅動模塊 /System/Library/Extensions/IOUSBMassStorageClass.kext,命令如下; "kextunload /System/Library/Extensions/IOUSBMassStorageClass.kext" 2.然后使用libusb_claim_interfaces()函數,可成功調用,已經測試 3.使用完該程序中所有的usb功能的通訊調用后,可通過系統命令kextload重性加載該驅動模塊,命令如下; "kextload /System/Library/Extensions/IOUSBMassStorageClass.kext",本人在項目中,除了實現SCSI相關的通訊之外,還要系統 支持USB的U盤訪問的功能,故程序使用完LIBUSB的函數調用后,通過系統命令kextload重性加載該驅動來掛結U盤進行數據訪問. 4.如果下次再要使用LIBUSB的libusb_claim_interfaces函數進行通訊時,請重復步驟1,2,3,如果步驟1出現kext is use or retained(cannot unload), 請不用管它,等1-3秒后,你也可以重新試一下不加載該驅動.kext,也許就不會報這個錯,經過測試,果然可以不加載,OK。 5.總結,下次出現同樣的問題或相類似的問題可以采用相同的方法解決,在此記下,以加深印象。 題外心得,多參考相關技術的資料,勤動手實踐,一定可以解決存在的問題