跳到主要內容

黑蘋果定制聲卡驅動(ALC892為例)轉載


黑蘋果定制聲卡驅動(ALC892)轉載

 教程以ALC892 為例,主要針對筆記本的聲卡。由於筆記本聲卡經常同一型號的聲卡驅動並不能通用,往往需要自己定制。台式機大多沒有這個問題,只需要用AppleALC-master 生成通用聲卡即可,通用聲卡不好用的可以藉鑑本篇文章的思路。(台式機或者嫌麻煩的,可以直接跳到第八節,直接進行編譯,如果不完美再進行定制)
目錄:
一、定制驅動目標文件
二、定制聲卡信息提取
三、所需工具
四、codec 提取方法
五、修改configdata 信息
六、推導節點及Platforms.xml 修改
七、製作輔助文件
八、編譯聲卡驅動
九、實現聲卡驅動
十、總結
一、定制驅動目標文件
完全自製聲卡驅動,主要是要製作個文件
1.Applealc-master——resources——alc892 
Platforms.xml.zlib (節點文件)
2.Applealc-master——resources——alc892 
layout1.xml. zlib(layoutID 文件
3.Applealc-master—>resources—>alc892—>info.Plist 
描述聲卡以及對layout Platforms 文件位置、id 的說明
4.Applealc-master—>resources—>pinconfigs.kext— >contents—>info.Plist 
包含codecID layoutID 相關值)
二、定制聲卡信息提取
、提取聲卡codec 
verbit 獲取你的聲卡configdata 和節點信息
、推導自己的Platforms 節點
三、所需工具
Ubuntu 系統。
verbit codec 生成verbs.txt 文件。鏈接:verbit.zip 3zlib 轉換器鏈接:已包含修改好的Platforms.xml 以及zlib 轉換器 4 AppleALC-master 聲卡驅動鏈接:vit9696 大神最新AppleALC-master需要最新lilu.kext 配合,並且需要完整lilu 才行(lilu 中不能缺少Resources 文件夾)鏈接:
vit9696 大神最新Lilu-master







四、codec 提取方法
盤安裝Ubuntu 系統網上很多需要在盤中寫入鏡像,其實現在的Ubuntu 也有類似WinPE 的功能,將下載好的安裝包解壓到盤中即可。開機啟動時引導進入盤的Ubuntu 系統出現Ubuntu 的系統選項,選擇Try Ubuntu without installing




ubuntu 系統選項.jpg
進入Ubuntu 系統的桌面打開我的電腦,進入路勁proc/asound/card1 ,將文件夾裡面的所有名為codec# 開頭的文件都複製出來,其中一個就是你的聲卡codec ,千萬不要把HDMI 音頻的文件複製出來了(如果card1 沒有就一定在card0 文件夾,筆記本一般都在card1 中)
、進入macOS 系統中,將提取的Codec.txt 改名為codec_dump.txt 放在桌面上,將verbit.zip 解壓到桌面,打開終端輸入:
cd desktop ./verbit codec_dump.txt > verbs.txt 獲得verbs. txt (部分朋友獲取的為空白,是因為兩個命令一起使用的結果)注意:部分聲卡終端輸入命令會得到一個錯誤文件,文件的內容如下:




Codec: Realtek ALC269VC
Address: 0
AFG Function 
Id : 0 x1 (unsol )
需要刪除codec_dump.txt 文件中的這行數據AFG Function Id: 0x1 (unsol 1) ,也要把空格刪除完。再執行一次命令,得到正確的verbit.txt 文件。感謝Lenged 發現問題)

verbs.png
打開codec.txt 搜索上面的紅框中的Node ,找到每個Node 下面的Pin Default 那行,看看中間是否有[N/A] ,將有[N/A] 的將“ 節點信息“ 中的一行刪除。
刪除後,紅框中的modified verbs 每行四個數,一共組就是需要的configdata codec.txt內搜索EAPD 字樣,存在EAPD ,必須在configdata 最後加入一組01470C02 
五、修改configdata 信息
①第一組

第一組.png
紅框中是接口的順序。數字越低那麼優先權就越高。如果有[N/A] 的接口既是無用的接口可以設成
內置麥克風—— Mic at Int N/A 內置揚聲器——Speaker at Int N/A 線路輸出—— line out 外置麥克風—— Mic at Ext Rear 線路輸入—— Line In at Ext Rear 耳機—— HP Out at Ext Rear 
SPDIFOut —— SPDIF Out at Ext Rear
如果你的聲卡有line out 節點那麼
Mic at Int N/A =5 
Speaker at Int N/A =1 
line out =2 
Mic at Ext Rear =6 
Line In at Ext Rear =5 
HP Out at Ext Rear =3 
SPDIF Out at Ext Rear =4
如果無line out 
Mic at Int N/A =4 
HP Out at Ext Rear =2 
Mic at Ext Rear = 5 
Line In at Ext Rear =4 
Speaker at Int N/A =1 
SPDIF Out at Ext Rear =3
耳機優先級一定要低於內置揚聲器,外置麥克風一定要低於內置麥克風,默認開啟的是內置揚聲器和麥克風,第四組數據把耳機設置為,既插入檢測。這樣就可以實現自動切換了。)
②第二組

