## i810 with XFree86 4.x HOWTO

Toby
Russell
May 2001
1.1
2001-05-09
tr
1.0
2001-05-01
tr
Initial release.

この HOWTO では、カーネル 2.2.18 と 2.4.x の特別な機能を使って、Intel の i810 グラフィックチップセット上で XFree86 4.x を動作させる方法を説明します。

## はじめに

この文書には、非常に明確な目的があります − Intel の i810 グラフィックチップセット (以後 "i810") 上で X を動かすのに失敗している人の 手助けをすることです。これは初心者 (私です) によって書かれ、主として他の 初心者達が使うことを想定したものです。著者は、よりスキルのある人の助けに なったと聞けば喜ぶでしょう。なお、私は i810 が XFree86 3.3.6 で動作することを 知っていますが、個人的にはその道を通っていません。私の経験は、純粋に XFree86 4.0 (以後 "X4.x") と カーネル 2.2.18 及び 2.4.x で利用できる i810/agpgart サポートから来るものです。それゆえに、この HOWTO はその解法や 手続きに取り組むだけです。以後の手引きは 2.4.x のコンパイルに合わせて書かれて いますが、手順は同様なので、十分 2.4.0 に置きかえることができます。 トニー・ブザンの言ですが、頭を使ってください。そして、必要とされる変更を 把握するため、README を読んでください。

この手順が機能することを知っているとはいえ、ここに記録したことは、ほとんど 私自身の不器用な方法で解決した内容だということを告白せねばなりません。多分 以下の手順より早くて効果的な方法を知っている人はきっといます。もしそうなら、 それを伝えてもらえると嬉しいです。前に触れたように、Intel がデザインした ドライバ (すなわち XFCom_i810_1.2-3 と I810Gtt-0.2-4) を併用することで、i810 は XFree86 3.3.6 では動作しますが、Linux の純粋性という関心の面で、そして もちろん必ずしも Intel のソフトウェアを使う必要がないということを知る上で、 ここに詳説した方法をお勧めします。これだと Intel のドライバは不要です。

最後に、以下の注意の言葉で序文を締めくくりたいと思います − この HOWTO が手引きの基本セットと見なされ、ゆえに関連する全 README 文書を 入手して追随されるべきだと思います。以下の記述は、どう想像をたくましくして みても網羅的なものではありませんし、少なくとも初心者には、前記の README 文書が 必要です。

## 作業まで

### 注意

以下の作業は全て、root としてログインして行なってください。

ここに並べた順番に従う必要のない別々のステージが 3 つ あります (自由に想像してください)。そのステージとは −

- X4.x の入手とインストール

- kernel 2.2.18 か 2.4.x の入手とコンパイル (mknod agpgart 関係も含む)

- XF86Config をさくっといじる

### X4.x の入手とインストール

最初のステージはもちろん、おそらく i810 で XFree86 3.3.6 を動かそうとして 失敗した、あるいはおそらく X4.x が i810 をサポートしてることを聞いたことも なく無駄に `XF86Config` ファイルと とっくみあっている、そういう人むけの手引きとしてリストされているだけです。 これらの指示を有用だと思うほとんどの人は既に X4.x をロードしているものと 思います。読者のほとんどはこの部分を飛ばせるでしょう。ともあれ、もし知る 必要があるなら、X4.x は ここ から入手することができます。

ただし、がむしゃらに進んでダウンロードする前に、最初に X4.x スイートのどの バージョンが自分のシステムに適しているか確かめねばなりません。ですので、 (`Xinstall.sh`) があるフォルダの中から) 単独でダウンロードして実行してください (`Xinstall.sh` があるフォルダの中から) −

`sh Xinstall.sh -check`

スクリプトの結果は、上記の URL 内の正しいフォルダを示すでしょう。そこから システムに適したファイルをダウンロードできます。

基本的なインストールのため、そしてダウンロード時間を省くために説明して おきますと、例外なく以下のものが絶対必要になります (他のものはオプション であり、私が思うに、インストール過程で含まれていると、不注意や未熟さのために ことが悪い方向へ向かう可能性が増えます)。

- `extract[.exe]`
- `Xbin.tgz`
- `Xlib.tgz`
- `Xman.tgz`
- `Xdoc.tgz`
- `Xfenc.tgz`
- `Xfnts.tgz`
- `Xetc.tgz`
- `Xvar.tgz`
- `Xxserv.tgz`
- `Xmod.tgz`

これで、どのファイルのセットが自分のシステムに適しているか分りました。先に 進んでどのスイートでもダウンロードできます。それから、(新たにダウンロードした ファイルのあるフォルダから) 以下のコマンドでインストールしてください −

