連載「Linux システム縮小化計画」
Last updated Wed, Feb 26, 2003

Linux システム縮小化計画読者の皆様へ
インターフェース 2002年7月号特集号で執筆した「Linux徹底詳解 ― ブート&ルートファイルシステム」では、i386-Linux カーネルの起動シーケンス・起動フロッピーディスクの作成・最小ルートファイルシステムの構築および標準ライブラリーによるサイズ肥大化の現状についてご紹介しました。

インターフェース特集号では、カーネルが起動し、ルートファイルシステムに基づきプロセスが起動する道のりを詳細に解説した訳ですが、開発現場ではさらに様々なツールやアプリケーションを稼働させる必要があります。ところが、一般的なディストリビューターが配布している Linux システムは最小でも数十MBを超えるファイルスペースを要求するため、このままでは組み込み向けシステムの構築は不可能に近い状況です。

「Linux システム縮小化計画」では、インターフェース特集号の内容からさらに一歩踏み込み、「現場で必要となるツールやアプリケーション・ライブラリーを最小限のリソース内にまとめ上げる」ノウハウを Linux における技術背景を踏まえながら紹介していきます。

平成14年11月14日

西 田 亙 (NISHIDA Wataru)

2003年 Vol.2 Linux システム縮小化計画 第2回 Linux カーネルイメージの仕組みとルートファイルシステム

第二回では、いよいよ「My distribution」が誕生します。現在 Linux ディストリビューショには、それこそ数え切れないほどの種類が存在します。ほとんどのユーザーはこれら「出来合い」のディストリビューションを利用している訳ですが、組み込みの現場ともなるとそうもいきません。

多くのディストリビューターにとって、最大のセールスポイントは多機能性と利便性に落ち着くようです。この結果、システムの冗長性は極めて高いものとなり、平気で数十MB単位の二次記憶装置を消費してしまいます。これでは、組み込み機器のように限られた資源(内蔵の Flash ROM は通常数MB)では、到底使い物になりません。それでは、全てをオーダーメイドで自作すれば良いではないかという話になる訳ですが、これまでフルスクラッチで Linux システムを構築するノウハウは、ほとんど公開されていなかったように思います。

一回目では BusyBox という Swiss Army Knife 並の強力な助っ人を用意できましたので、今回はブート・ルートディスク2枚組による、最も簡単な起動システムに挑戦してみましょう。

前半部では、Linux カーネルが出来るまでを簡単に俯瞰し、Linux カーネルのビルド過程やカーネルソースツリーに隠されたいくつかのピットフォールについて解説しています。これらのピットフォールは大変「危険」であるにもかかわらず、あまり知られていないようです。この機会にしっかり適切な回避策を覚えておきましょう。

後半部では、オリジナル・ルートファイルシステムの構築に挑戦し、2枚組のブート・ルートディスクを作成します。世界にひとつしかない、自分オリジナルのディストリビューションが起動する楽しみ・素晴らしさ、そして PC-UNIX 本来のシンプルで美しい姿を体感して頂ければ幸いです。(編集担当 大野氏)

重要なお知らせ

詳細は不明ですが、本誌に掲載した inittab (リスト10)では仮想コンソールの切り替えが動作しません。BusyBox の init コマンドに問題があるようですが、回避策として以下の訂正リストに従い、inittab および rcS を変更してください。この変更により、 ALT-F1, ALT-F2, ALT-F3, ALT-F4 によるコンソール切り替えが可能になります。

なお、ASKFIRST という名前が付いている通り、各コンソールでは Please press Enter to activate this console. というメッセージが表示されます。ここで、リターンキーを押すと BusyBox の ash シェルが起動します。exit でシェルを終了すると、再び Please press Enter to activate this console. が表示され、入力待ちとなります。また、今回新たに rcS スクリプトに syslogd -O /etc/messages 行を追加したことにより、syslog メッセージは /etc/messages で参照できるようになりました。

