
Ubuntu日本語フォーラム

ログインしていません。
お世話になります。
私が使っているデバイスに対応したALSAドライバを導入したいと考えています。
参考にしているのは、本家フォーラムの以下のトピックです。
[EMU 0404 USB new thread]
http://ubuntu-virginia.ubuntuforums.org/showpost.php?p=8502257&postcount=177
alsa-driver v.1.0.22.1はすでにそのデバイスに対応しているらしいのですが、karmicはv.1.0.20なので、アップグレードするか自分でパッチをあててインストールする必要があるかと思います。つきまして、以下が疑問としてわいてきました。
0. そもそも、ALSAのウェブサイトにある「alsa-driver v.1.0.22.1」をビルド&インストールすることはできるのでしょうか?依存関係とかでひっかかったりするのでしょうか?
1. synapticで検索しても「alsa-driver」はなく、[alsa-base]や「alsa-source」といったパッケージしかヒットしないのはどうしてなのでしょう?「alsa-base」と「alsa-driver」に違いはあるのでしょうか?
2. パッチをあててビルド、インストールしたとして、そこでインストールしたものはパッケージ管理されるのでしょうか?もし最新のalsa-driverがUbuntuリポジトリ経由で更新ファイルとして提供された場合、それを導入することは可能なのでしょうか?
Linuxのビルド&インストールはソフトウェアに関しては何度かやったことがあるのですが、ドライバに関しては初めてです。アドバイスいただけたら助かります。
オフライン
0. そもそも、ALSAのウェブサイトにある「alsa-driver v.1.0.22.1」をビルド&インストールすることはできるのでしょうか?依存関係とかでひっかかったりするのでしょうか?
ALSAのウェブサイトかダウンロードしたファイルに書いていませんか?
ビルドしてインストールすれば疑問は明らかになります。
オフライン
hir0さんありがとうございます。
> ALSAのウェブサイトかダウンロードしたファイルに書いていませんか?
READMEを見てみましたが、カーネル対応情報くらいしか目に止まりませんでした。
> ビルドしてインストールすれば疑問は明らかになります。
やはりそうですよね。。。メイン環境を壊したくないので、以下をしました。
1. サブHDDにパーティション切って、Ubuntu Studio 9.10をインストール。
2. alsa-driver v.1.0.22.1をALSAウェブサイトからダウンロード、解凍。
3. 端末を起動し、cdで解凍したディレクトリに入って「./configure」。
4. 「patchコマンドがない」とメッセージがでたので、「sudo apt-get install build-essential」を実行。
5. 再度「./configure」。今度は成功。
6. 「make」成功。
7. 「sudo make install」成功。
ALSAで設定を変えて音声を出力したところ、デバイスが適切に動作しているので、導入成功のようです。よかったー。
しかし気になるのは、質問2です。更新パッケージが配布されてもちゃんと更新されますか?
オフライン
参考にするならこちらの方が良いかもです。
http://ubuntuforums.org/showthread.php?p=6589810
2. パッチをあててビルド、インストールしたとして、そこでインストールしたものはパッケージ管理されるのでしょうか?もし最新のalsa-driverがUbuntuリポジトリ経由で更新ファイルとして提供された場合、それを導入することは可能なのでしょうか?
やり方によります。
debパッケージを適切なバージョンを振って作ってインストールするのであれば、レポジトリのalsaが更新されたタイミングで、比較され、新しくなっていれば更新されます。
単純にビルドしてインストールした場合、aptシステムはファイルが上書きされたことを知らないので、もし仮に1.0.22.1より古いものがレポジトリに上がった場合、1.0.20より新しければ更新します。
私見ですが、レポジトリにあるパッケージ以外を、上書きする方法でインストールするのはおすすめできません。
やるならdeb化した方が良いのではないかと思います。
先日挑戦して、うまくいかなかったので具体的な手順は分かり兼ねますが。。
# まだアルファなので、五十歩百歩かも知れませんが、いっそlucidのアルファにアップグレードするのも手です。
# デバッグにも貢献できて一石二鳥。
オフライン
ALSA周りのような大物をきちんとパッケージにするのはかなり大変なので、dpkg-divertしておくとラクです。パッケージアップデートによる不慮の上書きを回避できます。
サンプルは https://wiki.ubuntu.com/FirefoxTipsAndTricks あたりで。
オフライン
みなさんどうもありがとうございます。
hmatsue による投稿:
参考にするならこちらの方が良いかもです。
http://ubuntuforums.org/showthread.php?p=6589810
ご紹介のURLを読んでみましたが、こちらもやはりファイルを上書きしてしまうようです。
The script is not in line with Debian/Ubuntu rules for package handling. It just overwrites existing files. You won't see any changes on the ALSA package-ids within Synaptic!
hito による投稿:
dpkg-divertしておくとラクです。
ファイルの保存先を変更して、パッケージで導入したファイルを上書きせずに使うという理解で間違いないでしょうか?ご紹介のURLを見てみましたが、これってそれぞれのファイル単位で指定してあげているので、alsa-driverでインストールされるすべてのファイルを把握しておく必要があるという理解で間違いありませんか?すごく大変のように、私には思えるのですが。。。
せめて「alsa-base」の更新周期が判ればと思い、ubuntuのパッケージ検索でしらべてみました。
http://packages.ubuntu.com/search?suite=all§ion=all&arch=any&searchon=names&keywords=alsa
パッケージ「alsa-base」はubuntuの歴代バージョンにおいて更新パッケージが配布された例がありません。なので、更新したければubuntuの次のバージョン(今回ならばlucid)にする他ないということになりますね。そこから判断するに、karmicを使うのであれば、自分でビルド&インストールしてしまっても問題ないということになります。
うーむ。どうしよう。。。
オフライン
http://www.debian.org/doc/manuals/apt-howto/ch-helpers.ja.html
の equivs などを使って、alsa-base の(更新されそうにない)高いバージョン番号がついたダミーパッケージを作って入れておくのはいかがでしょうか。
オフライン
Mocchi による投稿:
1. synapticで検索しても「alsa-driver」はなく、[alsa-base]や「alsa-source」といったパッケージしかヒットしないのはどうしてなのでしょう?「alsa-base」と「alsa-driver」に違いはあるのでしょうか?
この部分に答えていませんでした。というか、そもそもの話を正しく理解していませんでした。
Ubuntuではalsa-driverに相当するカーネルモジュールはlinux-image-(version)-(flavour)パッケージに含まれています(たとえばlinux-image-2.6.31-9-generic)。また、linux-backports-modules-alsa-karmic-genericという拡張(だと思ってください)パッケージもあり、これをインストールすることでより新しいkernel/ALSAのパッケージベースのドライバを取り込むことが可能です。これらのファイルを上書きすると、カーネルイメージのアップデート時に悲惨な目にあいます。対象のドライバを狙ってdpkg-divertするべきです。
さらに言うと、ALSA関連のデバイスはkernel担当者の管轄になっていて、ALSAのバージョンよりも新しいドライバが入っていることがしばしばあります。
https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/477274
http://ubuntuforums.org/showthread.php?t=1310479&page=2
あたりを見ると、少なくとも9.10ではE-MU 0404 USBは「認識」はされそうなのですが(linux-backports-modules-alsa-karmic-genericを手動でインストールする必要があるかもしれない)、これがダメでALSAのドライバを入れ替える的な話だと思っていたのですが、
alsa-driver v.1.0.22.1はすでにそのデバイスに対応しているらしいのですが、karmicはv.1.0.20なので、アップグレードするか自分でパッチをあててインストールする必要があるかと思います。つきまして、以下が疑問としてわいてきました。
ということなので、そもそもまだ試されていないのかなと思います。
オフライン
hitoさん、ackさん、どうもありがとうございます。今回話題にしてるデバイス「E-MU 0404 USB」はサンプリング周波数を5段階くらいから選択してA/D変換できるUSBオーディオ・インターフェイスです。
hiro による投稿:
少なくとも9.10ではE-MU 0404 USBは「認識」はされそうなのですが...ということなので、そもそもまだ試されていないのかなと思います。
デバイスは日常的に使っています。Ubuntuにちゃんと「認識」されていますし、普通に利用して音声を入出力するぶんには問題ありません。
ただ、音楽製作目的でJACKを起動し、サンプリング周波数をデフォルトの44.1kHzから変更すると、音声にノイズが乗ります。デバイス内のサンプリング周波数がデフォルトの44.1kHzのまま変更されず、ソフト側とハード側で不一致がおこるためです。あらかじめWindowsでデバイスのサンプリング周波数を変更しておく方法もありますが、それだけのためにWindowsを起動するのも面倒です。
最新のALSAドライバだと、デバイス内のサンプリングレートを自動で変更してくれるようになっています。このトピックの#3で確認しました。そのため、ぜひ導入したいのです。
hiro による投稿:
Ubuntuではalsa-driverに相当するカーネルモジュールはlinux-image-(version)-(flavour)パッケージに含まれています(たとえばlinux-image-2.6.31-9-generic)。また、linux-backports-modules-alsa-karmic-genericという拡張(だと思ってください)パッケージもあり、これをインストールすることでより新しいkernel/ALSAのパッケージベースのドライバを取り込むことが可能です。
私はUbuntu Studio 9.10を使っているので、alsa-driverは「linux-image-2.6.31-9-rt」に含まれているんですね。RTカーネル用の「linux-backports-modules-alsa-karmic」はないのかなと検索してみましたが、どうやらないようです。仮にこのパッケージをインストールしたとしても、RTカーネルには適用されない気がします。
hito による投稿:
これらのファイルを上書きすると、カーネルイメージのアップデート時に悲惨な目にあいます。対象のドライバを狙ってdpkg-divertするべきです。
すると、対象のドライバのファイルがどこにあるか(定位置としましょう)を特定しなければならないのですね。そのうえで、そのファイルに対してdpkg-divertを行い、インストール先を定位置から変更。その後、alsa-driverから対象のドライバを定位置にインストールするという理解でよいのでしょうか?
実は9.10でプリンストンのペンタブを動作させる方法において、ドライバ(inuxwacom)の上書きインストールやっています。悲惨な目に合うこと確定でしょうか?トピックのタイトルと関係ないことで申し訳ないのですが、悲惨な目に合うか合わないかだけでも教えていただけると助かります。
オフライン
時間が取れなくてwacom周りのドライバがどれなのか特定できていませんが、おそらくdrivers/input/以下を直接触っているかと思います。なので、2.6.31-17とか18系列のセキュリティアップデートが出てくると、アップデート時にドライバが上書きされて元の黙阿弥、ということになるかと思います(わりと悲惨)。
すると、対象のドライバのファイルがどこにあるか(定位置としましょう)を特定しな
ければならないのですね。そのうえで、そのファイルに対してdpkg-divertを行い、イン
ストール先を定位置から変更。その後、alsa-driverから対象のドライバを定位置にイン
ストールするという理解でよいのでしょうか?
本題の方は、上記で正しいです。
セキュリティアップデートが適用されるたびにインストール、という手もあるにはあるのですが、あまり嬉しくありません。
黒魔術的なアプローチとしては、backports-modules-alsaは/lib/modules/`uname -r`/updates/以下に入ることが仮定されているので、ここにalsa-driverから作ったモジュールファイルを配置してしまう、というものです。backports-modules(無印)に同名のドライバが含まれるようになると危険ではありますが、無防備に入れるよりはまだ安全な気配がします。
オフライン
hitoさん、お時間割いていただき恐縮なのですが、私も頑張りますので、よろしくお願いしますm(_ _)m
ここで一旦、みなさんにご提案いただいた方法を整理してみます。
1. dpkg-divertでパッケージのインストール場所を変更してから自分でインストール
→今のところ、考えうる最善の方法かと。
2. セキュリティアップデートが適用されるたびに自分でインストール
→1.の代替案。面倒だけどもっとも単純な方法。
3. 黒魔術
→今の私の頭では理解できかねます。。。
4. APTのequivsを使いダミーパッケージを入れて、アップグレード時に上書きされないようにする
→パッケージ「alsa-base」は今回あまり関係ないように思えます。
5. 「.deb」パッケージを作って、APTで管理が出来るようにインストール
→ALSAは「大物」なのできちんとパッケージ化するのは難しいようです。
6. lucid (alpha) にアップグレード
→デバッグに協力できるのは素晴らしいことなのですが、今の環境のまま使いつづけたいと思います。
という感じですね。ここからは方法1に関して進めていきたいと思います。
さて、方法1を私が行う上でネックになるのが、「ドライバファイルの場所の特定」なんですが、ひょっとして、これに関してはパッチの内容だったり、「sudo make install」の出力内容が参考になりますか?
パッチが対象としているのは、以下の3つのファイルでした。
alsa-driver-1.0.22.1/alsa-kernel/usb/usbmixer.c
alsa-driver-1.0.22.1/alsa-kernel/usb/usbaudio.h
linuxwacom-0.8.4-3/src/xdrv/wcmUSB.c
「./configure」、「make」、「sudo make install」のそれぞれを実行した際のログ(>でテキストファイルに書き出しました)も残してあります。
アドバイスいただけたら嬉しいです。
オフライン
ちゃんとやるならmakefileを読めば分かるのですが、それぞれ、たぶん
locate snd-usb-audio | grep `uname -r`
locate wacom.ko | grep `uname -r`
でヒットするやつがそうです。make installまでしてあるなら、これらのファイルの日付が同じディレクトリにある他のモジュール達と違うものになっているはずです。
オフライン
hito による投稿:
locate snd-usb-audio | grep `uname -r`
locate wacom.ko | grep `uname -r`
それぞれ試してみましたが、何もヒットしませんでした。localeコマンドだけだと、以下の様になります。
locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
メインHDDでブートし、ドライバをアップデートしたサブHDDの/libをざっとみてみたんですが、ここらへんのファイルでしょうか?
/lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.ko
/lib/modules/2.6.31-9-rt/kernel/drivers/input/tablet/wacom.ko
hito による投稿:
make installまでしてあるなら、これらのファイルの日付が同じディレクトリにある他のモジュール達と違うものになっているはずです。
私もそう思ったんですが、上記ファイルは更新日時がまわりのファイルと同じでした。見当違いのものを参照しているのでしょうか?
オフライン
Mocchi による投稿:
それぞれ試してみましたが、何もヒットしませんでした。
あ!!「locale」じゃなくて「locate」!?
~$ locate snd-usb-audio | grep `uname -r` /lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.ko
~$ locate wacom.ko | grep `uname -r` /lib/modules/2.6.31-9-rt/kernel/drivers/hid/hid-wacom.ko /lib/modules/2.6.31-9-rt/kernel/drivers/input/tablet/wacom.ko
Nautilusやコマンド「ls」で、上記ファイルの更新日時を見てみたんですが、すべて「2009年10月15日 15時05分02秒」でした。
ALSAやlinuxwacomのインストール作業をしたのは今年の1月25日なので、上書きされてないってことになるんでしょうか?
オフライン
(なんとなく記載されている手順に若干問題がある予感がしつつ)
find /lib/modules/`uname -r`/kernel/sound/ -name '*ko' | xargs ls -l |less
を実行すると、「それらしい日付」のファイルは出てきますか?
オフライン
ファイルの日付が更新されていない理由がわかりました。
メインHDDでブートした時と、サブHDDでブートした時で、ファイルの更新日時に違いがあります。先の投稿はメインHDDでブートし、サブHDDをUSBで接続して更新日時を調べています。サブHDDでブートして更新日時を見ると、確かにファイルが上書きされていることが確認できました。ちなみに、メインHDDにもサブHDDにもUbuntu Studio 9.10をインストールしてあり、ALSAドライバをアップグレードしたのはサブHDDの方です。
以下のファイルは更新日時による上書き確認ができました
/lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.ko
また、/lib/modules/2.6.31-9-rt/kernel/sound/以下のファイルのうち、以下を除いて上書きが行われています。
/lib/modules/2.6.31-9-rt/kernel/sound/oss/以下のものすべて /lib/modules/2.6.31-9-rt/kernel/sound/sound_firmware.ko /lib/modules/2.6.31-9-rt/kernel/sound/soundcore.ko
ちなみに、linuxwacom関係の以下のファイルは上書されていない=更新日時が2009年10月15日のままです。
/lib/modules/2.6.31-9-rt/kernel/drivers/hid/hid-wacom.ko
/lib/modules/2.6.31-9-rt/kernel/drivers/input/tablet/wacom.ko
オフライン
Mocchi による投稿:
メインHDDでブートした時と、サブHDDでブートした時で、ファイルの更新日時に違いがあります。
いま、再度メインHDDでブートして、サブHDDをUSB接続で見てみたら、更新日時がちゃんと更新されていました。憶測ですが、サブHDDでALSAドライバアップデート作業を行った後、再度ブートしたタイミングでファイルの更新日時が更新されたってことなのかな?
wacomの方は相変わらず、日付は以前のままでしたけれど。
オフライン
脱線してしまいますが、linuxwacomについてちょっとだけわかりました。今回パッチ当てインストールで上書き出来たのは、カーネルモジュールではなく、Xサーバのドライバのようです。以下のカーネルモジュールは、Synapticで確認したらどちらもlinux-2.6.31-9-rt由来のファイルでした。
/lib/modules/2.6.31-9-rt/kernel/drivers/hid/hid-wacom.ko /lib/modules/2.6.31-9-rt/kernel/drivers/input/tablet/wacom.ko
で、パッチ当てインストールで上書きされたのは、おそらくこっちファイルになります。日付も更新されていました。
/usr/lib/xorg/modules/input/wacom_drv.so
同じくSynapticで調べてみると、こちらはパッケージ「xserver-xorg-input-wacom」由来のファイルです。
ALSAと違って、こっちはカーネルじゃなくてXサーバのアップデートに気をつける必要がありそう。
私にはMakefileとか読む能力がないので、たぶんここまでしかわからないのが残念。
ドライバはかなり複雑なんだろうなっていう先入観があったのですが、調べてみたら意外と単純に整理されている印象を受けましたので、このシステム作った人は頭いい&頑張ったんだなーなんて思いました。
オフライン
/lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.koは、パッケージ「linux-image-2.6.31-9-rt」由来のファイルです。ドライバの導入手順を考えてみました。
1. dpkg-divertして、パッケージのファイルを定位置から移動
sudo dpkg-divert --package linux-image-2.6.31-9-rt --divert /lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.ko /lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.ko.unpatched
2. alsa-driverをビルド
cd (alsa-driver-1.0.22.1のパス) ./configure make
3. 必要なパッケージだけ、「定位置」にコピー
sudo cp (alsa-driver-1.0.22.1のパス)/usb/snd-usb-audio.ko /lib/modules/2.6.31-9-rt/kernel/sound/usb/
4. アクセス権とか所有権の設定
sudo chown root /lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.ko sudo chgrp root /lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.ko sudo chmod u=rw g=r o=r /lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.ko
5. dpkg-divertの必要がなくなった=カーネルモジュールがアップデートされたとき
sudo dpkg-divert --package linux-image-2.6.31-9-rt --remove /lib/modules/2.6.31-9-rt/kernel/sound/usb/snd-usb-audio.ko.unpatched
今回の目的に適ったdpkg-divertの使い方ができているのか、アドバイスお願いします。
オフライン
$ ./configure --with-kernel=/usr/src/linux-headers-$(uname -r)
で処置した方が不幸な事故が減るかもしれないことと、最後の「divertの必要がなくなった」の部分は省略しても問題ない(divertしたままでもいい)かと思いますが、特に問題なさそうに見えます。
オフライン
hitoさん、どうもありがとうございます。.configureのオプションも合わせて試してみましたが、結果としてはダメでした。
まず、man dpkg-divertをじっくり読んでいて気づいたんですが、前のコマンドだと不十分でした。こんな風に使うようです。
divertかけてファイルをリネーム dpkg-divert --package パッケージ名 --rename --divert 配置先 --add 元位置 divert解除でファイルを元に戻す dpkg-divert --package パッケージ名 --rename --remove 元位置
初めに、ALSAウェブサイトから入手した「alsa-driver-1.0.22.1」からmakeしたファイルのうち、snd-usb-audio.koとsnd-usb-lib.koをコピーしました。そして「sudo /sbin/alsa reload」を実行した後にデバイスの電源を入れましたが、「サウンドの設定」にうまく認識されず、バージョンが違いますというログが残りました。確かに、karmicに入っているalsa-driverはv1.0.20相当なので、バージョンが違ったら怒られるなぁ、と。
なので、パッケージ「alsa-source」を導入してインストールされたファイル「/usr/src/alsa-driver.tar.bz2」に、先のURLのパッチをあてたものをmake、ファイルをコピーしてみました。バージョンが違うことでは怒られなくなりましたが、まだダメです。
Jan 30 01:19:05 7675A63 kernel: [ 603.440183] usb 1-4.3: new high speed USB device using ehci_hcd and address 7 Jan 30 01:19:05 7675A63 kernel: [ 603.527376] usb 1-4.3: configuration #1 chosen from 1 choice Jan 30 01:19:05 7675A63 kernel: [ 603.548213] snd_usb_lib: Unknown symbol snd_verbose_printk Jan 30 01:19:05 7675A63 kernel: [ 603.557485] snd_usb_lib: Unknown symbol snd_verbose_printk Jan 30 01:19:05 7675A63 kernel: [ 603.564809] snd_usb_lib: Unknown symbol snd_verbose_printk Jan 30 01:19:05 7675A63 kernel: [ 603.568193] snd_usb_lib: Unknown symbol snd_verbose_printk Jan 30 01:21:52 7675A63 kernel: [ 769.665783] usb 1-4.3: USB disconnect, address 7
上記2つのファイルを削除し、dpkg-divertを元に戻した正常な状態で動作させた時のログは以下です。ちゃんと動いてくれますが、やはり狙いの動作はしてくれませんでした。
[ 1228.088237] usb 1-4.3: new high speed USB device using ehci_hcd and address 8 [ 1228.175310] usb 1-4.3: configuration #1 chosen from 1 choice [ 1228.261897] usbcore: registered new interface driver snd-usb-audio [ 1307.272470] usb 1-4.3: USB disconnect, address 8
パッケージ「alsa-source」でインストールされる「alsa-driver」はパッチファイルをいくつか含んでいたので、その影響で今回のパッチがうまくあたらなかったのでしょうか?
オフライン
冷静になって考えたら、パッチの製作者に相談してみるのが最善手ですね。とりあえずこの件はここで止めておきます。何か進展があったら、再度投稿しようと思います。
ご協力くださったみなさん、どうもありがとうございました。
オフライン