2009年03月19日

ルートファイルシステムにInternal memory cardを使う

N810の内蔵メモリは256MB。
色々インストールすると、結構すぐに一杯になってしまいます。
Internal Memory Cardは2GBもあるのに…と悔しがっていたら、KimitakeさんがInternal Memory Cardをルートファイルシステムにする方法を教えてくださいました。(感謝!)

以下の3つのサイトを参考にしつつ、実際に試してみます。

Boot from MMC for N800 - Kimitake's blog
http://kimitakeblog.net/item/500

Booting from a flash card - maemo.org wiki
http://wiki.maemo.org/Booting_from_a_flash_card

Partitioning a flash card - maemo.org wiki
http://wiki.maemo.org/Partitioning_a_flash_card

この先の手順で使用するいくつかのパッケージはデフォルトで設定されているリポジトリには入っていないものがあります。なので以下のリポジトリをパッケージマネージャから追加しておいてください。
Catalogue name : Maemo Chinook
Web address : http://repository.maemo.org/
Distribution : chinook
Components : free non-free

ついでにmaemo ExtrasDisabledのチェックを外しておきましょう。

ここから先、全ての作業はrootで実施してください。
rootの取得はopensshをインストールするのが一番簡単だと思います。
(作業もみんなリモートから出来ますし)

まずはパーティショニングのためにe2fsprogsをインストールします。
apt-get install e2fsprogs

パーティショニングの対象となるInternal Memory Cardをumountします。中身はきれいさっぱり消してしまうので、必要なファイルがあれば別の場所にコピーしておくのをお忘れなく。
umount /dev/mmcblk0p1

ではパーティションを切りましょう。
sfdisk /dev/mmcblk0

するとディスクの現状態が表示され、最後に
/dev/mmcblk0p1 :

と表示されていると思います。これが第1パーティションの設定プロンプトになります。第1パーティションは512MBのVFATにしたいので、以下のとおり入力します。
/dev/mmcblk0p1 :1,16384,6
/dev/mmcblk0p1 1 16384 16384 524288 6 FAT16
太字の部分が入力した内容です。
同様に第2パーティションも設定します。こちらは残り(約1.5GB)のext2です。
/dev/mmcblk0p2 :16385,,
/dev/mmcblk0p2 16385 61439 45055 1441760 83 Linux
第3、第4パーティションは設定しないので何も入力せずにEnterを押してください。私の環境だと何故か第3パーティションが出来てしまうんですが、気にしないことにしています。
最後にディスクに書いていいか聞かれますので、yを入力します。
Do you want to write this to disk? [ynq] y

これでパーティショニングは完了したので、一度再起動します。
reboot

第1パーティションは自動でマウントされている(はず)ので、umountします。
umount /dev/mmcblk0p1

先ほど作成したパーティションをフォーマットします。
mkdosfs /dev/mmcblk0p1
mke2fs /dev/mmcblk0p2

続いてbootmenuをインストールします。
まずはインストールで必要になるwgettarをインストールしましょう。(tarは標準で入っているbusyboxのものだとうまく行かないのでこちらのバイナリを使用します)
apt-get -y --force-yes install wget
mkdir -p /home/user/bin
cd /home/user/bin
wget http://www.nmacleod.com/nokia/bin/tar
chmod +x tar

bootmenuをダウンロードし、ファイルを展開します。
cd /home/user/bin
wget http://fanoush.wz.cz/maemo/initfs_flasher.tgz
tar zxvf initfs_flasher.tgz
cd /home/user/bin/initfs_flasher/

bootmenuをカスタマイズするために、設定ファイルを記述します。
cp bootmenu.conf.n8x0.example bootmenu.conf
vi bootmenu.conf

内容はこんな感じにしました。
(先々を考えてExternal memory cardからもboot出来るようにしてます)
# bootmenu customisation file

# timeout for automatic selection when no key is pressed
MENU_TIMEOUT=3

# menu items
MENU_MIN=1 # first item index

#no need to redefine
#MENU_1_NAME="Internal flash"
#MENU_1_ID="flash"

MENU_2_NAME="Internal MMC card, partition 2, ext2"
MENU_2_ID="mmc2"
MENU_2_DEVICE="${INT_CARD}p2"
MENU_2_MODULES="mbcache ext2"
MENU_2_FSTYPE="ext2"
MENU_2_FSOPTIONS="noatime"
[ -d "/sys/block/${INT_CARD}/${MENU_2_DEVICE}" ] || MENU_2_NAME="(${MENU_2_NAME}) N/A"

MENU_3_NAME="External MMC card, partition 2, ext3"
MENU_3_ID="mmc1"
MENU_3_DEVICE="${EXT_CARD}p2"
MENU_3_MODULES="mbcache jbd ext3"
MENU_3_FSTYPE="ext3"
MENU_3_FSOPTIONS="noatime" #",data=writeback"
[ -d "/sys/block/${EXT_CARD}/${MENU_4_DEVICE}" ] || MENU_4_NAME="(${MENU_4_NAME}) N/A"