`sh Xinstall.sh`

ここまでちゃんとしていれば、全ては円滑に進むでしょう。いくつか質問をされる でしょうが、これには私よりも README ファイルの方がよりよく説明/回答して くれます。何か期待した通りに動かないものがあるなら、きっちりと熟読するべき、 はるかに詳しい前述の README ファイルをおすすめします。初心者らしく、私は ダウンロードやインストール、コンパイルはおろかトイレに行くために席を立つ 前ですら readme を読みます。完全にわかることはありえないのです。

これで、このステージは終了です。

### kernel 2.2.18 か 2.4.x (mknod とagpgart含む) の入手とコンパイル

どちらの kernel でも、ここ から入手する ことができます。当然、README と呼ばれるあらゆるファイルをその時に読んで ください (2.4.x kernel に附属している README 文書には、ソースをどこに解凍するかについて重要な注記があります。忘れずに読んでください)。kernel ソースファイルを `/usr/src/kernels` に保存し、私が linuxnewbie の記事 (もし私の指示がわかりにくければこれを参照してください。 ただし、2.2.x kernel 限定です) で学んだ以下のコンパイル手順を実行してください。 記事は、 このアドレス で見ることができます。 もちろん、まだ圧縮されている kernel の置き場所は本当はどこでも構いません。 ただ一つ重要なのは、便利な場所で解凍する、ということです。それじゃ、コマンドを 打ちましょう −

`tar -xzvf /usr/src/kernels/linux-2.4.x.tar.gz`

あるいはより圧縮率の良い bz2 版をダウンロードしたのなら、

`bzcat /usr/src/kernels/linux-2.4.x.tar.bz2 | tar xv`

それでは、何が起きているのか、画面の出力をよく見てください。 終わったら、新しい `linux` フォルダが できているはずです。

いいでしょう、では新しいディレクトリに移動します −

`cd linux`

そして、適切にコンパイルをはじめてください……。

`make config`

あるいはむしろ

`make menuconfig`

`make xconfig` という選択肢もあるにはありますが、まだ X は走っていません。さもなくばこれを読んでるはずがありません。ですから、 使うことはできません。こんな不完全なやり方でこのことに触れるのは 気恥ずかしいのですが、`make oldconfig` というのもあります。 ですが、私の持つ書籍の中に、これについての言及を見つけることはできません でした。いずれにせよ、私はここではこれについて触れません。もしあなたが不便に 思って、それを使いたければ、その過程は `make menuconfig` によるものと非常に似ていると確信しています。

さて、私はテキストベースの kernel コンパイルを 3 回ほど行い (`make config`)、それが如何に長く曲がりくねっているか 知りました。私は `make menuconfig` を代わりに使うのを おすすめします。これは、ncurses のロードを要求するだけ (X は不要) で、kernel 再コンパイルをきれいな外観で行うことができるでしょう。私は Red Hat 6.1 のカスタムインストールで ncurses を入れてましたが、この時点ではこの選択が できることを完全に忘れていました。一方、あなたのディストリビューションの CD には rpm 形式で ncurses があると思いますので、もし `make menuconfig` がただエラーを返すなら、ncurses の rpm を インストールしてもう一度やってみてください。

私達特有の問題を解決するために `make` の過程で一番意味のある ステージは −

- 前もって (ハイライトされている一番最初の選択肢で return を押し、その結果 現れる唯一のサブオプションを選ぶことで) EXPERIMENTAL を選ぶこと、

- 基本オプションの下の方へいって、キャラクタデバイスに入り、 "/dev/agpgart (AGP) support" (上の指示に従った場合のみ出現します) を選択します ( "M" ではなくて "*" で)。それから、

- "/dev/agpgart (AGP) support" (繰り返しますが、モジュール "M" ではなくて kernel への静的な組みこみ "*" として、です) の適切なサブオプション、つまり "I810/I810 dc100I810e support" を選択します。

#### 注意

上の説明は、読者が `make menuconfig` を実行したことを 想定しており、それを `make` が代わりに実行された状況に 対応づけるには、多少頭をひねる必要があるでしょう。とはいえ、ほんの少しです。

