2010/05/07

/dev/mtd?と/dev/mtdblock?

uImageやrootfsの書き込みの際に、
/dev/mtd?と/dev/mtdblock?と微妙に似て非なる2つのものがでてきたので、ちょっと調べた内容についてメモ。

参考リンクは以下
デバイスドライバー以下http://www.ibm.com/developerworks/jp/linux/library/l-embdev.html

MTDドライバーは、Linuxで、とくに組み込み環境用として開発されてきている新しいクラスのドライバーです。従来のブロック・デバイス・ドライバーと比較してMTDドライバーを利用することの主な利点は、MTDドライバーがとくにフラッシュ・ベースのデバイス用として設計されている点です。したがって、セクター単位の消去や読み書きに関して、サポートや管理やインターフェースが従来よりも良くなっています。
どうも、デバイスにはセクター単位で データにアクセスするデバイス(HDDとか)(=ブロックデバイス)に対して、もっと細かい単位でデータにアクセスするデバイス(フラッシュメモリとか)(=キャラクタデバイスというらしい)がある。
MTD_CHAR には、フラッシュのキャラクタを直接アクセスする機能があるのに対して、MTD_BLOCK は、フラッシュを通常の (IDEディスクのような) ブロック・デバイスとして取り扱い、その上にファイルシステムを作成できるようにしています。MTD_CHAR に関係付けられるデバイスは /dev/mtd0、mtd1、mtd2 (など) で、MTD_BLOCK に関係付けられるデバイスは /dev/mtdblock0、mtdblock1 (など) です。MTD_BLOCK デバイスは、ブロック・デバイスに似せたエミュレーションを行いますので、多くの場合、このエミュレーションの上にFTLやJFFS2のようなファイルシステムを作成すればよいでしょう。
 で、フラッシュメモリが対象になる場合に、/dev/mtd?の方はアクセスする単位を細かいデータ単位(=キャラクタ?)で取り扱えるのに対して、/dev/mtdblock?の方は既存のブロックデバイスであるかのように取り扱えるというような違いかな?

というのを踏まえて参考にしたサイトを見ると、
NANDに直アクセスする場合

 #/usr/sbin/flash_eraseall -j /dev/mtd2
 #/usr/sbin/nandwrite -p /dev/mtd2 /ubuntu-9.0.5.Release.jffs2

となっていて、マウントする場合は

 #mount -t jffs2 /dev/mtdblock2 /mnt1

と使い分けられているわけか。

なんとなく、わかったような気になったよーな気がする。

0 件のコメント: