1 搭建nfs
随便在PC上安装一个linux系统,我用的Fecora core 8,setup 配置系统服务,让nfs自动运行,vi /etc/exports
添加一行/home/davinci/nfs/tirootfs *(rw,sync,no_root_squash) //这行根据你的实际路径设置
然后执行exportfs -av 这个参数很有意思:)
2获取一些mtd信息(使用的nfs系统)
cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "bootloader"
mtd1: 00480000 00020000 "kernel"
mtd2: 06a00000 00020000 "rootfs"
mtd3: 01000000 00020000 "data"
可以看到这块flash的mtd2是用来放文件系统的
mtd_debug info /dev/mtd2
mtd.type = MTD_NANDFLASH
mtd.flags = MTD_CAP_NANDFLASH
mtd.size = 111149056 (106M)
mtd.erasesize = 131072 (128K)
mtd.writesize = 2048 (2K)
mtd.oobsize = 64
regions = 0
可以看到erasesize为128KiB,也就是0x20000,后来要用到这数据。
writesize为2K,后面也要用到这数据
3 在PC上制作文件系统
进到/home/davinci/dm6446/softtool,根据你具体的路径进到这目录,ll命令查看下
-rwxrwxrwx 1 zjt zjt 38499 2010-08-31 10:10 mkfs.jffs2
-rwxr--r-- 1 zjt zjt 116991 2010-08-26 17:37 mksquashfs
-rwxr--r-- 1 zjt zjt 15662 2009-07-18 15:33 mkyaffs2image-128M
drwxr-xr-x 2 zjt zjt 4096 2010-11-02 06:19 ty-dm6446-1000-bin
38KB的mkfs.jffs2,很精悍!
执行命令./mkfs.jffs2 -r /home/davinci/nfs/tirootfs/ -o jfs.img -n -e 0x20000
或者./mkfs.jffs2 -n -e 0x20000 -s 2048 -p 2048 -d /home/davinci/nfs/tirootfs/ -o jfs2.img 这个是带指定pad和pagesize的参数,
这里的-r是要制作的文件系统目录,-o是输出的映象文件, -e是擦除大小,注意参数要和mtd信息一致,否则启动文件系统会有这样那样的错。
4上电启动板子
print看一下原来的参数,一般的参数都很容易理解,如filename,filesize,serverip之类的,有一个比较长的,控制启动是nfs还是本地:
nfs使用:
setenv bootargs mem=118M console=ttyS0,115200n8 noinitrd ip=192.168.16.2:192.168.16.107:192.168.16.254:255.255.255.0 root=/dev/nfs rw nfsroot=192.168.16.107:/home/davinci/nfs/tirootfs,nolock
ip后面是本机ip:nfs服务器ip:网关ip:掩码
本地使用
setenv bootargs mem=118M console=ttyS0,115200n8 noinitrd ip=192.168.16.2:192.168.16.107:192.168.16.254:255.255.255.0 root=/dev/mtdblock2 rootfstype=jffs2 rw
ip后面是本机ip:nfs服务器ip:网关ip:掩码,虽然我们不需要nfs了,但写完整这个东西,会让启动时ifconfig顺利完成。
5 nfs方式进入系统
./nandwrite -p /dev/mtd2 /opt/rootfs.jffs2
6 重启,修改启动参数到本地方式,再重启。
以上过程可以实现文件系统制作和在线烧写。
注意:这里的“在线烧写”指的是不用进入到uboot下,因此可以通过编程,实现文件系统制作与烧写的自动化,而不需要手工输命令,使用C库的system函数即可。
还有一种方式非在线方式是在uboot里实现kernel和fs的烧写,一般用户指南里都有,本文不再赘述,关于mtd-utils更详细的功能,可以看上一篇文章。