Walrus,Visit. | 一覧 | 検索 | 更新履歴(RSS) | 新規作成
はてなブックマークに追加 はてなブックマークを表示 編集 | 編集(管理者用) | 差分

Linuxザウルス開発メモ/ハードウェア/C3000HDD換装

編集

SL-C3000 の HDD 換装のメモです

標準の4GBのマイクロドライブから6GBに換装してみたいと思います。

関連情報

編集

準備

元の4GBHDDのパーティション情報をメモしておく

Command (m for help):p 
Disk /dev/hda: 4095 MB, 4095737856 bytes
16 heads, 63 sectors/track, 7936 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1       204    102784+  83  Linux
/dev/hda2           205      1020    411264   83  Linux
/dev/hda3          1021      7936   3485664    c  Win95 FAT32 (LBA)
/dev/hda4             1         1         0    0  Empty
Partition 4 does not end on cylinder boundary.

Command (m for help):q 
  • hda1はroでマウントされていて、99521KByte分の容量がある。内容は/usr以下にQtPalmtop?.rom、bin.rom、lib.rom、local.rom、sbin.rom、share.romがある。QtPalmtop?やPIMのソフトが入っている。
  • hda2はrwでマウントされていて、398282KByte分の容量がある。内容は.sys、Applications、QtPalmtop?、lost+found、tmp、usrがある。ユーザーが本体にプログラムをインストールすると、hda2(/hdd2)にインストールされる。
  • hda3はrwでマウントされていて、3430852KByte分の容量がある。ここはvfatエリアになっていて、USBストレージ形式でPCと接続した場合に見えるエリア。辞書データなどが格納される。

HDDのバックアップ

間違って内蔵のHDDのデータを消去してしまう可能性を考慮して、CFやSDなどにバックアップを取っておく。

CFスロットにCFやマイクロドライブを入れたまま本体を起動すると、CFスロットに入れたデバイスが/dev/hda、内蔵のマイクロドライブが/dev/hdcになるので注意すること。

  • dd、tar を使う
  • hda3は大きいのでtarを使用する。これは本体が普通に起動している状態でもOK。