第二組.png
line out 設置為,其餘皆為0
③第三組

第三組.png
第三組為接口顏色,這個改不改無所謂,我是默認沒改
0 = Unknown 
1 = Black 
2 = Grey 
3 = Blue 
4 = Green 
5 = Red 
6 = Orange 
7 = Yellow 
8 = Purple 
9 = Pink 
A – D = Reserved 
E = White 
F = Other
④第四組

第四組.png
接口為,表示當接口被檢測到時使用。如果是筆記本的話內建的麥克風和揚聲器要設成,即當耳機插入時,內建揚聲器靜音,耳機接口被檢測到就是用耳機。
Mic at Int N/A =1 
Speaker at Int N/A =1 
line out =0 
Mic at Ext Rear =0 
Line In at Ext Rear =0 
HP Out at Ext Rear =0 
SPDIF Out at Ext Rear =1
⑤第五組

第五組.png
設定接口功能信息,按照以下進行修改
0 = Line Out 
1 = Speaker 
2 = HP Out 
3 = CD 
4 = SPDIF Out 
5 = Digital Other Out 
6 = Modem Line Side 
7 = Modem Handset Side 
8 = Line In 
9 = AUX 
A = Mic In 
B = Telephone 
C = SPDIF In 
D = Digital Other In 
E = Reserved 
F = Other
Mic at Int N/A =a 
Speaker at Int N/A =1 
line out =0 
Mic at Ext Rear =8 
ALC892 需要通過line in 實現外置mic 
Line In at Ext Rear =8 
HP Out at Ext Rear = 2 
SPDIF Out at Ext Rear =4
⑥第六組

第六組.png
連接裝置類型
0 = Unknown 
1 = 1/8″ stereo/mono 
2 = 1/4′ stereo/mono 
3 = ATAPI internal 
4 = RCA 
5 = Optical 
6 = Other Digital 
7 = Other Analog 
8 = Multichannel Analog (DIN) 
9 = XLR/ Professional 
A = RJ-11 (Modem) 
B = Combination 
F = Other 
通常接口是1/8″ stereo/mono SPDIF Optical 筆記本內建的接口是ATAPI internal (這只是描述,對驅動沒有本質影響,我默認沒有修改。)
⑦第七組

第七組.png
為插入接口的,如外置麥克風、耳機等。
如果codec_dump 出來有[N/A] 的就是無用的port ,數字為
為給筆記本內建,像內置揚聲器、內置麥克風等
Mic at Int N/A =9 
Speaker at Int N/A =9 
line out =0 
Mic at Ext Rear =0 
Line In at Ext Rear =0 
HP Out at Ext Rear =0 
SPDIF Out at Ext Rear =0
⑧第八組

第八組.png
插口所在位置
0 = Rear 
(後)
1 = Front 
(前)
8=HDMI 
9=ATAPI 
(內建)(這只是描述,對驅動沒有本質影響,我默認沒有修改。)

將八組數據修改後進行整理得到configdata 每個參數中保留一位空格
01271c50 01271d01 01271ea6 01271f90 01471c10 01471d01 01471e17 01471f90 01771c20 01771d10 01771e01 01771f01 01871c60 01871d10 01871ea1 01871f01 01a71c50 01a71d10 01a71e81 01a71f01 01b71c30 01b71d10 01b71e21 01b71f01 01e71c40 01e71d11 01e71e45 01e71f01 01470C02
六、推導節點及Platforms.xml 修改

接口的節點信息.png

紅框中為接口節點。
想要實現接口功能需要推導節點,一般為個節點實現一個接口功能,且節點一般不重複。其中輸入為反向推導,輸出為正向推導,即輸入時接口節點是最後一個節點,輸出時接口節點是第一個節點(codec 中的節點值為16 進制,Platforms.xml 中需要轉換成10 進制)
① 輸入以Mic at int (內置麥克風)為例在codec_dump.txt 搜索0x12 搜索到0x12 ,一個為節點本身即Node 0x12 ,一個在關聯節點0x22 


0x22 節點.png

