LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6628|回复: 10

SB600 AC97 CODEC 声卡驱动解决方案

[复制链接]
发表于 2007-5-19 17:20:15 | 显示全部楼层 |阅读模式
花了三天时间,终于把主板集成声卡给装好了,不敢独享,给需要的朋友们。
解决的方法还是很简单,只不过中间走了很多的弯路,还进了一个死胡同。
Part I  有一些分析过程,其实也是很简单的。如果你只是想知道应该怎么做,可以直接跳到ParII
Part II 说明了修改步骤。

Part I
在实验室的时候,电脑的集成声卡很差,有爆音,还有杂声。所以就在TAOBAO上淘了一块aureal的au8820。这块声卡,很好找,Debian装好的时候,自带的ALSA就能找到。可是主板集成的声卡,死活也找不到。

我用lspci明明能看到这个device
#lspci
00:00.0 Host bridge: ATI Technologies Inc Unknown device 7910
00:01.0 PCI bridge: ATI Technologies Inc Unknown device 7912
00:07.0 PCI bridge: ATI Technologies Inc Unknown device 7917
00:12.0 IDE interface: ATI Technologies Inc SB600 Non-Raid-5 SATA
00:13.0 USB Controller: ATI Technologies Inc SB600 USB (OHCI0)
00:13.1 USB Controller: ATI Technologies Inc SB600 USB (OHCI1)
00:13.2 USB Controller: ATI Technologies Inc SB600 USB (OHCI2)
00:13.3 USB Controller: ATI Technologies Inc SB600 USB (OHCI3)
00:13.4 USB Controller: ATI Technologies Inc SB600 USB (OHCI4)
00:13.5 USB Controller: ATI Technologies Inc SB600 USB Controller (EHCI)
00:14.0 SMBus: ATI Technologies Inc SB600 SMBus (rev 13)
00:14.1 IDE interface: ATI Technologies Inc SB600 IDE
00:14.3 ISA bridge: ATI Technologies Inc SB600 PCI to LPC Bridge
00:14.4 PCI bridge: ATI Technologies Inc SB600 PCI to PCI Bridge
00:14.5 Multimedia audio controller: ATI Technologies Inc SB600 AC97 Audio
00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
01:05.0 VGA compatible controller: ATI Technologies Inc Unknown device 791e
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E PCI Express Fast Ethernet controller (rev 01)
03:06.0 Multimedia audio controller: Aureal Semiconductor Vortex 1 (rev 02)

我用alsaconf,可以找到au8820,可是找不到集成的声卡。所以,先看一下alsaconf的机制是什么样的。

所有加载的pci driver都会在/lib/modules/2.6.18-4-amd64/modules.pcimap这个文件中记录。(这里的2.6.18-4-amd64是和系统相关的)
如下:
more /lib/modules/2.6.18-4-amd64/modules.pcimap
# pci module         vendor     device     subvendor subdevice class      class_mask driver_data
BusLogic             0x0000104b 0x00001040 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
BusLogic             0x0000104b 0x00000140 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
BusLogic             0x0000104b 0x00008130 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
其中就包括了,这个driver能作用的device的vendor和device。
alsaconf就是根据这两个参数来找的。
可以看到,对于au8820在modules.pcimap里有一行

#cat /lib/modules/2.6.18-4-amd64/modules.pcimap | grep -i au
snd-au8820           0x000012eb 0x00000001 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0

#lspci -nn|grep -i
可以看到
00:14.5 Multimedia audio controller [0401]: ATI Technologies Inc SB600 AC97 Audio [1002:4382]
03:06.0 Multimedia audio controller [0401]: Aureal Semiconductor Vortex 1 [12eb:0001] (rev 02)
vendor和device都是相同的。也就是说,这个device可以用snd-au8820这个driver来驱动

集成声卡的[1002:4382],在/lib/modules/2.6.18-4-amd64/modules.pcimap这个文件里找不到相应的driver.

这下好了,到www.alsa-project.org/[url]下了最新了driver.
alsa-driver-1.0.14rc4.tar.bz2
解压后进目录
用grep -R 4382 *
还是找不到对这个device的支持。于是我想到,应该只要把这个device的加到某个驱动里,就可能用了。事实证明,这是对的,最后,我也是这样做的。
不过,就是这个时候,犯了一个大错,就多花了一天。

因为网上找到的SB600都说是用snd-hda-intel这个驱动。所以,改动了snd_hda_intel.c这个文件。
编译后加载上去。alsaconf真找到了。可是还是没有声音出来。又上网找了半天,都没有找到想要的结果。看来只能自己解决了。

.configure的时候加上--with-debug=detect
重新编译,加载。加载的时候显示出了一个错误:
no codec found
往回找,原来是读一个叫STATESTS的register的时候,读的数据是0x0。
加了几行代码,读出0x00~0xff的所有的register,并不是所有的都是0x00,看来读的过程还是没有问题,只是数据有问题。我也没有datasheet,也没有办法进一步调试了。