dd if=/dev/hda1 of=/mnt/card/hda1.bin
dd if=/dev/hda2 of=/mnt/card/hda2.bin
tar cf /mnt/card/hda3.tar /hdd3/*

また、/hdd1、/hdd2の内容をtarで固めても良い

tar cf /mnt/card/hda1.tar /hdd1/*
tar cf /mnt/card/hda2.tar /hdd2/*
  • Service MenuのHDD Backup を使う(時間がかかる)
  • これを行うと、内蔵HDDのクローンを作ることができる。つまり、空の4GBマイクロドライブを購入してきて、以下の動作を行うと内蔵HDDと同じものが作成される。

    なので、これを行うと書き込み先のメディアの内容は消去されて完全に元のデータが上書きされるので注意する必要がある。でも、hddの内容はddやtarで抽出できるのであまり意味がないかもしれない。

手順は以下のとおり

    • SL-C3000 の本体の電源を切って、バッテリーを抜く。
    • 6GB のマイクロドライブを CF スロットに入れる
    • キーボードのDとMを押しながら、AC アダプタをつなぐ。
    • Service Menu が出るので矢印キーで3Page 目を選択
    • BACKUP RESTORE MENU を選択
    • HDD Backup を選択
    • "Execute"と聞かれるので"OK"を押す
    • HDD Backup が始まる(終わるまで一時間ほどかかる)。

データの移行

パーティションの作成

以下のようなパーティション構成にしてみる

/dev/hdc1             1       204    102784+  83  Linux
/dev/hdc2           205      3181   1500400   83  Linux
/dev/hdc3          3182     11905   4396896    c  Win95 FAT32 (LBA)
/dev/hdc4             1         1         0    0  Empty
Partition 4 does not end on cylinder boundary.

CFスロットに新しいマイクロドライブを入れて Terminal から以下のコマンドを実行する

#umount /mnt/cf
#fdisk /dev/hdc

fdisk のパラメータには/dev/hdcを渡すこと(hdcは CFスロットのHDDを示す)。 fdisk のコマンドは以下のとおり

    • n パーティションの新規作成
    • d パーティションの削除
    • p パーティションの表示
    • t パーティションのタイプ(ID)変更
    • l パーティションのタイプのリスト表示

p コマンドでパーティションの表示を行い、新しいマイクロドライブを操作しているかを確認する。

Command (m for help): p

Disk /dev/hdc: 6144 MB, 6144284672 bytes
16 heads, 63 sectors/track, 11905 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

すでにパーティションがあれば、d コマンドですべてのパーティションを削除する。

Command (m for help): d
Partition number (1-4):1
Command (m for help): d
Partition number (1-4):2
Command (m for help): d
Partition number (1-4):3
Command (m for help): d
Partition number (1-4):4

n コマンドでパーティションを作成する。このときパーティション3から作成していく。各パーティションのサイズはお好みで。

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):3
First cylinder (1-11905, default 1):3182
Last cylinder or +size or +sizeM or +sizeK (3182-11905, default 11905):11905
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):2
First cylinder (1-11905, default 1):205
Last cylinder or +size or +sizeM or +sizeK (205-3181, default 3181):3181
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Selected partition 1 
First cylinder (1-11905, default 1):1
Last cylinder or +size or +sizeM or +sizeK (1-204, default 204):204

hdc3のパーティションタイプをcに変更する

/dev/hdc1             1       204    102784+  83  Linux
/dev/hdc2           205      3181   1500400   83  Linux
/dev/hdc3          3182     11905   4396896   83  Linux
/dev/hdc4             1         1         0    0  Empty
Partition 4 does not end on cylinder boundary.
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): c
Changed system type of partition 3 o c (Win95 FAT32 (LBA))

w コマンドでパーティション情報を保存する。

Command (m for help): w
The partition table has been altered!
...

パーティションのフォーマット

Terminal から以下のコマンドを実行する。hdc1とhdc2はEXT3、hdc3はFAT32にしてみる。

#mke2fs -j /dev/hdc1
#mke2fs -j /dev/hdc2
#mkdosfs -F32 /dev/hdc3

データのコピー

/mnt以下に/mnt/hdc1、/mnt/hdc2、/mnt/hdc3を作ってhdcをそこにマウントする。

#mkdir /mnt/hdc1
#mkdir /mnt/hdc2
#mkdir /mnt/hdc3
#mount /dev/hdc1 /mnt/hdc1
#mount /dev/hdc2 /mnt/hdc2
#mount -t vfat -o iocharset=utf8,codepage=932 /dev/hdc3 /mnt/hdc3

tarコマンドを使ってデータをコピーする。

#cd /hdd1
#tar cf - . | (cd /mnt/hdc1;tar xf -)
#cd /hdd2
#tar cf - . | (cd /mnt/hdc2;tar xf -)
#cd /hdd3
#tar cf - . | (cd /mnt/hdc3;tar xf -)

分解

結果

換装による不都合

修正パッチ

4GB以上のディスクをUSBマスストレージで使用する場合の不都合を修正したパッチと、コンパイル済みのモジュールを以下のところに置いておきます。

置き換え方法

  • ターミナルソフトを開いてrootになる(bashにすると補完がきくので便利)。
$su
#bash
bash-2.05#
  • / をr,w で再マウント
bash-2.05#mount -o remount,rw /
  • モジュールのあるディレクトリに移動
bash-2.05#cd /lib/modules.rom/2.4.20/kernel/drivers/usb/device/storage_fd/
  • 元のドライバをリネーム(念のため保存)
bash-2.05#mv storage_fd.o storage_fd.old.o
  • 新しいドライバをコピー(ここではSDから)
bash-2.05#cp /mnt/card/storage_fd.o .
  • depmod
bash-2.05#depmod -a
  • / を ro で再マウント
bash-2.05#mount -o remount,ro /

おまけ

転送レート向上の実験

6GBのマイクロドライブに換装後、hdparmで計測した転送レートは以下のとおり

hdparm -t /dev/hda
Timing bufferd disk reads: 8MB in 3.49 seconds = 2.29 MB/sec
  • カーネルのコンフィギュレーションを変更してみる
ATA/ATAPI/MFM/RLL support -> IDE/ATA and ATAPI Block devices --> Use multi-mode by default を ON にする。

カーネルをアップデートして、hdparmで計測してみる。hdparm はソースをとってきて、zaurus用にクロスコンパイルすればそのまま動作する。


hdparm -t /dev/hda
Timing bufferd disk reads: 8MB in 3.35 seconds = 2.39 MB/sec
  • スペシャルカーネルを導入し、Use multi-mode by default も ON にする。
    • PXA=416MHz,Bus=208MHz,LCD=104MHzの場合(デフォルト)
hdparm -t /dev/hda
Timing bufferd disk reads: 8MB in 3.30 seconds = 2.42 MB/sec
    • PXA=520MHz,Bus=260MHz,LCD=64MHzの場合
hdparm -t /dev/hda
Timing bufferd disk reads: 10MB in 3.17 seconds = 3.15 MB/sec
    • PXA=624MHz,Bus=312MHz,LCD=78MHzの場合
hdparm -t /dev/hda
Timing bufferd disk reads: 12MB in 3.21 seconds = 3.74 MB/sec
  • さらに、MCIO1 の値も変えてみる
  • (危険-MCIO1の値を間違えるとハングアップしたり、HDDに変なデータが書き込まれてしまう可能性あり)

#insmod /lib/modules/2.4.20/kernel/arch/arm/mach-pxa/registers.o
#echo 49670 > MCIO1
    • PXA=624MHz,Bus=312MHz,LCD=78MHz,MCIO1の値を116234(デフォルト)
hdparm -t /dev/hda
Timing bufferd disk reads: 12MB in 3.13 seconds = 3.83 MB/sec
    • PXA=624MHz,Bus=312MHz,LCD=78MHz,MCIO1の値を83208
hdparm -t /dev/hda
Timing bufferd disk reads: 14MB in 3.43 seconds = 4.08 MB/sec
    • PXA=624MHz,Bus=312MHz,LCD=78MHz,MCIO1の値を50182
hdparm -t /dev/hda
Timing bufferd disk reads: 14MB in 3.08 seconds = 4.55 MB/sec
    • PXA=624MHz,Bus=312MHz,LCD=78MHz,MCIO1の値を33284(危険)
hdparm -t /dev/hda
Timing bufferd disk reads: 16MB in 3.04 seconds = 5.26 MB/sec
    • PXA=624MHz,Bus=312MHz,LCD=78MHz,MCIO1の値を33155(危険)
hdparm -t /dev/hda

MCIO1の値が33155のときはLEDがつきっぱなしでハングアップ(33284のときもその後ハング)。

MCIO1の値が33284の場合、mpeg1 の画像を再生しても普通に動作していた。 でもその後にカレンダーやアドレス帳を起動しようとするとLEDがつきっぱなしでハングアップ。 再起動するとQTOPIAが立ち上がらず(変なデータが書き込まれてしまったらしい) リセット後に、メンテナンスメニューから完全消去を選択して、消去するはめになってしまった。

PXA270 の仕様書とMicroDrive?の仕様書を見て、スペックを満たす値を求めてみた。 (あまり自身なし)

    • PXA=624MHz,Bus=312MHz,LCD=78MHz,MCIO1の値を49670(この値は6GBマイクロドライブ使用時の値)
#hdparm -t /dev/hda
Timing bufferd disk reads: 14MB in 3.22 seconds = 4.35 MB/sec

この値はPIO Mode4、Advanced Power ManagementでMax Paformance(254) にしてみたもの。

#hdparm -X12 /dev/hda
/dev/hda:
setting xfermode to 12(PIO flow control mode4)
#hdparm -B254 /dev/hda
/dev/hda:
setting Advanced Power Management level to 0xFE (254)

あとで計測してみたが、PIO Mode や Advanced Power Management Level を変えてもあまり変わらないらしい。

上記の値でも、4GBマイクロドライブは動作する。 今のところ、MPEG1 の画像ファイルの再生や、数百MBのファイルをUSB経由で書き込んでも問題なく動作している。

4GBマイクロドライブのアクセスタイミング

アクセスタイミングは以下のとおり

  • IOリードタイミング
    • アドレスセットアップ(70ns)
    • IOリード(165ns)
    • アドレスホールド(20ns)
  • IOライトタイミング
    • アドレスセットアップ(70ns)
    • IOリード(165ns)
    • アドレスホールド(20ns)

6GBマイクロドライブのアクセスタイミング

アクセスタイミングは以下のとおり。Cycle Time Modeにより変化するらしい。

  • Cycle Time Mode(255ns)
    • IOリードタイミング
      • アドレスセットアップ(70ns)
      • IOリード(165ns)
      • アドレスホールド(20ns)
    • IOライトタイミング
      • アドレスセットアップ(70ns)
      • IOリード(165ns)
      • アドレスホールド(20ns)
  • Cycle Time Mode(120ns)
    • IOリードタイミング
      • アドレスセットアップ(25ns)
      • IOリード(70ns)
      • アドレスホールド(10ns)
    • IOライトタイミング
      • アドレスセットアップ(25ns)
      • IOリード(70ns)
      • アドレスホールド(20ns)
  • Cycle Time Mode(100ns)
    • IOリードタイミング
      • アドレスセットアップ(25ns)
      • IOリード(65ns)
      • アドレスホールド(10ns)
    • IOライトタイミング
      • アドレスセットアップ(25ns)
      • IOリード(65ns)
      • アドレスホールド(10ns)
  • Cycle Time Mode(80ns)
    • IOリードタイミング
      • アドレスセットアップ(15ns)
      • IOリード(55ns)
      • アドレスホールド(10ns)
    • IOライトタイミング
      • アドレスセットアップ(15ns)
      • IOリード(55ns)
      • アドレスホールド(10ns)

コメント

お名前: コメント: 更新