jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs

nfs

setenv bootargs 'root=/dev/nfs nfsroot=192.168.22.50:/home/rootfs init=/linuxrc console=ttySAC0,115200 ip=192.168.22.107:192.168.22.50:192.168.22.1:255.255.255.0::eth0:off'

/dev/nfs:网络文件系统
ttySAC0:串口终端 (如果指定错,内核无打印信息)
eth0:对应网卡
off:网络参数静态指定

网络文件系统javascript:void(0)

cramfs
只读压缩的文件系统。不需要全部解压到ram中;解压缩时有延迟

# mkfs.cramfs /home/rootfs rootfs.cramfs
# setenv bootargs 'root=/dev/mtdblock0 init=/linuxrc console=ttyPS0,115200 rootfstype=cramfs' 

mtdblock0:flash第一个分区 (根据分区设定)

ramdisk
划出一部分内存做文件系统。文件访问速度快;内存容量有限

# dd if=/dev/zero of=/tmp/ramdisk bs=1k count=8192
# /sbin/mke2fs -F -v -m0 /tmp/ramdisk
# sudo mount -t ext2 -o loop /tmp/ramdisk /mnt/
# sudo cp -a ./rootfs/* /mnt	//拷贝文件系统
# sudo umount /mnt	//需要卸载再压缩
# gzip -v9 /tmp/ramdisk	//压缩
# mkimage -n 'Simple Ramdisk Image' -A ppc -O linux -T ramdisk -C gzip -d /tmp/ramdisk.gz /tmp/rootfs.ramdisk  //制作启动映像
setenv bootargs 'root=/dev/ram rw init=/linuxrc initrd=0x20008000,10M console=ttyS0,115200'

/dev/ram:内存文件系统
initrd:内存位置

mkimage参考javascript:void(0)

jffs2
闪存日志型文件系统
jffs2安装方式见jffs2小结

# mkfs.jffs2 -r /home/rootfs -o rootfs.jffs2 -e 0x20000 -p 0xa00000 -s 0x800 -n -l

e:每一块要擦除的block size,默认是64KB。要注意,不同的flash,block size不一样,三星的K9F2G08U0A的block size为0x20000。在没有加-e选项是,启动会出现以下错误:at91sam user.warn kernel: Empty flash at 0x00f0fffc ends at 0x00f10000。若有类似的错误,加上-e选项
p:输出文件大小。如果实际大小不足此设定的大小,则用0xFF补足
n:指明不添加清除标记(nandflash有自己的校检块,存放相关的信息)。如果挂载后会出现类似:CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0的警告,加上-n就会消失
l:使用小端格式

# mkfs.jffs2 -r /home/rootfs -o rootfs.jffs2 -e 0x20000 --pad=0xa00000 -s 0x800 -n -l

经测试,发现一个问题。-p指定输出文件大小不正确,使用–pad才可以

# setenv bootargs 'root=/dev/mtdblock3 console=ttyPS1,115200 rootfstype=jffs2' 

yaffs2

# git clone git://www.aleph1.co.uk/yaffs2 
# mkyaffs2image /home/rootfs rootfs.yaffs2

如果出现错误:

Not enough space in object array 

解决办法:

# vi utils/mkfsyaffs2image.c
#define MAX_OBJECTS 100000
# nand write[.yaffs[1]] addr off size 

内存文件系统javascript:void(0)