Linux 母艦なしでの Psion 単体での Debian/ARM 環境の構築

(v1.01, Mar. 2, 2001)
Author: Ken_I さん

正確には、コンパクトフラッシュを扱える Linux マシンが手元にない場合の構築方法である。 最低限 Psion および CF カード上にに必要なファイルを導入する方法がなくてはならない。 ・・・当然ではあるが。

なおこの文書は最初の記述者によって実際に検証されたものではなく、 あくまでもこれで可能なはずだ、という「思い込み」で記述されている。 従って文書的にバグが徘徊している可能性が高いものである。 バグ報告によってより実用性の高いものになることが期待される。

〈1〉 RAM 上での boot

Arlo など、必要なファイルを RAM に導入する。必要なファイルは以下の通り。 それぞれ Linux7k の各サイトを参照してダウンロードしておく。 母艦がない場合、Klaasjan 氏の initrd3.tgz が必須である。 このディスクイメージには 1MB のサイズに、 最初の諸作業に必要な、様々なコマンドが詰め込まれている。 現在 Klaasjan 氏の HP は閉鎖されているが、 必要なファイルは全て Sourceforge の ftp から入手可能。 ファイル入手先や作業に有用な URL は文末に示す。

注意すべきなのは、kernel との相性である。 stable-* な Glued イメージは不具合があるので、それ以外のものを使用すること。

Arlo を Psion に install する。arlo*.tar.gz を伸長し、Arlo.sis ファイルを Psion にコピーしたのち、INSTEXE.EXE を Psion にコピー、実行する。

すると Arlo.sis のアイコンが変わり、これを実行できるようになる。 C: か D: のどちらでも選んだほうで install 可能。

次に glued kernel image を uncompress する。

% gunzip glued-*
glued-*、initrd-*.gz を Psion の C:\ に image、initrd.gz という名前にして導入する。
次に Arlo.exe をダブルクリックする。 以下のようなメッセージが現れる。
Loading logical device
Opening the channel
Commands are:
...
Option buffer at address XXX
Memory description at address YYY
> _
ここで次のようにタイプする:
l image
さらに以下のメッセージが現れる。
Opening file image
Succeeded
File size XXX
Loading XXX bytes to address YYY
Read XXX bytes
No pages = ZZZ
> _
また入力。
l initrd.gz
またメッセージ:
Opening file initrd.gz
Succeeded
File size XXX
Loading XXX bytes to address YYY
Read XXX bytes
No pages = ZZZ
> _
最後に:
b
と入力することで、Linux がブートする。

なお、Psion のデフォルトの OS である EPOC に戻る古典的 (呪術的?) 方法として、

