次のページ 前のページ 目次へ

7. Linux/MIPS のインストールとよくある問題

7.1 NFS ブートに失敗する

通常はこれはこの現象に出くわした人たちが tar アーカイブを Linux ではなく IRIX で展開したためです。NFS 越しのデバイスファイルの定義は Unix 間で標準化されていないため、この問題が起きます。現象としては、NFS ファイルシステムをマウントした直後にシステムが ``Warning: unable to open an initial console.'' というエラーメッセージで死ぬと言うものです。

今のところ、この問題の回避策は、インストールに使うアーカイブを NFS サーバに展開する際には Linux システムを使うことです。この Linux システムは MIPS 機である必要は無く、NFS サーバ自体はどのような UNIX 機でも問題ありません。

7.2 自分でコンパイルしたカーネルがブート時にクラッシュする

自分でカーネルを作ったんですが、クラッシュします。Indy ではクラッシュメッセージは次のようなものです (同様の問題は他のマシンでも起きますが、メッセージは全く違ったものかもしれません)。

   Exception: <vector=UTLB Miss>
   Status register: 0x300004803<CU1,CU0,IM4,IPL=???,MODE=KERNEL,EXL,IE>
   Cause register: 0x8008<CE=0,IP8,EXC=RMISS>
   Exception PC: 0x881385cc, Exception RA: 0x88002614
   exception, bad address: 0x47c4
   Local I/O interrupt register 1: 0x80 <VR/GIO2>
   Saved user regs in hex (&gpda 0xa8740e48, &_regs 0xa8741048):
     arg: 7 8bfff938 8bfffc4d 880025dc
     tmp: 8818c14c 8818c14c 10 881510c4 14 8bfad9e0 0 48
     sve: 8bfdf3e8 8bfffc40 8bfb2720 8bfff938 a8747420 9fc56394 0 9fc56394
     t8 48 t9 8bfffee66 at 1 v0 0 v1 8bfff890 k1 bad11bad
     gp 881dfd90 fp 9fc4be88 sp 8bfff8b8 ra 88002614

   PANIC: Unexpected exception
  

この問題はバージョン 2.7 以降の Binutils のまだ直っていないバグのために起きます。当面の回避策は、arch/mips/Makefile の

   LINKFLAGS       = -static -N
 

という行を、下記のように修正してください。

   LINKFLAGS       = -static
 

7.3 Indy のカーネルブートが次のような PROM エラーメッセージで失敗する

   >> boot bootp()/vmlinux
   73264+592+11520+331680+27848d+3628+5792 entry: 0x8df9a960
   Setting $netaddres to 192.168.1.5 (from server deadmoon)
   Obtaining /vmlinux from server deadmoon

   Cannot load bootp()/vmlinux
   Illegal f_magic number 0x7f45, expected MIPSELMAGIC or MIPSEBMAGIC.
  

この問題は Indy のとても古い版の PROM で、Linux の使う ELF バイナリフォーマットが理解されない場合に発生します。 この問題の解決は、現在作業中です。

7.4 私の SNI 用のリトルエンディアンファームウェアをどこで入手したらいいんでしょうか?

SNI のシステムはビッグとリトルの両エンディアンで動作可能です。現時点では Linux/MIPS はリトルエンディアンのファームウェアのみをサポートしています。 これはある意味で不幸なことで、SNI は Windows NT のサポートをやめたため、リトルエンディアンのファームウェアをここしばらく出荷していません。

ビッグエンディアンモードで動かした場合、ファームウェアは既にサポートされている SGI Indy に似たものですので、SNI サポートを修正するのは多分比較的容易です。 興味のあるハッカーは Ralf Bächle (ralf@gnu.org) まで連絡ください。

7.5 ld が signal 6 で死にます

   collect2: ld terminated with signal 6 [Aborted]
 
これは古い binutils の既知のバグです。binutils 2.8.1 と最新のパッチの組み合わせにアップグレードする必要があります。

7.6 一部の版の PROM に ELF サポートがない問題

古い版の PROM は Linux カーネルの使う ELF フォーマットを知らず、 Linux が直接ブートできません。 この問題に当たると、以下のようなエラーメッセージになります。

   >> boot -f linux root=/dev/sda1

   Cannot load scsi(0)disk(1)rdisk(0)partition(8)/linux.
   Illegal f_magic number 0x7f45, expected MIPSELMAGIC or MIPSEBMAGIC.
   Unable to load linux: ``linux'' is not a valid file to boot.
   >>
 
この問題の望ましい解決策はもちろん PROM のアップグレードですが、すべてのシステムで提供されているわけではありません。

