まず確認しておきたいことは、Linux/Alpha は本当に動作するということです。
ほとんど全ての主要なアプリケーションが移植され動作しています。
XFree86をはじめ、LaTeX、ghostview、Mosaic、Emacs、gcc、
C++、NFS、オートマウンタ、各種シェル、perl、python、Java、Tcl/Tk、scheme、
apache HTTPサーバ、およびフリーで提供されている多くのソフトが動作しています。
X11 に関しては、いくつかのビデオカードで動作することが確認されています
(
Linux/Alpha で動作するグラフィックカードは?の章を参照)。
Quake も Dave
Taylor 氏および Linus Torvalds 氏により、Linux/Alpha 用のバイナリが
用意されています。1997 年 4 月には em86 エミュレータが公開されて、多くの
Linux/x86 バイナリを Linux/Alpha 上で動作させることが出来るようになりました
(
em86 の章を参照)。applix、netscape、acrobat
などのすばらしいアプリケーションも、em86 上で動作させることができます。
em86 は、Digital Semiconductor の Jim Paradis 氏の提供により、無償で
利用することが出来ます。
Linux/Alpha は PCI もしくは EISA 仕様のほとんど全ての
Alpha マシンで動作しています。ただし、DEC 3000 シリーズ・
ワークステーションの TURBOchannel 仕様では動作しません。
この章では、現在 Linux/Alpha において判明しているバグ、そしてこれらの
回避方法や作業状況について述べます。下記の事項は現在作業中のため、
変更があるかもしれません。また、ここに記載されていない新たな問題もあるかも
知れません。あるいは、最新のディストリビューションでは、ここに挙げられた
バグもすでに解決されているかもしれません。いずれの場合でも、
axp-list メーリングリストに
メールを出す前に、まずこの章を最初に調べて下さい。もし、未知のバグ
もしくはそのバグに対する解決方法を発見した場合には、私たちへメールで
報告していただけると助かります(できれば linuxdoc-SGML 形式で)。
- ルートファイルシステムのマウント中にカーネルがハングアップないしは
パニック状態となる:
Linux の Kernel では、デフォルトのルート
ファイルシステムが /dev/sda2
にハードコーディング
されています。もし異なるディスクあるいはパーティションにルート
ファイルシステムがある場合には、起動時のオプションで
root=/dev/
root-partition と明示的に
指定しなければなりません。
例えば、ルートファイルシステムが /dev/hda1
に
ある場合には、root=/dev/hda1
と指定してください。
- ELF 用の
gdb
でシェアードライブラリ中の関数をデバッグする際の
動作がおかしい: gdb
でダイナミックリンクされた
バイナリを使用する場合には、ダイナミックシンボルを強制的に
解決させる必要があります。これを行なうには、gdb
中で
set env LD_BIND_NOW=1
を実行してください。
これを行わないと、gdb
がシェアードライブラリ中の関数へ
ジャンプしたときに、おかしな動作をする場合があります。
この不具合が発生する箇所は特定できていますが、
修正する時間がないようです。
- カーネルがフロッピードライブの容量を 2.88MB と認識する:
Alpha では、
フロッピードライブに何が接続されていても、カーネルは常に
2.88MB の容量があると認識します。でも心配する必要はありません。
通常フロッピードライバは容量を自動認識するので、全く問題なく
動作します。ただし、フロッピーをフォーマットする場合は例外です。
この場合には、正しい容量のデバイス名を指定して下さい。例えば、
1.44MB のドライブでフォーマットを行なう場合には /dev/fd0
ではなく、/dev/fd0H1440
を指定して下さい。
- 不整列アクセス(Unaligned access):
他の RISC CPU と同様に、Alpha でもメモリのアクセスに際しては
自然境界に整列している必要があります。例えば、メモリから
4 バイトの整数を読み込む場合には、先頭のアドレスが 4 の倍数と
なっている必要があります。同様に、8 バイトの整数を読み込む
場合には、8 の倍数のアドレスから読み込む必要があります。
もし、CPU が正常に整列していないワードをアクセスする場合には、
CPU はカーネルにトラップをかけて警告を出力します。
そしてカーネルは、不整列アクセスをエミュレートし、何事も
なかったかのようにユーザプロセスを実行します
(ただし実行速度は大幅に落ちます)。
典型的な、境界不整列アクセス(unaligned falt access)の
メッセージは以下のようなものです。
X(26738): unaligned trap at 000000012004b6f0: 00000001401b20ca 28 1
これは、プロセス ID が 26738 の X
(X11サーバ)が、
アドレス 0x1401b20ca で境界不整列アクセスを行なったことを
意味します。また、このアクセスはアドレス 0x12004b6f0 から
実行されたことを示しています。他の数字にはあまり重要な
意味はありませんが、カーネルのソースを調べるともっと詳しい
情報を知ることができます(例えば、load と store の関係など)。
このメッセージが出力されてもそれほど心配する必要はありません。
境界不整列アクセスをしたプログラムでも正常に動作します。
境界不整列アクセスはそのうち修正されると思いますので、
メッセージは無視して結構です(もしあなたがプログラマならば、
境界不整列アクセスが無くなるようにソースを改良して下さい)。
- リンカが
warning: using multiple gp values
というメッセージを
出す: この警告は大きなプログラムを構築した際に出力されます。
ハードウェアに密着したハッキングを行うのでなければ、気にする
必要はありません。この警告は無視しても安全で、
将来はオプションとなるでしょう。
- IDE ドライバの動作が遅い:
デフォルトの設定では IDE ドライバは長期間の割り込みが
禁止されています。これが原因でカーネルの割り込みに対する
反応が鈍くなり、処理速度が低下します。これを
回避するには、以下のコマンドを全ての IDE ドライブに対し
入力して下さい。
hdparm -u 1 /dev/hd?
この設定を行うことにより、IDE ドライバの割り込みが再許可されます。
minlabel
、fdisk
使用後にカーネルがパーテション認識に失敗する:パーテションテーブルを変更した後にシステムを使用することは
避けて下さい。たとえ、minlabel
や fdisk
が正しい
値を示したとしても、必ず再起動してカーネルにパーテションを
認識させるようにしてください。
tar xvMf /dev/fd0
でハングアップする:(このバグは、GNU libc ベースのシステムでは発生しないはずです)
libc-0.43 の malloc のバグのため、マルチボリュームの tar
アーカイブが正常に動作しません。gmalloc パッケージを使用して
再コンパイル、リンクするか、あるいは新しい libc を入手して下さい。
- 日付が 20 年ずれる:
これは本当はバグではありません。しかし、多くの人が遭遇している
問題のようです。Jay Estabrook 氏による最終的な解決方法を
以下に示します。
ARC コンソールと SRM コンソールは、日付を time-of-year (TOY) 時計に
記録していますが、フォーマットは若干異なっています(年フィールドの
み)。
通常、"/sbin/clock" は SRM が使用しているフォーマットを解釈します。
しかし、"-A" フラグを指定すれば、ARC のフォーマットを理解することも
できます。したがって、ARC フォーマットの日付を読み出すためには
"clock -r -A" を使用し、書き込むには "clock -w -A" を使用する必要が
あります。もし、日付が期待通りのフォーマットで書かれていない場合に
は、ARC または SRM コンソールが文句を言ってくるでしょう。:-\
正しいフォーマットを使用する一番確実な方法は、コンソールの日付設定
機能を使用して日付を設定することです。これは、ARC コンソールではメ
ニューのなか、SRM コンソールではコマンドになっています(IIRC:
"help date" を試してください)。
次に、Red Hat の /etc/rc.d/rc.sysconfig スクリプト
(訳注:/etc/sysconfig/clock)のなかで、"clock" の呼び出しが正しく設
定されていることを確認してください。
MILO/kernel の起動に ARC コンソールを使用する場合:
1. Red Hat 4.1 では、/etc/sysconfig/clock に以下の記述があること
CLOCKMODE="ARC"
2. Red Hat 4.2 では、/etc/sysconfig/clock に以下の記述があること
ARC=true
SRM コンソールから直接カーネルを起動している場合:
1. Red Hat 4.1 では、/etc/sysconfig/clock に以下の記述があること
CLOCKMODE=""
2. Red Hat 4.2 では、/etc/sysconfig/clock に以下の記述があること
ARC=false
上記の設定が "clock" を呼び出すときの引数にどう反映されるかは、
/etc/rc.d/rc.sysconfig ファイルを参照してください。
- 時間がでたらめな日付/時刻になる:
これは、PC164/LX164/SX164 で発生する問題です。原因は、これらの
ボードで使用されている TOY クロック・ハードウエアのバージョンが
微妙に違うためです。すでに述べたように、システムクロックは起動時に
clock
コマンドが TOY クロックを参照して設定されます。
設定に問題があるかどうかを調べるには、以下のコマンドを試してください。
while true; do /sbin/clock -r [-A]; done
(TOY クロックが ARC フォーマットを使用している場合には
-A オプションを指定してください)
これで一致しない場合には、/sbin/clock
を
アップデートしてください。ファイルは以下のところから入手できます。
gatekeeper.dec.com:/pub/DEC/Linux-Alpha/Kernels/clock-pc164-rh4.2
gatekeeper.dec.com:/pub/DEC/Linux-Alpha/Kernels/clock-pc164-rh50
- 0>0>0>0>0>0>:
標準の MILO イメージは、コンソールだけでなく、最初の
シリアルポートとも交信するように設定されています。もし、
最初のシリアルポートにモデムがつながっていると、モデムが
エコーバックしてしまいます。これを
回避するためには、システム起動時にはモデムの電源を
切ってください。あるいは、異なるシリアルポートにつなぎ直したり、
シリアルポートへの出力を行わないように MILO を
作成してもいいでしょう。
fdisk
がディスクパーティションを認識できない:これは、Digital Unix の disklabel
ユーティリティで
作成されたパーティションのように、BSD スタイルの
パーティションを使用しているときに発生します。fdisk
を
BSD モードに切り替えて下さい。
vi
が入力を 4 文字一組で処理する:実際には、ほかのアプリケーションでも同様のことが
起きるかもしれません。これは、ncurses
の問題です。
以下の章で説明しているように、プログラムが
termio
と termios
を混同していることに
関するものでしょう。対応策は、vi
を起動する前に
stty eof '^a'
と入力して下さい。
- Ruffian(164UX)で X が起動しない:
"Failed to set IOPL for I/O" というメッセージが出て、
X の起動に失敗します。原因は、Red Hat 5.1 の GLIBC が
RUFFIAN システムを識別できないからです。root になって、
(訳注:/etc ディレクトリで)以下のコマンドを
正確に入力して下さい。
ln -s EB164 /etc/alpha_systype
ipfwadm
が失敗する:Redhat 5.1、5.2 for Alpha に含まれている ipfwadm
には
バグがあります。Redhat 5.0 の ipfwadm
を使用して下さい
(注意:2.1.* や 2.2.* のカーネルを使っている場合は、代わりに
ipchains
を使っているでしょう)。
- Adaptec SCSI コントローラの動作が不安定:
PC164 で Adaptec 2940 を使っている場合にとくに発生します。
デバイスのスピード、幅(?)、終了の自動認識を
オフにすることで改善するようです。
以下のユーティリティーを入手して下さい。
http://www.windowsnt.digital.com/support/drivers/drivers.asp/
入手したファイルをフロッピーまたは FAT パーティションに
コピーし、ARCBIOS メニューの "Run a program" から実行します
(新しいシステムでは、ファームウエアの i386 エミュレータを
通してオンボード・ユーティリティを起動することによって、
SCSI コントローラの設定を行うことができます)。
- 時刻を設定した後で、XL266 が立ち上がらない:
XL266 のハードウエアクロック設定の際に、-A オプションを
つけ忘れた場合、ARCBIOS は無効な時刻と認識して、全ての
OS の起動を拒否します(時刻の再設定が必要になります)。
不幸なことに、設定が明らかに間違っていると分かっている
場合でも、再設定することはできません(これは明らかに
バグです)。回復させるには、修正した linload.exe を
ftp://ftp.ub.uni-marburg.de/pub/unix/linux/alpha/
から入手して下さい(Juergen Schroeder 氏に感謝します)。
入手したファイルを適当な MILO と一緒にフロッピーにコピーし、
メニューの "Run a Program" から実行します。MILO のなかから
linux の起動が成功したら、時刻を再設定して下さい。-A を
つけるのをお忘れなく...
(linload.exe の修正は、MILO の位置をプログラムのなかに
書き込んだのだと思います)
UNIX 上で、C を使ってプログラムする際に陥りやすい、いくつかの落し穴を、
ここに思いつくままに集めてみました。これは実のところ Linux や Alpha に
限った話ではないのですが、Linux/Alpha は 64bit の世界での先駆的な OS の
1 つですので、ここに記された問題は、他の 64bit OS でも発生する可能性が
高いでしょう。