外部ストレージをルートファイルシステムにする手順
- 1. 概要
- 2. Debian 基本システムの入手
- 3. ストレージの初期化
- 3.1. USB ストレージの場合
- 3.2. SD カードの場合
- 3.3. NFS-Root の場合
- 4. Debian 基本システムの展開
- 5. マウント前の設定
- 5.1. /ROOTFS/etc/fstab
- 5.1.1. USB ストレージ の場合
- 5.1.2. SD カードの場合
- 5.1.3. NFS-Root の場合
- 5.2. /ROOTFS/etc/network/interfaces
- 5.3. /ROOTFS/etc/resolv.conf
- 6. カーネル起動パラメータの変更
- 6.1. USB ストレージの場合
- 6.2. SD カードの場合
- 6.3. NFS-Root の場合
- 7. 起動
- 7.1. USB ストレージ, SD カードの場合
- 7.2. NFS-Root の場合
- 8. ログイン
- 9. 起動後の設定
- 9.1. root のパスワード
- 9.2. APT の設定
- 9.3. タイムゾーンの設定
- 9.4. キーボードの配列
- 9.5. mtd-tools
- 9.6. udev
- 10. Tips
- 10.1. 起動の自動化
1. 概要
このドキュメントでは、ルートファイルシステムを外部のストレージに置く手順について説明します。
Bishop のルートファイルシステム (Debian GNU/Linux 4.0 etch) がプリインストールされる NAND は書き込み速度が遅く、サイズも 128MB であるため、開発時のルートファイルシステムには不向きです。開発中のルートファイルシステムは外部ストレージに置くことをお勧めします。
以下の外部ストレージを対象とします。
- USB ストレージ (USB メモリ、USB HDD)
- SD カード
- NFS マウントしたディレクトリ (NFS-Root)
以降では、作業を行うマシンを「ホスト」、Bishop を「ターゲット」と呼びます。
ホストの環境は Debian GNU/Linux を想定しますが、一般的な Linuxディストリビュージョンであれば手順に大きな違いはありません。
インストールするのは Debian GNU/Linux ベースのルートファイルシステムです。
2. Debian 基本システムの入手
Debian基本システムをダウンロードします。
debootstrap コマンドで作った Debian 基本システムに株式会社パイロンが Bishop 向けに独自の修正を加えたものです。 この Debian 基本システムに関する質問を Debian プロジェクトにすることはご遠慮ください。
3. ストレージの初期化
3.1. USB ストレージの場合
ホストに USB ストレージを接続します。
GNOME や KDE などのデスクトップ環境の場合、フォーマット済の USB ストレージが自動的にマウントされることがあります。自動的にマウントされた場合はアンマウントしてください。
# umount /dev/sda1
USB ストレージのデバイスファイルを /dev/sda とします。それ以外の場合は、適時読み替えてください。
パーティションは以下の構成とします。
| sda1 | ルートファイルシステム |
| sda2 | swap |
パーティションを作成するツールは色々ありますが、ここでは fdisk コマンドを使った簡単な例を紹介します。
Bishop とは直接関係のない fdisk コマンドの詳細な解説はしません。
# fdisk /dev/sda Command (m for help):
fdisk は対話形式です。m コマンドを入力するとヘルプが表示されます。
Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
ストレージ購入直後の既存パーティションを消して、新たにルートファイルシステムと swap のパーティションを作るのであれば以下のようになります。
既存のパーテションを削除:
Command (m for help): d Selected partition 1
ルートファイルシステムのパーティションを作成:
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1011, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1011, default 1011): 995
swap パーティションを作成:
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (996-1011, default 996): Using default value 996 Last cylinder or +size or +sizeM or +sizeK (996-1011, default 1011): Using default value 1011
swap パーティションのタイプをセット:
Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 83
変更を反映:
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks
最後に、ルートファイルシステムのパーティションをフォーマットします。ここでは Bishop のカーネルがデフォルトで対応している ext3 ファイルシステムでフォーマットします。
# mkfs.ext3 /dev/sda1
ここでは fdisk を紹介しましたが、libpartd の GUI フロントエンドであるgpartd (GNOME/Gtk+) や qtpartd (Qt) を試してみることをお勧めします。
gparted:

