LinuxSir.cn,穿越时空的Linuxsir!

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

为什么发声这么难呀?

[复制链接]
发表于 2006-12-9 23:29:59 | 显示全部楼层 |阅读模式
在安装了 alsa-lib 和 alsa-utils 以及一些 multimedia lib 之后,LFS 仍然没有声音。使用 mplayer 等会提示没有 /dev/dsp 等设备。于原来的主系统进行比较(Fedora Core 6,当然原来的主系统也没有声音),可以看到原来的系统是有 /dev/dsp 和 /dev/audio 的。

查看主系统上的 lspci 输出:
# sed '/^\t/d;/^$/d' lspci.log
  1. 00:00.0 Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (rev 04)
  2. 00:02.0 VGA compatible controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 04) (prog-if 00 [VGA])
  3. 00:02.1 Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 04)
  4. [b]00:1b.0 Audio device: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller (rev 04)[/b]
  5. 00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 04) (prog-if 00 [Normal decode])
  6. 00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 04) (prog-if 00 [UHCI])
  7. 00:1d.1 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 (rev 04) (prog-if 00 [UHCI])
  8. 00:1d.2 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 (rev 04) (prog-if 00 [UHCI])
  9. 00:1d.3 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 04) (prog-if 00 [UHCI])
  10. 00:1d.7 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 04) (prog-if 20 [EHCI])
  11. 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev d4) (prog-if 01 [Subtractive decode])
  12. 00:1f.0 ISA bridge: Intel Corporation 82801FBM (ICH6M) LPC Interface Bridge (rev 04)
  13. 00:1f.2 IDE interface: Intel Corporation 82801FBM (ICH6M) SATA Controller (rev 04) (prog-if 80 [Master])
  14. 00:1f.3 SMBus: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller (rev 04)
  15. 01:0c.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
复制代码


当前系统的 lspci 输出:
# lspci
  1. 00:00.0 Host bridge: Intel Corp.: Unknown device 2590 (rev 04)
  2. 00:02.0 VGA compatible controller: Intel Corp.: Unknown device 2592 (rev 04)
  3. 00:02.1 Display controller: Intel Corp.: Unknown device 2792 (rev 04)
  4. [b]00:1b.0 Class 0403: Intel Corp.: Unknown device 2668 (rev 04)[/b]
  5. 00:1c.0 PCI bridge: Intel Corp.: Unknown device 2660 (rev 04)
  6. 00:1d.0 USB Controller: Intel Corp.: Unknown device 2658 (rev 04)
  7. 00:1d.1 USB Controller: Intel Corp.: Unknown device 2659 (rev 04)
  8. 00:1d.2 USB Controller: Intel Corp.: Unknown device 265a (rev 04)
  9. 00:1d.3 USB Controller: Intel Corp.: Unknown device 265b (rev 04)
  10. 00:1d.7 USB Controller: Intel Corp.: Unknown device 265c (rev 04)
  11. 00:1e.0 PCI bridge: Intel Corp. 82801BAM/CAM PCI Bridge (rev d4)
  12. 00:1f.0 ISA bridge: Intel Corp.: Unknown device 2641 (rev 04)
  13. 00:1f.2 IDE interface: Intel Corp.: Unknown device 2653 (rev 04)
  14. 00:1f.3 SMBus: Intel Corp.: Unknown device 266a (rev 04)
  15. 01:0c.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
复制代码


我开始怀疑是不是 udev 的规则写得不对。差不多把 udev 的资料都翻了一遍,udev 是差不多了解个大概了,声卡的问题还没有解决。考虑一下 sysfs 的知识,查看一下 /sys 的内容,因为硬件设备应该会把自己的信息导出到 /sys 下。

主系统:
# find /sys | grep 'dsp'
/sys/class/sound/dsp
/sys/class/sound/dsp/device
/sys/class/sound/dsp/dev
/sys/class/sound/dsp/uevent
/sys/class/sound/dsp/subsystem
/sys/class/sound/adsp
/sys/class/sound/adsp/device
/sys/class/sound/adsp/dev
/sys/class/sound/adsp/uevent
/sys/class/sound/adsp/subsystem
/sys/devices/pci0000:00/0000:00:1b.0/sound:dsp
/sys/devices/pci0000:00/0000:00:1b.0/sound:adsp

当前系统:
# find /sys | grep 'dsp'
没有输出。

另外,运行:
# alsaconf
which: no dialog in (/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin)
which: no whiptail in (/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin)
Error, dialog or whiptail not found.
alsaconf "Error, dialog or whiptail not found"
每次我运行了 alsaconf 后,所有的模块都不在了,必须重新加载。

但是查看 /proc/asound/cards:
# cat /proc/asound/cards
0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xffe38000 irq 169

而且还有:
# modinfo soundcore
  1. filename:       /lib/modules/2.6.18.1/kernel/sound/soundcore.ko
  2. alias:          char-major-14-*
  3. license:        GPL
  4. author:         Alan Cox
  5. description:    Core sound module
  6. srcversion:     69B73D502EF87CE567454E1
  7. depends:
  8. vermagic:       2.6.18.1 SMP mod_unload PENTIUMM REGPARM 4KSTACKS gcc-4.0
复制代码


这说明声卡驱动是有的,声卡应该已经被识别了呀。

google "No /dev/dsp",可以找到一些资料,说明是 OSS(Open Sound System) compatible 的问题,很多程序都需要使用 oss 的接口。于是安装 alsa-oss,但重启后仍然没有 /dev/dsp 和 /dev/audio。这是因为没有加载相应的 oss 内核模块:
# modprobe snd-mixer-oss
# modprobe snd-pcm-oss
# modprobe snd-seq-oss
不用重启,即可以看到 /dev/dsp 和 /dev/audio 了。

