Plamo 2.0 で i810 なマシンを使うためのメモ

  1. i810 とは

    i810 シリーズはインテルの新しい統合型チップセット(ビデオ、サウンドの機能が組み込まれたチップセット)で、ビデオカードやサウンドカードを別途用意する必要がないため、安価なベアボーンマシンやエントリレベルのマシンでよく使われています。

    Plamo Linux 2.0 から i810 のビデオ機能やサウンド機能を使うには、多少の設定が必要なので、この文書ではそれらの設定について解説します。

  2. /etc/lilo.conf の設定

    i810 のビデオ機能はメインメモリの一部を共有するように設計されています。この共有しているメモリ部分はあらかじめ使用しないように起動時にカーネルに指示する必要があります。どれだけのメモリを共有するかは起動時の BIOS メニューに表示されるので、/etc/lilo.conf などで mem= オプションに使用可能なメモリ量を設定しておきます。例えば、主メモリ 128M で、1M を i810 と共有する場合、/etc/lilo.conf に
    append="mem=127M"
    と指定します。 こちらに手元で利用している /etc/lilo.conf の例があります。

    この lilo.confの中に lba32 という見慣れないオプションがあることに気づいた人がいるかも知れません。このオプションは lilo-21.4 以降でサポートされた over8G パーティションをアクセスするために拡張 BIOS コールを利用するための指定です。このあたりについては3/31のLinux Seminarで使った資料が参考になると思います。

  3. XFree86 の設定(その1〜必要なモジュールドライバ)

    i810 で XFree86 を使う場合、上述のメインメモリに関する設定に加えて、 の 3 つの設定が必要になります。以下では、これらの設定について説明します。

    XFree86 3.3.6 では XF86_SVGA のサーバが i810 をサポートしています。ただし、XFree86.org から配布されているバイナリでは i810 の機能は組み込まれていないため、手元でサーバを再構築するかPlamo 2.0 に付属のバイナリ を使う必要があります。また、XF86Setup や xf86config には i810 の設定は用意されていないので手動で設定する必要があります。手元で動いている XF86Config の例をこちらに用意しましたので参考にしてください。

    上述のように i810 は主メモリの一部をビデオメモリとして利用するため、XF86_SVGA もメインメモリにアクセスする必要があります。そのための機能は agpgart.o というモジュールと /dev/agpgart というデバイスファイルで実現されています。

    XFree86 を設定する前に、まず、このモジュールとデバイスファイルが存在するかどうかを確認してください。

    kojima@i810# ls -l /dev/agpgart
    crw-r--r--   1 root     root      10, 175 Apr 30 22:03 /dev/agpgart
    
    kojima@i810# ls -l /lib/modules/2.2.14/misc/agpgart.o 
    -rw-r--r--   1 root     root      8288 May  1 11:25 /lib/modules/2.2.14/misc/agpgart.o
    

    /dev/agpgart が無い場合、mknod コマンドで作成してくださ。

    # mknod /dev/agpgart c 10 175
    

    agpgart.o モジュールは Intel の Web ページから入手できますし、こちらにもソースファイルを置いておきます

    agpgart.o モジュールは手動で組み込めば以下のようなメッセージが表示され ます。

    # modprobe agpgart
    Linux AGP GART interface v0.03 (c) Jeff Hartmann
    -- Experimental distribution, only i810 enabled
    Got pages for a 64 megabyte mapping for the agp aperatur
    
    # lsmod
    Module                  Size  Used by
    agpgart                 4180   1 
    
    

    あるいは、/etc/modules.conf に以下のように設定しておき、X の起動時に自 動的に組み込むことも可能です。

    alias char-major-10-175 agpgart

    /etc/modules.conf を修正すれば demod -a で依存関係を更新することをお忘 れなく。

  4. XFree86 の設定(その2〜 /etc/XF86Config)

    XF86Config や xf86config には i810 用の設定は用意されていないため、手動で作成するか xf86config で i710 等の(XF86_SVGAを利用する)チップ用の設定で作成してその結果を一部修正する必要があります。基本的に i810 用に必要な設定は

    # Device configured by xf86config:
    
    Section "Device"
        Identifier  "i810
    EndSection
    

    の部分だけです。手元で実際に使っている /etc/XF86Config の例をこちらに示します。

  5. i810 のサウンド機能の設定

    i810 のサウンド機能を利用するには、カーネルに付属の OSS ドライバではなく、ALSA(Advanced Linux Sound System)の比較的新しいドライバを利用する必要があります。

    ALSA のドライバはhttp://www.alsa-project.org から入手できます。手元では alsa-{driver,lib,utils}-0.5.7 というバージョンを利用しています。ALSA に含まれているドライバのうち、i810 のサウンド機能用のドライバは snd-card-intel8x0.o です。

    ALSA のドライバ類は GNU autoconf で自動的に Makefile が作成されますので、ソースコードを展開したディレクトリで

    # configure
    # make
    # make install
    

    でコンパイルされたドライバがインストールされます。

    次に ALSA 用のデバイスファイルを alsa-drivers パッケージに含まれている snddevices スクリプトを使って作成します。

    # ./snddevices

    ALSA ドライバはそれぞれの機能がモジュール化されているため、/etc/modules.conf には以下のように設定をします。

    # ALSA portion
    alias char-major-116 snd
    
    # OSS/Free portion
    alias char-major-14 soundcore
    
    # ALSA portion
    alias snd-card-0 snd-card-intel8x0
    alias snd-card-0 snd-card-intel8x0
    post-install snd-card-intel8x0 alsactl restore
    
    # OSS/Free portion
    alias sound-slot-0 snd-card-0
    
    # OSS/Free portion - 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
    

    この設定の中で post-install の指定で実行している alsactl restore については後述します。

    この設定で、ALSA のデバイス(char-major-116)を使うプログラム(例えば alsamixer)を使う際には必要なドライバが自動的にインストールされますが、OSS/Free のデバイス(char-major-14)を使うプログラム(例えば xmms)を使う際には ALSA のドライバは自動的にはインストールされません。そのため、snd-pcm-oss.o ドライバを起動時に組み込んでしまうのがいいでしょう。そのためには、例えば /etc/rc.d/rc.modules に

    modprobe snd-pcm-oss

    という行を追加しておきます。
    /etc/modules.conf の中だけでやる方がスマートだと思いますが、手元ではうまく実現できませんでした。いい方法法があれば教えてください。

  6. alsactl コマンド

    ALSA のドライバはロードされた時点では音量は全て mute された状態になっています。そのため、サウンドを処理するプログラム類は正しく動作していても音声が出力されないように見えることがあります。

    alsamixer コマンドを使えば対話的に入出力のレベルを設定することが可能ですが、ALSA のドライバをインストールするたびに手動で設定するのも大変なので、alsactl プログラムが用意されています。

    alsactl には save と restore というコマンドが用意されており、save を指定すればその時点での設定をファイル(デフォルトでは /etc/asound.conf)に書き出し、restore を指定すればファイルを読み込んで設定を行います。すなわち、一度 alsamixer で入出力レベルを適切な状態に設定しておき、その状態を alsactl save で保存しておけば、次からは alsactl restore でその状態を回復できるわけです。

    上記 /etc/modules.conf の中で指定している

    alias snd-card-0 snd-card-intel8x0
    post-install snd-card-intel8x0 alsactl restore
    

    がこの処理を行なっている部分で、snd-card-intel8x0 ドライバをロードする際に、alsactl restore コマンドを実行して入出力レベルを適切な状態に設定しています。

    なお、この指定が有効になるためには /etc/asound.conf を用意しておく必要があるため、一度手動で alsamixer を実行し、適切な入出力レベルに設定した上で alsactl save を実行しておいてください。手元で使っている /etc/asound.conf の例をこちらに置いておきます。


Plamo Linux のページへ戻る