3.2. SD カードの場合
SD カードの場合、USB 変換アダプタを介してホストに接続することがほとんどであると思われます。その場合、ホストからは USB ストレージと同様にSCSI ディスクとして見えます。手順についても USB ストレージの場合と変わりません。
3.3. NFS-Root の場合
NFS ルートの場合、NFS サーバで 対象ディレクトリを export します。NFS サーバの設定については NFS サーバの設定 を参照してください。
4. Debian 基本システムの展開
USB ストレージや SD カードの場合、ルートファイルシステムを任意のディレクトリにマウントします。
# mount /dev/sda1 /ROOTFS
以降では、USB ストレージや SD カードをマウントしたディレクトリや NFS でエクスポートしたディレクトリを /ROOTFS とします。
ダウンロードした Debian 基本システムを /ROOTFS へ展開します。
# tar xjvf etch_arm_bishop-20081215.tar.bz2 -C /ROOTFS
展開した中身をひとつ上の階層に移します。
# mv /ROOTFS/etch_arm_bishop-20081215/* /ROOTFS/
空になったディレクトリ etch_arm_bishop-20081215 を削除します。
# rmdir /ROOTFS/etch_arm_bishop-20081215
5. マウント前の設定
各設定ファイルを編集します。
5.1. /ROOTFS/etc/fstab
5.1.1. USB ストレージ の場合
# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda1 / ext3 defaults,errors=remount-ro 0 0 /dev/sda2 none swap sw 0 0
/dev/sda1, /dev/sda2 はターゲットのデバイスファイル名です。ホストのデバイスファイル名ではない点に注意してください。ターゲットに接続する USB ストレージがひとつだけであれば sda になります。
5.1.2. SD カードの場合
# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/mmcblk0p1 / ext3 defaults,errors=remount-ro 0 0 /dev/mmcblk0p2 none swap sw 0 0
5.1.3. NFS-Root の場合
# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0
5.2. /ROOTFS/etc/network/interfaces
auto lo iface lo inet loopback # eth0 に DHCP で IP アドレスを割り当てる場合は # 下の2行のコメントを外してください。 # auto eth0 # iface eth0 inet dhcp # eth0 に静的 IP アドレスを割り当てる場合は # 下の7行のコメントを外して、IP アドレス等を # 設定してください。 # auto eth0 # iface eth0 inet static # address <IP アドレス> # network <ネットワークアドレス> # netmask <ネットマスク> # broadcast <ブロードキャスト> # gateway <ゲートウェイ>
NFS-Rootの場合、カーネル起動時にIPアドレスが割り当てられます。 /etc/network/interfacesで割り当てないようにしてください
5.3. /ROOTFS/etc/resolv.conf
search nameserver <ネームサーバの IP アドレス>
DHCPサーバからネームサーバの IPアドレスを取得する場合、nameserver の行は要りません。
設定ファイルの編集が終わったらアンマウントします。
# umount /dev/sda1
6. カーネル起動パラメータの変更
ターゲットとホストをシリアルクロスケーブルで接続して、シリアルコンソールから U-Boot でカーネル起動パラメータを変更します。
シリアルコンソールの設定手順については クイックスタート を参照してください。 U-Boot については U-Boot リファレンスマニュアル を参照してください。
カーネルの起動パラメータ U-Boot の環境変数 bootargs で設定します。
6.1. USB ストレージの場合
Bishop # setenv bootargs root=8:1
root=/dev/sda1 のようにデバイスファイル名で指定することが出来ません。 デバイスのメジャー/マイナー番号で指定してください。理由については 起動パラメータrootについてを参照してください。
6.2. SD カードの場合
Bishop # setenv bootargs root=179:1
USB ストレージと同様、root=/dev/mmcblk0p1 のようにデバイスファイル名で指定することが出来ません。 デバイスのメジャー/マイナー番号で指定してください。理由については 起動パラメータrootについてを参照してください。
6.3. NFS-Root の場合
Bishop # setenv bootargs root=/dev/nfs nfsroot=<NFS サーバ IP>:/ROOTFS/ ip=<IP アドレス>:<サーバのIP><ゲートウェイのIP>:<ネットマスク>:<ホストネーム>:<デバイス>:<autoconf>
ip オプションでネットワーク設定のパラメータを ":" で区切って列挙します。最低限必要なのは IP アドレスです。
IP アドレス: 192.168.1.100/24 の場合:
ip=192.168.1.100:::255.255.255.0:::
ここでは 静的 IP アドレスを割り当てる方法を紹介しましたが、 ip オプションでは、DHCP、BOOTP、RARP などで動的に割り当てることもできます。 詳細はカーネル付属文書 Documentation/nfsroot.txt を参照してください。
7. 起動
7.1. USB ストレージ, SD カードの場合
USB ストレージや SD カードのルートファイルシステムをマウントするためにinitrd が必要になります。出荷状態の Bishop では、NOR の 00330000h に U-Boot 形式の initrd イメージが置かれています。まずはこの initrd イメージを SDRAM の 30800000h にコピーにします。
Bishop # cp 330000 30800000 30000
次に、bootm コマンドで initrd を指定して Linux を起動します。
Bishop # bootm 40000 30800000
各アドレスについてはアドレスマップ を 参照してください。
7.2. NFS-Root の場合
NFS-Root の場合は initrd は必要ありません。NOR 上のカーネルを起動するだけです。
Bishop # bootm 40000
8. ログイン
起動後にログインできるユーザは root です。初期状態ではパスワードは必要ありません。
シリアルコンソール (ttySAC0) と本体のコンソール (ttyS) からログインできます。
9. 起動後の設定
9.1. root のパスワード
bishop:~# passwd Enter new UNIX password: ←パスワードを入力 Retype new UNIX password: ←もう一度パスワードを入力 passwd: password updated successfully
9.2. APT の設定
必要であれば、/etc/apt/sources.list を編集します。
デフォルトの sources.list:
deb http://ftp.jp.debian.org/debian etch main
取得可能なパッケージの一覧を更新します。
aptitude update
9.3. タイムゾーンの設定
タイムゾーンの設定をします。
以下は Asia/Tokyo の場合です。
bishop:~# tzconfig
Your current time zone is set to Unknown
Do you want to change that? [n]: y
Please enter the number of the geographic area in which you live:
1) Africa 7) Australia
2) America 8) Europe
3) US time zones 9) Indian Ocean
4) Canada time zones 10) Pacific Ocean
5) Asia 11) Use System V style time zones
6) Atlantic Ocean 12) None of the above
Then you will be shown a list of cities which represent the time zone
in which they are located. You should choose a city in your time zone.
Number: 5 ← Asia の 5
Aden Almaty Amman Anadyr Aqtau Aqtobe Ashgabat Ashkhabad Baghdad Bahrain
Baku Bangkok Beirut Bishkek Brunei Calcutta Choibalsan Chongqing Chungking
Colombo Dacca Damascus Dhaka Dili Dubai Dushanbe Gaza Harbin Hong_Kong
Hovd Irkutsk Istanbul Jakarta Jayapura Jerusalem Kabul Kamchatka Karachi
Kashgar Katmandu Krasnoyarsk Kuala_Lumpur Kuching Kuwait Macao Macau
Magadan Makassar Manila Muscat Nicosia Novosibirsk Omsk Oral Phnom_Penh
Pontianak Pyongyang Qatar Qyzylorda Rangoon Riyadh Riyadh87 Riyadh88
Riyadh89 Saigon Sakhalin Samarkand Seoul Shanghai Singapore Taipei
Tashkent Tbilisi Tehran Tel_Aviv Thimbu Thimphu Tokyo Ujung_Pandang
Ulaanbaatar Ulan_Bator Urumqi Vientiane Vladivostok Yakutsk Yekaterinburg
Yerevan
Please enter the name of one of these cities or zones
You just need to type enough letters to resolve ambiguities
Press Enter to view all of them again
Name: [] Tokyo
Your default time zone is set to 'Asia/Tokyo'.
Local time is now: Thu Aug 16 23:00:18 JST 2007.
Universal Time is now: Thu Aug 16 14:00:18 UTC 2007.9.4. キーボードの配列
キーボードの配列 (keymap) を設定します。
bishop:~# aptitude install console-common console-data
インストール中に表示されるパッケージ設定画面からキーボードの配列を設定できます。日本語の USB キーボードを使う場合は以下の順で選択すればいいでしょう。
- "Select keymap from arch list"
- qwerty
- Japanese
- Standard
9.5. mtd-tools
Bishop 上で NOR や NAND の消去・書き込みを行う場合、mtd-tools をインストールします。
bishop:~# aptitude install mtd-tools
9.6. udev
udev をインストールします。
bishop:~# aptitude install udev
udev の RTC は /dev/rtc0 ですが、hwclock コマンドは/dev/rtc を開こうとするため、RTC にアクセスできません。これを回避するためには /etc/udev/links.conf に以下の行を追加してください。
L rtc /dev/rtc0
10. Tips
10.1. 起動の自動化
U-Boot のコマンドを環境変数 bootcmd に保存すれば起動を自動化できます。
USB ストレージの場合:
Bishop # setenv bootargs root=8:1 Bishop # setenv bootcmd cp 330000 30800000 30000 \; bootm 40000 30800000 Bishop # saveenv
bootcmd に複数のコマンドを設定する場合、コマンドの区切り文字は "\;" になります。";" はコマンドの終端で、"\" はエスケープ文字です。
著作権と免責
Copyright © 2012 Pylone, Inc.
この文書の著作権は株式会社パイロンが保有します。
この文書は「現状のまま(as is)」で提供され、明示的であるかどうかを問わず、内容についてなんら保証するものではありません。
この文書には、技術的な誤り、誤植、不適格な表現や未完成部分等を含む可能性があります。従って、この文書は予告無しに追加、変更、削除される可能性があります。
この文書は「クリエイティブ・コモンズ-表示-2.1-日本 以降」(CC-by-2.1 or later) の下で配布されています。