オリジナルROMの作成に挑戦

限りあるメモリを有効活用したい

SL-5000Dは16MBのフラッシュメモリと、32MBのRAMを持っています。 フラッシュメモリは、システムと標準アプリが入っています。 RAMはストレージ(RAMDISK)とヒープに分けられます。 新しくインストールされたソフトウェアやデータは基本的にはRAMDISKに保存されます。
しかし、32MBとゆうメモリは意外に少なかったりするわけで。 ちょっと大きめのソフトを動かすと、すぐにメモリが足りません、とエラーが出るのです。
カーネルのコンパイルオプションでこのメモリの割り当てが変更できます。 極端な例だと、すべてのメモリをヒープに使って、SDやCFをストレージにする(そのかわり、ext2でフォーマットする必要があるので、Windowsやデジカメでは使えなくなる)という方法もあります。
まあ、そこまでメモリを空けてやる必要もないと思うので、ROM Ver.1.13のヒープ26MB, ストレージ6MBでいいかな、と思うんですけど、6MBだと大きめのソフトをインストールしたら終わりだったりするわけで。このへんのトレードオフで困ります。 少なくとも、アドレス帳とコンソールは標準のと入れ替えたいし、 Hancom Officeも入れたい、かな?
だったら、ROMに標準で入っている、個人的には重要度の低いソフトを消して、その代わりに重要度の高いソフトを入れれればいいな、と思うのは自然な流れでしょう。

用意するもの

作業の流れ

  1. ROMイメージをシャープのサイトから落とす。
  2. ROMイメージをROMburstで分解して、ルートファイルシステムを切り出す。
  3. ルートファイルシステムをマウントする。
  4. ルートファイルシステムの中身を、別のディレクトリにコピーする。
  5. ホームファイルシステムのコピーをする。
  6. アプリケーションの追加と削除を行う。
  7. ホームファイルシステムを書き戻す。
  8. ルートファイルシステムのイメージを作成する。
  9. CFメモリカードにイメージを転送する。
  10. ザウルスに書き込む。
なお、簡便のため、すべての作業はroot権限で行うことにします。

ROMイメージのダウンロード

これはシャープの開発者サイトにおいてありますので、簡単にダウンロードできます。 SL-5000D用には、Ver.1.12とVer.1.13がありますが、 カーネル以外のファイルはいっしょなので、どちらでもかまわないです。

ROMburstで

ルートファイルシステムの切り出しには、 ROMburstというソフトを使います。

●ROMburst for Zaurus ROM images
http://www.cypherpunks.ca/zaurus/#romburst

ソースコードのみの配布なので、コンパイルの必要があります。 コンパイルは、gccを使えばよいでしょう。


# gcc romburst.c -o romburst

切り出しは、

# romburst ROMIMAGE

これで、ROMDISKというファイルが作られます。 これがルートファイルシステムです。

ルートファイルシステムのマウント

このROMDISKの中身を操作できるように、マウントする必要があります。
ルートファイルシステムはcramfsという形式になっています。

# mkdir romdir
# mount -t cramfs -o loop ROMDISK romdir

ここで、romdirはマウント先のディレクトリで、先に作られている必要があります。

ルートファイルシステムのコピー

このromdirに入って、必要のないソフトを消したり、 新しいソフトの追加ができればよいのですが、 Read Onlyのファイルシステムなので、 別のディレクトリにいったんコピーする必要があります。 ここでは、rootfsというディレクトリを作ることにします。


# cp -a romdir rootfs

オプション-aを追加することで、中のシンボリックリンクを壊さずにコピーすることができます。
このrootfsの中身を書き換えて、あとで、cramfsに変換します。

ホームファイルシステムのコピー

SL-5000Dでは、システム起動時にRAMDISKに/home以下のディレクトリをコピーします。 ここには、動作中に書き換えられるデータ、すなわち設定ファイルなどが 書き込まれていたり、システムファイルへのシンボリックリンクが含まれます。
展開されるファイルはtarアーカイブになっており、/root/.home_default.tar というファイル名で保存されています。
これをrootfsの上位ディレクトリから、tarコマンドを使って、


# tar xvf rootfs/root/.home_default.tar

展開すると、「home」というディレクトリができます。 この中に、設定ファイルなどを書き込みます。

アプリケーションの削除

主に、アプリケーションは以下のファイルから構成されています。 これらのファイルの実体は、以下のディレクトリにあります。 また、以下のディレクトリには、実ファイルへのシンボリックリンクが存在するので、 それも削除しておきましょう。

アプリケーションの追加

ザウルス用アプリケーションの配布方式であるipkは、実際はtar ballなので、

# tar zxvf application.ipk

とすれば、中身を取り出すことができます。
の3つが解凍されます。 このうち、data.tar.gzにインストールされるべき実行ファイルなどが入っています。 また、control.tar.gzには、 インストール時、アンインストール時に行う処理が書かれたcontrolファイルが入っています。

では、具体的に、qpe-language_1.4.0-1_arm.ipkのインストールをしてみましょう。 まず、


# tar zxvf qpe-language_1.4.0-1_arm.ipk
# tar zxvf data.tar.gz

ここでは、以下の二つのファイルが解凍されます。 「アプリケーションの削除」で説明したように、 このうち、「bin/language」が実行ファイル、 「Language.desktop」がデスクトップ設定ファイルになります。

実行ファイルは、rootfs/usr/QtPalmtop.rom/bin ディレクトリにコピーします。
デスクトップ設定ファイルは、home/QtPalmtop/apps/Settings にコピーします。
さらに、home/QtPalmtop/bin ディレクトリにて実行ファイルへのシンボリックリンクを作る必要があります。シンボリックリンクは /usr/QtPalmtop.rom/bin のように、 絶対パスを使うことに注意してください。


# cd home/QtPalmtop/bin
# ln -s /usr/QtPalmtop.rom/bin/language

これで、このパッケージのインストール作業は終わりです。
ヘルプファイルなどが含まれるパッケージの場合も、同様です。 基本的には、ファイルの実体はrootfsに入れて、 設定ファイルなどは、homeの方へ入れます。

ホームファイルシステムの書き戻し

homeの上位ディレクトリから、以下のtarコマンドで.home_default.tarを ルートファイルシステムに書き戻します。


# tar cvf rootfs/root/.home_default.tar home

ルートファイルシステムのイメージを作成する

以上で、ザウルスに書き込むディスクイメージを作る準備ができました。
mkcramfsコマンドを使って、cramfsのディスクイメージを作ります。 ファイル名は「initrd.bin」とします。


# mkcramfs rootfs initrd.bin

CFメモリカードへの書き込み

できあがった、initrd.binをCFメモリカードのルートディレクトリにコピーします。 コピー方法は環境によって異なりますが、USBカードライターを使う場合は、 USB接続したあと、以下のようにmountすればコピーできると思います。


# mkdir cf
# mount /dev/sda1 cf
# cp initrd.bin cf

ザウルスへの書き込み

通常のROMアップデートと同じ方法で書き換えができます。 http://more.sbc.co.jp/slj/download/readme/readme_romimage11.asp

制限事項

initrd.binは14MB+128KBを以内でなくてはなりません。 mkcramfsで作成後、容量を確認しましょう。 オリジナルの状態では、12.5MB程度なので、多少追加ができます。

もどる