我成功地使用了这两种解决方案。然而,在开发一个语音合成系统(我参与了一个小型辅助功能项目)时,我注意到内核驱动似乎无法重采样,而 Alsa 可以完美地做到这一点。
因此,我们将编译来自 ALSA 的最新源代码,这应该也适用于所有其他发行版... 只有内核源代码会改变,因为 Mandrake 使用特定的补丁。
您可以从您的发行版或 https://linuxkernel.org.cn 获取您的内核源代码
这里可以找到 Mandrake 8.0 中使用的内核源代码
(链接似乎已损坏,我希望我制作了一个副本以备不时之需,但这就是该发行版的问题,镜像不会保留足够长的时间)
并从 ALSA 获取 tarball
ftp://ftp.alsa-project.org/pub/driver/alsa-driver-0.9.0beta10.tar.bz2
安装您的内核源代码,在我的情况下
rpm -ivh kernel-source-2.4.3-20mdk.i586.rpm
然后解压缩 alsa 驱动程序
bzip2 -d alsa-driver-0.9.0beta10.tar.bz2 && tar -xvf alsa-driver-0.9.0beta10.tar
编译它们并安装它们,并创建设备文件
cd alsa-driver-0.9.0beta10 && make install && ./snddevices
编辑 /etc/modules.conf
以设置所有内容,并向其中添加以下行
alias char-major-116 snd
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias snd-card-0 snd-card-intel8x0
警告:Christian Cardinale rf.libertysurf@elanidrac.naitsirhc 报告说他必须将 'snd-card-intel8x0' 更改为 'snd-intel8x0',这与我的 Debian 系统上的情况一致,我已经记不清了,但我认为这一个是 mandrake 名称,如果它不起作用,就使用另一个,好吗?
在编写此 HOWTO 之后的一段时间,我切换到了 Debian,并想给出一些关于它的说明:事情可能会根据您使用的版本略有变化,我使用 Debian sarge,目前是 testing 版本。
首先,您可以直接下载适当的预编译 alsa 模块:找出您正在使用的内核
uname -r
2.4.20-3-k7(对于 woody/stable 应该是 2.4.18-k7 或类似的)
apt-get install alsa-modules-2.4.20-3-k7
该声卡是 “intel8x0 (PCI: Intel i810/i820/i830/i840/MX440 集成音频)”
您还应该安装推荐的软件包 alsa-utils
apt-get install alsa-utils
现在,对照此 HOWTO 后面给出的文件检查文件 /etc/alsa/modutils/0.9。可能还需要以 root 身份运行 update-modules 以确保这些行进入 /etc/modules.conf,尽管软件包安装可能本身就完成了。
当我获得 usb adsl 调制解调器时,我被迫重新编译我的内核。(make-kpkg binary --initrd 是您有一天想要关注的事情,但这与主题无关)
我假设您至少完成了以下步骤
安装 alsa 源代码和两个有用的软件包:apt-get install alsa-source alsa-utils alsa-base debconf 会问您以下问题
Say Yes if you want to build ALSA driver with ISA PnP version.
If your computer doesn't support ISA PnP, you may say No.
Build ALSA driver with ISA PnP?
您可以安全地选择“否”
Say Yes if you want to build ALSA driver with debugging code.
Build ALSA driver with debugging code?
我们也不需要那个,所以选择“否”
You can choose cards to be built by selecting cards you want.
Each selection is a same name to a option of configure script '--with-cards'.
The following list are short descriptions of the options to show what they mean.
Select cards to be built.
选择声卡 intel8x0 (PCI: Intel i810/i820/i830/i840/MX440 集成音频) 并退出。
cd /usr/src
tar xzvf alsa-driver.tar.gz
cd modules/alsa-driver
./configure
make && make install
现在,对照以下文件检查文件 /etc/alsa/modutils/0.9。
我只记得将 cards_limit 从 4 更改为 1,以防止警告,对它的任何修改都应该在之后运行 update-modules 以重新生成 /etc/modules.conf
### DEBCONF MAGIC
# This file was automatically generated by alsa-base's debconf stuff
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-intel8x0
alias sound-slot-0 snd-card-0
options snd major=116 cards_limit=1 device_mode=0660 device_gid=29 device_uid=0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
如果您使用的是 2.4 或更高版本的内核,您可以使用 Audio Codec '97 (AC'97) 声卡驱动程序,因为集成声卡是 AC'97 兼容的。
您可以使用内核模块启用您的声卡,事实上,您应该能够直接使用该模块,甚至无需重新编译您的内核,因为大多数 GNU/Linux 发行版已经拥有它,只需键入
modprobe i810_audio
您应该在您的 syslog 中看到类似这样的内容
Intel 810 + AC97 Audio, version 0.21, 21:31:04 Apr 15 2002
i810: SiS 7012 found at IO 0xd800 and 0xdc00, IRQ 11
i810_audio: Audio Controller supports 2 channels.
ac97_codec: AC97 Audio codec, id: 0x414c:0x4710 (ALC200/200P)
i810_audio: AC'97 codec 0 supports AMAP, total channels = 2
或键入
dmesg | less 并滚动查看内核消息。
如果一切顺利,您可以将 i810_audio
添加到 /etc/modules
,以便它在每次启动时自动加载
echo "i810_audio" >> /etc/modules
或者您喜欢单内核(无模块),请按照上述步骤安装内核源代码,并将 Sound card support
和 Intel ICH (i8xx) audio support
设置为 Y,编译您的内核,安装,重启,现在您的集成声卡就可以工作了。
如果您不知道如何编译内核,请阅读 Kernel HOWTO,这很容易,您将获得针对您系统优化的内核,而且您还将了解一些关于使用源代码的知识(是的,您已经在利用它了 :-)