OBDN技術ブログによる動作検証は、該当するデバイスやソフトウェアの動作について、保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。
はじめに
OpenBlocks IoT EX1 (以下EX1)には、筐体内部に microSD メモリーカードスロットがあり microSDXC メモリーカード(以下 microSDXC)を利用できますが、実は、市販されている microSDXC をそのまま利用するためには、EX1側で少し設定作業が必要になります。
ここでは microSDHC メモリーカード(以下 microSDHC)と比べながら、microSDXC を EX1 で読み書きする方法について説明しましょう。
本文が長くなったので最後にまとめを用意してあります。ざっくりと概要を知りたい方は最後のまとめをお読みください。
microSDXC と miroSDHC
今回用意したメモリーカードは次の2枚で、左側の黒いカードが microSDHC 16GB、右側の上部が赤いカードが microSDXC 64GB です。
microSDHC の利用
まず microSDHC を EX1 にマウントしてみましょう。
EX1 で microSD メモリーカードを利用するために EX1 本体の蓋を開ける必要がありますが、蓋を固定してあるネジを外す際は次のようなグリッップの太いしっかりした0番のプラスドライバーを利用してください。
EX1 で microSD メモリーカードを利用するために EX1 本体の蓋を開ける必要がありますが、蓋を固定してあるネジを外す際は次のようなグリッップの太いしっかりした0番のプラスドライバーを利用してください。
よくある細い精密ドライバーでは力が十分にかからず、ネジを開けられないことがあります。
この写真は microSDHC を EX1 に差し込んでいる途中の状態です。このままカチっと音がするまで奥に差し込みます。完全に差し込むと次のようになります。
ここに刺した microSDHC のデバイス名は、/dev/mmcblk1 となります。
次の例はまだ microSDHC カードを刺していない状態で、デバイスが存在しません。
microSDHC を刺すと、次の通りデバイスが現れます。
ここで /dev/mmcblk1 が microSDHC カード全体を表し、/dev/mmcblk1p1 が microSDHC の最初のパーティションを表していて、実際の記憶領域はこのパーティションとなります。
では実際に /dev/mmcblk1p1 をマウントしてみましょう。
この通りマウントできています。あとは /mnt ディレクトリの配下で microSDHC のデータを読み書きできます。
ファイルのコピー等必要な作業が終わったら microSDHC を本体から抜きますが、抜く前には必ず unmount します。
これで安全に microSDHC カードを安全に本体から抜くことができます。
今度は microSDXC で同様の作業を行ってみましょう。
まず本体に microSDXC カードを挿入します。
写真は差し込み途中のものですが、奥までしっかり差し込んで下さい。正しく差し込めば次のように microSDXC のデバイスが現れます。microSDXC でもデバイス名は microSDHC と同じ名前です。
ではマウントしてみましょう
exfatは知らないファイルシステムだというエラーメッセージが表示されました。df コマンドや、mount コマンドの結果を見ても次のように microSDXC のマウントはできていません。
次の例はまだ microSDHC カードを刺していない状態で、デバイスが存在しません。
# ls -l /dev/mmcblk1*
ls: cannot access /dev/mmcblk1*: No such file or directory
ls: cannot access /dev/mmcblk1*: No such file or directory
microSDHC を刺すと、次の通りデバイスが現れます。
# ls -l /dev/mmcblk1*
brw-rw---T 1 root floppy 179, 128 Feb 24 14:12 /dev/mmcblk1
brw-rw---T 1 root floppy 179, 129 Feb 24 14:12 /dev/mmcblk1p1
brw-rw---T 1 root floppy 179, 128 Feb 24 14:12 /dev/mmcblk1
brw-rw---T 1 root floppy 179, 129 Feb 24 14:12 /dev/mmcblk1p1
ここで /dev/mmcblk1 が microSDHC カード全体を表し、/dev/mmcblk1p1 が microSDHC の最初のパーティションを表していて、実際の記憶領域はこのパーティションとなります。
では実際に /dev/mmcblk1p1 をマウントしてみましょう。
# mount /dev/mmcblk1p1 /mnt ← microSDHC パーティションのマウント
# mount | fgrep /mnt ← マウントできたかどうかの確認その1
/dev/mmcblk1p1 on /mnt type vfat (rw,relatime,fmask=0022, dmask=0022,codepage=437,iocharset=iso8859-1, shortname=mixed,errors=remount-ro)
# df -h /mnt/. ← moountできたかどうかの確認その2
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk1p1 15G 2.2M 15G 1% /mnt
# mount | fgrep /mnt ← マウントできたかどうかの確認その1
/dev/mmcblk1p1 on /mnt type vfat (rw,relatime,fmask=0022, dmask=0022,codepage=437,iocharset=iso8859-1, shortname=mixed,errors=remount-ro)
# df -h /mnt/. ← moountできたかどうかの確認その2
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk1p1 15G 2.2M 15G 1% /mnt
この通りマウントできています。あとは /mnt ディレクトリの配下で microSDHC のデータを読み書きできます。
ファイルのコピー等必要な作業が終わったら microSDHC を本体から抜きますが、抜く前には必ず unmount します。
# umount /mnt
これで安全に microSDHC カードを安全に本体から抜くことができます。
microSDXC の利用
今度は microSDXC で同様の作業を行ってみましょう。
まず本体に microSDXC カードを挿入します。
写真は差し込み途中のものですが、奥までしっかり差し込んで下さい。正しく差し込めば次のように microSDXC のデバイスが現れます。microSDXC でもデバイス名は microSDHC と同じ名前です。
# ls -l /dev/mmcblk1*
brw-rw---T 1 root floppy 179, 128 Feb 24 14:42 /dev/mmcblk1
brw-rw---T 1 root floppy 179, 129 Feb 24 14:42 /dev/mmcblk1p1
#
brw-rw---T 1 root floppy 179, 128 Feb 24 14:42 /dev/mmcblk1
brw-rw---T 1 root floppy 179, 129 Feb 24 14:42 /dev/mmcblk1p1
#
ではマウントしてみましょう
# mount /dev/mmcblk1p1 /mnt
mount: unknown filesystem type 'exfat'
#
mount: unknown filesystem type 'exfat'
#
exfatは知らないファイルシステムだというエラーメッセージが表示されました。df コマンドや、mount コマンドの結果を見ても次のように microSDXC のマウントはできていません。
# mount | fgrep /mnt
# df /mnt/.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 198337 156166 31931 84% /
#
# df /mnt/.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 198337 156166 31931 84% /
#
これに対して microSDHC は FAT32 形式でフォーマットしてあり、元々カーネルがドライバを持っています。
# apt-get update ← パッケージインデックスの更新
Hit http://ftp.plathome.co.jp ./ Release.gpg
---------- 中略 ---------- 中略 ----------
Hit http://cdn.debian.or.jp wheezy-updates/main Translation-en
Reading package lists... Done
#
# apt-cache search exfat ← exFAT関係のパッケージの検索
exfat-utils - utilities to create, check, label and dump exFAT filesystem
exfat-fuse - read and write exFAT driver for FUSE
#
Hit http://ftp.plathome.co.jp ./ Release.gpg
---------- 中略 ---------- 中略 ----------
Hit http://cdn.debian.or.jp wheezy-updates/main Translation-en
Reading package lists... Done
#
# apt-cache search exfat ← exFAT関係のパッケージの検索
exfat-utils - utilities to create, check, label and dump exFAT filesystem
exfat-fuse - read and write exFAT driver for FUSE
#
exfat-utils と exfat-fuse が見つかりました。ここでは exfat-utils をインストールします。exfat-fuse 並びに他に必要なパッケージが一緒にインストールされます。
# apt-get install exfat-utils
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
exfat-fuse fuse libfuse2
The following NEW packages will be installed:
exfat-fuse exfat-utils fuse libfuse2
0 upgraded, 4 newly installed, 0 to remove and 23 not upgraded.
Need to get 348 kB of archives.
After this operation, 720 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
---------- 中略 ---------- 中略 ----------
Done.
udev active, skipping device node creation.
Setting up exfat-fuse (0.9.7-2) ...
Setting up exfat-utils (0.9.7-2) ...
#
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
exfat-fuse fuse libfuse2
The following NEW packages will be installed:
exfat-fuse exfat-utils fuse libfuse2
0 upgraded, 4 newly installed, 0 to remove and 23 not upgraded.
Need to get 348 kB of archives.
After this operation, 720 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
---------- 中略 ---------- 中略 ----------
Done.
udev active, skipping device node creation.
Setting up exfat-fuse (0.9.7-2) ...
Setting up exfat-utils (0.9.7-2) ...
#
これで環境が整ったので microSDXC をマウントしてみます。
# mount /dev/mmcblk1p1 /mnt
FUSE exfat 0.9.7
# mount | fgrep /mnt
/dev/mmcblk1p1 on /mnt type fuseblk (rw,nosuid,nodev,relatime, user_id=0,group_id=0,allow_other,blksize=4096)
# df -h /mnt/.
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk1p1 60G 26M 60G 1% /mnt
#
FUSE exfat 0.9.7
# mount | fgrep /mnt
/dev/mmcblk1p1 on /mnt type fuseblk (rw,nosuid,nodev,relatime, user_id=0,group_id=0,allow_other,blksize=4096)
# df -h /mnt/.
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk1p1 60G 26M 60G 1% /mnt
#
マウントできたので、簡単に読み書きしてみます。
# cd /mnt
# ls
# touch test
# ls
test
# ls -l test
-rwxr-xr-x 1 root root 0 Feb 24 15:39 test
#
# ls
# touch test
# ls
test
# ls -l test
-rwxr-xr-x 1 root root 0 Feb 24 15:39 test
#
microSDXC を抜く時もアンマウントを忘れないようにしてください。
# umount /mnt
microSDXC を EXT4 形式で使う
microSDXC は exFAT 形式のまま使うには exFAT 形式サポート用のドライバとユーティリティが必要ですが、カード側をカーネルがサポートしているファイル形式に変換してから使う方法もあります。ここでは Linux で標準的な EXT4 形式でフォーマットしてみましょう。
# fdisk /dev/mmcblk1 ← fdisk コマンドでパーテションテーブルを変更する
Command (m for help): p ← 現在の状態を確認する
Disk /dev/mmcblk1: 63.9 GB, 63864569856 bytes
255 heads, 63 sectors/track, 7764 cylinders, total 124735488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/mmcblk1p1 32768 124735487 62351360 7 HPFS/NTFS/exFAT
Command (m for help): t ← パーテションタイプを変更
Selected partition 1
Hex code (type L to list codes): 83 ← Linux の "83" を指定する
Changed system type of partition 1 to 83 (Linux)
Command (m for help): p ← 変更結果を確認する
Disk /dev/mmcblk1: 63.9 GB, 63864569856 bytes
255 heads, 63 sectors/track, 7764 cylinders, total 124735488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/mmcblk1p1 32768 124735487 62351360 83 Linux
Command (m for help): w ← 変更を書き込んで fdisk を終了
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk -l /dev/mmcblk1 ← 改めて変更結果を確認
Disk /dev/mmcblk1: 63.9 GB, 63864569856 bytes
255 heads, 63 sectors/track, 7764 cylinders, total 124735488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/mmcblk1p1 32768 124735487 62351360 83 Linux
#
# mkfs -t ext4 /dev/mmcblk1p1 ← ext4ファイルシステムの作成
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3899392 inodes, 15587840 blocks
779392 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
476 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
# mount /dev/mmcblk1p1 /mnt ← マウントする
# mount | fgrep /mnt
/dev/mmcblk1p1 on /mnt type ext4 (rw,relatime,data=ordered)
# df /mnt/.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mmcblk1p1 61241372 53064 58054356 1% /mnt
Command (m for help): p ← 現在の状態を確認する
Disk /dev/mmcblk1: 63.9 GB, 63864569856 bytes
255 heads, 63 sectors/track, 7764 cylinders, total 124735488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/mmcblk1p1 32768 124735487 62351360 7 HPFS/NTFS/exFAT
Command (m for help): t ← パーテションタイプを変更
Selected partition 1
Hex code (type L to list codes): 83 ← Linux の "83" を指定する
Changed system type of partition 1 to 83 (Linux)
Command (m for help): p ← 変更結果を確認する
Disk /dev/mmcblk1: 63.9 GB, 63864569856 bytes
255 heads, 63 sectors/track, 7764 cylinders, total 124735488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/mmcblk1p1 32768 124735487 62351360 83 Linux
Command (m for help): w ← 変更を書き込んで fdisk を終了
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk -l /dev/mmcblk1 ← 改めて変更結果を確認
Disk /dev/mmcblk1: 63.9 GB, 63864569856 bytes
255 heads, 63 sectors/track, 7764 cylinders, total 124735488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/mmcblk1p1 32768 124735487 62351360 83 Linux
#
# mkfs -t ext4 /dev/mmcblk1p1 ← ext4ファイルシステムの作成
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3899392 inodes, 15587840 blocks
779392 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
476 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
# mount /dev/mmcblk1p1 /mnt ← マウントする
# mount | fgrep /mnt
/dev/mmcblk1p1 on /mnt type ext4 (rw,relatime,data=ordered)
# df /mnt/.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mmcblk1p1 61241372 53064 58054356 1% /mnt
まとめ
OpenBlocks IoT EX1 で microSDXC を利用する方法をまとめます。
- 市販の microSDXC は exFAT 形式でフォーマットされている
- exFAT 形式はそのままでは Linux のカーネルがサポートしていないため、次のいずれかの対応が必要となる
- exFAT 形式のドライバとユーティリティーをインストールして利用する
- microSDXC のフォーマットを EXT4 などのLinux のファイルシステムに変換してから利用する
microSD メモリーカードはシステム運用に十分な信頼性を確保できない為、ファイル交換やログ保存用等の限定用途で利用するのが安全です。
また OpenBlocks IoT BX1, BX3 などでも、USB 二股ケーブルとUSBのメモリカードリーダライタを使って microSDXC を読み書きする場合には、同様の手続きが必要になります。
また OpenBlocks IoT BX1, BX3 などでも、USB 二股ケーブルとUSBのメモリカードリーダライタを使って microSDXC を読み書きする場合には、同様の手続きが必要になります。
0 件のコメント:
コメントを投稿