電話でね!♪ Hm Hm♪ Linux on the Phone!♪2007/03/17 22:59


タイトルのフレーズで曲が頭に浮かんだあなた!よっぽどのOldies好きで無い限り、結構なお年ですな。

WX321Jを購入した理由の一つに挿入したmicroSDがUSBストレージで使えるので、それにLinuxをインストールして電話から立ち上げたかった事が大きい。

単にこのタイトルを謳いたかったっす。

母艦はThinkpad X40、OSはもちろんGentoo Linux。

まず、X40でSDカードの認識をさせる。X40でのSDカードの認識にはmmc_core、sdhci、mmc_blockが必要。kernelのconfigで
MMC/SD Card support  --->
     <M>  MMC support                                                                                                                                        
     <M>  MMC block device driver                                                            
     <M>  Secure Digital Host Controller Interface support (EXPERIMENTAL)
として上記のモジュールを有効にしてkernelを再構築する。もし、モジュールじゃなくてkernelに組み込みたかったら<M>を<*>にする。さらっとググったところによると、モジュールにするとudevのruleを書いても自動でモジュールを読み込んでくれないらしい。スロットは問題無いけど。で、挿入したSDカードを認識させるには、root権限で以下を実行。
modprobe mmc_block
購入したSDカードはmicroSDカードでSD、miniSD両方のアダプタを持ったpqiの1Gのもの。 まずは、パーティション分割して、WX321Jが使う部分とLinux部分を分ける。電話で使うデータは大した事は無いと思うので、電話:128MB、Linux:残り全部にする。電話からはLinux用のパーティションはどうせ見えないので、Linux用のファイルシステムはext3にする。まずは、SDカードのマウントを解除。
xxxxx# umount /mnt/vfat
次にfdiskでの作業。まずはSDのパーティション情報の確認。
xxxxx # fdisk /dev/mmcblk0

このディスクのシリンダ数は 30480 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

Disk /dev/mmcblk0: 998 MB, 998768640 bytes
4 heads, 16 sectors/track, 30480 cylinders
Units = シリンダ数 of 64 * 512 = 32768 bytes

  デバイス Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1               1       30480      975352    6  FAT16

コマンド (m でヘルプ):
次に現在のパーティションを削除して、結果を確認。
コマンド (m でヘルプ): d
Selected partition 1

コマンド (m でヘルプ): p

Disk /dev/mmcblk0: 998 MB, 998768640 bytes
4 heads, 16 sectors/track, 30480 cylinders
Units = シリンダ数 of 64 * 512 = 32768 bytes

  デバイス Boot      Start         End      Blocks   Id  System

コマンド (m でヘルプ):
で、新たなパーティション作成。第一パーティションを電話で使う領域、第二パーティションをLinuxにする。第一領域をFAT16にするのを忘れずに。
コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-30480, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-30480, default 30480): +128M

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 2
最初 シリンダ (3908-30480, default 3908):
Using default value 3908
終点 シリンダ または +サイズ または +サイズM または +サイズK (3908-30480, default 30480):
Using default value 30480

コマンド (m でヘルプ): t
領域番号 (1-4): 1
16進数コード (L コマンドでコードリスト表示): 6
領域のシステムタイプを 1 から 6 (FAT16) に変更しました

コマンド (m でヘルプ): p

Disk /dev/mmcblk0: 998 MB, 998768640 bytes
4 heads, 16 sectors/track, 30480 cylinders
Units = シリンダ数 of 64 * 512 = 32768 bytes

  デバイス Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1               1        3907      125016    6  FAT16
/dev/mmcblk0p2            3908       30480      850336   83  Linux

コマンド (m でヘルプ):
最後に実際に領域を作成。
コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。

警告: DOS 6.x 領域を作成、または変更してしまった場合は、
fdisk マニュアルの追加情報ページを参照してください。
ディスクを同期させます。
これで領域が出来たので、次はそれぞれのパーティションにファイルシステムを作成。 それぞれ以下を実行。
xxxxx # mkfs.vfat -F 16 /dev/mmcblk0p1

