黑苹果12免驱的显卡:CloverN650DU定制
黑苹果12免驱的显卡:CloverN650DU定制ubuntu@ubuntu:~$dmesg|grepsnd [14.589033]snd_hda_codec_realtekhdaudioC0D0:autoconfigforALC269VC:line_outs=1(0x14/0x0/0x0/0x0/0x0)type:speaker [14.589036]snd_hda_codec_realtekhdaudioC0D0:speaker_outs=0(0x0/0x0/0x0/0x0/0x0) [14.589038]snd_hda_codec_realtekhdaudioC0D0:hp_outs=1(0x15/0x0/0x0/0x0/0x0) [14.589039]snd_hda_codec_realtekhdaudioC0D0:mono:mono_out=0x0 [14.589040]snd_hda_codec_realtekhdaudioC
基本信息
1. 声卡型号:Realtek ALC269VC
2. 提取声卡 codec
-
Ubuntu Desktop 刻录 U 盘镜像,直接在试用模式操作键鼠提取文件,路径 /proc/asound/card*。
-
Clover 提取需要驱动 AudioDxe.efi,界面按 F8,保存路径 EFI/CLOVER/misc。
-
建议两种模式各提取一次。
Ubuntu 提取有效 Node 节点
1. 在 Ubuntu Shell 输入代码提取
ubuntu@ubuntu:~$dmesg|grepsnd [14.589033]snd_hda_codec_realtekhdaudioC0D0:autoconfigforALC269VC:line_outs=1(0x14/0x0/0x0/0x0/0x0)type:speaker [14.589036]snd_hda_codec_realtekhdaudioC0D0:speaker_outs=0(0x0/0x0/0x0/0x0/0x0) [14.589038]snd_hda_codec_realtekhdaudioC0D0:hp_outs=1(0x15/0x0/0x0/0x0/0x0) [14.589039]snd_hda_codec_realtekhdaudioC0D0:mono:mono_out=0x0 [14.589040]snd_hda_codec_realtekhdaudioC0D0:dig-out=0x1e/0x0 [14.589041]snd_hda_codec_realtekhdaudioC0D0:inputs: [14.589042]snd_hda_codec_realtekhdaudioC0D0:Mic=0x18 [14.589044]snd_hda_codec_realtekhdaudioC0D0:InternalMic=0x12
2. 可在 Ubuntu 设置 - 声音面板查看硬件:内外扬声器、内外麦克风的切换 & 使用是否正常,这个操作对后续提供判断很有作用。
3. 从命令日志获得节点:0x14 0x15 0x1e 0x18 0x12,配合下面手工提取会更准确。
Windows 提取有效 Node 节点 PathMap 路径信息
1. 先恢复微软或官方原始声卡驱动
2. 安装 Windows 工具 High Definition Audio Utility,进入 File => Local Machine Codecs => 选择声卡
查看中栏信息
Static device -> 静态设备 - 内置
Dynamic device -> 动态设备 - 外置
1. 音频输出
RedirectedHpSpeaker (Static)
0x140x2->0xC->0x14 0x150x2->0xC->0x15
SpdifOut (Static)
0x1E0x6->0x1E
2. 音频输入
MicIn (Dynamic)
0x180x8->0x23->0x18
MicIn (Static)
0x120x9->0x22->0x12
5 个有效节点
0x14,0x15,0x1E,0x18,0x12
整理数据得到
节点(16进制)10进制路径修正(音频输出从右向左推,输入从左向右推)设备确定 0x140x2->0xC->0x14202->12->2020->12->2Speaker内置扬声器 0x150x2->0xC->0x15212->12->2121->12->2HPOut外置扬声器 0x1E0x6->0x1E306->3030->6SPDIF数字传输 0x180x8->0x23->0x18248->35->248->35->24MicIn外置麦克风 0x120x9->0x22->0x12189->34->189->34->18MicIn内置麦克风
提取左栏 5 个节点信息,用于信息对比 (展开 Audio -> Widgets -> 0x1* 节点 -> Controls -> Pin Configuration)
多研究这个工具,一定会得到更多的声卡信息。
0x14misc:0x1 color:Unknow connectiontype:Otheranalog DefaultDevice:Speaker DirectionalLocation:N/A Location:Internal PortConnectivity:FixedFunctionDevice 0x15misc:0x0 color:Black connectiontype:1/8"stereo/mono==>3.5mm接口 DefaultDevice:HPOut DirectionalLocation:Front Location:External PortConnectivity:Jack 0x1Emisc:0x1 color:Black connectiontype:RCA DefaultDevice:SPDIF DirectionalLocation:Front Location:External PortConnectivity:Jack 0x18misc:0x0 color:Black connectiontype:1/8"stereo/mono==>3.5mm接口 DefaultDevice:MicIn DirectionalLocation:Front Location:External PortConnectivity:Jack 0x12misc:0x1 color:Unknow connectiontype:OtherDigital DefaultDevice:MicIn DirectionalLocation:N/A Location:Internal PortConnectivity:FixedFunctionDevice
macOS 打开 PinConfigurator.app 导入 codec#0
选择修补 -> 删除无效节点,剩下的数量明显多于整理出的有效节点,手动移除那些没见过、很奇怪、从未使用的节点。
(类似 Other、ATAPI、Modern、CD,移除操作具体情况具体分析)
修正插口位置
修正设备类型
笔记本外置麦克风 Mic Ext 需设置为 Line In ,按照白苹果规范设定,否则不能正常工作。
记录 EAPD 字样的节点 (下面会用到):
0x14 0x15
点击获取 ConfigData:
01471C1001471D0101471E1701471F9901470C0201571C1F01571D1001571E2101571F0101570C0201E71C2001E71D1101E71E4401E71F0101871C3001871D1001871E8101871F0101271C4001271D0101271EA601271F99
整理数组,直观分析
01471C1001471D0101471E1701471F9901470C02 01571C1F01571D1001571E2101571F0101570C02 01E71C2001E71D1101E71E4401E71F01 01871C3001871D1001871E8101871F01 01271C4001271D0101271EA601271F99
1. 带 EAPD 字样的两个节点多出 01470C02 01570C02,等下直接丢到最后。
(测试只放 01470C02 也能用,分析原生 AppleHDA 驱动也是这么做的,01570C02 放不放貌似没有硬性要求)
2. 多出数值可以在 AppleALC/Resources/PinConfigs.kext/Contents/Info.plist 找到 WakeConfigData。
(AppleALC_v1.2.5 更新日志里有提及,应该和睡眠唤醒无声有关 https://www.insanelymac.com/forum/topic/311293-applealc-—-dynamic-applehda-patching/?do=findComment&comment=2609221)
整理数据
0x14 节点数据 <01470C02> 放到最后,
0x15 节点数据 <01570C02> 放到最后 (存疑),
得到最终 configData:
01471C1001471D0101471E1701471F9901571C1F01571D1001571E2101571F0101E71C2001E71D1101E71E4401E71F0101871C3001871D1001871E8101871F0101271C4001271D0101271EA601271F9901470C0201570C02
cddesktop&&gitclonehttps://github.com/acidanthera/AppleALC.git
1. 声卡型号 ALC269 可用 layoutID 有:
0x100004 0x100100 0x100202 0x100203,1-21 27-33 35 40 45 55 58 66 76 88 93 99 100 127 188
2. 进入 AppleALC/Resources/ALC269 ,这里选择 layout29.xml。
3. 需要修改的文件:
|____AppleALC |... |____Resources(删除其它声卡文件夹) |____ALC269(删除其它声卡xml) ||____Info.plist(已修改) ||____Platforms29.xml(已修改) ||____layout29.xml(已修改) |____Controllers.plist |____Kexts.plist |____Vendors.plist |____PinConfigs.kext(已修改) |____Contents |____Info.plist
修改下列四个文件:
Platforms29.xml、Platforms29.xml、info.plist、PinConfigs.kext/Contents/info.list
1.PlistEdit 修改 Platforms29.xml(PathMap 映射文件)
-
先修改 PathMapID 为 29,然后逐级展开,只修改 NodeID。其它保持原样,后期微调才动。
-
清晰结构图 (0、1 非二进制,仅仅是 item 0、item 1)
PathMap |____0(音频输入) ||____0(内置麦克风PathMap:9->34->18) |||____0 |||____0 ||||____AMPAmplifier(音频功率放大器,可将低功率电子音频信号放大到足以驱动扬声器或耳机的电平) |||||____Channels ||||||____0 |||||||____Bind1(声道数(0单声道,1&2双声道)) |||||||____Channel1(设定声道位置(1后左,2后右,3前置中央,4重低音,5前左,6前右)) ||||||____1 ||||||____Bind2 ||||||____Channel2 |||||____MuteInputAmp是(该选项对麦克风静音是否有效未知,但是对扬声器静音是有用的,所以扬声器建议都选true) |||||____PublishMute否(显示静音控制选项,在音频MIDI设置输入选项能看到) |||||____PublishVolume否(显示左右声道选项) |||||____VolumeInputAmp是(显示输入音量控制选项,在偏好设置-声音-输入能看到) ||||____MinimumSampleRate48000(采样率) ||||____NodeID9 |||____1 ||||____AMP |||||____Channels ||||||____0 |||||||____Bind1 |||||||____Channel1 ||||||____1 ||||||____Bind2 ||||||____Channel2 |||||____MuteInputAmp是 |||||____PublishMute否 |||||____PublishVolume否 |||||____VolumeInputAmp否 ||||____NodeID34 |||____2 |||____Boost1(默认1,看过一些资料,可能是某些声卡驱动麦克风的关键点,范围值1~3) |||____NodeID18 || ||____1(外置麦克风PathMap:8->35->24) ||____0 ||____0 |||____AMP ||||____Channels |||||____0 ||||||____Bind1 ||||||____Channel1 |||||____1 |||||____Bind2 |||||____Channel2 ||||____MuteInputAmp是 ||||____PublishMute否 ||||____PublishVolume否 ||||____VolumeInputAmp是 |||____MinimumSampleRate48000 |||____NodeID8 ||____1 |||____AMP ||||____Channels |||||____0 ||||||____Bind1 ||||||____Channel1 |||||____1 |||||____Bind2 |||||____Channel2 ||||____MuteInputAmp是 ||||____PublishMute否 ||||____PublishVolume否 ||||____VolumeInputAmp否 |||____MinimumSampleRate48000 |||____NodeID35 ||____2 ||____Boost2(音量增益,有其它说法:MicExt外置=1,MicInt内置=3,但看过白苹果很多参数内外都设定3,建议先不改看是否正常。) ||____NodeID24 | |____1(音频输出) ||____0(内置扬声器PathMap:20->12->2) |||____0 |||____0 ||||____AMP |||||____Channels ||||||____0 |||||||____Bind1 |||||||____Channel1 ||||||____1 ||||||____Bind2 ||||||____Channel2 |||||____MuteInputAmp是 |||||____PublishMute是 |||||____PublishVolume是 |||||____VolumeInputAmp否(该选项应该只针对麦克风,功能是显示:音量界面-输入-输入电平,和显示噪音分呗差不多) ||||____NodeID20 |||____1 ||||____AMP |||||____Channels ||||||____0 |||||||____Bind1 |||||||____Channel1 ||||||____1 ||||||____Bind2 ||||||____Channel2 |||||____MuteInputAmp是 |||||____PublishMute是 |||||____PublishVolume是 |||||____VolumeInputAmp否 ||||____NodeID12 |||____2 |||____AMP |||____Channels ||||____0 |||||____Bind1 |||||____Channel1 ||||____1 ||||____Bind2 ||||____Channel2 |||____MuteInputAmp是 |||____PublishMute是 |||____PublishVolume是 |||____VolumeInputAmp否 |||____NodeID2 || ||____1(外置扬声器PathMap:21->12->2) ||____0 ||____0 |||____AMP ||||____Channels |||||____0 ||||||____Bind1 ||||||____Channel1 |||||____1 |||||____Bind2 |||||____Channel2 ||||____MuteInputAmp是 ||||____PublishMute是 ||||____PublishVolume是 ||||____VolumeInputAmp否 |||____NodeID21 ||___1 |||____AMP ||||____Channels |||||____0 ||||||____Bind1 ||||||____Channel1 |||||____1 |||||____Bind2 |||||____Channel2 ||||____MuteInputAmp是 ||||____PublishMute是 ||||____PublishVolume是 ||||____VolumeInputAmp否 |||____NodeID12 ||___2 ||____AMP |||____Channels ||||____0 |||||____Bind1 |||||____Channel1 ||||____1 ||||____Bind2 ||||____Channel2 |||____MuteInputAmp是 |||____PublishMute是 |||____PublishVolume是 |||____VolumeInputAmp否 ||____NodeID2 | |____2(SPDIFOut数字传输PathMap:30->6)暂时不理 |____0 ||____0 ||____0 ||____AMP |||____Channels ||||____0 |||||____Bind1 |||||____Channel1 ||||____1 ||||____Bind2 ||||____Channel2 |||____MuteInputAmp是 |||____PublishMute是 |||____PublishVolume是 |||____VolumeInputAmp否 ||____NodeID30 |____1 |____0 |____1 |____AMP ||____Channels |||____0 ||||____Bind1 ||||____Channel1 |||____1 |||____Bind2 |||____Channel2 ||____MuteInputAmp是 ||____PublishMute是 ||____PublishVolume是 ||____VolumeInputAmp否 |____NodeID6
补充
MuteInputAmp,PublishMute,PublishVolume,VolumeInputAmp 参数定义可从Amp-In或Amp-Out:nsteps&mute入手。 #引用Code#0样例 Amp-Outcapsofs=0 nsteps=0 stepsize=0 mute=1Nsteps=0=>PublishVolume=falseMute=1=>PublishMute=true Amp-Incapsofs=0 nsteps=0 stepsize=0 mute=1Nsteps=0=>MuteInputAmp=falseMute=1=>VolumeInputAmp=true Amp-Outcapsofs=64 nsteps=64 stepsize=3 mute=0Nsteps=64=>PublishVolume=trueMute=0=>PublishMute=false Amp-Incapsofs=16 nsteps=46 stepsize=3 mute=1Nsteps=46=>MuteInputAmp=trueMute=1=>VolumeInputAmp=true Amp-Incapsofs=0 nsteps=0 stepsize=0 mute=1Nsteps=0=>PublishVolume=falseMute=1=>PublishMute=true Amp-Incapsofs=0 nsteps=3 stepsize=39 mute=0Nsteps=3onthepin-outputcomplexmeansBoosts=3
完成 Platforms29.xml 修改。
2.PlistEdit 修改 layout29.xml(电压,底噪,增益,多声道等参数文件)
-
先修改 PathMapID 为 29
-
打开 codec#0 搜索:
VendorId:0x10ec0269(16转10进制=>283902569)填入CodecID
-
搜索 NodeID 0x18 (外置麦克风)
1.该节点VRef为VREF_80(全名:VoltageReference参考电压_模拟电压的百分比。) (10转16进制=>50)。 2.计算muteGPIO数值格式:50 0100 NodeID18=>50010018 (16转10进制=>1342242840,填入LineIn/MuteGPIO)。 (为什么填这里?记得前面PinConfigurator.app中有把外置麦克风设置为LineIn吗?) 3.外置麦克风需修改VRef参考电压实现驱动。 一般有Vrefcaps:HIZ50%Ground(0V)80%100%(都是十进制)。
-
搜索 NodeID 0x12 (内置麦克风)
1.如果数值为VREF_HIZ,则直接muteGPIO=0,填入Mic/MuteGPIO。 2.但是本机的该节点没有VREF字样,暂时也设定为muteGPIO=0试试。
完成 layout29.xml 修改。
3.PlistEdit 修改 info.list
-
修改 CodecID 同上
VendorId:0x10ec0269(16转10进制得283902569)填入CodecID
完成 info.list 修改。
4.PlistEdit 修改 PinConfigs.kext/Contents/info.list
-
直接搜索 CodecID 为 283902569,并且为 LayoutID=29 的项目节点,仔细看,满足这两个条件才行。本机器搜索到的是 118 项目节点。[全部删掉也行,照葫芦画瓢]
-
把前面整理的 ConfigData 数据:
01471C1001471D0101471E1701471F9901571C1F01571D1001571E2101571F0101E71C2001E71D1101E71E4401E71F0101871C3001871D1001871E8101871F0101271C4001271D0101271EA601271F9901470C0201570C02
填入到 ConfigData:
完成 PinConfigs.kext/Contents/info.list 修改。
5.xml 转 xml.zlib
-
这步 Xcode 编译时会自动转换无需干预。
-
如需手动转换,脚本在 AppleALC/Tools 目录。
6. 编译 AppleALC.kext
-
安装 Xcode
-
把 lilu.kext DEBUG 版本拷贝到 AppleALC 源码根目录。
提示:请勿使用 RELEASE 版本,会报错:AppleALC/Lilu.kext/Contents/Resources/Library/plugin_start.cpp'(intarget'AppleALC'fromproject'AppleALC')
-
Xcode 打开 AppleALC.xcodeproj
开始编译:Product -> Archive -> Distribute Content -> Built Products,保存到桌面,完成。 -
最后:
-
把 AppleALC.kext 放到 EFI/CLOVER/kexts/Other。
-
Clover Configurator 修改:Devices -> Audio -> Inject 填写 29。
-
重启系统即可。
-
进系统查看声卡注入信息:
macos@macosdeMBP~%ioreg-l|grepALC|grepHDAConfigDefault ||||"HDAConfigDefault"=({"AFGLowPowerState"=<03000000> "CodecID"=283902569 "Comment"="CustomALC269VCClevoN650DUbyLeeyr" "ConfigData"=<01470c0201470c0201570c02> "FuncGroup"=1 "BootConfigData"=<01471c1001471d0101471e1701471f9901571c1f01571d1001571e2101571f0101e71c2001e71d1101e71e4401e71f0101871c3001871d1001871e8101871f0101271c4001271d0101271ea601271f9901470c0201570c02> "WakeVerbReinit"=Yes "LayoutID"=7}) #显示LayoutID=7原因是定制ALC的LayoutID以白苹果的方式运行?未知具体。
已完成:
扬声器:内外功放清晰不破音 切换正常
麦克风:内外切换正常 (手机耳机四段插头),内置录音清晰无杂音,电平显示正常,可调节。
睡眠唤醒均正常,HDMI 输出正常。
未完成:
麦克风:手机四段插头外置麦克风输入不正常,居然把耳机绕线组电流转成了麦克风输入,不清晰。没别的硬件测试。
SPDIF Out:无硬件测试
1.SPDIF、HDMI 等数码输出音频端口,不可调节音量,而由解码设备调节。
https://discussions.apple.com/thread/1214940
https://discussions.apple.com/thread/2529122
2. 如果开机后发现小喇叭图标是灰色,初步判断是节点路径问题;偏好设置音频管理界面输入 / 输出设备未发现,说明是 configData 问题。
3. 精简文件 AppleACL.kext:
修改 PinConfigs.kext/Contents/info.list 时搜索到对应的项目节点是 118,其它删除,编译出来 AppleALC.kext 整体文件就会只保留 1 个项目节点,文件容量会大大减小。
4. 案例分析(内容是精髓,工具是基础)
https://mega.nz/#!y9lVGSLB (已失效)
提取:CJc3_3Bjv1n8rEhZTA7qG7NsI2S4XH5oPcIdXsSATH4
紫米
http://bbs.pcbeta.com/viewthread-623626-1-1.html
英文解析制作 AppleALC
https://github.com/F0x1c/AppleALC_Instructions