Surface pro 3 ALC288 的 AppleHDA 修改步骤

进入Ubuntu系统的桌面打开终端terminal:

输入 cat /proc/asound/card0/codec#0 >~/Desktop/codec_dump.txt

或者 cat /proc/asound/card0/codec#1 >~/Desktop/codec_dump.txt

或者 cat /proc/asound/card0/codec#2 >~/Desktop/codec_dump.txt

直到将你要的文件拷出,偶尔会多一个HDMI音频相关的文件,不要拷错了。

打开我的电脑(相当于windows的C盘),进入路径proc/asound/card0,将文件夹里面的所有名为codec#开头的文件都复制出来,其中一个就是你的声卡codec,千万不要把HDMI音频的文件复制出来了(如果card0没有就一定在card1文件夹。

输入命令行:

./verbit codec_dump.txt>verbs.txt

注意这一步生成的 ConfigData 中可能会有数字错误显示为了10进制,可以用系统

内置的计算器转换回16进制数。生成并换算16进制以后的结果,无用的节点已经被

自动剔除:

另外这一步生成的 ConfigData 并不完全正确 ,仍然需要手动进行更改。

4.1 ConfigData 各位定义

Address 在你的 codec_dump.txt 开头定义,而 Node 则是对应的接口序号,

71c,71d,71e,71f 是固定的,所以需要改的内容分别是每组的最后两位数,一共是8位置:

Line Out at Ext 0x13 和 Modem Line at Ext 0x1d是屏蔽设备,应该是用不到的,但是先放在里面一起把ConfigData改正确。

和 Sequence 一起用来表示设备间的关联,用来处理多声道,按照之前提取高孝的 codec_dump.txt 信息选择。也可以按次序安排,只要每个设备独立不一样就可以。

一般键携设置为0即可,多声道需要分别设定

接口颜色,依然按照上面提取的 codec_dump.txt 设置

插口侦测设置,定义如下

修改:

有教程说外置麦克风 Mic Ext 设置为Line In,但是surface pro 3是combination设备稿念伏,我个人觉得没什么用,沿用了本来的。

注意这里的外置麦克风 Mic Ext 设置为 Combination 设备

连接类型,圆形的 3.5 mm 接口设为1,笔记本内置的设备如果标有 ATAPI 则设为3,其他内置未知的设为0,屏蔽的设备也设置为0

修改:

端口,用来确定是否有外部接口

修改:

外部插孔所在位置,一般设为1,屏蔽的装置设为0

修改:

最后得到的正确结果为:

移除0x, 整理, 如果你的 codec_dump.txt 文件里面出现过 EAPD 字样的节点后加上 Address+节点+71c+02 ,找到EAPD节点的方法:那就是它通常会位于Speaker Out和HP Out这两个输出节点上..

最终修正过的 ConfigData:

<01271c10 01271d01 01271ea6 01271f90 01371c20 01371d00 01371e00 01371f40 01471c30 01471d01 01471e17 01471f90 01470c02 01871c40 01871d10 01871eab 01871f03 01d71c50 01d71d80 01d71e65 01d71f40 02171c60 02171d10 02171e2b 02171f03>

Line Out at Ext 0x13 和 Modem Line at Ext 0x1d是屏蔽设备 为了更符合苹果规范用f0000040修饰

改为

<01271c10 01271d01 01271ea6 01271f90 01371cf0 01371d00 01371e00 01371f40 01471c30 01471d01 01471e17 01471f90 01470c02 01871c40 01871d10 01871eab 01871f03 01d71cf0 01d71d00 01d71e00 01d71f40 02171c60 02171d10 02171e2b 02171f03>

如果加上所有屏蔽设备,configdata为

打开 AppleHDA.kext/Contents/PlugIns/AppleHDAHardwareConfigDriver.kext/Contents/Info.plist 文件,找到 IOPersonalities ->HDA Hardware Config Resource ->HDAConfigDefault ->Item 0 这一项的子项:

先把第一步的到的 codec_dump.txt 里的 AFG Function Id: 0x1 (unsol 0) 一行删除,然后在terminal中进入你保存 codec_dump.txt 文件所在文件夹输入:

./codecgraph codec_dump.txt

用于生成节点图

用 convert_hex_to_dec.rb 脚本将其中的十六进制数字转换为十进制

./convert_hex_to_dec.rb codec_dump.txt.svg >codec_dump_dec.txt.svg

从图中可以得到我们在后面步骤中修改 Platforms.xml.zlib 文件所需要的路径(尽量选择实线)。

为我们四个有效节点分配路径

对于输入设备: AudioInput ->Audio Mixer/Audio Selector ->Pin Complex

对于输出设备: Pin Complex ->Audio Mixer ->Audio Output

实际规则是尽量保持路径的独立性,尽量不要共用节点和路径。这里 [Mic Int] 和 [Mic Ext] 选择相同节点的路径的原因是,由于 surface pro 3 的耳机插口是二合一设备,这种耳机插口 Hackintosh的 Ext Mic 驱动处理起来很麻烦,于是插入带Mic耳机时,我让它直接用内置Mic输入声音。同时像 MacBook Pro 5 , 2,内外Mic路径是 7 ->36 ->然后才是各自的节点。之后我将所有备选方案也都放入了platform中。所以Mic 下共有四个路径。

知道路径后,修改 Platforms.xml.zlib 。将文件 Platforms.xml.zlib 拖入 Zlib 软件可以得到 Platforms.xml 文件,这个文件可以打开编辑,我是直接使用 Xcode 编辑。

输入设备的 PathMap,按照上面确定的节点数字修改:

