[Suzaku:00141] Re: SDRAMとFLASHメモリ

Yasushi SHOJI email@hidden
2004年 11月 9日 (火) 16:01:43 JST


At Tue, 9 Nov 2004 15:17:28 +0900,
Shinji Matsubara wrote:
[...]
> これは、FLASHメモリはPCでいうディスクのような役割を持っていて、
> アプリケーションを動かすときは一度SDRAMにロードして使用する
> ということなのでしょうか?

特定のOSではタスク(プロセス)が静的に生成されるために、「RAMにロードす
る」という作業は必要ありませんが、Linuxは実行するタスクをRAMにロードす
る必要があります。もちろんMMUを持っているような CPUの場合、demand
pagingを行なえるため全てのタスクデータをロードするわけではありません。


また、デフォルトの設定では「Flash memoryを直接マウントしていない」とい
う点では、ディスクのような役割をしていないと言えます。簡単に説明してみ
たいと思います。

デフォルトの設定 (linux kernel + romfs + flatfsd)の場合
-------------------------------------------------------

SUZAKUの boot時に bootloaderは Flash Memoryに入っている kernelと 
userlandのイメージ (romfs)を SDRAMに展開しています。kernelは SDRAMにあ
る romfsを見つけ、ルートファイルシステム「/」 としてマウントします。

このため、kernel自身はまったく flashの存在に気づいていません。(デフォ
ルトでも mtdのドライバが入っているため、まったく知らないわけではないの
ですが)

romfsは read onlyのファイルシステムですから書き込みを許していません。
たとえ、書き込みが許されているファイルシステム(i.e. ramfs)を使ったとし
ても、この方法ではファイルシステム自体がSDRAM上にあるためにSDRAM上のコ
ピーが変更されるだけです。

ここで電源を落すなどしてシステムをリブートしてしまうと、またbootloader
は Flash Memoryから userlandのデータを SDRAMにコピーし、linuxがそのコ
ピーをマウントします。このため、HDD上のファイルシステムのように変更を
保存することはできません。これは、組込み機器の場合、電源の即断に対応し
なければならないことが多いため、このような仕組をデフォルトに採用してい
ます。

しかし、デフォルト状態でも flatfs + flatfsdを使って Flash memoryにデー
タを保存(小さな領域ですが)できるようにしています。

デフォルトの設定では /etc/config以下が flatfsd対象のディレクトリです。
以下のように試すことが可能です。

[SUZAKU /]# echo hello > /etc/config/hello.txt
[SUZAKU /]# killall -USR1 flatfsd
[SUZAKU /]# reboot
  :
[SUZAKU /]# cat /etc/config/hello.txt
hello



Flashメモリを block deviceとして直接マウントする
------------------------------------------------

mtd (memory technology devices) sub systemを使うことで、flash memoryを
block deviceとして扱うことができます。たとえば、SUZAKUのカーネルをカス
タマイズして、ext2や jffs2の filesystemをサポートした場合

[SUZAKU /]# mkfs.ext2 /dev/mtdblock7
[SUZAKU /]# mount /dev/mtdblock7 /mnt

とすることができます。こうした場合、flash memoryは pcでいう HDDと同じ
ように扱えるはずです。

最近のInterface誌にMTDについての記事があったので、MTDについて詳しく知
りたい方は必見かもしれません。

jffs2を試してみたいかたは、vendor/AtmarkTechno/SUZAKU/*.jffs2を使って
みてください。
--
        yashi



suzaku メーリングリストの案内