MENU_4_NAME="Power off (when not on charger)"
MENU_4_ID="off"

#last item index, change if you add/remove items
MENU_MAX=4

initfsを作成します。
./initfs_flash

途中で色々聞かれますが、全部yesと答えてしまってOKです。
作成にはそこそこ時間がかかります。のんびり待ちましょう。
最後にrebootを求められるので、素直に従いましょう。

再起動したら、デフォルトのブートデバイスを設定します。
chroot /mnt/initfs cal-tool --set-root-device ask:mmc2

内蔵メモリにある現在のシステムを全てInternal memory cardにコピーします。
mkdir /mnt/mmc2
mkdir /mnt/internal
mount /dev/mmcblk0p2 /mnt/mmc2
mount -t jffs2 /dev/mtdblock4 /mnt/internal
/home/user/bin/tar cf - -C /mnt/internal . | /home/user/bin/tar xvf - -C /mnt/mmc2

コピーが終わったらumountして再起動しましょう。
umount /mnt/mmc2
umount /mnt/internal
rmdir /mnt/mmc2 /mnt/internal
reboot

うまく行っていれば再起動後にbootmenuが出てくるはずです。
Internal MMC card, partition 2, ext2を選択してEnterを押してください。
(押さなくても3秒でタイムアウトして起動してくるはずですが)

さて、ルートファイルシステムが大きくなったか確認してみましょう。
df -h
/dev/mmcblk1p2 1.4G 245.6M 1.0G 19% /
こんな感じに表示されればOKです。(他にもいろいろ出ますが)

ちょっと気になる事が1つ。内蔵→Internal Memory Cardとシステムを移動すると、ディスクの使用量が倍くらいに跳ね上がってしまうんです。これってファイルシステムのブロックサイズの問題とか、そういう理由なんですかね?まぁそれを補って余りあるくらいパーティションサイズは大きくなるのでいいんですけど。

上記の作業中、もし運悪くN810が起動しなくなってしまった場合(私も一度なりました)は、慌てず騒がず本体の初期化をしましょう。初期化用のツール(本来の用途はSoftware Updater)は以下で提供されています。

Nokia USA - Software update - Nokia N810 support
http://www.nokiausa.com/A4686323

ツールをダウンロードしてインストールしたら、

1.N810の電源を切る(切れなければ電池抜く)
2.十分に充電したらACアダプタを外す
3.Software Update Wizardを導入したPCにUSBケーブルで接続する
4.Swapキー(左側の四角が2つ重なったアイコンのヤツ)を押しながら電源ON
5.PC側でSoftware Update Wizardを起動する
6.指示に従ってアップデート開始

とすれば元に戻ります。Don't panic!
ちなみに戻しの手順はいつもこちらのページを参考にさせていただいております。(感謝!)

サルにもわかるN810(OSアップデート) - 一口! - Yahoo!ブログ
http://blogs.yahoo.co.jp/hinoe_uma66/12835323.html

Enjoy! ;-)


posted by 月水和尚 (とも) at 16:29 | Comment(5) | TrackBack(0) | Nokia/Symbian
この記事へのコメント
トラックバックありがとうございます。
しかし、トラバいただいたYahoo!ブログはだいぶ前から競馬予想専門にしており、週1ぐらいの更新しかしていません。
N810を含めたデジモノネタは、はてなの
「丙午1966」
に移動しておりますので、ぜひそちらもよろしくお願いします。
でも最近はN810ネタはさっぱりですが、、、(^^);
Posted by hinoe_uma66 at 2009年03月19日 21:45
hinoe_uma66さん

コメントありがとうございます!
引っ越しされたのは存じ上げていたのですが、このページには何度も救われているため、覚え書き代わりにトラックバックさせていただきました。

ちなみにあの記事の最初のコメントを書いたのは私です。ホントその節はお世話になりました。(笑)
Posted by tomom at 2009年03月20日 01:10
元々のファイルシステム(名前忘れた)は圧縮掛かってるので、それを ext2 に展開するとでかくなります。ext2 はrootfsが圧縮されてない分、起動が速い!ってことらしいけど、なんかそんな感じはあまりしません。

でも無事拡張できてよかったですね。これでアプリ入れ放題。
Posted by kimitake at 2009年03月20日 02:14
こちらの覚書きを参考にさせていただき、無事内部カードからの起動ができるようになりました。どうもありがとうございました。
Posted by HeatIsOn at 2009年08月02日 20:05
HeatIsOnさん

お役に立てたようで何よりです。
私は最近全然電源すら入れてあげてない状態です…。
ちゃんと活用してあげないとなぁ。
Posted by tomo at 2009年08月03日 10:44
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。