(これらの機能をモジュールとしてロードする方がより論理的だと指摘されました。 というのも、これらは `startx` が実行されるまでは必要と されないからです。私はまだ「ローダブルモジュールの方法」を試していませんし、 テストした後で HOWTO のこのセクションを追記すると思います。私がここで静的な やり方をおすすめするのは、この過程をテストバージョンの 2.4.x kernel で実行し、 静的なロードがより安全で安定した方法であると思えるからです。今では 2.4.x は 公式にリリースされており、モジュールは多分よりまともになっているでしょう。 私は、それがどんな状況なのか記載するつもりです。 (このことについて、Heron Ordonez に感謝します)

全て終了して十分に落ちついたら、このようにします −

- `make dep`
- `make clean` (not violently necessary but does no harm)
- `make bzImage` (takes a while, this bit)
- `make modules`
- `make modules_install`

では、`/boot` ディレクトリを見てみましょう。 おそらく、`System.map` という `System.map-[kernel バージョン]` への シンボリックリンクと、`vmlinuz` という `vmlinuz-[kernel バージョン]` への シンボリックリンクがあると思います。この配置は全てではないですが多くの ディストロ (訳注:ディストリビューション) で通用します。`vmlinuz` を `/` にあるのに、`System.map` は `/boot` にあるようなものがあると思います。 どんなケースであれ、頭を使ってこれらの指示をそれに合うように適用してください。 ですから、基本的には、このようにしてシンボリックリンクを削除する必要が あります −

- `rm System.map`
- `rm vmlinuz`

それから「名前を変更しつつ実は今作ったファイルで上書きする」 カーネル関連ファイルへの新しいシンボリックリンクを作成する必要があります。 それにはこのようにします (i386 のコンピュータを使っているという前提で) −

- `cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.x`
- `ln -s /boot/vmlinuz-2.4.x /boot/vmlinuz`
- `cp /usr/src/linux/System.map /boot/System.map-2.4.x`
- `ln -s /boot/System.map-2.4.x /boot/System.map`

もし `/boot` にいるなら、絶対パスを使う 必要はありません。しかし、過度に用心深い性格で、絶対パスを使うのであれば、 シンボリックファイルにもっと長い名前を使ってください。実際、 根本的に、最低限としては、`vmlinuz` という名前のカーネルを一つと、他の全てをバージョン番号で名付け (あるいは単にそれらを捨てるとか！)、別のカーネルを起動したい時は、 名前を入れかえるのです。あるいは、各カーネルに独自の名前をつけ、それぞれに `/etc/lilo.conf`のエントリを用意する こともできます。読者次第です。

次に、`/etc/lilo.conf` を編集しなくては なりません。

- `image=/boot/vmlinuz`
- `label=[what-ever-you-want-that-is-relevant-easy-to-type-and-remember]`
- `read-only`
- `root=/dev/hda[n]`

`lilo.conf` の編集が済んだら、こうします −

`/sbin/lilo`

こうして、新鮮でピカピカの、新しい Linux kernel のことを lilo が知ります。 でなければ (私はこれを経験しました)、新しいカーネルでは起動することが できません。実に間抜けなことになります。ではこれの後で、深呼吸して、 再起動してください。新しいカーネルを選んだら、指を組んでじっと見守ります。 無事起動するはずです。起動したら少しばかり浮かれましょう。ただし、 それで頭をヤられてはいけません。というのも、このようにして、単純ではある けれども重要な、agpgart モジュールを mknod するという手続きが必要だからです −

- `cd /dev`
- `mknod agpgart c 10 175`

基本的にはこれで、i810 チップセットと X サーバをあたかも「とりもつ」ような、 非常に本質的な (X はこれなしでは走りません) キャラクタデバイスが作成されます。 (Heron Ordonez のおかげで私はここで恥をかかずにすみました)。かなり技術的に いろいろあるところですが、この説明で勘弁してください。

これで、このステージは終わりです。

### XF86Config をさくっといじる

私は、かなりこの作業を行ないました。23 回も続けて失敗すれば、大変長ったらしくて うんざりです。声を大にして言いますが、注意して、しっかりとマニュアルページを 読んでください(コマンドプロンプトで `man XF86Config` を 実行します)。まず最初に、全く不親切な `xf86config` ( 小文字のままで！) を実行して、ベースとなる `XF86Config` ファイルを生成するようにおすすめします。 これは、他のツールだと、私の経験では X4.x とは互換性のない `XF86Config` ファイルを生成するみたいだからです。 `xf86config` の質問にざっと答えていって、カードの項目まで 来たら、そこに選ぶべき選択肢はありませんので、何も選ばないでください。後ほど、 基本のファイルを作成した後で、必要な要素を追加します。では、可能な限りの 質問に全て答え終えたら、ファイルを `/etc/X11/XF86Config` としてセーブしてください。

さて、最後に、重要な追加項目はこれらで全てです −

- `Section "Device"`
- `Identifier "i810"`
- `Driver "i810"`
- `VideoRam "4096"`

これは、Graphics Device セクションに挿入されねばなりません。いずれにせよ、好みで既存の "Device" セクションを編集することもできるはずです。それからは、X のために i810 を定義するのに、"Device" フィールドを見つける度に "i810" と入力していきます。例として、私の `XF86Config` から一組のセクションを含めています。できれば、私の意図するところが明確になればいいのですが −

- `Section "Device"`
- `Identifier "i810"`
- `Driver "i810"`
- `VideoRam "4096"`

- `Section "Screen"`
- `Identifier "Screen 1"`
- `Device "i810"`
- `Monitor "Highscreen 17inch"`
- `DefaultColorDepth 24`
- `SubSection "Display"`
- `Depth 8`
- `Modes "1024x768"`
- `EndSubSection`
- `SubSection "Display"`
- `Depth 15`
- `Modes "1024x768"`
- `EndSubSection`
- `SubSection "Display"`
- `Depth 16`
- `Modes "1024x768"`
- `EndSubSection`
- `SubSection "Display"`
- `Depth 24`
- `Modes "1024x768"`
- `EndSubSection`
- `SubSection "Display"`
- `Depth 32`
- `Modes "1024x768"`
- `EndSubSection`
- `EndSection`

私が、X へのオプションとして "1024x768" のみ与えていて、デフォルトの色深度を 24 bit にしているのがわかると思いますが、これは、私がこの方法を好むからです。 加えて、i810 は私の 17" モニタでは、その解像度と色深度でたやすく動作して くれます。21" のモニタでどう動くかは分りません。実験すればわかるでしょう。

うんざりしながらもう一度言っておきますが、私がここで与えることができるより 完全に `XF86Config` ファイルのナゾを 理解するのは、マニュアルページ (上記参照) をしっかり読むことでなしとげる ことができます。これからきっと発生するであろう、ここでは触れられていない あらゆる問題を解決する見込みが欲しいなら、これは本当に重要なことです。

これで完了です。 では、`XF86Config` を保存して、 これを実行します −

`startx`

動いたはずです。私の場合は動きました。幸せになれたと思います。 うまくいかないようでしたら、trussl@hotmail.com で私と 連絡をとれば、手助けするよう努力します。

#### 付記

これは、このセクションへのいわば追伸のようなものですが、役に立つと思います。 私はこの HOWTO の XF86Config 部分を試験的に実行している時、ささいな問題に ぶつかりました。それは、読みはしたものの完全には理解していなかった、i810 と X4.x がバッファ拡張 (あるいはその同類) のもとでは、全ての解像度で動作しない ことに関する宣伝文によるものでした。ともあれ、私はこのことについてメモを とらなかったので、自分が読んだものを正確には思いだせません。私はこれについて ぼんやりとしか覚えていないので、確信をもって言えるのはこれだけです − `XF86Config` ファイルの最初に、 以下の節が必要となります。

- `# This loads the DBE extension module`
- `Load "dbe" # Double buffer extension`
- `# This loads the miscellaneous extensions module, and disables`
- `# initialisation of the XFree86-DGA extension within that module.`
- `SubSection "extmod"`
- `Option "omit xfree86-dga" # don't initialise the DGA extension`
- `EndSubSection`

ですから、もし X が "shape extender" や "shape extension" についてのエラーを 出すようなら、おそらく `XF86Config` ファイルに上の節が欠けていると思ってよいでしょう。

## 謝辞

i810 と X4.x の問題を修正する方法を知ることは、Val Henson という先達の努力が なければなしえませんでした。彼は、私の作業を指導し、最初の時点で 2.4.0 kernel の使用を勧めてくれました。それから、この改訂版においては、Heron Ordonez にも 謝意を述べたいと思います。彼からは、ここで私が一部説明したこと (そしてゆくゆくはきっちり説明したいと思っていること) についての問題の指摘を 受けました。Curtis Stone は私が 2.4.0 kernel でのみ使えると思っていた機能が 2.2.18 でも使えると教えてくれました。彼にも感謝を。それから、2.4.x カーネルは /usr/src/linux で解凍してはいけないと教えてくれた Cameron kerr にも恩義が あります。この指摘があるまで、私は 2.4.x では成功していなかったのですが、 添付の README を読んで、すなわち私自身の手引きに従ってさえいれば、 成功していたでしょう。

こういう風にこの(訳注：感謝の)過程を続けていると、一日でこの HOWTO 中一番 大きいセクションになってしまいます。この過程は開かれており、(もちろん丁寧な 言葉遣いで！) どんなコメントも歓迎です。