システム終了時は必ず halt を実行してください。今回のルートファイルシステムは RAMDISK ではなく、/dev/fd0 に直接展開されていますので、皆さんが加えた修正はすべてディスク上に記録されています。速度は少々遅いですが、ハードディスクと同じ感覚で再起動が可能なのです。

訂正 リスト10・11の変更にご注意ください!

  1. p.109 左カラム・上から4行目 FSTROUTE --> FASTROUTE
  2. p.110 右カラム・下から9行目 asm.h --> asm/xxx.h
  3. p.110 右カラム・下から10行目 asm-i386.h --> asm-i386/xxx.h
  4. p.115 左カラム・上から2行目 /etc/init/bin/init --> /etc/init, /bin/init
  5. p.115 リスト8 init プロセス --> init カーネルスレッド(プロセス0)
  6. p.116 図16 minon --> minor
  7. p.116 左カラム・上から6行目 ルートデバイスノード --> ルートデバイス
  8. p.119 図29 デバイスノードの範囲から zero が抜けている
  9. p.121 リスト10 3〜6行目のコマンド名の先頭のマイナスを削除
  10. p.121 リスト11 /bin/sh を削除し、syslogd -O /etc/messages を追加

リファレンスリスト

記事中使用ファイル

筆者が使用した Linux kernel 2.4.20 の .config ファイル、カーネルイメージ bzImage、BusyBox 0.60.5 用の Config.hinittabrcSfstab、ブートディスクイメージ boot.img、ルートディスクイメージ rootfs.img の tar.gz ファイルです 。後2者を dd コマンドで2枚のFDに書き出せば、そのままブート・ルートディスクとして使用可能です。

BusyBox

BusyBox original site

BusyBox commands

BusyBox コマンド一覧

GCC プログラミング工房

UNIX USER 誌で筆者が執筆中の連載です。この中で第6回から9回までにわたり、vmlinux や bzImage が出来るまでの道のりを詳細に解析しています。GNU 開発ツール使いこなしのための、スーパーテクニックも多々登場。

・第6回 Making of Linux
・第7回 make config と make depend の意義
・第8回 vmlinux 集約までの技
・第9回 make bzImage 制作技術

2002年 Vol.1 Linux システム縮小化計画 第1回 BusyBoxによるLinux基本環境の構築

記念すべき第一回は、組み込み Linux 界の重鎮 Erik Andersen 氏の手による BusyBox をご紹介します。本文中でも述べている通り、BusyBox は Debian, RedHat などを始め各種ディストリビューションのブートディスク作成に利用されています。

その理由は BusyBox が提供する100種類を超えるコマンド群のコンパクトさにあります。通常の Linux パッケージではこれらのツールのほとんどは GNU パッケージとして提供されているのですが、機能の豊富さを最優先に設計されているため、極めて冗長な作りになっています。また glibc など数多くのライブラリーに依存しているため、必要とする全てのリソースを合計すると簡単に数MBを超えてしまうのです。

標的システムのコストダウンを実現するため、またシステム全体を一人のエンジニアが把握できるだけのサイズまで絞り込むためには、まずこれらの無駄を徹底して削ぎ落とす作業が必要です。

今回は BusyBox がどういう仕組みで「コンパクト化」を実現しているのか考察を行った上で、実際にビルドを行い動作を検証します。 (編集担当 大野氏)

訂正

p.63 図2 一行目 gcc -c cat.c catmain. --> gcc -c cat.c catmain.c

リファレンスリスト

記事中ソースリスト tgz ファイル

記事中で使用したソースファイル集です。Makefile が用意されていますので、make 一発で実行ファイルが出来上がります。

BusyBox

BusyBox original site

BusyBox download

BusyBox ダウンロード

BusyBox 0.60.5

BusyBox 最新版 0.60.5 (tar.bz2)
Andersen 氏は 0.60.4 で最後と言っておきながら、脱稿後に 0.60.5 が発表されました。0.61 系列が発表される気配はまだありません。

BusyBox commands

BusyBox サポートコマンド一覧

Your SysOp is Wataru Nishida , M.D., Ph.D.