在下进了死胡同了,在网上东撞西撞的。无意中发现hda-intel是要SB600 AZALIA的驱动。而我的,是AC97。难道是开始就选错了?晕死了,重新来吧。(AZALIA是AC97的升级)

发现ATIIXP是用的AC97的CODEC。
修改atiixp.c后,编译,加载。果然成了。

Part II
下面的操作都要在root下完成
0.
这个修改是否支持你的主板?如果你是onda a69g,那一定可以用。
#lspci -nn
如果你的集成声卡也是[1002:4382],那么就可以用。

1.
上[url]www.alsa-project.org
下载最新的driver,utilities
ftp://ftp.alsa-project.org/pub/d ... r-1.0.14rc4.tar.bz2
ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.14rc4.tar.bz2
解压
#tar jxf alsa-driver-1.0.14rc4.tar.bz2
#tar jxf alsa-utils-1.0.14rc4.tar.bz2

2.装备utilities
#cd alsa-utils-1.0.14rc4
#./configure && make && make install

3.修改atiixp.c
#cd ../alsa-driver-1.0.14rc4
#vi alsa-kernel/pci/atiixp.c
在290行左右有一个结构
static struct pci_device_id snd_atiixp_ids[] = {
        { 0x1002, 0x4341, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */
        { 0x1002, 0x4361, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB300 */
        { 0x1002, 0x4370, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB400 */
        { 0, }
};
加一行,成如下
static struct pci_device_id snd_atiixp_ids[] = {
        { 0x1002, 0x4341, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */
        { 0x1002, 0x4361, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB300 */
        { 0x1002, 0x4370, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB400 */
        { 0x1002, 0x4382, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB600 */
        { 0, }
};
保存退出(用:wq)

3.
编译,安装
#./configure && make && make install

4.
#modprobe snd-atiixp

5.
#alsaconf

6.
#alsamixer
调节声音(注意的是,声卡是静音的,要打开)

7.
#alsactl store

完成
发表于 2007-5-27 19:01:31 | 显示全部楼层
你好,我在编译是出错,
checking for libasound headers version >= 1.0.12... not present.
configure: error: Sufficiently new version of libasound not found.

可是我在/usr/lib/里有libasound.so.2.0.0,
是不是版本太高了?
谢谢了!
回复 支持 反对

使用道具 举报

发表于 2007-5-30 18:07:38 | 显示全部楼层
老大,真是谢天谢地,不如谢你呀 ,终于生活在有生的世界里了,我那个高兴亚!
回复 支持 反对

使用道具 举报

发表于 2007-6-2 20:51:16 | 显示全部楼层
楼上,我也遇到libasound版本为2所以不能编译,你怎么解决的呢?谢谢~!
回复 支持 反对

使用道具 举报

发表于 2007-6-3 22:43:31 | 显示全部楼层
楼上的,先执行这步:sudo apt-get install build-essential ncurses-dev linux-headers-`uname -r`

然后编译!我的就是这做得,不过,alsa-utils-1.0.14rc4这个没编译通过,可是声音都有了!
祝你好运!
回复 支持 反对

使用道具 举报

发表于 2007-6-5 14:42:22 | 显示全部楼层
ATI 690G芯片组的也可以这么驱动,
真不错。
我是使用的alsa1.0.14的驱动
回复 支持 反对

使用道具 举报

发表于 2008-4-27 17:44:03 | 显示全部楼层
我编译util 的时候 出现了
configure: error: No TLV support code in alsa-lib

请问如何解决?
回复 支持 反对

使用道具 举报

发表于 2008-4-28 14:54:25 | 显示全部楼层

搂住好厉害呀

我的声卡也不好用,ati的集成声卡,现在在公司,回家试一试
回复 支持 反对

使用道具 举报

发表于 2008-5-12 23:27:38 | 显示全部楼层

多谢

我的也是a69g SB600 AC97 CODEC 声卡,按照你的方法搞定了
回复 支持 反对

使用道具 举报

发表于 2009-1-10 20:54:33 | 显示全部楼层
我的ONDA A69G仍然无法成功。在./configure时,出现以下错误:
checking for libasound headers version >= 1.0.12... not present.
configure: error: Sufficiently new version of libasound not found.
wx@wx-desktop:~/alsa-utils-1.0.14rc4$ make
make: *** 没有指明目标并且找不到 makefile。 停止。
wx@wx-desktop:~/alsa-utils-1.0.14rc4$ make install
make: *** 没有规则可以创建目标“install”。 停止。
按照goodluck的办法,先执行这步:sudo apt-get install build-essential ncurses-dev linux-headers-`uname -r`仍然无法通过编译。我检查了一下,我的的集成声卡也是[1002:4382]。
继续往下做是一路错误,最后重启还是没声音  
另外5,6,7步的命令(5 #alsaconf 6.#alsamixer 7. #alsactl store)系统提示找不到命令。(bash: alsaconf:找不到命令)
救命呀
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表