# find /sys | grep 'dsp'
/sys/module/snd_pcm_oss/parameters/dsp_map
/sys/module/snd_pcm_oss/parameters/adsp_map
/sys/class/sound/dsp
/sys/class/sound/dsp/device
/sys/class/sound/dsp/dev
/sys/class/sound/dsp/uevent
/sys/class/sound/dsp/subsystem
/sys/class/sound/adsp
/sys/class/sound/adsp/device
/sys/class/sound/adsp/dev
/sys/class/sound/adsp/uevent
/sys/class/sound/adsp/subsystem
/sys/devices/pci0000:00/0000:00:1b.0/sound:dsp
/sys/devices/pci0000:00/0000:00:1b.0/sound:adsp

对于非 OSS compatible,其设备为 /dev/snd/*。

但是仍然不能发声!但内核已经编译了 ALSA,从前面的 /proc/asound/cards 也可以看到驱动应该已经识别呀?

我开始考虑是不是驱动的问题。因为前面使用的是系统内建的驱动,这次使用 alsa-driver 看看。因为编译时提示必须使用没有增加 ALSA 支持的内核,所以又重新编译了内核,去除了 ALSA。然后启动到新的内核来编译 alsa-driver -- 这时发生了很奇怪的事 -- 扬声器竟然可以发出"嘟嘟"的蜂鸣声了!

但是当我编译好 alsa-driver,再次重启后,又没有任何声音了!而且似乎每次重启后音量设置就无效了。即使安装了 blfs-bootscripts 的 alsa 脚本!

alsa-driver 的 make install 提示了
cat WARNING
WARNING!!! The mixer channels for the ALSA driver are muted by default!!!
**************************************************************************
You would use some ALSA or OSS mixer to set the appropriate volume.

于是使用 alsamixer/aumix 来调整音量,但毫无用处。

我又参照 ALSA 官方网站的
Intel ICH southbridge HD-audio and modem
一文进行了编译,并设置 /etc/modprobe.conf 如下:
$ cat /etc/modprobe.conf
  1. alias eth0 8139too
  2. alias scsi_hostadapter ata_piix
  3. alias scsi_hostadapter1 ahci

  4. # ALSA portion
  5. alias char-major-116 snd
  6. alias snd-card-0 snd-hda-intel
  7. # module options should go here

  8. # OSS/Free portion
  9. alias char-major-14 soundcore
  10. alias sound-slot-0 snd-card-0

  11. # card #1
  12. alias sound-service-0-0 snd-mixer-oss
  13. alias sound-service-0-1 snd-seq-oss
  14. alias sound-service-0-3 snd-pcm-oss
  15. alias sound-service-0-8 snd-seq-oss
  16. alias sound-service-0-12 snd-pcm-oss

  17. # remove snd-hda-intel { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-hda-intel
复制代码


结果仍然无效。声卡就是不发声!

这究竟应该怎么解决呢?有点抓狂的感觉。:eek:
发表于 2006-12-11 12:17:23 | 显示全部楼层
哪里面有那么复杂啊,多半还是KERNEL的相应声音驱动没装对吧?

我最近升kernel 2.6.18时,也出现无声音的问题,最后还是对照原来版本的声音配置部分修改后正常的。
回复 支持 反对

使用道具 举报

发表于 2006-12-11 13:01:09 | 显示全部楼层
同意楼上..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-11 13:41:05 | 显示全部楼层
Post by linux001
哪里面有那么复杂啊,多半还是KERNEL的相应声音驱动没装对吧?

我最近升kernel 2.6.18时,也出现无声音的问题,最后还是对照原来版本的声音配置部分修改后正常的。


你能稍微详细一点说说大致的过程是怎样的吗?你是怎么判断出是驱动不对的。我的机器是 TCL K40,从各种输出来看似乎驱动应该是对的呀?而且一开始的内核和后来编译 alsa-driver 时,我开始使用的 ./configure,没有加参数,那么驱动应该都加入了呀,难道也会识别错误?

  1. # cat /proc/asound/cards
  2. 0 [Intel          ]: HDA-Intel - HDA Intel
  3.                       HDA Intel at 0xffe38000 irq 169

  4. # cat /proc/asound/version
  5. Advanced Linux Sound Architecture Driver Version 1.0.14rc1.
  6. Compiled on Dec 10 2006 for kernel 2.6.18.1 (SMP).

  7. # modinfo soundcore
  8. filename:       /lib/modules/2.6.18.1/kernel/sound/soundcore.ko
  9. alias:          char-major-14-*
  10. license:        GPL
  11. author:         Alan Cox
  12. description:    Core sound module
  13. srcversion:     69B73D502EF87CE567454E1
  14. depends:
  15. vermagic:       2.6.18.1 SMP mod_unload PENTIUMM REGPARM 4KSTACKS gcc-4.0

  16. # lspci -s 0:1b -vn
  17. 00:1b.0 Class 0403: 8086:2668 (rev 04)
  18.     Subsystem: 1584:9051
  19.     Flags: bus master, fast devsel, latency 0, IRQ 169
  20.     Memory at ffe38000 (64-bit, non-prefetchable) [size=16K]
  21.     Capabilities: [50] Power Management version 2
  22.     Capabilities: [60] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable-
  23.     Capabilities: [70] #10 [0091]
复制代码


最开始的 2.6.16.27 内核也是没有声音的。
回复 支持 反对

使用道具 举报

发表于 2006-12-12 09:29:50 | 显示全部楼层
我是按alsa管网做的,一弄就有声音
内核里没有编译我的声卡。

http://www.alsa-project.org/alsa-doc/
回复 支持 反对

使用道具 举报

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

本版积分规则

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