
Ubuntu日本語フォーラム

ログインしていません。
CMI8787-HG2PCIが認識されません
はじめまして、VistaとUbuntu 10.4をデュアルブートで使っています。
玄人志向のCMI8787-HG2PCIを差したんですが、音がなりません。
https://wiki.ubuntulinux.jp/UbuntuStudioTips/Device/SoundDevice
を参考にあれこれ試しているんですが
lspciコマンド実行すると、
05:01.0 Multimedia audio controller: C-Media Electronics Inc CMI8788 [Oxygen HD Audio]
と出ており、
対応するカーネルモジュールも
snd-oxygen.koがあるということまではわかりました。
modinfo snd-oxygenでも
filename: /lib/modules/2.6.32-24-generic/updates/alsa/snd-oxygen.ko license: GPL v2 description: C-Media CMI8788 driver author: Clemens Ladisch <[email protected]> srcversion: 212C16FB5F24C590965702E alias: pci:v000013F6d00008788sv00007284sd00009781bc*sc*i* alias: pci:v000013F6d00008788sv00007284sd00009761bc*sc*i* alias: pci:v000013F6d00008788sv0000415Asd00005431bc*sc*i* alias: pci:v000013F6d00008788sv00001A58sd00000910bc*sc*i* alias: pci:v000013F6d00008788sv0000147Asd0000A017bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00008788bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00000010bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00000001bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000219bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000218bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000216bc*sc*i* depends: snd-oxygen-lib,snd vermagic: 2.6.32-24-generic SMP mod_unload modversions 586 parm: index:card index (array of int) parm: id:ID string (array of charp) parm: enable:enable card (array of bool)
と情報が出ます。
しかし、その後のカーネルモジュールを有効化の仕方がわかりません。
http://www.alsa-project.org/main/index.php/Matrix:Module-oxygen
を適当に見つつ
/etc/modutils/に
# ALSA portion
alias char-major-116 snd
alias snd-card-0 snd-oxygen
# module options should go here
# OSS/Free portion
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
# card #1
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張り付けて、sudo modprobe snd-oxygenコマンドを実行。
とくにエラー、ウォーニングメッセージもなにもでず。
cat /proc/asound/cardsで見ても認識されないままです。
どうすれば、サウンドデバイスとして利用可能にすることができますでしょうか?ご教授願いませんか?
オフライン
sound(alsa)関連の設定は、
/etc/modprobe.d/alsa-base.conf
にまとめておくのがよいかと思います。
その前に、追加設定した内容を一度コメントアウトして、システムを再起動し、
lspci -v -s `lspci | grep -i audio | sed -e 's/\s.*//'` lsmod
の結果を投稿してみて下さい。
本当に設定無しではカーネルモジュールがロードされないのかの確認のためです。
カーネルモジュールがロードされない場合は、手動でロードしてみてなにかエラーがでるか確認する必要があるかと思います。
オフライン
新しいメモ 5
hmatsueさん、返信ありがとうございます。
上記では
/etc/modutils/と書いてしまいましたが、/etc/modules.conf の間違いでした。(/etc/modutils/ファイルはありませんでした))
とりあえず、/etc/modules.confに張り付けた内容をコメントアウトし、再起動しました。
そして、lspci -v -s `lspci | grep -i audio | sed -e 's/\s.*//'`を実行結果ですが、lspciコマンドのヘルプメッセージが出力されてしまいました。
すいません、報告漏れですが、当方オンボードサウンドを特にBIOSでdisableにしていません(オンボードサウンドをdisableにした場合も音がなりません)。
ですので、コマンドを分割して実行させました。
lspci | grep -i audio | sed -e 's/\s.*//
00:1b.0 05:01.0
鳴らしたいサウンドカードの方のバスとスロットを指定して、
lspci -v -s 05:01.0
05:01.0 Multimedia audio controller: C-Media Electronics Inc CMI8788 [Oxygen HD Audio]
Subsystem: C-Media Electronics Inc Device ffff
Flags: bus master, medium devsel, latency 32, IRQ 9
I/O ports at 1000 [size=256]
Capabilities: <access denied>おそらく、hmatsueさんの指定したコマンドの結果情報は上記で確認できたと思いますが、いかがでしょうか?
lsmodコマンドの結果も以下になります。
Module Size Used by binfmt_misc 6587 1 hid_cypress 1628 0 snd_hda_codec_idt 53916 1 snd_hda_intel 20799 2 snd_hda_codec 87096 2 snd_hda_codec_idt,snd_hda_intel snd_hwdep 5668 1 snd_hda_codec snd_pcm_oss 34603 0 snd_mixer_oss 13929 1 snd_pcm_oss snd_pcm 71678 3 snd_hda_intel,snd_hda_codec,snd_pcm_oss snd_seq_dummy 1498 0 snd_seq_oss 27626 0 snd_seq_midi 4621 0 snd_rawmidi 19141 1 snd_seq_midi snd_seq_midi_event 6003 2 snd_seq_oss,snd_seq_midi snd_seq 48042 6 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_seq_midi_event snd_timer 18710 2 snd_pcm,snd_seq snd_seq_device 6052 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq ppdev 5259 0 snd 56687 18 snd_hda_codec_idt,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq,snd_timer,snd_seq_device fbcon 35102 71 tileblit 2031 1 fbcon font 7557 1 fbcon bitblit 4707 1 fbcon softcursor 1189 1 bitblit usbhid 36110 0 parport_pc 25962 1 hid 67032 2 hid_cypress,usbhid psmouse 63245 0 soundcore 6620 1 snd serio_raw 3978 0 nvidia 9961216 38 vga16fb 11385 1 vgastate 8961 1 vga16fb intel_agp 24119 0 snd_page_alloc 7140 2 snd_hda_intel,snd_pcm agpgart 31724 2 nvidia,intel_agp lp 7028 0 parport 32635 3 ppdev,parport_pc,lp usb_storage 39425 0 e100 28211 0 mii 4381 1 e100
素人考えですが、snd-oxygenモジュールはロードされていないように見えます。
手動で、sudo modprobe snd-oxygenを実行したあと(特にメッセージなし)、
lsmod | grep snd_oxygenで見ると
snd_oxygen 6193 0 snd_oxygen_lib 29346 1 snd_oxygen snd_mpu401_uart 5873 1 snd_oxygen_lib snd_pcm 71678 4 snd_oxygen_lib,snd_hda_intel,snd_hda_codec,snd_pcm_oss snd 56687 21 snd_oxygen,snd_oxygen_lib,snd_mpu401_uart,snd_hda_codec_idt,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
と表示はされるようにはなりました。
オフライン
hasegawa-34 による投稿:
そして、lspci -v -s `lspci | grep -i audio | sed -e 's/\s.*//'`を実行結果ですが、lspciコマンドのヘルプメッセージが出力されてしまいました。
すいません、報告漏れですが、当方オンボードサウンドを特にBIOSでdisableにしていません(オンボードサウンドをdisableにした場合も音がなりません)。
ですので、コマンドを分割して実行させました。
lspci | grep -i audio | sed -e 's/\s.*//コード:
00:1b.0 05:01.0鳴らしたいサウンドカードの方のバスとスロットを指定して、
lspci -v -s 05:01.0コード:
05:01.0 Multimedia audio controller: C-Media Electronics Inc CMI8788 [Oxygen HD Audio] Subsystem: C-Media Electronics Inc Device ffff Flags: bus master, medium devsel, latency 32, IRQ 9 I/O ports at 1000 [size=256] Capabilities: <access denied>おそらく、hmatsueさんの指定したコマンドの結果情報は上記で確認できたと思いますが、いかがでしょうか?
はい。確認したかったのは上記の出力です。
やはりというか、kernel moduleが適切にロードされていないのですね。
そして、hasegawa-34さんのご理解のとおり、この状態では必要なkernel moduleがロードされていないことがlsmodの結果からも判ります。
hasegawa-34 による投稿:
手動で、sudo modprobe snd-oxygenを実行したあと(特にメッセージなし)、
lsmod | grep snd_oxygenで見るとコード:
snd_oxygen 6193 0 snd_oxygen_lib 29346 1 snd_oxygen snd_mpu401_uart 5873 1 snd_oxygen_lib snd_pcm 71678 4 snd_oxygen_lib,snd_hda_intel,snd_hda_codec,snd_pcm_oss snd 56687 21 snd_oxygen,snd_oxygen_lib,snd_mpu401_uart,snd_hda_codec_idt,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq,snd_timer,snd_seq_deviceと表示はされるようにはなりました。
kernel module自体のロードではエラーは発生していないのですが、本来、何も設定しなくてもロードされるはずのものがロードされていないことを考えると、kernel moduleをロードしても実際のハードウェアと結びついていないような気がします。
申し訳ありませんが、正直なところ、なぜ適切なkernel moduleがロードされないのか判りません。
uname -rを実行してカーネルの種類を確認し、それに合った、linux-backports-modules-alsa-lucid-*をインストールして再起動してみると状況変わりますでしょうか。
また、オンボードのサウンドデバイスは正常に認識されて稼働しているという認識でよろしいでしょうか。
上記で症状に改善が見られない場合、オンボードのサウンドデバイスが認識されていないのであれば、BIOSで止めてしまって、下記の1を0に読み替えて下さい。認識されていれば、そのままで試してみて下さい(gksudo geditは好みのエディタに置き換えて読んで下さい)。
gksudo gedit /etc/modprobe.d/alsa-base.conf
一番上に以下を追記。
alias snd-card-1 snd-oxygen alias sound-slot-1 snd-oxygen options snd-oxygen index=1
で再起動すると状況に変化ありますでしょうか。
オフライン
hmatsueさん、度々の助言ありがとうございます。
uname -rコマンドでは
2.6.32-24-generic
と出ましたので、
sudo apt-get install linux-backports-modules-alsa-lucid-genericを実行してインストールしました。
その後、再起動しましたが、変化はありませんでした。
オンボードのサウンドデバイスはcat /proc/asound/cardsで
0 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0x93100000 irq 28上記のように表示され、サウンドの設定からも確認できます。Rhythmboxでも音楽を聞くことはできます。
BIOSの設定はそのままで
gksudo gedit /etc/modprobe.d/alsa-base.conf実行し、
alias snd-card-1 snd-oxygen
alias sound-slot-1 snd-oxygen
options snd-oxygen index=1
# autoloader aliases
install sound-slot-0 /sbin/modprobe snd-card-0
install sound-slot-1 /sbin/modprobe snd-card-1
install sound-slot-2 /sbin/modprobe snd-card-2
install sound-slot-3 /sbin/modprobe snd-card-3
install sound-slot-4 /sbin/modprobe snd-card-4
install sound-slot-5 /sbin/modprobe snd-card-5
install sound-slot-6 /sbin/modprobe snd-card-6
install sound-slot-7 /sbin/modprobe snd-card-7
# Cause optional modules to be loaded above generic modules
install snd /sbin/modprobe --ignore-install snd $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-ioctl32 ; /sbin/modprobe --quiet --use-blacklist snd-seq ; }
#
# Workaround at bug #499695 (reverted in Ubuntu see LP #319505)
install snd-pcm /sbin/modprobe --ignore-install snd-pcm $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-pcm-oss ; : ; }
install snd-mixer /sbin/modprobe --ignore-install snd-mixer $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-mixer-oss ; : ; }
install snd-seq /sbin/modprobe --ignore-install snd-seq $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; /sbin/modprobe --quiet --use-blacklist snd-seq-oss ; : ; }
#
install snd-rawmidi /sbin/modprobe --ignore-install snd-rawmidi $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; : ; }
# Cause optional modules to be loaded above sound card driver modules
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-emu10k1-synth ; }
install snd-via82xx /sbin/modprobe --ignore-install snd-via82xx $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq ; }
# Load saa7134-alsa instead of saa7134 (which gets dragged in by it anyway)
install saa7134 /sbin/modprobe --ignore-install saa7134 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist saa7134-alsa ; : ; }
# Prevent abnormal drivers from grabbing index 0
options bt87x index=-2
options cx88_alsa index=-2
options saa7134-alsa index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2
options snd-usb-audio index=-2
options snd-usb-us122l index=-2
options snd-usb-usx2y index=-2
options snd-usb-caiaq index=-2
# Ubuntu #62691, enable MPU for snd-cmipci
options snd-cmipci mpu_port=0x330 fm_port=0x388
# Keep snd-pcsp from being loaded as first soundcard
options snd-pcsp index=-2一番上にhmatsueさんの指定されたコードを埋め込んで、再起動しました。
結果としては、心苦しい限りですが、状況は変わらずです・・・
オフライン
だめでしたか。
Subsystem: C-Media Electronics Inc Device ffff
ここの部分をなんとかしないとちゃんとロードされないのかも知れませんね。。
申し訳ありませんが、いまのところ、ちょっとアイデアにつまってしまっています。
各位
なにか情報お持ちの方いらっしゃれば、ご参加下さい。
オフライン
すみません。念の為、
lspci -nn -s 05:01.0
の結果を投稿してみていただけますか。
オフライン
hmatsueさん、いろいろ尽力していただき感謝しています。
相性問題(既知問題)?なのかもしれないので、もうしょうがないかな・・・という気はしています。
lspci -nn -s 05:01.0の結果ですが、以下のとおりになっています。
05:01.0 Multimedia audio controller [0401]: C-Media Electronics Inc CMI8788 [Oxygen HD Audio] [13f6:8788]
ついでですが、lspci -vv 05:01.0も実行してみました。それはこのとおりです。
05:01.0 Multimedia audio controller: C-Media Electronics Inc CMI8788 [Oxygen HD Audio]
Subsystem: C-Media Electronics Inc Device ffff
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 32 (500ns min, 6000ns max)
Interrupt: pin A routed to IRQ 9
Region 0: I/O ports at 1000 [size=256]
Capabilities: <access denied>オフライン
ごめんなさい。やっぱり判らないです。。
ダメ元で、最後に、
sudo modprobe snd-virtuoso
を試してみていただけますか。それがダメなら、
sudo modprobe snd-hifier
で。
両方ダメだったら、自分の知識ではちょっとお手上げっぽいです。。
オフライン
hmatsueさん、お疲れ様です。私も気になって、ここ数日いろいろ調べてました。
「man modprobe.conf」、「man /etc/modules」でマニュアルを参照すると、これまでの/etc/modprobe.d/alsa-base.confにaliasとoptionsを追記する方法だと、モジュールのロードはカーネルの自動ロード任せになっています。そこで、/etc/modulesに追記し、ブート時にロードするカーネルモジュールに、snd-oxygenを登録してみたいかなと思います。私の環境だと、カードなしでもモジュールがロードできています。
以下をお願いできますか?
0. これまでの変更をクリア
1. 端末で以下を実行
$ sudo gedit /etc/modules
2. geditが開くので、一番下に以下の一行を追記
snd-oxygen
3. 保存して再起動
4. 起動後、以下を実行した結果を教えて下さい
(カーネルモジュールが依存関係も含めてロードされているかどうか)
$ lsmod | grep snd
(ALSAがサウンドデバイスを認識しているかどうか)
$ cat /proc/asound/cards
(PulseAudioがSinkとしてサウンドカードを認識しているかどうか)
$ pacmd list-sinks
5. 適当に音を鳴らしてみて下さい
またこれとは別に、CMI8787-HG2PCIのID情報を調べてmodinfoの出力と照らし合せてみたいかなと思います。以下を教えて下さい。
$ lspci -vvns 05:01.0
オフライン
hmatsueさん
本当にいろいろ考えていただいてありがとうございます。
sudo modprobe snd-virtuoso
sudo modprobe snd-hifier
の二つのコマンドですが、残念ながらうまくいきませんでした。
それでも、親身にアドバイスしていただいて感謝しています。
オフライン
Mocchiさん
返信ありがとうございます。
/etc/modprobe.d/alsa-base.conf
の変更を元に戻し、
/etc/modulesの一番最後にsnd-oxygenを追加してみました。
再起動して、lsmod | grep sndコマンド結果は以下のとおりです。
snd_oxygen 6193 0 snd_oxygen_lib 29346 1 snd_oxygen snd_mpu401_uart 5873 1 snd_oxygen_lib snd_hda_codec_idt 53916 1 snd_hda_intel 20799 2 snd_hda_codec 87096 2 snd_hda_codec_idt,snd_hda_intel snd_hwdep 5668 1 snd_hda_codec snd_pcm_oss 34603 0 snd_mixer_oss 13929 1 snd_pcm_oss snd_pcm 71678 4 snd_oxygen_lib,snd_hda_intel,snd_hda_codec,snd_pcm_oss snd_seq_dummy 1498 0 snd_seq_oss 27626 0 snd_seq_midi 4621 0 snd_rawmidi 19141 2 snd_mpu401_uart,snd_seq_midi snd_seq_midi_event 6003 2 snd_seq_oss,snd_seq_midi snd_seq 48042 6 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_seq_midi_event snd_timer 18710 2 snd_pcm,snd_seq snd_seq_device 6052 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq snd 56687 21 snd_oxygen,snd_oxygen_lib,snd_mpu401_uart,snd_hda_codec_idt,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq,snd_timer,snd_seq_device soundcore 6620 1 snd snd_page_alloc 7140 2 snd_hda_intel,snd_pcm
起動するだけでsnd_oxygenはロードはされるようになったようです。
ただ、cat /proc/asound/cardsの結果としては
0 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0x93100000 irq 28と、オンボードサウンドデバイスしか表示されませんでした。
pacmd list-sinksコマンド結果は以下のとおりです。
Welcome to PulseAudio! Use "help" for usage information.
>>> 1 sink(s) available.
* index: 0
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
driver: <module-alsa-card.c>
flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY
state: SUSPENDED
suspend cause: IDLE
priority: 9959
volume: 0: 21% 1: 21%
0: -40.65 dB 1: -40.65 dB
balance 0.00
base volume: 100%
0.00 dB
volume steps: 65537
muted: no
current latency: 0.00 ms
max request: 0 KiB
max rewind: 0 KiB
monitor source: 0
sample spec: s16le 2ch 44100Hz
channel map: front-left,front-right
Stereo
used by: 0
linked by: 0
configured latency: 0.00 ms; range is 0.50 .. 371.52 ms
card: 0 <alsa_card.pci-0000_00_1b.0>
module: 4
properties:
alsa.resolution_bits = "16"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "STAC92xx Analog"
alsa.id = "STAC92xx Analog"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "0"
alsa.card = "0"
alsa.card_name = "HDA Intel"
alsa.long_card_name = "HDA Intel at 0x93100000 irq 28"
alsa.driver_name = "snd_hda_intel"
device.bus_path = "pci-0000:00:1b.0"
sysfs.path = "/devices/pci0000:00/0000:00:1b.0/sound/card0"
device.bus = "pci"
device.vendor.id = "8086"
device.vendor.name = "Intel Corporation"
device.product.id = "27d8"
device.product.name = "N10/ICH 7 Family High Definition Audio Controller"
device.form_factor = "internal"
device.string = "front:0"
device.buffering.buffer_size = "65536"
device.buffering.fragment_size = "32768"
device.access_mode = "mmap+timer"
device.profile.name = "analog-stereo"
device.profile.description = "Analog Stereo"
device.description = "Internal Audio Analog Stereo"
alsa.mixer_name = "SigmaTel STAC9221 A1"
alsa.components = "HDA:83847680,107b6051,00103601"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-pci"
ports:
analog-output: Analog Output (priority 9900)
analog-output-speaker: Analog Speakers (priority 10000)
active port: <analog-output-speaker>音はオンボードサウンドデバイスでは鳴っていることは確認できました。
lspci -vvns 05:01.0の結果は以下になります。
05:01.0 0401: 13f6:8788
Subsystem: 13f6:ffff
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 32 (500ns min, 6000ns max)
Interrupt: pin A routed to IRQ 9
Region 0: I/O ports at 1000 [size=256]
Capabilities: <access denied>オフライン
> hasegawa-34さん
同じIDのデバイス用のカーネルモジュールだったので、もしやと思ったのですが、やはりダメでしたか。。
申し訳ありませんが、今のことろアイデアがもう無くなってしまいました。。
>Mocchiさん
ご参加ありがとうございます。 :)
ちょっと手詰まってしまいました。。
何か案、ありますでしょうか。
オフライン
hmatsue による投稿:
何か案、ありますでしょうか。
今回使いたいサウンドデバイス「CMI8787-HG2PCI」のIDはそれぞれ
ベンダー: 13F6
デバイス: 8788
サブベンダー: 13F6
サブデバイス: FFFF
となっています。#1のmoninfoの出力を見ると、サブデバイスIDが等しいものは見つかりません。そのため、このカーネルモジュールはこのデバイスには対応していないと考えられます。
ということになると方法は、ALSAのソースコードを少々手直しして、このデバイスに対応させてしまうということになります。すでに、ソースの修正点は私の方で目処を付けてあります。
しかしこうなると、ALSAを自分でソースからインストールすることとなりますので、カーネルイメージのアップグレードが入る度にカーネルモジュールが上書きされてしまい、その都度自分でインストール作業をする必要があります。dpkg-divertという方法もありますが、ALSAは非常にたくさんのファイルをインストールするため現実的ではありませんし、DKMS (Dynamic Kernel Module Support) はあいにく私はALSAでの成功例を知りません。
以上のようなデメリットを考慮したうえでご返事下さい。なお、MarvericのALSAのソースも見てみましたが、やはり今回のサウンドデバイスには対応していませんでした。
オフライン
Mocchiさん
今回の現象は、自端末だけの独自現象というよりは
元からsnd-oxygen.koは「CMI8787-HG2PCI」に対応していなかったということでしょうか?
このままUbuntuでこのサウンドボードが使えないのは勿体無いので、
対応案があるということであらば、試してみたいと思います。
是非、教えていただけないでしょうか?
オフライン
hasegawa-34 による投稿:
今回の現象は、自端末だけの独自現象というよりは、元からsnd-oxygen.koは「CMI8787-HG2PCI」に対応していなかったということでしょうか?
そうです。
さて、必要な操作を順番に示すと、以下となります。
0. これまでの変更点のクリア
1. 「build-essential」パッケージをインストール
2. 「alsa-source」パッケージをインストール
3. ソースの解凍
4. ソースコードの修正
5. ビルド
6. カーネルモジュールのチェック
7. インストール
8. デバイスのマッピングファイルの更新
9. 再起動
まずは1.から3.まで。
sudo apt-get install build-essential sudo apt-get install alsa-source tar xjvf /usr/src/alsa-driver.tar.bz2 -C ~/
これで、ソースがホームの「module」ディレクトリに展開されています。
ソースコードは、「modules/alsa-driver/alsa-kernel/pci/oxygen/oxygen.c」を修正します。
gedit ~/modules/alsa-driver/alsa-kernel/pci/oxygen/oxygen.c
ちょっと長いのですが、以下に68行目から89行目を引用します。
enum {
MODEL_CMEDIA_REF, /* C-Media's reference design */
MODEL_MERIDIAN, /* AuzenTech X-Meridian */
MODEL_CLARO, /* HT-Omega Claro */
MODEL_CLARO_HALO, /* HT-Omega Claro halo */
};
static pci_device_id oxygen_ids[] __devinitdata = {
{ OXYGEN_PCI_SUBID(0x10b0, 0x0216), .driver_data = MODEL_CMEDIA_REF },
{ OXYGEN_PCI_SUBID(0x10b0, 0x0218), .driver_data = MODEL_CMEDIA_REF },
{ OXYGEN_PCI_SUBID(0x10b0, 0x0219), .driver_data = MODEL_CMEDIA_REF },
{ OXYGEN_PCI_SUBID(0x13f6, 0x0001), .driver_data = MODEL_CMEDIA_REF },
{ OXYGEN_PCI_SUBID(0x13f6, 0x0010), .driver_data = MODEL_CMEDIA_REF },
{ OXYGEN_PCI_SUBID(0x13f6, 0x8788), .driver_data = MODEL_CMEDIA_REF },
{ OXYGEN_PCI_SUBID(0x147a, 0xa017), .driver_data = MODEL_CMEDIA_REF },
{ OXYGEN_PCI_SUBID(0x1a58, 0x0910), .driver_data = MODEL_CMEDIA_REF },
{ OXYGEN_PCI_SUBID(0x415a, 0x5431), .driver_data = MODEL_MERIDIAN },
{ OXYGEN_PCI_SUBID(0x7284, 0x9761), .driver_data = MODEL_CLARO },
{ OXYGEN_PCI_SUBID(0x7284, 0x9781), .driver_data = MODEL_CLARO_HALO },
{ }
};
MODULE_DEVICE_TABLE(pci, oxygen_ids);下のテーブルに、今回のデバイスに対応するエントリー「OXYGEN_PCI_SUBID(0x7284, 0xffff)」がないので、追加してあげます。ただ、「.driver_data=」で与えられる値を、上の配列の4種類から選択する必要がありますが、これは試してみなければわかりません。
私の予想では、このデバイスのサブベンダーIDが0x13f6(C-Media)で認識されているため、C-「Media's reference design」でチップセットを実装しているとの判断で、MODEL_CMEDIA_REFがいいのではないかと思います。従って、以下の行をテーブルに挿入します。
{ OXYGEN_PCI_SUBID(0x13f6, 0xffff), .driver_data = MODEL_CMEDIA_REF },コードを修正したら、ビルドします。ALSAは巨大なので、ビルドにだいぶ時間がかかります。
cd ~/modules/alsa-driver ./configure make
ビルドできたら、インストールする前にmodinfoでカーネルモジュールファイルの情報をチェックします。
modinfo ~/modules/alsa-driver/pci/oxygen/snd-oxygen.ko
出力のaliasに、追加した行が反映されていれば成功です。文字列「FFFF」で判断して下さい。
alias: pci:v000013F6d00008788sv000013F6sd0000FFFFbc*sc*i*
成功したら、インストールしてデバイスのマッピングファイルを更新します。
sudo make install sudo depmod -a
この操作で更新されたマッピングファイルは、以下のコマンドで確認できます。
cat /lib/modules/`uname -r`/modules.pcimap | grep snd-oxygen
見方は左から
「pci_module vendor device subvendor subdevice class class_mask driver_data」となります。
ここまで確認できたら、再起動してALSAのカード情報を確認してみて下さい。
cat /proc/asound/cards/*
うまくいくことを祈ってます。
オフライン
Mocchiさん
コピペだけで作業が進められるように、細かくやり方を教えていただきありがとうございます。
早速やってみました。結果は
./configureコマンド以降に絞って書いていきたいと思います。
oxygen.cの修正後、./configure、makeコマンドは
ALSA modules were successfully compiled.
で成功しました。
modinfo ~/modules/alsa-driver/pci/oxygen/snd-oxygen.koで確認したところ
filename: /home/katsuhiro/modules/alsa-driver/pci/oxygen/snd-oxygen.ko license: GPL v2 description: C-Media CMI8788 driver author: Clemens Ladisch <[email protected]> srcversion: 212C16FB5F24C590965702E alias: pci:v000013F6d00008788sv000013F6sd0000FFFFbc*sc*i* alias: pci:v000013F6d00008788sv00007284sd00009781bc*sc*i* alias: pci:v000013F6d00008788sv00007284sd00009761bc*sc*i* alias: pci:v000013F6d00008788sv0000415Asd00005431bc*sc*i* alias: pci:v000013F6d00008788sv00001A58sd00000910bc*sc*i* alias: pci:v000013F6d00008788sv0000147Asd0000A017bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00008788bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00000010bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00000001bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000219bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000218bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000216bc*sc*i* depends: snd-oxygen-lib,snd vermagic: 2.6.32-24-generic SMP mod_unload modversions 586 parm: index:card index (array of int) parm: id:ID string (array of charp)
pci:v000013F6d00008788sv000013F6sd0000FFFFbc*sc*i*が追加されています。
sudo make install
sudo depmod -aコマンド後、マッピングファイルを確認してみますと
snd-oxygen 0x000013f6 0x00008788 0x000010b0 0x00000216 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x000010b0 0x00000218 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x000010b0 0x00000219 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x000013f6 0x00000001 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x000013f6 0x00000010 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x000013f6 0x00008788 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x0000147a 0x0000a017 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x00001a58 0x00000910 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x0000415a 0x00005431 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x00007284 0x00009761 0x00000000 0x00000000 0x0 snd-oxygen 0x000013f6 0x00008788 0x00007284 0x00009781 0x00000000 0x00000000 0x0
snd-oxygen 0x000013f6 0x00008788 0x000013f6 0x0000ffff 0x00000000 0x00000000 0x0
と出るはず(?と理解しましたが・・・)、出ていません。
cat /proc/asound/cards/コマンドでも
ALSAのカード情報にCMI8787-HG2PCIが追加されていません。
sudo make installで何かエラーが出ていないかコマンド結果を見てみましたが、特にerrorといった文字は見当たりませんでした。
(最後に
cat WARNING WARNING!!! The mixer channels for the ALSA driver are muted by default!!!
という警告が出たぐらいでしょうか・・・)
また、sudo depmod -aコマンドでも特にメッセージは出ませんでした。
どこでこけているのか、こちらでは判断できませんでした。折角、教えていただいたのに、こんな結果で申し訳ないです。
オフライン
cat WARNING WARNING!!! The mixer channels for the ALSA driver are muted by default!!!
これはALSAをインストールすると必ず出るので、安心して下さい。
modules.pcimapが更新されてないのが気になりますね。「man depmod」でマニュアルを参照すると、デバイスマップをファイルで持つのは古いやり方で非推奨とかどうとか。現在は別な方法で実現してる?ちょっとここらへんに関しては情報を持ち合わせてないので、また後ほど。
さて、ALSAのインストールが終了したところから始めたいと思います。現在のカーネルモジュールの情報を確認してみましょう。以下のコマンドを実行して下さい。
$ modinfo snd-oxygen
「pci:v000013F6d00008788sv000013F6sd0000FFFFbc*sc*i*」が含まれていることを確認して下さい。
次に、以前「/etc/modules」に追記した方法で、ブート時にモジュールを読み込むようにしてみます。このスレッドの#10を参照して下さい。
再起動してみるとどうなるでしょうか?
オフライン
modinfo snd-oxygenの結果で判明すると思いますが、modules.pcimapに希望する物がない原因は#16の「0. これまでの変更点のクリア」が正確に行われていないのと、#16の「cd ~/modules/alsa-driver ./configure」が複合しているのではないでしょうか?
alsa-sourceパッケージを使うのであればmodule-assistantを使った方が簡単だと思いますがどうでしょうか。
オフライン
Mocchiさん、引き続きアドバイスありがとうございます。
jackalpeさんも参戦(?)ありがとうございます。
そのjackalpeの予言が的中する形になるのかわかりませんが、modinfo snd-oxygenの結果として
filename: /lib/modules/2.6.32-24-generic/updates/alsa/snd-oxygen.ko license: GPL v2 description: C-Media CMI8788 driver author: Clemens Ladisch <[email protected]> srcversion: 212C16FB5F24C590965702E alias: pci:v000013F6d00008788sv00007284sd00009781bc*sc*i* alias: pci:v000013F6d00008788sv00007284sd00009761bc*sc*i* alias: pci:v000013F6d00008788sv0000415Asd00005431bc*sc*i* alias: pci:v000013F6d00008788sv00001A58sd00000910bc*sc*i* alias: pci:v000013F6d00008788sv0000147Asd0000A017bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00008788bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00000010bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00000001bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000219bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000218bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000216bc*sc*i* depends: snd-oxygen-lib,snd vermagic: 2.6.32-24-generic SMP mod_unload modversions 586 parm: index:card index (array of int) parm: id:ID string (array of charp) parm: enable:enable card (array of bool)
と「pci:v000013F6d00008788sv000013F6sd0000FFFFbc*sc*i*」が含まれていません。
#16で指定していただいたmodinfo ~/modules/alsa-driver/pci/oxygen/snd-oxygen.koコマンド結果としては#17で貼りつけた結果どおり、
「pci:v000013F6d00008788sv000013F6sd0000FFFFbc*sc*i*」が含まれているのですが・・・
jackalpeさんのご指摘のあった
「0. これまでの変更点のクリア」が正確に行われていない」
とのことですが、
#1で記述した/etc/modules.conf
↓
以前はなかったファイルでしたので削除しました。
#4で/etc/modprobe.d/alsa-base.confに追記した
alias snd-card-1 snd-oxygen alias sound-slot-1 snd-oxygen options snd-oxygen index=1
を削除しました。
#10で/etc/modulesに追記した
snd-oxygen
の削除
とファイルに加えた変更点は元に戻したつもりでしたが、
たしかにコマンド操作で行った変更点は元に戻していなかったです(戻した方がわかりません・・・)。
基本、ファイルを元に戻してから再起動した後にその都度、操作するようにはしたんですが。
オフライン
複合を防ぐために、コマンドの頭には$を付けるようにします。
$ modinfo snd-oxygen filename: /lib/modules/2.6.32-24-generic/updates/alsa/snd-oxygen.ko
ここから判断するに、パッケージ「linux-backports-modules-alsa-2.6.32-24-generic」をインストールしているためと思われます。
alsa-sourceパッケージからインストールしたALSAは、「/lib/modules/`uname -r`/kernel/sound」以下のパス(`uname -r`はuname -rの出力)に入ります。しかし、現在はパス「/lib/modules/2.6.32-24-generic/updates/alsa」を使うように設定されているため、モジュールを入れ替えても適用されないという状態となっているんだと思います。
該当するパッケージを削除した上で、modinfoしてみてください。
$ sudo apt-get purge linux-backports-modules-alsa-2.6.32-24-generic $ modinfo snd-oxygen
オフライン
Mocchiさん、ありがとうございます。
$ sudo apt-get purge linux-backports-modules-alsa-2.6.32-24-generic
実行後、パッケージを削除後は
/lib/modules/2.6.32-24-generic/updates/alsa/snd-oxygen.ko
ではなく
/lib/modules/2.6.32-24-generic/kernel/sound/pci/oxygen/snd-oxygen.ko
ビルドしたカーネル(?)を適用するようになりました。
ですが、「pci:v000013F6d00008788sv000013F6sd0000FFFFbc*sc*i*」が含まれなかっために
#16の./configure以降からやり直してみました。
今度は、
filename: /lib/modules/2.6.32-24-generic/kernel/sound/pci/oxygen/snd-oxygen.ko license: GPL v2 description: C-Media CMI8788 driver author: Clemens Ladisch <[email protected]> srcversion: 212C16FB5F24C590965702E alias: pci:v000013F6d00008788sv000013F6sd0000FFFFbc*sc*i* alias: pci:v000013F6d00008788sv00007284sd00009781bc*sc*i* alias: pci:v000013F6d00008788sv00007284sd00009761bc*sc*i* alias: pci:v000013F6d00008788sv0000415Asd00005431bc*sc*i* alias: pci:v000013F6d00008788sv00001A58sd00000910bc*sc*i* alias: pci:v000013F6d00008788sv0000147Asd0000A017bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00008788bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00000010bc*sc*i* alias: pci:v000013F6d00008788sv000013F6sd00000001bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000219bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000218bc*sc*i* alias: pci:v000013F6d00008788sv000010B0sd00000216bc*sc*i* depends: snd-oxygen-lib,snd vermagic: 2.6.32-24-generic SMP mod_unload modversions 586 parm: index:card index (array of int) parm: id:ID string (array of charp) parm: enable:enable card (array of bool)
「pci:v000013F6d00008788sv000013F6sd0000FFFFbc*sc*i*」が含まれる形で
デバイスのマッピングファイルの更新できました。
その直後、cat /proc/asound/cardsで確認したところCMI8788のカードが出なくて一瞬ひやっとしましたが、
#10でご教授いただいたとおり
/etc/modulesの一番下にsnd-oxygenを追記して、再起動したところ、
0 [CMI8788 ]: CMI8788 - C-Media CMI8788
C-Media Oxygen HD Audio (rev 2) at 0x1000, irq 22
1 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0x93100000 irq 28とめでたく、認識されるようになりました。音もRhythmbox 0.12.8やTotem 動画プレイヤーではしっかりと確認することができました。
インストールしたパッケージの削除もろくにしないがために余計な手間をかけさせてしまって申し訳ありませんでした。
正直、自分では大して調べてもないくせに何度も心が折れそうになったんですが、最後までお付き合いいただきほんと感謝しています。
初期たくさんのアドバイスを下さったhmatsueさん、自分の凡ミスをご指摘いただいたjackalopeさん、
投稿はしなかったけれども一緒に調べてくれた、いや、閲覧していただいたUbuntu日本語フォーラムの皆さん、ありがとうございます
オフライン
hasegawa-34さんうまくいった様でおめでとうございます。
簡単ですのでカーネルが更新された時は、module-assistantを使ってみて下さい。
通常作業と異なる所は、ダウンロードしたソースファイルを展開、編集、圧縮して元のファイルと差し替えする事だけです。
hasegawa-34さん による投稿:
その直後、cat /proc/asound/cardsで確認したところCMI8788のカードが出なくて一瞬ひやっとしましたが、
#10でご教授いただいたとおり
/etc/modulesの一番下にsnd-oxygenを追記して、再起動したところ、
直後と言う事なので、これまでの作業ではモジュールはロードされていないので当然の結果ですね。
再起動しなくても、直後にsudo modprobe snd-oxygenを実行すればカードが認識されたかもしれません。
これまでの作業でモジュールは自動でロードされる様になっているはずですので、/etc/modulesにモジュール名を書かなくてもモジュールはシステム起動時にロードされると私は思います。
Mocchiさん、私が伝えたかったのは「0. これまでの変更点のクリア」が正確に行われていない事と、/modules/alsa-driverで、configureをオプション--with-moddirなしで実行した事が重なり合った事が原因ではないかと言う事でした。
変な文章で失礼しました。
オフライン
jackalopeさん、祝いのメッセージりがとうございます。
jackalopeさん による投稿:
簡単ですのでカーネルが更新された時は、module-assistantを使ってみて下さい。
そうですね、こんどカーネルの更新時には試してみたいと思います。
jackalopeさん による投稿:
/etc/modulesにモジュール名を書かなくてもモジュールはシステム起動時にロードされると私は思います。
はい、上記のとおり、モジュール名を書かなくても自動ロードされています。なんか、感動してしまいます。
オフライン
hasegawa-34さん、おめでとうございます。
今のままですと、カーネルイメージがアップグレードされる度に、状態が元に戻ってしまいます。また、linux-backport-module-alsaの恩恵を受けることもできません。
そこで提案なのですが、linux-backport-module-alsaのソースを取得し、パッチを当ててdebパッケージを作り、それをインストールする形で対応するのはどうでしょう。これなら、パッケージの形で管理が出来るので、いろいろとやりやすいのではないかと思います。
そこでjackalopeさんにお願いがあるのですが、ここらへんの案内をしていただけませんでしょうか?私はカーネルモジュールあたりの作法に関してはまったくの初心者で、module-assistantなるツールも今回初めて知りました。jackalopeさんならここらへんのツールやdebパッケージの作成などにお詳しいんじゃなかろうかとお見受けしますが、いかがでしょう?
私の方はALSAの開発者に連絡して、今回のデバイスの動作事例とソースコードへの取り込みをお願いしてみるつもりです。一度に2つをこなすのが時間的に厳しいところなので、jackalopeさんのご助力をえられれば助かります。
オフライン