xxxxx # mkfs.ext3 /dev/mmcblk0p2
WX321JでSDカードを初期化する。メニューから「データフォルダ」→「メニュー」→「microSD初期化」。 で、中身の確認。
xxxxx # mount -t vfat /dev/mmcblk0p1 /mnt/sd
xxxxx # ls /mnt/sd
dcim  private  sd_bind
fat16部分はこれで特にすることは無い。次はいよいよLinuxの準備。使用ディストリビューションは色々考えたが、CD1枚強のスペースがある事から、1CD Knoppixを使う事にする。DL サイトからknoppix_v5.1.1CD_20070104-20070122+IPAFont_AC20070123.isoをget。
このイメージを/mnt/cdromにマウント。
xxxxx # mount -t iso9660 -o loop knoppix_v5.1.1CD_20070104-20070122+PAFont_AC20070123.iso  /mnt/cdrom
xxxxx # ls /mnt/cdrom
Aist     README.install2win.ja  autorun.inf  boot       grub4dos    install2win.bat         version.txt
KNOPPIX  autorun.bat            autorun.pif  cdrom.ico  index.html  ipa-fonts-document.pdf
ここではLinuxパーティションのマウントポイントを仮に/mnt/ext3とする。
xxxxx # mount /dev/mmcblk0p2 /mnt/ext3
必要なファイルを/mnt/cdromから/mnt/ext3にコピー。
xxxxx # cp -a /mnt/cdrom/{boot,KNOPPIX} /mnt/ext3
xxxxx # ls /mnt/ext3
次にgrubのインストール。この状態ではgrubがSDカードを有効なデバイスとして認識しないので、一旦WX321Jに差し戻して、WX321JのUSBストレージ機能を使ってインストールする。
xxxxx # umount  /mnt/ext3
WX321J上でSDカードを初期化した段階からUSBストレージ機能を使って進めても良かったんやけど、一応SDカードでの認識をX40で確認したかったので、ちょっとややこしくなった。で、WX321J上で「USBデータストレージ」を開始して、電話とX40をUSBケーブルで繋ぐ。この状態で電話は/dev/sdaとして認識されている。まずは/boot/grubを/dev/sda2上の/bootにコピーする。
xxxxx # mount /dev/sda2 /mnt/ext3
xxxxx # cp -a /boot/grub /mnt/ext3/boot
xxxxx # ls /mnt/ext3/boot/grub
default        ffs_stage1_5      jfs_stage1_5    pxegrub            stage2           ufs2_stage1_5
device.map     grub.conf         menu.lst        reiserfs_stage1_5  stage2.netboot   vstafs_stage1_5
e2fs_stage1_5  grub.conf.sample  minix_stage1_5  splash.xpm.gz      stage2.old       xfs_stage1_5
fat_stage1_5   iso9660_stage1_5  nbgrub          stage1             stage2_eltorito
xxxxx # umount /mnt/ext3
では、実際にgrubコンソールで、/dev/sda(SDカード)のMBAにgrubをインストールする。grubでは、この場合はsdaはhd1になる。
xxxxx # grub

grub> root (hd1,1)
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd1)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd1)"...  15 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p (hd1,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.

grub> quit

xxxxx # 
最後に/mnt/ext3/boot/grub/menu.lstの編集。/mnt/ext3/boot/isolinux/isoliunux.cfgを参考に以下のように書き換える。
/mnt/ext3/boot/grub/menu.lst:
timeout 8

title Linux on the Phone (Powered by Knoppix)
root (hd0,1)
kernel /boot/isolinux/linux ramdisk_size=100000 init=/etc/init lang=ja BOOT_IMAGE=knoppix
initrd /boot/isolinux/minirt.gz 
rootがhd0になってるのは、WX321Jが起動ドライブになるため。
で、これでX40を再起動。ブートデバイス選択でWX321Jを含むメニューが出てくるのにちょっと手間取る。ブートデバイスでWX321Jを選ぶと、見事にgrubも立ち上がり、Knoppixも立ち上がる。上の画像がその画面。まーまーストレス少なく使える。

でもね、やっぱりね♪ 電話じゃ物足りない。♪

今後はKnoppixじゃ無くて、やっぱGentooにしようと思う。

※尚、上記の方法は私個人の環境で試しての結果なので、同様の方法で成功する保証はありません。また、上記方法を試してのデータ損失、故障などを被った責任は当方には一切ありません。自己責任でお試しください。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://clementia.asablo.jp/blog/2007/03/12/1255690/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。