Linux/MIPS HOWTO Ralf Baechle, ralf@gnu.org January 9, 2002 訳: Seiji Kaneko skaneko@a2.mbn.or.jp January 27, 2002 この FAQ は Linux オペレーティングシステムの MIPS への移植版について、 よく出会う問題とその解決、関連情報やソフトウェアの入手のしかたなどにつ いてまとめたものです。また、この FAQ では、実際はここ以外の場所で記載 されているような情報を入手するためにこの FAQ を見ている方の助けともな るようつとめています。 ______________________________________________________________________ 目次 1. Copyright 2. What is Linux/MIPS? 3. この FAQ の入手先 4. Linux/MIPS のネット上のリソース 4.1 Anonymous FTP サーバ 4.2 匿名 CVS サーバ 4.3 ウェブサーバ 4.4 Web CVS サーバ 4.5 メーリングリスト 4.6 IRC チャネル 5. Linux ディストリビューション 5.1 RedHat 5.2 Debian 5.3 Simple 5.4 Algorithmics ツールチェイン 6. Linux/MIPS がサポートするハードウェア 6.1 ハードウェアプラットフォーム 6.1.1 Acer PICA 6.1.2 Baget/MIPS シリーズ 6.1.3 Cobalt Qube と Raq 6.1.4 NEC の機種 6.1.5 NEC の VR41xx 系を使った機種 6.1.6 東芝 TMPR39xx/Philips PR31700 プラットフォーム 6.1.7 Netpower 100 6.1.8 Nintendo 64 6.1.9 Silicon Graphics Challenge S 6.1.10 Silicon Graphics Indigo 6.1.11 Silicon Graphics Indigo2 6.1.12 Silicon Graphics Indy 6.1.12.1 有効なメモリ量が変です 6.1.12.2 Indy PROM 関連の問題 6.1.12.3 私の Indy でメモリがこんなにシステムで使われてしまうのはなぜ? 6.1.13 Silicon Graphics Origin 200 と 2000 6.1.14 Silicon Graphics Onyx 2 6.1.15 Silicon Graphics Power Series 6.1.16 SGI マシンのシリアルコンソール 6.1.17 Other Silicon Graphics machines 6.1.18 Sony プレイステーション 6.1.19 SNI RM200C 6.1.20 SNI RM200 6.1.21 SNI RM300C 6.1.22 SNI RM400 6.1.23 SNI RW320 6.1.24 Algorithmics P-6032 and P-6064 (and P-4032, P-5064) 6.1.25 DECstation シリーズ 6.1.26 MIPS Magnum 4000 / Olivetti M700-10 6.1.27 MIPS Magnum 4000SC 6.1.28 MIPS Malta 6.2 プロセッサタイプ 6.2.1 MIPS32 ファミリ 6.2.2 MIPS64 ファミリ 6.2.3 R2000, R3000 family 6.2.4 R4000, R5000 and RM7000 family 6.2.5 R6000 6.2.6 R8000 6.2.7 R10000 6.2.8 TLB の無いプロセッサ 6.2.9 浮動小数点機構が一部分サポートされた、または搭載されていないプロセッサ 6.3 私たちがサポートしていかないハードウェア 6.3.1 IBM RS6000 6.3.2 VaxStation 6.3.3 SGI VisPC 6.3.4 Iris 3000 などのモトローラ 68k ベースの機種 7. Linux/MIPS のインストールとよくある問題 7.1 NFS ブートに失敗する 7.2 自分でコンパイルしたカーネルがブート時にクラッシュする 7.3 Indy のカーネルブートが次のような PROM エラーメッセージで失敗する 7.4 私の SNI 用のリトルエンディアンファームウェアをどこで入手したらいいんでしょうか? 7.5 ld が signal 6 で死にます 7.6 一部の版の PROM に ELF サポートがない問題 7.7 ネットブートを試みているんですが、私のマシンはカーネルをダウンロードしてくれません 7.8 TFTP サーバからのダウンロードが止まって、タイムアウトします 7.9 DHCP バージョン 2 のバグ 7.10 ブート時に "Warning: unable to open an initial console" というメッセージが出ます 7.11 SGI システムにインストールする際に IRIX が必要でしょうか。 7.12 IRIX と Linux を同じシステムで共存できますか 7.13 Insmod が _gp_disp シンボルが未定義だと文句を言います 8. Milo 8.1 Milo のビルド 8.2 Pandora 9. ローダブルモジュール 10. クロスコンパイラ環境の構築方法 10.1 入手できるバイナリ 10.2 おすすめのコンパイラのバージョン 10.3 自分でクロスコンパイラを作成する 10.4 必要なディスク容量 10.5 バイトオーダ 10.6 設定に使う名前 10.7 GNU Binutils のインストール 10.8 assert.hについて 10.9 カーネルソースのインストール 10.10 egcs の最初のインストール 10.11 ここまでやってきたことのテスト 10.12 GNU libc のインストール 10.13 egcs の再作成 10.14 C++、Objective C や F77 コンパイラを作成すべきでしょうか? 10.15 float.h はどうすればいいのでしょう 10.16 クロスコンパイルでの既知の問題 10.16.1 IRIX がクラッシュする 10.16.2 System V 系のホストでのリソース制限 10.17 GDB 11. カーネルのコンパイル 11.1 プロセッサタイプを選択する 11.1.1 R2000, R3000 ファミリ 11.1.2 R4000, R5000 ファミリ 11.1.3 R6000 11.1.4 Nevada 11.1.5 SB1 11.1.6 R10000 11.1.7 MIPS32 11.2 オプションの互換性 11.3 クロスコンパイル 11.4 32-bit vs. 64-bit 12. 参考書籍 12.1 See MIPS Run 12.2 The MIPS Programmer's Handbook 12.3 Computer Architecture - A Quantitative Approach 12.4 UNIX System V ABI MIPS Processor Supplement 12.5 mips.com サイト 12.6 NEC サイト 12.7 techpubs.sgi.com 12.8 oss.sgi.com 13. 日本語訳について ______________________________________________________________________ 1. Copyright Copyright (c) 1998,1999,2000,2001,2002 Ralf Baechle. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being Copyright, with no Front-Cover Texts and with no Back-Cover Texts. A copy of the GNU Free Documentation License is available on the World Wide Web at You can also obtain it by writing to the Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA 翻訳部の編集著作権 Translation Copyright (C) 2001 Seiji Kaneko 翻訳配布条件は、原著作物の配布条件と同じとします。 2. What is Linux/MIPS? Linux/MIPS とは、広く知られた Unix 互換 OS である Linux を MIPS アーキ テクチャに移植したものです。 Linux/MIPS は技術的には大きく異なった、小 さな組込用システムやサーバから大きなデスクトップマシンやサーバ (これら は少なくとも市場にでた時点ではその種のシステムとしては最良のものでし た) までの多数のシステムで稼働しています。 現時点での Linux/MIPS が他のオペレーティングシステムに勝る点としては o Linux システム全体がフリーソフトウェアのみからなること。 o 価格/性能比に優れていること。 o 多数のソフトウェアが使え、そしてその多くがまたフリーソフトウェアで あること。 o 増え続けている動作プラットホーム間で、バイナリ互換性があること。 o サイズが小さいため、Linux/MIPS は多くの組込用システムにぴったりであ ること。 つめて言えば、Linux は楽しい旅を提供すべく設計され、リリースされていま す。もちろん、行き着ける先は人によって違うでしょうし、自分の仕事に Linux が向いているのかを調べる必要もあるでしょう。このあたりをこの文書 で支援して行きたいと考えています。 3. この FAQ の入手先 この文書は様々なフォーマットでダウンロード可能です。 o HTML 版 o テキスト版 o PostScript 版 o Linux-Doc SGML 形式版 この FAQ は SGML ソースコードとして oss.sgi.com から anonymous CVS で得ることもできます。アーカイブ中には入手した SGML 文書を様々な形 式に変換するための Makefile を同梱しています。 ASCII 版は定期的に comp.os.linux.answers ニュースグループや様々な Linux 情報ソースに投 稿されています。 この文書の変更は、SGML 版に関する unified diff として Ralf Baechle (ralf@gnu.org) へ送ってください。他の形では送らないでください。メンテ ナンスが大変になりますので。 4. Linux/MIPS のネット上のリソース 4.1. Anonymous FTP サーバ Linux/MIPS で主となる二つの匿名 ftp サーバは次のものです。 このサーバは Linux/MIPS に関する ftp のほとんどすべての要求を満 たします。本当に。 これは MIPS, Inc 社のサーバです。他のものに加え、ここには最近の RedHat ベースのディストリビューションと、MIPS チップのエバリュエ ーションボードのサポート関連のものがあります。 リトルエンディアン機種向けの MIPS バイナリのもうひとつの提供元は、 ftp://intel.cleveland.lug.net/pub/Mipsel で、これは主に Cobalt Qube と 共に出荷された RedHat の、より新しい版のバイナリが置かれています。 4.2. 匿名 CVS サーバ 最先端に身を置きたいが、パッチファイルやまるごとの tar ファイルをダウ ンロードするのは避けたい方のために、匿名 CVS サーバを用意しています。 CVS を使えば、次のコマンドで Linux/MIPS のソースツリーをダウンロードす ることができます。 cvs -d :pserver:cvs@oss.sgi.com:/cvs login (anonymous CVS を使う最初の一回のみ必要です。パスワードは "cvs" です) cvs -d :pserver:cvs@oss.sgi.com:/cvs co linux、libc、gdb、faq のどれかを の箇所に指定してくださ い。 Linux コミュニティのもう一つの重要な CVS アーカイブは vger.kernel.org で、ここには配布のため Linus に送られる前の大量のコードが集められてい ます。 vger 自体はもう匿名アクセスを受け付けないようになりましたが、匿 名アクセスを提供しているミラーサイトがいくつかあります。それらへのアク セス方法については をご覧ください。 興味の対象となるモジュールは、``linux''、``modutils''、 ``pciutils''、``netutils'' でしょう。 4.3. ウェブサーバ 以下は Linux/MIPS 関連のウェブサーバの不完全なリストです。 このサーバは Linux/MIPS 関連の殆どを網羅しています。何かが必要に なったら、ここを見れば大概は既にあるでしょう。 このサイトには MIPS 社の版の Linux/MIPS ベースのディストリビュー ションと、 MIPS 社のプロセッサとエバリュエーションボードのための ツールがあります。 これは、Sony の Playstation 2 向けの Linux/MIPS サーバです。 4.4. Web CVS サーバ から最新の Linux/MIPS のカーネルソー スや、それ以外のこの CVS アーカイブでホストされているいくつかのプロ ジェクトに直接アクセスできます。直感的なインターフェースで、マウスをク リックするだけで最新の開発状況についていくことができます。 4.5. メーリングリスト Linux/MIPS に特化した二つのメーリングリストがあります。 linux-mips@oss.sgi.com このメーリングリストが、現在最大のメール流量を持ちます。これは多 少 SGI よりのところがありますが、かなりの数の SGI の技術者が参加 しており、開発者にとっては特に興味深いリストです。メーリングリス トへの参加はアドレス Majordomo (majordomo@oss.sgi.com) に、subscribe linux-mips の語を含めて電子メールを送ってくださ い。脱退するには unsubscribe linux-mips と送ってください。もっと 詳しい情報については、 を参 照ください。 linux-cvs これは、Linux/MIPS コミュニティの中心的 CVS アーカイブである oss.sgi.com に CVS コミットがされる度に、アナウンスメッセージが 投稿されるためだけの目的のメーリングリストです。メーリングリスト への参加はアドレス Majordomo (majordomo@oss.sgi.com) に、subscribe linux-cvs と書いて電子メールを送ってください。脱退 するには unsubscribe linux-cvs と送ってください。 4.6. IRC チャネル irc.openprojects.net に Linux/MIPS 用の #mipslinux という名の IRC チャ ネルが用意されています。 5. Linux ディストリビューション 5.1. RedHat MIPSeb (ビッグエンディアン MIPS) 向けには、Rough Cuts Linux (以前 Hard Hat Linux と呼ばれていたもの) があります。これは RedHat Linux 5.1 のほ とんどを MIPSeb に移植したものです。これは から入手できます。 これは M68k、UltraSparc、PowerPC 向けとあわせ、"Rough Cuts" という名前 の RedHat 社のパッケージとして販売されていたため、RedHat の製品を売っ ているところで入手できました。これは 280MB のダウンロードを行わず手に 入れるには一番簡単な方法です。 RedHat はもうこの製品を作っていません が、運が良ければどこかの店かネットのどこかでこの CD が見つけられるで しょう。 Cobalt Qube を対象にした RedHat 5.2 のディストリビューションがありま す。バイナリは MIPSel (リトルエンディアン MIPS) アーキテクチャの他のマ シンでも完璧に走り、 から入 手できます。 に Redhat 6.0, 6.1 や 6.2 からのいろいろな rpm パッケージがあります。 5.2. Debian Debian への移植はまだ作業中です。現時点では SGI/Linux を元にして立ち上 げようとしており、dpkg はほとんど変更なしにマシン上でセルフコンパイル できています。 SGI 版以外に、リトルエンディアン機種への移植の関心も表 明されています。開発状況は Debian-MIPS 移植のページ に注目していてください。 【訳注:ここに書いてあるよりかなり進んでいます。現時点では DEC Station でリトルエンディアンポートが動作中。】 5.3. Simple このディストリビューションはいまのところビッグエンディアンシステム向け です。これは高度に実験的なもので、最新の gcc、binutils、glibc とカーネ ルを試したいユーザのためのものです。これは MIPS 用としては、唯一となる glibc 2.2 を用いたディストリビューションです。最新のバージョンと付属の リリースノートは から得られます。また開発の助けのためのクロスコンパイラシステムも提供さ れています。 5.4. Algorithmics ツールチェイン 完全なディストリビューションではなく、単なる Linux ツールチェインで す。但し、これには MIPS 向けの商用サポートがあり、無償のスナップショッ トが提供されています。 Algorithmics 社は MIPS のサポートが専門で、開発環境の個々のツールにつ いて独自のソースツリーを維持しています。時々、オリジナルの GNU リリー ス (そのままでは MIPS のようにマイナーアーキテクチャではバグが避けがた いため) との同期も取られており、最も幅広い範囲の MIPS CPU に対して、最 も信頼性が高く、最高の性能を叩き出すコンパイラを提供することに注力して います。 これは私たちの SDE-MIPS 組み込みツールキットの中心となるコンパイラと同 じもので、2002 年一月出荷の Linux カーネルとアプリケーション開発の両方 に対して v5.0 から完全サ ポートされています。 6. Linux/MIPS がサポートするハードウェア 6.1. ハードウェアプラットフォーム 多くのマシンがあり、また一部のマシンは幾つかの異なったプロセッサオプ ションを持っていますが、その全部がサポートされているわけではありませ ん。 ``プロセッサタイプ'' の項を参照してあなたのプロセッサがサポートさ れているか確認してください。下記は Linux/MIPS が走っているマシ ン、Linux/MIPS が移植できそうなシステム、そして Linux/MIPS を走らせる ことに興味を持っている人たちのいるシステムの一覧です。また、このリスト はもう網羅的なものではありません。それは、サードパーティベンダが Linux/MIPS ベースのハードウェアやソフトウェアの出荷を始めているからで す。 6.1.1. Acer PICA Acer PICA は Mips Magnum 4000 の設計を引き継いでいます。これは 133MHz 動作の R4400PC CPU か、機種によっては 150MHz 動作で 512KB (オプション で 2MB のものもあります) の二次キャッシュ付きの R4400PC CPU が搭載され ており、昔の Magnum の G364 gfx カードの代わりに S3 968 チップを使った カードが使われています。このシステムは X サーバ以外はサポートされてい ます。 6.1.2. Baget/MIPS シリーズ Baget シリーズは R3000 プロセッサを使った次の 3 機種からなります: Baget 23, Baget 63, and Baget 83 です。Baget 23 と 63 は 25MHz の R3500A (基本的には R3000A チップです 【訳注: IDT 社。R3000A と浮動小数 点コプロセッサ R3010A を集積したもの】) を使った BT23-201 か 50MHz の R3081E を使った BT23-202 マザーボードを使っています。BT23-202 は VME バスと VIC068 システムコントローラチップを使っています。BT23-202 ボー ドは内部バスに PCI を使い、内部に VME バスを持っています。 BT23-201 ボ ードのサポートは Gleb Raiko (rajko@mech.math.msu.su) さんと、 Vladimir Roganov (vroganov@msiu.ru) さんによって行われました。また Serguei Zimin (zimin@msiu.ru) さんの助力がありました。 BT23-202、および 3 枚の BT23-201 ボードを共有 VME バスで接続した Baget 23B のサポートは開発中 です。 Baget 83 はリストを完全にするためだけの目的でふれています。これは 2MB の RAM しか積んでおらず、Linux を走らせるにはこれでは小さすぎます。 Baget/MIPS のコードは DECstation 移植向けのコードにマージされていま す。両方に向けたソースコードは から入 手できます。 6.1.3. Cobalt Qube と Raq Cobalt 社の Cobalt Qube 製品シリーズは、QED 社 (現 PMC Sierra 社) RM5230 を使ったディスプレイレスのローコストサーバシステムです。 Cobalt 社は、可能な限り Qube の固有の目的にあうようにした Linux/MIPS の特別な版を自社で開発しています。基本的には、Qube 用のカーネルは Linux/MIPS の 2.1.56 を元にして、安定性のために 2.0.30 にバックポート し、最適化したものです。Cobalt 社のカーネルは公式の Linux/MIPS 2.1.x カーネルに統合されたことはありません。 【訳注:Qube 1,2 は MIPS, Qube 3 は MIPS ではなく i386 サーバです。QED 社は PMC Sierra 社に買収され、すでに QED という名称を使っていませ ん。】 6.1.4. NEC の機種 NEC のシングルプロセッサの機種は Acer PICA システムの OEM ですので、該 当の項を参照ください。マルチプロセッサシステムは別物です。 Linux/MIPS の開発者達は OS を開発するに必要な技術情報を持っていません。進展が無い 限り、この点が NEC のマルチプロセッサシステムへの移植を阻む主要因であ り続けるでしょう。 6.1.5. NEC の VR41xx 系を使った機種 Linux VR プロジェクトでは NEC 社 VR41xx マイクロプロセッサを使った機器 への Linux の移植を行っています。これらの機種の多くはもともと Windows CE を動かすためのものです。現在基本的なドライバを備えた動作す るカーネルが Vadem 社の Clio、Casio 社の E-105、Everex 社の Freestyle 他の機種向けに同プロジェクトで作成されています。更に詳しい情報は を参照ください。 6.1.6. 東芝 TMPR39xx/Philips PR31700 プラットフォーム VR41xx と同様、これらのプロセッサを使った機器はもともと Windows CE を 動かすためのものです。但し、Sharp Mobilon と Compaq C-Series には基本 的ドライバを含んだ、動作するカーネルがあります。その他の機種については 開発中です。コードは Linux VR プロジェクトの一部で、このためより詳しい 情報は にあります。 6.1.7. Netpower 100 Netpower 100 は明らかに Acer PICA の外側のみ変えたものです。従ってサポ ートされているはずですが、テストはされていません。もし問題があるとする なら、マシン判定の関連でしょう。 6.1.8. Nintendo 64 Nintendo 64 は 4MB の RAM を持つ R4300 ベースのゲーム機です。グラ フィックチップは任天堂向けに Silicon Graphic 社で開発されました。この マシンへのポートは現在「できたらいいな」程度の状態であり、任天堂が必要 な技術情報の公開を決定するまではその状態のままでしょう。もっともこの機 種に Linux/MIPS のコードを移植するのが良い考えなのかどうかも問題ではあ りますが。 6.1.9. Silicon Graphics Challenge S このマシンは Indy によく似ています。違いはこのマシンにはキーボードとグ ラフィックカードがないこと、その代わりに WD33C95 チップを使った SCSI アダプタが追加されていることです。この WD33C95 アダプタは現時点ではサ ポートされていません。 6.1.10. Silicon Graphics Indigo このマシンをここで言及しているのは、Indy や Indigo 2 と良く混同される ためです。 Indigo は R3000 を使った別のアーキテクチャの機種で、まだサ ポートされていません。 6.1.11. Silicon Graphics Indigo2 このマシンは Indigo の後継機種で、Indy ととてもよく似ています。この機 種は現在サポートされていますが、かなりの機能が欠けています。また、シリ アルコンソールを使わなければいけません。Indigo2 を持っていて、現在の状 態でも良いので Linux を動かしてみたいということならば、 Florian Lohoff (flo@rfc822.org) さんか Klaus Naumann (spock@mgnet.de) さんに連絡を 取ってください。 6.1.12. Silicon Graphics Indy Indy は現時点では唯一の、ほとんどサポートされていると言って良い Silicon Graphics 社の機種です。唯一のサポートされているグラフィックカ ードは Newport カード、別名 ``XL'' グラフィックスカード、です。Indy に は周波数が様々の多数の CPU オプションがあり、全部サポートされていま す。また、Guido Guenther (guido.guenther@gmx.net) さんの書いた X サー バも用意されました。もしあなたの Indy で Newport コンソールが使えるな ら、この X サーバも同様に使えるはずです。このサーバは XFree86 4.0 ベー スで、カタツムリ並の速度しかでませんが、とてもよく動作します。試してみ たい方は をご覧 ください。 6.1.12.1. 有効なメモリ量が変です ブート時に Indy のカーネルは有効なメモリ量を次のようなメッセージで表示 します。 Memory: 27976k/163372k available (1220k kernel code, 2324k data) 最初の 2 つの数字が大きく違うのは、Indy のメモリアドレス空間内には先頭 の 128MB がイメージとして現れるためです。この 2 つの数字の違いはこのた め大体 128MB ぐらいで、何かの問題を示しているわけではありません。カー ネル 2.3.23 からはこの 128MB の差は数えられないようになっています。 6.1.12.2. Indy PROM 関連の問題 一部の人たちが、マシンを保守パーツ等でアップグレードした後にこの問題を 報告しています。 Indy にはいくつかの PROM の版があります。古い PROM 版 のマシンで新しい種類の CPU にアップグレードした場合、例えば R4600SC を R5000SC モジュールにするなどした場合、次のようなメッセージを出してセル フテストがクラッシュします。 Exception: Status register: 0x30004803 Cause register: 0x4000 Exception PC: 0xbfc0b598 Interrupt exception CPU Parity Error Interrupt Local I/O interrupt register 1: 0x80 CPU parity error register: 0x80b CPU parity error: address: 0x1fc0b598 NESTED EXCEPTION #1 at EPC: 9fc3df00; first exception at PC: bfc0b598 この場合、マシンの PROM を新しい版にアップグレードするか、古い CPU に 戻す必要があります (通常 R4000SC と R4400SC モジュールは動くはずで す)。はっきり言って、この問題は Linux とは無関係です。ここでこれを取り 上げているのは幾人かの Linux ユーザがこれについて質問を出していたから です。 6.1.12.3. 私の Indy でメモリがこんなにシステムで使われてしまうのはな ぜ? ブート時に Indy の `Memory: ...' メッセージは 128 MB のメモリがシステ ムで使われていると答えます。これは正常です。 PC アーキテクチャで 640KB から 1024KB までにギャップが開いているのと同様、 Indy のメモリアドレス 空間内に最初の 128MB がイメージとして現れる部分があるためです。Linux はそのことを知っていて、そのメモリを単に無視するため、このようなメッセ ージがでるのです。 6.1.13. Silicon Graphics Origin 200 と 2000 Ralf Baechle (ralf@gnu.org) さんと SGI 社員のチームが Origin 200 への 移植に取り組んでいます。これは現在まだ初期の段階ですが、単一プロセッサ でもマルチプロセッサでも走り、内蔵の IOC3 Ethernet と SCSI ホストアダ プタのドライバがあります。コードは Linux/MIPS の CVS ツリーから得られ ます。 6.1.14. Silicon Graphics Onyx 2 Onyx 2 は、基本的には Origin 2000 に追加のグラフィックハードウェアがつ いたものです。現時点でこの追加グラフィックハードウェアの Linux サポー トはできあがっていません。それ以外の点では、通常のディスプレイなしの Origin 2000 構成と同程度に Linux が走るはずです。 6.1.15. Silicon Graphics Power Series これはとても古い R3000 対称マルチプロセッサ機です。これらの機種のハー ドウェアのドキュメントはありませんし、マシン自体既にあまり残っていませ んし、ハードウェアには妙な癖があります。簡単にいって、Linux がこれらの マシンで走る可能性はほとんどゼロです。もっとも、挑戦者の意気を挫こうと いうわけではありませんが…。 6.1.16. SGI マシンのシリアルコンソール 使っているカーネルに、シリアルインターフェースとシリアルコンソールのた めの適切なドライバが組み込まれるようにしてください。 Indy と Challenge S では ARC 環境変数 console を d1 か d2 のどちらか (コンソー ルとして使おうとしているシリアルインターフェース側) に設定してくださ い。 ブート時に、全てのカーネルメッセージがシリアルコンソールに現れ、 init が動き出した時点から何も出なくなるという問題に出くわしたのなら、多分あ なたの /dev/console の設定が間違っているのでしょう。カーネルソースをイ ンストールしているなら Linux カーネルソースの /usr/src/linux/Documentation/serial-console.txt に詳しい情報がみつかり ます。 6.1.17. Other Silicon Graphics machines 現時点でその他の Silicon Graphics 社のマシンはサポートされていません。 これらサポートされていない機種には、モトローラの 68k を使ったとても 古 い マシンも含まれます。 6.1.18. Sony プレイステーション Sony のプレイステーションは R3000 派生の機種を使っており、Sony の自社 開発のグラフィックチップセットを使っています。このマシンは理論的には Linux を走らせることができるはずですが、Sony が必要な技術情報を現時点 で提供していないので移植は困難です。端的に言って、多数の人がこのシステ ムで Linux を走らせることに興味を表明した時点から何も進んでいません。 6.1.19. SNI RM200C 下に書かれている RM200 と違って、このマシンは EISA と PCI スロットを 持っています。RM200C はオンボードの NCR53c810A SCSI コントローラを除い てサポートされています。 6.1.20. SNI RM200 あなたのマシンに EISA と PCI スロットの両方があるなら、それは RM200C です (上をご覧ください)。このアーキテクチャ的なわずかな違いのた め、RM200 のほうは現在公式ソースではサポートされていません。 Michael Engel (engel@numerik.math.uni-siegen.de) さんが彼の RM200 を部分的に動 くところまで持ってきていますが、このパッチはまだ公式の Linux/MIPS ソー スに含まれてはいません。 6.1.21. SNI RM300C RM300 は技術的には RM200C にとてもよく似ています。従って現在の Linux カーネルで動くはずですが、まだ動作レポートを受け取っていません。 6.1.22. SNI RM400 RM400 はサポートされていません。 6.1.23. SNI RW320 これは SGI Indigo の OEM 品で、従ってサポートされていません。 6.1.24. Algorithmics P-6032 and P-6064 (and P-4032, P-5064) Algorithmics ( ) 社は MIPS のプロトタイプ開発 用の一連のシングルボードコンピュータを発売していて、それら全部に関する Linux カーネルを保守しています。 o P-6032 は 32-bit バスの CPU (PMC Sierra RM5231, NEC VR43x0, NEC VR5432, IDT 64x74) 向けのボードです。 o P-6064 は 64-bit バスの CPU (PMC Sierra RM70xx, NEC VR5500 など) 向 けのボードです。 o P-4032 は旧製品で、P-6032が後継になっています。また P-5064 は旧製品 で、P-6064が後継になっています。この二機種向けの Linux カーネルは多 分提供されていますが、最新版ではないでしょう。 すべてのボードは標準 I/O と Ethernet、ディスクインターフェースをボード 上に実装し、その他のコントローラを追加するための数個の PCI スロットを 持っています。このボードは設定の自由度が高く、どちらのバイト順 (エン ディアン) でも動作させることができます。全製品が 64-bit カーネルの対象 とできますが、いまのところ私たちが作業している Linux 関連の仕事は全部 32-bit コードを用いています。これらの製品は出荷中で、サポートされてお り、PDF 形式のマニュアルがオンラインで入手可能です。例えば P-6032 につ いては をご覧くだ さい。 これを書いている時点 (2002 年 1月) では私たちは 2.4 カーネルを使ってい ます。カーネルコードは MIPS Technologies, Inc. 社の人たちの移植とあわ せたものになっています。Algorithmics はこのカーネルの浮動小数点例外ハ ンドラとエミュレータを書いています。この部分は MIPS CPU で浮動小数点演 算を信頼性良く、正しく実行するために必須です。 Algorithmics のカーネルと、MIPS ユーザランドへのリンクは のリンクページから辿れ ます。 Algorithmics は、GNU ``toolchain'' の維持もおこなっており、無償のス ナップショットと商用のサポートのあるバージョンの両方を提供しています。 商用の Linux 開発を行う場合にはご検討下さい。 Algorithmics で連絡もで きます。 6.1.25. DECstation シリーズ 80 年代後半から 90 年代初頭にかけて、DEC (現 Compaq) は MIPS を使った ワークステーションを DECsystem とか DECstation という名前で製造してい ました。他の x86 や Alpha プロセッサを使用したマシンも DECstation の名 前で販売されましたが、これらは明らかにこの FAQ の対象ではありません。 Paul M. Antoine さんの始めた DECstation に対するサポートはまだ開発中で す。最近は、ほとんどの作業は Harald Koerfgen (hkoerfg@web.de) さんを中 心とする人たちが行っています。インターネットでは DECstation 関連の情報 は にあります。 DECstation ファミリは 12MHz の R2000/R2010 を用いた DECstation 2100 か ら 60 MHz の R4400SC を用いた DECstation 5000/260 まで多岐にわたってい ます。 現在活発に開発が行われている DECstation の機種は o 2100, コード名 PMAX o 5000/xx (Personal DECstation), コード名 MAXine o 5000/1xx, コード名 3MIN o 5000/200, コード名 3MAX o 5000/2x0, コード名 3MAX+ o 5900/2x0 (3MAX+ と同一です). 下記の DECstation モデルは誰も作業していないのでみなしご状態ですが、こ れらのモデルに対するサポートは比較的やさしいはずです。 o 3100, 2100 と同じですが、CPU だけ 16MHz の R2000A/R2010A です。 o 5100, コード名 MIPSMATE, ほとんど 2100 と同じですが、R3000/R3010 チップセットを使っています。 その他の DECstation ファミリは、x86 を使ったものを除いて、CPU だけ MIPS CPU に変えた VAX と見なせます。これらのマシンについては全く何の情 報もなく、VAXLinux ポートが息を吹き返さない限り、これらのマシンがサポ ートされることは起こりそうもありません。具体的には o 5400, コード名 MIPSFAIR o 5500, コード名 MIPSFAIR2 o 5800, コード名 ISIS 6.1.26. MIPS Magnum 4000 / Olivetti M700-10 この二つの機種はほとんど同一です。ACE イニシアティブの頃に、Olivetti は Jazz デザインのライセンスを得て、OS として Windows NT を搭載したマ シンを出荷していました。MIPS Computer Systems 社は Jazz デザインを購入 して MIPS Magnum 4000 シリーズの機種として出荷していました。 Magnum 4000 システムはオペレーティングシステムとして Windows NT と RISC/os が 製品化されていました。 これらのマシンのファームウェアはインストールされていた OS の種類により ます。 Linux/MIPS はこの二種のうちリトルエンディアンのファームウェアの みをサポートします。 M700-10 は NT マシンとしてのみ売られていたため、 この機種にはすべてリトルエンディアンのファームウェアが搭載されていま す。 MIPS Magnum の場合はもっと複雑です。もしあなたのマシンが RISC/os 用のビッグエンディアン構成になっていた場合には、リトルエンディアンの ファームウェアに入れ直す必要があります。このファームウェアは元々すべて の Magnum の添付フロッピーに含まれていましたが、フロッピーがもう無いと 言うことなら から 匿名 ftp でダウンロードできます。 M700 はファームウェア環境変数 ConsoleIn と ConsoleOut を multi()serial(0)term() に設定することでディスプレイレスの動作をさせる よう再設定可能です。また、有効な ARC デバイスの一覧を listdev コマンド で見ることができます。 一部のマシンの場合、例えば G364 グラフィックカードが搭載されていない が、コンソールは標準グラフィックを使う構成のままになっている場合などで は、ボード上の JP2 を設定する必要があります。次のリセットの後、マシン は COM2 をシリアルコンソールとしてリブートします。 6.1.27. MIPS Magnum 4000SC MIPS Magnum 4000SC は R4000SC CPU を積んでいる以外は Magnum 4000 と同 じものです。上の項をご覧ください。 6.1.28. MIPS Malta Linux 2.4 と 2.5 カーネルには、Malta エバリュエーションボードと、その すべての CPU オプションに対してのサポートが含まれるようになっていま す。 6.2. プロセッサタイプ 6.2.1. MIPS32 ファミリ MIPS 4kc と Alchemy 社 (現 AMD 社) Au1000 ほかがサポートされています。 6.2.2. MIPS64 ファミリ MIPS 5kc, 20kc, Sibyte 社 SB1 コア/SB1250 SOC(System On Chip) ほかがサ ポートされています。 6.2.3. R2000, R3000 family Linux は最初の MIPS プロセッサ R2000, R3000 及びこの二つから派生した多 くのプロセッサ (例えば R3081 など) をサポートしています。 6.2.4. R4000, R5000 and RM7000 family Linux は R4000 ファミリの多くのメンバーをサポートしています。現時点で は R4000PC, R4400PC, R4300, R4600, R4700, R5000, R5230, R5260, RM7000 がサポートされています。動作確認済リストは増え続けています。 サポートされていないのは、R4000MC と R4400MC CPU (マルチプロセッサシス テム向け) と、CPU 制御の二次キャッシュを持つ R5000 システムです。後者 のほうは、キャッシュが外部のキャッシュコントローラではなく R5000 自身 で制御されている場合を指します。この違いは重要です。と言うのは、MIPS ではキャッシュはアーキテクチャ的に可視で、ソフトウェアで制御してやる必 要があるためです。 R4000SC/R4400SC サポートで CPU モジュールを提供してくれた Ulf Carlsson (ulfc@engr.sgi.com) さんの功績は特記されるべきでしょう。 6.2.5. R6000 MIPS 系のプロセッサの R6000 はときどき IBM 社のワークステーションの RS6000 と混同されます。ですので、もし IBM 機の Linux のことが知りたい という希望を持ってこの文書を読まれているのでしたら、読む文書が違ってい ます。 R6000 は現在サポートされていません。これは 32-bit の MIPS ISA 2 (MIPS II) に準拠したプロセッサで、興味深くはありますがかなり変なチップです。 これは BIT Technology 社で開発・製造されたもので、後に NEC が生産を引 き継ぎました。これは Cray 社のスーパーコンピュータで使われていて、現在 でも使われている特に高速なチップ向けの ECL プロセスで作られています。 このプロセッサは、TLB slice と呼ばれる TLB を外付けの一次キャッシュの 最後の数ラインの一部として実現する手法を採っています。このため、MMU は R3000 や R4000 シリーズのものと相当に異なり、これがこのプロセッサがサ ポートされていない理由の一つになっています。 6.2.6. R8000 R8000 は現在未サポートです。これはこのプロセッサが一部の SGI の機種の みで使われた比較的まれなプロセッサで、Linux/MIPS 開発者が誰もこのよう な機種を持っていない、ということも理由の一部です。 R8000 はかなり興味深いシリコンチップです。このプロセッサのキャッシュと TLB 周りはほかの MIPS ファミリとはかなり違っています。このプロセッサは R10000 が完成する前に、浮動小数点最高性能の名誉を Silicon Graphics が 奪い返すべくクイックハックで作成されたものです。 6.2.7. R10000 R10000 は mips64 カーネルとしてサポートされています。現在 IP22 アーキ テクチャ (SGI Indy、Challenge S と Indigo 2) および Origin でサポート されています。 このプロセッサはキャッシュがノン・コヒーレントなシステムではとても制御 しづらく、このためそのようなシステムでこのプロセッサがサポートできるよ うになるまでにはしばらくかかると思います。現時点では、そのようなシステ ムには SGI O2 と Indigo があります。 6.2.8. TLB の無いプロセッサ 組み込み向けの用途で、上記 CPU の派生品として TLB 機能を欠くものがあり ます。これらの品種はサポートしませんし、サポートされることを期待しても らっても困ります。 ハッカーなら、マイクロコントローラ向けの Linux (略称 ucLinux) をちょっ と調べてみようと思われるかもしれません。これは TLB のないプロセッサを サポート可能です。但し、プロセッサのタイプに TLB の有無が与える影響が ほとんどないことを考えると、やはり TLB のあるプロセッサを選択すること を薦めます。設計作業をずっと節約できますので。 6.2.9. 浮動小数点機構が一部分サポートされた、または搭載されていないプ ロセッサ Linux/MIPS バージョン 2.4 から、完全な浮動小数点エミュレーション機能が 加わりましたので、このようなプロセッサも、浮動小数点付きのプロセッサと のバイナリ互換性を保ったままサポート可能になっています。 6.3. 私たちがサポートしていかないハードウェア 6.3.1. IBM RS6000 名前の通り、これは RS6000 プロセッサシリーズを使った IBM のマシンで す。このため、これは Linux/MIPS プロジェクトの対象ではありません。よく IBM RS6000 と MIPS R6000 が混同されますが。しかしながら、Linux/PPC プ ロジェクトは該当機種をサポートしているかもしれません。詳しい情報は を見てみてください。 6.3.2. VaxStation 名前にも含まれているとおり、これらのマシンは Digital Equipment 社の VAX ファミリのメンバーです。ここでこれを取り上げるのは MIPS を使った同 じ DEC の DECstation と似たタイプ名のため、よく混同されるからです。こ の 2 つのファミリにはアーキテクチャ的に共通点はほとんどありません。残 念ながら、この VaxStation は、他の VAX ファミリ同様現在サポートされて いません。 6.3.3. SGI VisPC これらは実際は x86 プロセッサを使ったシステムで、この FAQ の対象外で す。 Visual Workstation の旧機種には多少制約のある Linux サポートが提 供されています。現在の Visual Workstations は公式にサポートされた SGI の製品です。詳しい情報は をご覧ください。 6.3.4. Iris 3000 などのモトローラ 68k ベースの機種 これらは とても 古いマシンで、多分現時点で十年以上経っています。これら のマシンは MIPS プロセッサを使っていませんので Linux/MIPS プロジェクト ではサポートしませんし、これらの機種の情報を探すためならこの文書は間 違った場所です。 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: Status register: 0x300004803 Cause register: 0x8008 Exception PC: 0x881385cc, Exception RA: 0x88002614 exception, bad address: 0x47c4 Local I/O interrupt register 1: 0x80 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 Baechle (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 が重要です。 8. Milo Milo は ARC ファームウェアのリトルエンディアン MIPS システムをブートさ せるためのブートローダであり、現在 Jazz ファミリと SNI RM 200 に使われ ています。Milo は Alpha システムで使われる Milo と名前が同じで目的もほ ぼ同じですが、この二つの Milo にはそれ以外に共通点はありません。この二 つは別々の人たちが開発しましたし、コードも全く別々で、違うハードウェア プラットフォームで動作します。この二つが同じ名前なのは、単に歴史的な 「事故」というべきものです。 Milo は RM200C 以外の ARC プラットフォームでは必要なくなっています。他 のすべてのプラットフォームでは ECOFF カーネル (またはより新らしいファ ームウェア下では ELF カーネル) が、Milo や相当品の必要なしに直接実行可 能です。RM200C ではファームウェアのおかしな振る舞いのため、Milo 0.27.1 がカーネルのブートのために引き続き必要です。 8.1. Milo のビルド Milo のビルドの手順は、Milo パッケージの README ファイルに詳細にわたっ て書かれています。Milo はカーネルのヘッダファイルに多少の依存関係を持 ちますが、このヘッダファイルは時と共に変わるものですから、Milo は得て して簡単に作成できません。但し、Milo の配布ファイルには Milo と Pandora 両方のバイナリが含まれています。Milo のビルドは簡単ではありま せん。もし Milo を自分で変更したいと言うことでなければ、とりあえずのお 勧めは Milo tarball に含まれているバイナリを用いることです。 8.2. Pandora Pandora は技術文書のないシステムを解析することを主たる目的として開発さ れた簡単なデバッガです。 Pandora には逆アセンブラやメモリダンプ機能な どが含まれています。単に Linux を使いたいだけならば、Pandora を (サイ ズは小さいですが) インストールする必要はないでしょう。 9. ローダブルモジュール Linux/MIPS でモジュールを使うのは実に簡単です。他の Linux システムのモ ジュール機能を使っていた人が期待するとおりに動きます。モジュールを使っ たシステムを走らせたい場合、少なくとも 980919 版以降のカーネルと、バー ジョン 2.1.121 より新しい modutils を使ってください。これより古いもの は動きません。 10. クロスコンパイラ環境の構築方法 10.1. 入手できるバイナリ クロスコンパイラ環境を構築する一番やさしい方法は、バイナリをダウンロー ドしてくることです。 Linux/i386 用のビッグエンディアンターゲット向けの パッケージは次のものです。 binutils-mips-linux-2.8.1-1.i386.rpm egcs-c++-mips-linux-1.1.2-2.i386.rpm egcs-g77-mips-linux-1.1.2-2.i386.rpm egcs-libstdc++-mips-linux-2.9.0-2.i386.rpm egcs-mips-linux-1.1.2-2.i386.rpm egcs-objc-mips-linux-1.1.2-2.i386.rpm そして、次がリトルエンディアン向けのパッケージのリストです。 binutils-mipsel-linux-2.8.1-1.i386.rpm egcs-c++-mipsel-linux-1.1.2-2.i386.rpm egcs-g77-mipsel-linux-1.1.2-2.i386.rpm egcs-libstdc++-mipsel-linux-2.9.0-2.i386.rpm egcs-mipsel-linux-1.1.2-2.i386.rpm egcs-objc-mipsel-linux-1.1.2-2.i386.rpm 64-bit MIPS カーネル向けには、現在一つのパッケージのみが入手できます。 egcs-mips64-linux-1.1.2-2.i386.rpm このコンパイラはビッグエンディアン向けです。これは現在 64-bit カーネル をサポートしたリトルエンディアンのマシンがないためです。リトルエンディ アン向けのコンパイラも需要がでてくれば提供されるでしょう。 これらの全部をインストールする必要はなく、殆どの人は C++、Objective C と Fortran 77 の各コンパイラは省略してよいでしょう。 Intel 版のバイナ リは GNU libc 2.1 にリンクされているので、アップグレードする際にはこれ もインストールする必要があるでしょう。 10.2. おすすめのコンパイラのバージョン egcs 1.1.2 より古いコンパイラは、生成するコードにバグがあるため、カー ネルのコンパイル用としてはもうサポートされていません。現時点では、もう だいぶ経っていますが、まだ binutils 2.8.1 をお勧めします。 10.3. 自分でクロスコンパイラを作成する 最初に次のソースパッケージをダウンロードしてきてください。 o binutils-2.8.1.tar.gz o egcs-1.1.2.tar.gz o glibc-2.0.6.tar.gz o glibc-crypt-2.0.6.tar.gz o glibc-localedata-2.0.6.tar.gz o glibc-linuxthreads-2.0.6.tar.gz これらのパッケージはお好みの GNU アーカイブサイトか、 oss.sgi.com から入手できます。更に、パッチが必要になります。MIPS に限った話では ありませんが、バンドルされていないパッチはいつでも最新のものとは限 りませんし、ビルドするには MIPS に固有ではない追加パッチが必要にな るかもしれません。これらの別配布のパッチは異なったバージョン番号付 けを行っていることもありますので、お勧めの方法は oss.sgi.com で配布 されている RPM パッケージからソースとパッチを入手することです。 また、上記のものが現在お勧めのバージョンです。古いバージョンは動くかど うか分かりません。もし古いバージョンを使おうと頑張っているということで したら、バグレポートは送らないでください。どちらにせよ見ませんので。ま た、インストールする際には、binutils、egcs、 glibc の順に行ってくださ い。古いバージョンが既に入っている場合を除いては、この順番を変えると うまくいきません。 10.4. 必要なディスク容量 インストール時にファイル群をインストールする先のディレクトリを選択しな ければなりません。以下ではそのディレクトリを と呼ぶことにしま す。特定の条件で発生するような問題を避けるため、 の値はそのマ シンの本来の gcc と同じ値にするのが最良です。例えば gcc が /usr/bin/gcc としてインストールされているなら、 として /usr を 選んでください。これからインストールしようとしているパッケージすべてに 対して、同じ を用いる必要があります。 コンパイル中には、binutils には約 31MB のディスクの空きが必要です。ま た、インストールするためには のあるパーティションに 7MB の空 きが必要です。egcs の作成には 71MB が、インストールには 14MB が必要で す。 GNU libc はコンパイルに 149MB の空きが、そしてインストールには 33MB が必要です。注意してほしいのは、これは単なる目安だということで す。異なるプロセッサやオペレーティングシステムやコンパイラオプションに よって大きく異なるかもしれません。 10.5. バイトオーダ MIPS アーキテクチャの特徴的な機能の一つには、R8000 を除くすべてのプロ セッサでは、設定によってビッグエンディアンとリトルエンディアンのどちら ででも動作可能であることが挙げられます。バイトオーダとは、メモリ中にプ ロセッサが複数のバイトを格納するやり方です。ビッグエンディアンのマシン では、最大の桁側のバイト値が最小のアドレス位置に格納されます。リトルエ ンディアンのマシンでは、これが最大のアドレス位置に格納されます。複数の 数字からなる数を左から右に書くか、逆順で書くかの違いだ、と考えてくださ い。クロスコンパイラ環境を正しく設定するためには、クロスコンパイラのタ ーゲットとなるマシンのバイトオーダを知らなければなりません。この内容を 既に知っているのでなければ、マシンのバイトオーダについて ``ハードウェ アプラットフォーム'' の節を参照してください。 10.6. 設定に使う名前 autoconf を使うパッケージの多くは、様々なアーキテクチャとオペレーティ ングシステムをサポートしています。これら多くの設定を区別するため、名前 が ----- のように付け られています。この表現を使えば、Linux/MIPS の設定の名前はビッグエン ディアン向けには mips-unknown-linux-gnu で、リトルエンディアン向けには mipsel-unknown-linux-gnu です。この二つの名前は多少長いため、順に mips-linux と mipsel-linux という省略形が許されています。クロスコンパ イル時の各パッケージのインストールでは、全パッケージに同じ名前を使わな ければいけません。また、他の名前、例えば mips-sni-linux や mipsel-sni- linux も正しい設定名ですが、mips-linux と mipsel-linux のほうを使って ください。これらの名前は Linux カーネルソースなどの他のパッケージでも 使っていますので、上記の二つ以外のものを使うとクロスコンパイル時に変更 を行う必要が出てきます。 以下ではターゲットの設定に使う名前は と呼びます。 10.7. GNU Binutils のインストール ここは最初の、最もやさしい部分です (少なくとも多少は真っ当な UNIX 系の OS 上でインストールしようとしている場合には、ですが)。十分な空き容量の あるディレクトリに cd して、次の処理を行ってください。 gzip -cd binutils-.tar.gz | tar xf - cd binutils- patch -p1 < ../binutils--mips.patch ./configure --prefix= --target= make CFLAGS=-O2 make install これで通常は正しく動作します。但し、GCC 2.7.x をコンパイラに使っている 一部のマシンではコアダンプすることが知られています。これは GCC の既知 のバグで、ホストマシンのコンパイラを GCC 2.8.1 以降のものにすることで 修正できます。 10.8. assert.hについて 一部の人たちの環境には古い assert.h ヘッダファイルがインストールされて います。これはおそらく古いクロスコンパイル環境の残骸だと思いますが、こ のファイルが残っていると autoconf はなにも言わずに失敗します。 Assert.h が必要になることはなく、これは昔の版の GCC のバグのためにイン ストールされたものです。 //include/assert.h があなたの インストール環境にないか、チェックしてください。もしあるなら、単に消し てください。これはどの版のクロスコンパイル環境でもインストールされるべ きでは決してありませんし、トラブルの元にもなります。 10.9. カーネルソースのインストール カーネルソースのインストールは簡単です。単にお好みのどこかのディレクト リに置き、設定するだけです。設定は必ず行ってください。というのは、その 過程で作成されるファイルが、インストールされるからです。設定の最後のほ うで CONFIG_CROSSCOMPILE を有効にすることを忘れないでください。引っか かる可能性のある問題は、場合によると bash のような GNU プログラムのイ ンストールが必要になるかもしれないこと、また PATH 環境変数を直して、ベ ンダの提供したものではなく GNU 版のプログラムが先に呼ばれるようにしな ければならないかもしれない、という二点だけです。インストール後に、直接 //include に行って二個のシンボリックリンク、asm と linux を include/asm と include/linux を指すように作成してください。こ の作業は、次のステップ中に必要なヘッダファイルが見つかるようにするため に、やっておかなければなりません。 10.10. egcs の最初のインストール さて、ここからが難所になります。いわゆるブートストラップ (ニワトリと 卵) 問題のためです。今回の場合、egcs のインストールには glibc があらか じめインストールされている必要がありますが、まだ動作するクロスコンパイ ラができていないので glibc のコンパイルができないのです。ありがたいこ とに、これを突破する必要があるのは、クロスコンパイラを作る最初の一回だ けです。この後 glibc をインストールし終えたら、物事はずっとスムーズに 行きます。では、行きましょう。 gzip -cd egcs-1.1.2.tar.gz | tar xf - cd egcs- patch -p1 < ../egcs-1.1.2-mips.patch ./configure --prefix= --with-newlib --target= make SUBDIRS="libiberty texinfo gcc" ALL_TARGET_MODULES= \ CONFIGURE_TARGET_MODULES= INSTALL_TARGET_MODULES= LANGUAGES="c" 慎重に、gcov、protoize、unprotoize とライブラリは作らないように進めま す。 Gcov はクロスコンパイラ環境では意味をなしませんし、protoize と unprotoize は gcc の makefile のバグのため、既存の自マシン用のプログラ ムを上書きしてしまうかもしれません。最後に、ライブラリは glibc がまだ インストールされていないため、作成できません。すべてうまくいったなら、 次のようにインストールしてください。 make SUBDIRS="libiberty texinfo gcc" INSTALL_TARGET_MODULES= \ LANGUAGES="c" install カーネルを作成するためのクロスコンパイラがほしいだけなら、ここで終了で す。 libc のクロスコンパイルは、ユーザアプリケーションをクロスコンパイ ルするためだけに必要になります。 10.11. ここまでやってきたことのテスト ここまでやってきたことが実際正しく動作するかを確認するには、この時点で カーネルをコンパイルしてみればよいでしょう。 MIPS カーネルソースのディ レクトリに cd して、`make clean; make dep; make'' と打ってみてくださ い。すべて問題ないなら、``make clean'' を行って再度ソースをきれいにし ておいてください。 10.12. GNU libc のインストール 注意:glibc 2.0.6 を egcs 1.0.3a より新しいコンパイラでコンパイルする のはお薦めできません。一部のプログラムが、バイナリの互換性問題にあたっ てしまうかもしれませんので。egcs 1.0.3a を使うか、公開されているバイナ リパッケージを使うことを勧めます。また、GNU libc をクロスコンパイルす るのは常に次善の方法です、というのはクロスコンパイル時にはコンパイルさ れない部分があるからです。適切なやり方が見つかって安定性が確認されしだ い、ここでそのやり方を文書化したいと思います。それでは、注意が済みまし たので、レシピを。 gzip -cd glibc-2.0.6.tar.gz | tar xf - cd glibc-2.0.6 gzip -cd glibc-crypt-2.0.6.tar.gz | tar xf - gzip -cd glibc-localedata-2.0.6.tar.gz | tar xf - gzip -cd glibc-linuxthreads-2.0.6.tar.gz | tar xf - patch -p1 < ../glibc-2.0.6-mips.patch mkdir build cd build CC=-gcc BUILD_CC=gcc AR=-ar RANLIB=-ranlib \ ../configure --prefix=/usr --host= \ --enable-add-ons=crypt,linuxthreads,localedata --enable-profile make これでコンパイル済みの GNU libc ができましたが、まだインストールする必 要があります。ここで単に make install と 打ってはいけません。これをや るとホストマシンのシステムファイルが Linux/MIPS 向けのファイルに置き換 わって、破壊的な結果になります。そうではなく、GNU libc のインストール をどこか他の任意のディレクトリ に一旦インストールして、そこ からクロスコンパイルに必要になる部品を実際のターゲットディレクトリに移 動します。 make install_root= install ここで、 に cd して、最後に GNU libc を手動でインストールしま す。 cd usr/include find . -print | cpio -pumd //include cd ../../lib find . -print | cpio -pumd //lib cd ../usr/lib find . -print | cpio -pumd //lib GNU libc には詳しいオンラインドキュメントが含まれています。あなたのシ ステムには既にこのドキュメントのどれかの版が含まれているでしょうから、 もし info ページをインストールしたくない場合 (1MB 弱節約できます) や、 既にインストールされている場合には、次の手順を飛ばしてください。 cd ../info gzip -9 *.info* find . -name \*.info\* -print | cpio -pumd /info ブートストラップしない人は、ここでインストールはおしまいです。 10.13. egcs の再作成 最初の egcs の作成は GNU libc が無いため途中で止まっていました。今は libc もインストールしてあるので、ここで egcs の再作成を行えます。今回 はクロスコンパイラとして完全なインストールができます。 gzip -cd egcs-.tar.gz | tar xf - cd egcs- patch -p1 < ../egcs-1.1.2-mips.patch ./configure --prefix= --target= make LANGUAGES="c c++ objective-c f77" 見たとおり、手順は最初の時と殆ど同じですが、今回は --with-newlib オプ ションは落とします。このオプションは libgcc のビルドが libc が無いこと で落ちるのを防ぐために必要でした。インストールは次のようにします。 make LANGUAGES="c c++ objective-c f77" install さて、殆ど完了です。もし Objective C や F77 コンパイラが不要なら、上記 のコマンドから省くことができます。各々 3MB 位の節約になりま す。gcov、protoize と unprotoize は作成しないでください。 10.14. C++、Objective C や F77 コンパイラを作成すべきでしょうか? この答えは、クロスコンパイラ環境の目的に大きく依存します。もしあなたが Linux カーネルを再作成することだけを考えているなら、何もかものセット アップを進める必要はなく、Objective C と F77 コンパイラは省いても問題 ないでしょう。但し、C++ コンパイラを作成する必要はあります。これは egcs ディストリビューションに含まれるライブラリを作成するには C++ が必 要なためです。 10.15. float.h はどうすればいいのでしょう float.h のインストールはもう必要ありません。egcs 1.0.3a の頃から自動的 に適切な float.h ヘッダファイルが作成され、インストールされるように なっています。 10.16. クロスコンパイルでの既知の問題 10.16.1. IRIX がクラッシュする Origin 200 で IRIX 6.5.1 を走らせている場合、Linux カーネルソースから ``make depend'' を実行するとクラッシュすることがあります。 Indy 上の IRIX 6.5 と Origin 200 の IRIX 6.5.4 は動くことが分かっています。 10.16.2. System V 系のホストでのリソース制限 System V 系の Unix システム、例えば IRIX や Solaris には子プロセスに渡 せる引数の個数に制限があり、この制限を Linux カーネルや GNU libc のク ロスコンパイル時に超えてしまうことがあります。 IRIX システムでは引数の リストの最大長の既定値は 20KB ですが、Linux では少なくとも 128KB はあ ります。このサイズは root から `systune ncargs 131072'' コマンドを使っ て変更できます。 10.17. GDB GDB をクロスデバッガとして作成することに興味を持つのは、カーネル開発者 だけでしょう。カーネル開発者にとっては、GDB は命綱かもしれません。この ようなリモートデバッグの設定はいつも二つの部分、あるマシン上で動く GDB リモートデバッガと、デバッグ対象の Linux/MIPS カーネルの動くターゲット マシン、からなります。この二台のマシン間は通常シリアルラインで接続され ています。ターゲットマシンのカーネルには『デバッグ用のはめ込みプラグ』 を備えておき、リモートシリアルプロトコルを用いる GDB ホストマシンと通 信できるようにしておく必要があります。 ターゲットのアーキテクチャに依存しますが、おそらく『デバッグ用のはめ込 みプラグ』は自分で作り込む必要があります。一般的に言って、シリアルライ ン用のとても簡単なルーチンを作る必要があるだけです。この作業は、殆どの マシンが通常 8250 や 16450 相当品を用いたよく似たシリアルハードウェア を用いているため、更に簡単なものとなっています。 【訳注: 8250 と 16450 は殆ど同じ。16550 はソフトウェア上位互換で、PC- AT 用のシリアルとして使われているもの。】 11. カーネルのコンパイル 11.1. プロセッサタイプを選択する 11.1.1. R2000, R3000 ファミリ これらのプロセッサでは、単に R3000 オプションを選択してください。この オプションで作成されたカーネルは R2000 と R3000 ファミリのプロセッサ以 外では走りません。 11.1.2. R4000, R5000 ファミリ Nevada ファミリを除いては、これらのプロセッサはカーネルの観点からはす べて互換です。最良の性能が得られるオプションを選択してください。 11.1.3. R6000 Linux は現在 R6000 をサポートしていないので、以下は完全に理論上のみの 話です。 R6000 のキャッシュと MNU アーキテクチャは、変とは言わないまで も独特で、とても扱いにくいため多量の対処作業が必要になります。このため R6000 カーネルは他のプロセッサでは動かないでしょうし、他のプロセッサ用 のカーネルも R6000 では動かないでしょう。 11.1.4. Nevada Nevada の愛称は、QED (現PMC Sierra) 社の RM5230, 5231, R5260, R5261, R5270 ファミリプロセッサに付けられたものです。このオプションでは、他の プロセッサではサポートされていない追加命令が有効にされるため、このオプ ションを選択していいのは、本当にこの一群のプロセッサのどれかを使ってい るときのみです。自信がなければ、 R4x00 か R5000 (上記参照) を使ってく ださい。 11.1.5. SB1 Sibyte SB1 プロセッサの時のみこのオプションを選択してください。このプ ロセッサ向けに作成されたカーネルは他のプロセッサでは動きませんし、逆も また真です。真に最先端の OS である Linux は、このプロセッサのシリコン がまだないのにも関わらず、このプロセッサをサポートしています。 【訳注: SB1 はコア名で、このコアを採用しているのは現時点で Broadcom BCM1250, BCM1125 です。Sibyte は Broadcom に買収されていますが、Sibyte の名称はまだ残しています。】 11.1.6. R10000 R10000, R12000 または R14000 システムで Linux を実行する場合にはこれを 選んでください。このオプションを付けて作られたカーネルは R4000 や R5000 ファミリプロセッサでは動作しません。 11.1.7. MIPS32 MIPS32 ファミリメンバで Linux を走らせる場合、これを指定してください。 【訳注: MIPS64 ファミリは、R4000/5000 で動くはずです。】 11.2. オプションの互換性 カーネル設定手順は、誤った設定が不可能になるような強過ぎる制約を入れて はいません。例えば SGI Indy ではフレームバッファは使えませんが、有効に することはできますし、その結果後でコンパイルエラーになります。この状況 は将来 CML2 が標準のカーネル設定言語になれば改善されるでしょうが、2.2 と 2.4 カーネルでは、自分で足下に気を付ける必要があります。 11.3. クロスコンパイル カーネルは非 MIPS システム上でのクロスコンパイル作成が可能となるよう に、注意深く開発されています。一旦クロスコンパイラの設定という崖を登っ てしまいさえすれば、クロスコンパイルは容易です。これを行うためには、二 つの選択枝があります。最初のものは、 CROSS_COMPILE=- (最後の ダッシュに注意) の後に mips-linux, mipsel-linux, mips64-linux, mips64el-linux のいずれかを続けたものを、make を起動する際の追加引数と して渡す方法です。このうちのどれにするかは、ターゲットマシンがビッグエ ンディアンかリトルエンディアンか、32-bit か 64-bit か、によります。も う一つのやり方は、CONFIG_CROSSCOMPILE 設定オプションを与える方法です。 カーネルはそれにより、CROSS_COMPILE に正しい値を自動的に設定しますの で、コマンド行が少し簡単になります。 11.4. 32-bit vs. 64-bit 標準では Linux/MIPS カーネルソースツリーは 32-bit ターゲットを作成する ようになっています。もし、64-bit カーネルをビルドしたい場合は、make が 呼び出されるすべての箇所で ARCH=mips64 の追加引数を渡してやる必要があ ります。 12. 参考書籍 12.1. See MIPS Run 著者: Dominic Sweetman, 版元: Morgan Kaufmann, ISBN 1-55860-410-3 この 本は MIPS プログラミングのかなりわかりやすいガイドを目指したもので、特 に他の 32-bit CPU と異なる点が詳細に書かれています。これは入手できる広 い範囲の MIPS CPU について読みやすい、包括的な説明が書かれた最初の本で す。この本は他のオペレーティングシステムのことを知らなくはないような MIPS プログラマに大いに助けになるはずです。また、この本の著者は free- unix の信奉者で Linux/MIPS メーリングリストに参加しています。 MIPS アーキテクチャの父、John Hennessey はこの本に次の序文を寄せていま す: 「この本は MIPS アーキテクチャについて書かれた本の中で、内容の完璧 さと読みやすさにおいて最高のものです。」 この本は RISC CPU に関する多少の説明と MIPS アーキテクチャと命令セット の詳細な説明 (CPU 制御のための co-processor 0 命令、キャッシュの章、例 外、メモリ管理及び浮動小数点) を含みます。また詳しいアセンブラ言語のガ イド、移植性に関するいくつかの注意点、そしてかなり詳しいソフトウェアの 例も書かれています。 次のサイトと o Algorithmics (Europe) o Morgan Kaufmann (US) o Amazon USA o Amazon UK 大きな書店で入手できます。512 ページで、US では約 $50、英国では 34 ポ ンドです。 更に二冊の本も挙げておきたいと思います。どちらも Morgan Kaufmann 社か らで、www.mkp.com や大きな書店で入手できると思います。 12.2. The MIPS Programmer's Handbook 著者: Farquhar and Bunce, 版元: Morgan Kaufmann, ISBN 1-55860-297-6. PMON の作者による、低レベルの MIPS プログラミングを試みる際の読みやす い入門書です。長所:例が豊富です。短所:アーキテクチャの大きな項目がい くつか抜けています (例えば、メモリ管理、浮動小数点や高度なキャッシュ管 理など)。これはこの本の読者層として想定されている組込用製品では使われ ない機能であるためです。 12.3. Computer Architecture - A Quantitative Approach 著者: Hennessy & Patterson, 版元: Morgan Kaufmann, ISBN 1-55860-329-8. 【和訳:コンピュ−タ・ア−キテクチャ〜設計・実現・評価の定量的アプロー チ〜ヘネシー&パターソン著、富田眞冶、村上和彰 訳 B5判、800ページ、価 格(本体11,650円+税)ISBN 4-8222-7152-8 日経BP社。訳は第一版のもので す】 現在のコンピュータアーキテクチャの基本中の基本の教科書で、プログラムが なぜ早かったり遅かったりするのかを知りたいなら必読です。この本が MIPS についてかどうかですが、とても MIPS に 似た アーキテクチャを例にしてい ます。この本の唯一の欠点はその大きさと重さです - 但し、重い本の通弊を もたず、この本はどのページにも価値があります。 12.4. UNIX System V ABI MIPS Processor Supplement By Prentice Hall, Published 05/1991, ISBN 0-13880-170-3. この本は MIPS 固有の技術標準、例えば関数呼び出し手順や、ELF の形式な ど、Linux/MIPS で使っている標準を多数規定しています。残念ながら、これ は現在品切れです。同様にサイト "http://www.mipsabi.org/" にも現在アク セスできません。 12.5. mips.com サイト 以下に各プロセッサの概説やデータシ ートが PDF 形式で置かれています。 12.6. NEC サイト NEC Electronics ( ) には NEC 製の VR41xx プロ セッサに関するマニュアルが一式そろっています。 【訳注:www.nec.co.jp にも多数置かれています。日本語のものは物によって は NEC に問い合わせる要あり。】 12.7. techpubs.sgi.com SGI 中心ですが、 にある ABI 関連の多数の文書 は Linux/MIPS にも適用されるものです。 12.8. oss.sgi.com Oss.sgi.com には 以下に ABI 関連の文書が集められており、その中には電子的に読める MIPS ABI 文書 や、N32 文書等があります。これらの内には他の場所でも手に入るものもあり ますが、ここは基本的には一カ所に関連文書のすべてが集められている場所、 です。 13. 日本語訳について 誤字・脱字・誤訳等なにかありましたら までお知らせくだ さい。 翻訳: o かねこ 校正: o 岡本さん o 中野さん