0x12 節點.png
然後在codec_dump.txt 搜索0x22 ,搜索到0x22 ,一個為節點本身即Node 0x22 ,一個在關聯節點0x09 

0x09 節點.png

0x22 節點.png
按照輸入節點反向推導,獲得內置麥克風的節點為:
十六進制:0x09 → 0x22 → 0x12 十進制:9 → 34 → 18

②輸出以Speaker at Int N/A (內置揚聲器)為例在codec_dump.txt 搜索0x14 搜索到0x14 ,首先找到節點本身即Node 0x14


0x14 節點.png
找到connection 中有關聯節點0x0c
codec_dump.txt 搜索0x0c ,搜索到0x0c ,首先找到節點本身即Node 0x0c

0x0c 節點.png

找到connection 中有關聯節點0x02 0x0b ,在已選節點不重複的前提下,優先選擇數字小,即0x02 節點按照輸出節點正向推導,獲得內置揚聲器的節點為:

十六進制:0x14 → 0x0c → 0x02 十進制:20 → 12 → 2

由此推導出所有節點,由於節點很多,可能出現有共同關聯的節點​​,且沒有其他節點,則更換上個節點,重新推導,直到沒有重複的為止。

推導節點.png
、修改Platforms.xml 根據我的Platforms.xml 進行修改即可

Platforms.png
PathMap 下一共三大項:
為輸入,為輸出,SPDIF
輸入項分為三大項:
為內置mic linein 為外置mic ALC892 外置mic 通過linein 實現,由此刪除外置mic 項)
輸出項分為三大項:
為耳機,為內置揚聲器,lineout
以內置mic 為例:內置mic 底層三項代表三個節點,將之前推導的三個節點按順序輸入到NodeID 中,在內置mic 節點添加boost 項,設置為,可以減少mic 雜音的情況(外置mic linein 的節點也可以添加boost 項)。

屏幕快照2017-12-01 12.16.04.png
以此類推,所有節點修改完畢後,在PathMapID 中輸入你的聲卡型號,Platforms.xml 完畢,保存後用zlib 轉換器轉換成Platforms.xml.zlib 格式。
七、製作輔助文件
Applealc-master——resources——alc892 中的info.Plist 用來描述你的聲卡以及對layout Platforms 文件位置、id 的說明
ALC892 
codecID 283904146 ,這是0x10ec0892 十六進制轉換過來的。codec_dump 開頭中可以找到,macos 的計算器有進制轉換功能。然後修改layouts 第一項,修改id path 地址改為你做好的layouts.xml.zlib 文件,Platforms 設置方式一樣。(全篇LayoutID 統一為,也可統一為其他數字)


info.png
Applealc-master——resources——pinconfigs.kext——contents 中的info.Plist 集合了所有聲卡的信息,我們只用保留需要的,為防止衝突,只修改第一項,其他都可以刪除。第一項中修改codec alc892 codecID 283904146 ,這是0x10ec0892 十六進制轉換過來的。codec_dump 開頭中可以找到,macos 的計算器有進制轉換功能。configData中修改為自己的configdata 即可。LayoutID 修改為(全篇LayoutID 所有統一為,也可統一為其他數字)

info.png
Applealc-master——resources——alc892 layout1.xml.zlib 描述聲卡型號以及聲卡ID 信息首先向zlib 文件轉換為xml 文件才可以編輯 LayoutID 修改為1(全篇LayoutID 所有統一為,也可統一為其他數字),修改codecID 283904146 ,這是0x10ec0892 十六進制轉換過來的。codec_dump 開頭中可以找到,macos 的計算器有進制轉換功能。 pathmapID 修改為892 部分聲卡需要刪除lineout 項才能驅動,需要自行嘗試。




layout.png
最後確認一共需要修改和定制的為個文件:
1.Applealc-master——resources——alc892—>Platforms.xml.zlib 
2.Applealc-master——resources——alc892—>layout1.xml.zlib 
3 .Applealc-master—>resources—>alc892—>info.Plist 
4.Applealc-master—>resources—>pinconfigs.kext—>contents—>info.Plist 
全篇所有的layoutID 都為,如果需要修改其他數字,需要注意layout 文件名也需要修改,如layout25.xmI.zlib
這四個文件保存好以後,系統升級驅動失效時可獲取最新的AppleALC-master 文件重新編譯即可,十分方便。
八、編譯聲卡驅動
下載好最新的AppleALC-master 文件,由於10.12.6 之後需要lilu.kext 才能編譯並驅動聲卡,還需要下載最新的lilu.kext 放置在AppleALC-master 的根目錄,需要注意的是lilu.kext 中必須包含有Resources (部分lilu.kext 缺少該文件)將之前定制好的四個文件,放置在對應的位置,運行AppleALC-master 中的AppleALC.xcodeproj