代替手段として、Irix 5 以降の Sash をカーネルを ブートするために使うことができます。Sash は ELF バイナリをロードするやり方を知っており、それが IRIX のカーネルか Linux のカーネルかを気にしません。PROM モニタで ``Sash'' と打ってください。 別のシェルプロンプトがでたなら、それが Sash からのプロンプトです。 後は普通通り Linux を起動してください。

Sash は EFS と XFS ファイルシステムを読め、bootp / tftp でカーネルを読むこともできます。

カーネルソースと共に配布されている elf2ecoff ツールを使って ELF バイナリを ECOFF 形式に変換することもできます。または、カーネルのビルド時に単に ``make vmlinux.ecoff'' とすることで ECOFF 形式のカーネルを作成できます。

7.7 ネットブートを試みているんですが、私のマシンはカーネルをダウンロードしてくれません

あなたのマシンが BOOTP パケットに返答しているのにも関わらず (tcpdump や ethereal のようなパケットスニファで確認できます)、 BOOTP サーバからカーネルをダウンロードしない場合です。 これはあなたのブートサーバがカーネル 2.3 系、またはそれ以降のものを使っているときに起きます。 この問題が起きた場合には、ブートサーバで root になって "echo 1 > /proc/sys/net/ipv4/ip_no_pmtu_disc" と入力すれば回避できます。

7.8 TFTP サーバからのダウンロードが止まって、タイムアウトします

これは、TFTP サーバがローカルポート番号 32768 以上を使おうとしているためであることがあります。Linux 2.3 以降を使っている場合には、TFTP サーバは 32768 以降を使います。 この問題は、サーバで "echo 2048 32767 > /proc/sys/net/ipv4/ip_local_port_range" とすることで回避できるでしょう。

7.9 DHCP バージョン 2 のバグ

DHCP バージョン 2 を使っていると、次の問題に出くわすかもしれません。 現象:あなたのマシンは BOOTP を受信し、三回返答しますが、 TFTP を始めようとしません。この問題はシステムをブートする前に PROM モニタで "unsetenv netaddr" と入力することで回避できます。 DHCP バージョン 3 はこの問題を修正しています。

7.10 ブート時に "Warning: unable to open an initial console" というメッセージが出ます

この問題には二つの可能性と解決策があります。 まず、あなたのシステムで設定されたコンソールに対して、ドライバが実際にあるかどうかを確認してください。 この点には問題が無く、問題が解決しないなら、 あなたは Linux ディストリビューションと root ファイルシステムに存在する、よくあるバグの犠牲になっているものと考えられます。 Linux システムのコンソールは、キャラクタデバイスで、メジャー番号 5、マイナー番号 1 で、かつユーザとグループが共に root で書き込み権 622 であるべきです。 もしそうなっていないなら、ファイルシステムのルートディレクトリに cd して、以下のコマンドを root になって実行してください。

   rm -f dev/console
   mknod --mode=622 dev/console
  
これは NFS サーバ上のルートファイルシステム上でも実行できます。 NFS サーバ上から直接でもできます。しかしメジャー番号とマイナー番号は NFS により変更されてしまうので、この作業は Linux システムから行う必要があります (Linux システムが単なる NFS クライアントであっても構いません)。 そうしなければ、Linux クライアントがそこからブートする際にメジャー番号や マイナー番号が誤ったものになるかもしれません。

7.11 SGI システムにインストールする際に IRIX が必要でしょうか。

様々なインストール手順の記載の中で、ディスクの分割を行うために IRIX が使われています。これが必要になっていたのは、その手順が書かれた時点では linux で走るディスク分割ツールがなかったためです。 現在は、fdisk の新しいバージョンを用いれば、ディスクを IRIX のディスクラベル (expert モードで選択可能になりました) を用いて分割可能になりました。 ボリュームヘッダは dvhtool で操作できます。注意点として、dvhtool の使い方は IRIX のものとは異なります。

また、予備のオペレーティングシステムとしての IRIX は、インストール時に ramdisk や nfsroot で苦戦する手間を減らし、便利ではあります。但し、一言注意。 中身を失いたくないなら、IRIX ディスクラベルを持っていないディスクを IRIX fx(8) に指定しては絶対にいけません。IRIX は問い合わせなしにディスクの内容を 壊し ます。

7.12 IRIX と Linux を同じシステムで共存できますか

はい。但し、前の節の IRIX の fx(8) についての注意を読んだことを確認下さい。

7.13 Insmod が _gp_disp シンボルが未定義だと文句を言います

_gp_disp は MIPS の PIC コード中で使われているマジックシンボルです。 喜んでください。このエラーはシステムをクラッシュから救ってくれたのです。 要点は、カーネル作成時の Makefile のオプションと、カーネルモジュール作成時のオプションは同じにすべきだということです。 特に、オプション -mno-pic -mno-abicalls -G 0 が重要です。


次のページ 前のページ 目次へ