对于linux 的根文件系统,目前有三种块设备的驱动可以选择,它们都可以用来包含根文件系统。分别是:
a) Blkmem 驱动
b) MTD 驱动
c) RAM disk 驱动
       Blkmem 驱动是专门为嵌入式linux 开发的一种块设备驱动,它是嵌入式linux系统中最为古老和通用的块设备驱动。它原理相对简单但是配置比较复杂,需要根据你即的Flash的分区使用情况来修改代码。当然修改的结果是它可以对一些NOR型的Flash进行读写操作。不过目前支持的Flash类型不够多。如果新加入对一种Flash的支持需要作的工作量比较大。
       Linux的MTD驱动是标准Linux的Flash驱动。它支持大量的设备,有足够的功能来定义Flash的分区,进行地址映射等等。使用MTD你可以在一个系统中使用不同类型的Flash。它可以将不同的Flash组合成一个线性的地址让你来使用。在标准的Linux 2.4内核中MTD有一系列的选项,你可以根据个人系统的需要来选择,定制。

       使用blkmtd驱动, 你能将任意的块设备当作MTD设备使用.  当内核加载blkmtd驱动后, 如果使用的是devfs(开发板的linux2.6已经添加了devfs的支持), 那么会在/dev/mtdblock/目录中生成mtd块设备节点.可以将jffs2, cramfs文件系统挂载到mtd块设备上. 比如:
# mount -t jffs2 /dev/mtdblock/4 /mnt/test
在板子的/etc/init.d/rcS中有下列挂载命令:
mount -t jffs2 /dev/mtdblock/4 /jffs2
mount -t cramfs /dev/mtdblock/5 /cramfs
/etc/init.d/rcS中的命令显而易见: 将jffs2文件系统(设备节点为/dev/mtdblock/4)挂载到/jffs2目录,  将cramfs文件系统(设备节点/dev/mtdblock/5)挂载到/cramfs目录.

        另外一种选择就是RAM disk 驱动。在PC上它经常用于没有硬盘的Linux的启动过程。它和Flash没有直接的关系。不过当Flash上启动的是经过压缩的内核时。RAM disk 可以作为根文件系统。(关于RamDisk的详细内容请参考本blog另一篇文章:理解ramdisk)
        很明显,MTD 驱动提供了对Flash强大的支持,你通过它甚至可以在Flash上运行一个可以读写的真正的文件系统,比如JFFS2。而Blkmem驱动则望尘莫及。