運行xcode.png
如果出現紅色嘆號報錯,可能出現以下問題:
、缺少lilu.kext 文件或lilu.kext 中缺少resources 下的文件(查找最新lilu.kext ,並確保必須包含有Resources 

報錯1.png

、顯示缺少liluAPI ,說明lilu.kext AppleALC-master 版本不對應,在下載時確保最新或者版本說明中相互對應,確保相互兼容。

報錯2.png
九、實現聲卡驅動
將做好驅動和對應版本的lilu.kext 放到EFI—>CLOVER—>kexts—>10.13 文件夾中。然後在config.plist 中加入以下代碼:

dict >
key >Audio</ key >
dict >
key >Inject</ key >
string >1</ string >
</ dict >
clover 注入ID 不能讓這個聲卡驅動正常工作所以這裡必須採用DSDT 注入ID 打開DSDT 搜索HDEF 插入函數
Method (_DSM, , NotSerialized) // _DSM: Device-Specific Method`
{
Store (Package ( 0x0A )
{

“hda-gfx” ,
Buffer ( 0x0A )
{

“onboard-1”
},

“codec-id” ,
Buffer ( 0x04 )
{

0x92 0x08 0xEC 0x10 
//
修改為自己的聲卡型號

},

“layout-id” ,
Buffer ( 0x04 )
{

0x01 0x00 0x00 0x00 //
修改為自己的layoutID
},

“device-type” ,
Buffer ( 0x07 )
{

“ALC892” //
修改為自己的聲卡型號
},

“PinConfigurations” ,
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0) }
十、總結
以這種仿冒方式定制的聲卡,對於筆記本十分友好,同時也能很好的解決喚醒無聲以及雜音問題。以上教程是通過學習遠景貼並總結個人經驗寫成的,我個人定制聲卡驅動後沒有出現喚醒無聲以及雜音等問題,如果由以上問題沒有解決的,可以參考一下帖子參考。

評論

留言

張貼留言

這個網誌中的熱門文章

第八代『黑蘋果』主機全部安裝教程

HIGH SIERRA GUIDE  For  ASUS  STRIX Z370 -G  ROG ( Micro-ATX ) ** UPDATE   5th Jan 2018  /   Clover v2.4k r4359 ** 硬體配置規格 Asus ROG Strix Z370-G Gaming (Wi-Fi AC) ( Micro ATX )  i7 8700 3.2GHz  Corsair Vengeance LPX 8GB (1 x 8GB) DDR4 DRAM 2400MHz (PC4-19200) C14 Memory Kit - Black  Samsung Evo 960 250GB NVMe SSD  NVIDIA GeForce GTX 1080ti (or a GTX 1050 / 1060 / 1070 will work  ) ABWB 802.11AC WI-FI with Bluetooth 4.0 PCI-Express  BitFenix Phenom – Tower – micro ATX  Noctua NH-L9x65 - NH-L9x65 Low Profile Performance CPU Cooler  EVGA SuperNOVA 750 G3, 80 Plus Gold 750W  Corsair UK K65 Rapidfire Cherry MX Speed Performance Multi-Colour RGB Backlit 10 Keyless  Samsung 850 EVO 500GB  Dell UltraSharp U2717D (2560x1440DP) IPS LED 27-Inch Infinity Edge 成功運行的功能 Wi-Fi ( Onboard WiFi card was replaced, see components list above )   Bluetooth Ethernet ...

雖然我沒有4K螢幕,但卻可以4K輸出(4K)

FRESH INSTALLING MACOS HIGH SIERRA ON AMD RYZEN HACKINTOSH GUIDE (10.13)

This guide will show you the steps to install Sierra on a AMD Ryzen PC using a VMWare Virtual Machine. I’m making this guide for those who don’t have access to a Mac and need macOS to either try out for a bit or create a macOS boot loader installer for a AMD hackintosh build. There is another VMWare Sierra guide on this site, but  with AMD system a modified VMWare image is required to even be able to boot macOS so this AMD VMWare guide has to be used instead. WHY NOT A HIGH SIERRA VM? So getting High Sierra running as a virtual machine in Windows or Linux is actually pretty difficult with a Ryzen PC. Some will manage to get it working, butt not for others with there being all sorts of errors that can potentially popup on the screen. I actually spent half a day trying to get High Sierra working on VMWare player and wasn’t able to do it, so I had to resort to using Sierra, which I posted the steps for here. You can still use a Sierra VM to download High Sierra and create a Hig...