sync
sync
sync
と入力後、蓋を閉じ、サブバッテリの蓋を開けた中にあるリセットボタンを押し、 左右の shift を同時に押しながら power on すれば、EPOC がビープを一度鳴らしたのちに立ち上がってくるというものがある。
註(神木): もちろん shutdown -h が使えるなら sync する代わりにちゃんと shutdown -h するべきです (^^; shutdown -h now で "System halt" のメッセージがでてから、 リセットボタンを押し ... というシーケンスを辿れば良いのですが、initrd3 には 入ってないのかもしれませんね。

〈2〉 コンパクトフラッシュカード上でのパーティション作成

initrd3.gz にはファイル操作のコマンドの他、 fdisk、mount、tar、gunzip、mk2fs 等のコマンドがあるのでこれでパーティション作成を行う。 但し、mkswap は用意されていないため、バイナリを入手しておくこと。 これも sourceforge の ftp などから探せる。なお、initrds3 を使ってブートした場合、 サスペンド、レジュームは完全ではないので、避けた方が良い。
註(神木): Sourceforge の Distribution/2.1 は lib の下が libc.so.4.7 と aout 系のものだったので無視してきましたが、 これに含まれる sbin/mkswap は実は libc2.1 の ELF バイナリなので使えるんですね。 ... なんて紛らわしいことをするかなぁ (Distribution/2.1 は aout 系と ELF 系が混在してます。注意!)。

カードには mkswap のバイナリを導入しておく。initrds3 を使ってブート後、 /sbin に cp し、カード上のバイナリは rm する。

コンパクトフラッシュのデバイスは /dev/hda になる。これを fdisk する。

パーティションの方針は、例えば、

/dev/hda1 vfat        15MB 以上 (ここに base2_2.tgz を導入できるサイズが必要) 
/dev/hda2 ext2        あるだけ
/dev/hda3 linux-swap  8MB 以上
など。

fdisk のコマンドは、p でパーティション情報の確認、 n で新しいパーティションの作成である。

具体的には n コマンドを入力し、p (primary partition) を選択、 パーティション番号指定、先頭シリンダの指定、 最終シリンダの指定 (パーティションサイズの指定: MB 単位で指定できる) 、 という作業を繰り返すことになる。なお、デフォルトでは全てのパーティションは ext2 に指定されるので、最後に t コマンドでパーティション ID を変更しておくこと。 上記の例では最初のパーティションを 4 (vfat) に、最後の swap 領域を 82 に変更する。 なお Linux native は 83。

確認したら w コマンドでディスクにパーティション情報を書き込み、fdisk の作業は終了 (q コマンド)。

パーティションを切ったら、次は Linux ファイルシステムを作る。

# mke2fs /dev/hda2 block-size
# mkswap /dev/hda3 block-size
ブロックサイズは必ず確認すること。
註(神木): mke2fs や mkswap の block-size はオプションなので 省略しても正しく動くはずだけど ....

/dev/hda1 はリブート後、必ず EPOC OS 側でファイルシステムをフォーマットしておくこと。 このフォーマットは /dev/hda1 だけを認識して実行するはずである。

〈3〉 Debianベースの導入

Debian のベースとなる base2_2.tgz (もしくは神木氏作成の root-image。 これは Debian ベースにして絞り込みを行い、新たに build した mule、Ng、canna などを加えたコンパクトなもの。これは bzip2 で圧縮されているため、 イメージ単体では展開できないので注意) を、/dev/hda1 にコピーする。 これを /dev/hda2 で展開してベースシステムを構築していく。 再度同じように必要なファイルを導入し RAM 上でブート後、
# mkdir /1
# mkdir /2
# mount -t vfat /dev/hda1 /1
# mount -t ext2 /dev/hda2 /2
# tar zxpf /1/base2_2.tgz -C /2
この後、可能であれば /2 以下のファイルを若干修正する。

内容は、

  1. /etc/fstab を正しく設定する。
  2. /sbin/unconfigured.sh を消しておく。
  3. ln -sf /usr/share/zoneinfo/Japan /etc/localtime を実行する。
の3つである。

◎/etc/fstabの一例

# <device>   <mountpoint><filesystemtype><options>   <dump> <fsckorder>
/dev/hda2	/		ext2	defaults	1	1
/dev/hda3	none		swap	defaults	0	0
/dev/hda1       /mnt            vfat    noauto          0       0
none		/proc		proc	defaults	0	0

〈4〉 運用準備

再度 reboot する。

ここから先は神木氏作成のカーネル、イメージでブートのこと。 Klaasjan 氏の initrd3 とはお別れ。

Arlo を普通に C:\ にインストールする。System folder を見えるようにする。

EPOC 側で C:\System\Libs を D:\System\Libs を作成してコピー。 さらに D: のカレントディレクトリに Arlo.exe、kernel、ramdisk をコピー。 ramdisk は今後、基本的に使用しないが、修正その他で使用する可能性がある。

リブートする。この時、Arlo.exe を実行したあと、手順が変わる。

l d:kernel
o root=/dev/hda2
b
これでブートすれば /dev/hda2 に制御が渡され、Debian ベースの Linux システムが使用できるようになる。

/etc/fstab に注意すること。

その後、残り容量に注意しながら dpkg したり、bzip2 を入れ神木氏のバイナリを入れるなどして好みのシステムを構築すればよい。 Debian の base2_2.tgz を導入した場合は、libcanna、procps など、いくつかの Dibian/ARM のバイナリを入れ替える必要あり。神木氏が公開されている。

〈未解決の問題〉

時間のかかる処理をしている間、電源が落ちるといった可能性がある。 カーネルの選択によっては対処が必要?
註(神木): 「キーボード入力がなくなってから 3 分で suspend に入る」 のでスクリーンが busy であってもおかまいなしです。 initred3 の system において suspend/resume が信頼できないのであれば、 tar の展開などで 3 分以上かかる場合に問題になる可能性があります。 とはいえ、tar 等の実行中にシフトキーでも押しっぱなしにしていれば 「キーボード入力がない」状態にはならないので大丈夫ではないかと思うんですが、 試してみないとなんともいえません。

〈有用なURL〉


[目次へ]