加入备选路径后的PathMap设定

输出设备的 PathMap:

输出设备的 PathMap设定:

修改完成后,重新拖入 Zlib 软件压缩为 zlib 文件。

由 codec_dump.txt 文件计算出 layout 相关数值

计算 MuteGPIO:

MuteGPIO = VREF(Hex) + 0100 + NodeID

当你的 codec_dump.txt 对应节点信息中存在 VREF_HIZ 时, MuteGPIO = 0 。

例如:

Node 18 = 50(VREF 80) + 0100 + 18 = 0x50010018 = 1342242840

HeadsetMic_dBV为1,088,421,888

解压 LayoutXX.xml.zlib, 我这里是 Layout03.xml.zlib:

如图:

修改完成后,重新压缩为 zlib:

HDEF_Patch

system_IRQ

经过实验测试后的一些精细修改

从windows中查到的configdata并改为苹果的格式

外置Mic 和耳机输出改为combination ,并且将外置Mic 改为LineIn与前面layoutid里 设置匹配

Mic 路径设置 内置于外置分开最后为

9 ->34 ->18

8 ->35->24

其实主要是匹配设置,如果你在configdata里的Mic 设为Mic 而不是LineIn,你在layoutID为ExtMic添加设置即可。

直接提取windows的Codec 也可以,唯一要改的就是把二合一插孔相关的两个节点,改为Combination,并且外置Mic改为LineIn,最后的config为

AFGLowPowerState 为3

我只知道一些Linux下可氏耐以用的压缩库。

libzip,C语言,zip格式。

libbz2,C语言,bzip2格式。

libtar,C语言,tar格式。

不歼辩春知道这些库能不能灶知在Windows上用。

I. 安装devel库

yum install pam-devel libc-client libc-client-devel -y

如果使用了yum安装了libc-client,那么在以后编译参数--with-imap=/usr/local/php-imap中的路径应该删除,即--with-imap。

如果这样还不能解决,那么就需要手动编译imap2007f了!

II. 手动编译imap2007f

脚本取自 http://forum.directadmin.com/showthread.php?t=45434

在/usr/src目录下运行以下脚本,将会在/usr/local/php-imap目录下生成imap需要的库

#!/bin/sh

# Script for PHP-IMAP installation. 0.1b

# Written by Martynas Bendorius (smtalk)

CWD=`pwd`

OS=`uname`

#Is it a 64-bit OS?

B64=0

B64COUNT=`uname -m | grep -c 64`

if [ "$B64COUNT" -eq 1 ]then

B64=1

LD_LIBRARY_PATH=/lib64:/usr/lib64:/usr/local/lib64:/lib:/丛粗镇usr/lib:/usr/local/lib

export LD_LIBRARY_PATH

fi

if [ ! -e /usr/include/krb5.h ] &&[ -e /etc/redhat-release ]then

echo "Installing krb5-devel"

yum -y install krb5-devel

fi

VERSION=2007f

PROTOCOL=ftp

URL="${PROTOCOL}://ftp.cac.washington.edu/imap/imap-${VERSION}.tar.Z"

FILENAME=imap-${VERSION}

TARBALL=${FILENAME}.tar.Z

echo "Downloading ${TARBALL}..."

wget -O ${TARBALL} ${URL}

tar xzf ${TARBALL}

cd ${FILENAME}

echo "Installing ${FILENAME}..."

if [ ${OS} = "FreeBSD" ]then

if [ ${B64} -eq 0 ]then

make bsf

else

make bsf EXTRACFLAGS=-fPIC

fi

else

perl -pi -e 's#SSLDIR=/usr/local/渗粗ssl#SSLDIR=/etc/pki/tls#' src/osdep/unix/Makefile

perl -pi -e 's#SSLINCLUDE=\$\(SSLDIR\)/include#SSLINCLUDE=/usr/include/openssl#' src/osdep/unix/Makefile

perl -pi -e 's#SSLLIB=\$\(SSLDIR\)/lib#SSLLIB=/usr/lib/openssl#' src/osdep/unix/Makefile

if [ ${B64} -eq 0 ]then

make slx

else

make slx EXTRACFLAGS=-fPIC

fi

fi

echo "Copying files to /usr/local/凳迹php-imap"

mkdir -p /usr/local/php-imap/include

mkdir -p /usr/local/php-imap/lib

chmod -R 077 /usr/local/php-imap

cp -f c-client/*.h /usr/local/php-imap/include/

cp -f c-client/*.c /usr/local/php-imap/lib/

cp -f c-client/c-client.a /usr/local/php-imap/lib/libc-client.a

cd ..

rm -rf ${FILENAME}

if [ -d /usr/lib/x86_64-linux-gnu ] &&[ ! -d /usr/kerberos/lib ]then

mkdir -p /usr/kerberos

ln -s /usr/lib/x86_64-linux-gnu /usr/kerberos/lib

fi

exit 0

III. 开始编译

下面是编译PHP的参数,如果出现问题,请参考编译PHP5.6 和 PHP编译错误的解决办法。

./configure --prefix=/usr/local/php --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-pdo-mysql --with-mysqli --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --enable-ftp --with-imap=/usr/local/php-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm --with-fpm-user=www --with-fpm-group=www --disable-fileinfo

IV. 其他问题

在本次编译中,老高又遇到了几个怪事

set --enable-opcache=no

configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no

这个问题还是库文件的链接问题

解决:

echo /usr/local/lib >/etc/ld.so.conf.d/local.conf

ldconfig -v

让编译的PHP支持memcache


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12240221.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存