2009年10月 のアーカイブ

AndroidでSDカードを使ってみる(2)

2009年10月1日 木曜日

システム3部鈴木です。

前回問題点としてあげていたwarningは、どうやらFATのフォーマットに関係があるようなので、調査しました。

もっとも、AndroidにマウントしたSDカードにviで新しいファイルを作ることができたので、「File system has been set read-only」というメッセージにどの様な意味があるのか良くわからないのですが。

mkdosfsのインストール

FATフォーマットをWindowsで行っているのが良くないのでは?ということで、LinuxでDOSのファイルシステムを作るためのmkdosfsを使ってみます。
参考サイト:[Armadillo:02384] Re: fsck.vfat について

atmark-distには入っていないので、arm用のバイナリをDLして、Armadilloのユーザーランドに追加します。

[PC ~]$ wget http://ftp.jp.debian.org/debian/pool/main/d/dosfstools/dosfstools_2.11-2.1+b1_arm.deb
(GCC4.1の場合)

パッケージを展開して、中身をArmadilloのユーザーランドにコピーします。

[PC ~]$ dpkg -x dosfstools_2.11-2.1+b1_arm.deb pkg
[PC ~]$ cp pkg/* atmark-dist/rootfs/sbin/

イメージを作り直します。

[PC ~]$ cd atmark-dist
[PC ~/atmark-dist]$ make image

Armadilloのフラッシュメモリに書き込みます。
例えばFTPで romfs.img.gz を /home/ftp/pub フォルダに転送し、下記のコマンドを実行します。

[armadillo ~]# netflash -nkur /dev/flash/nor.userland /home/ftp/pub/romfs.img.gz

フォーマット

SDカードのパーティションを切りなおし、FATでフォーマットします。

fdiskで既存のパーティションを削除し、新規パーティションをデフォルトで作成します。
その後、以下の設定をします。

Command (m for help): a
Partition number (1-4): 1

・・・ブート可能に。

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 6
Changed system type of partition 1 to 6 (FAT16)

・・・System IDを6に。

作成したパーティションをSDカードに書き込んだら、FATにフォーマットします。

[armadillo ~]# mkfs.vfat -F 32 /dev/mmcblk0

不思議なことに、この状態のSDカードをfdiskで見てみると…

Command (m for help): p

Disk /dev/mmcblk0: 14 MB, 14745600 bytes
4 heads, 16 sectors/track, 450 cylinders
Units = cylinders of 64 * 512 = 32768 bytes

        Device Boot    Start       End    Blocks   Id  System

…パーティションがありません。どういう現象なのでしょう???

それはともかく、Androidを起動してみたところ、例の警告は出ませんでした。

ただし、このSDカードをWindowsPCに挿し、ファイルを書き込もうとすると、フォルダは空なのに容量がないと言われます。
仕方ないのでFATでフォーマットし、mp3ファイルを書き込んでみました。

Androidでマウントしても警告は出ませんし、mp3も再生できたので、ひとまず解決とします。

ただ、このSDをfdiskで見てみると…

        Device Boot    Start       End    Blocks   Id  System
/dev/mmcblk0p1   ?    12158374    29994462   570754815+  72  Unknown
Partition 1 has different physical/logical beginnings (non-Linux?):
     phys=(357, 116, 40) logical=(12158373, 2, 5)
Partition 1 has different physical/logical endings:
     phys=(357, 32, 45) logical=(29994461, 2, 3)
Partition 1 does not end on cylinder boundary.
/dev/mmcblk0p2   ?     2635774    32886216   968014120   65  Unknown
Partition 2 has different physical/logical beginnings (non-Linux?):
     phys=(288, 115, 43) logical=(2635773, 3, 3)
Partition 2 has different physical/logical endings:
     phys=(367, 114, 50) logical=(32886215, 0, 2)
Partition 2 does not end on cylinder boundary.
/dev/mmcblk0p3   ?    29216898    59467339   968014096   79  Unknown
Partition 3 has different physical/logical beginnings (non-Linux?):
     phys=(366, 32, 33) logical=(29216897, 3, 10)
Partition 3 has different physical/logical endings:
     phys=(357, 32, 43) logical=(59467338, 1, 9)
Partition 3 does not end on cylinder boundary.
/dev/mmcblk0p4   ?           1 18446744073699274417 18446744073380681216    d  Unknown
Partition 4 has different physical/logical beginnings (non-Linux?):
     phys=(372, 97, 50) logical=(0, 0, 1)
Partition 4 has different physical/logical endings:
     phys=(0, 10, 0) logical=(56831663, 3, 16)
Partition 4 does not end on cylinder boundary.

Partition table entries are not in disk order

…これはこれで別の問題を孕んでいそうですが、当面は放っておくことにしました。

WindowsPCでSDカードをFAT32形式にフォーマットしようとすると容量が少なすぎると言われるので、もっと大容量のSDを使用すると、また違った結果になるかもしれません。