使用YAFFS2作為根檔案系統
在我們的專案應用中,有較大的NAND FLASH,而RAM資源比較緊張。因此考慮使用NAND FLASH做為根檔案系統,而不採用常見的ramdisk作為rootfs。
使用yaffs2作為根檔案系統,需要注意兩點:
一 核心啟動引數
使用yaffs作為rootfs時,需要uboot提供如下啟動引數給核心:
setenv bootargs mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rootfstype=yaffs2 rw
二 製作映像包
方法一
1,首先nfs方式啟動linux。
2,進入開發板linux shell裡。
3,擦除mtd1。
eraseall /dev/mtd1
4,把nfs.tar.gz拷貝到/home/radionfs根目錄下。
5,掛載mtdblock1。
mount –t yaffs2 /dev/mtdblock1 /mnt
6,解壓根檔案系統到mnt也就是寫到mtdblock1.
cd /mnt
tar xvzf /nfs.tar.gz
7,解除安裝mtd1
umount /mnt
這樣,我們的根檔案系統就固化到nand裡面了。
注:這樣方式需要啟動虛擬機器,進入開發板linux之後才能操作,很不方便。同時在生產階段效率很低。不推薦使用。
方法二
Yaffs2提供了一個mkyaffs2image的使用工具,可以直接把我們的根檔案系統打包生成一個yaffs2的映象,然後使用uboot燒入到nand flash中即可。這種方法不需要啟動虛擬機器和目標板上的linux系統。非常方便,速度也更快捷。
- 映像打包
使用root許可權。
./mkyaffs2image ?~/SAM9260/nfsroot/nfsroot-standard/ myroot
其中,
~/SAM9260/nfsroot/nfsroot-standard/是將要打包的yaffs目錄
Myroot 是打包以後的映像檔案
2,uboot燒寫
Tftp 22000000 myroot
需要先擦除flash。
Nand erase 3c00000 size
nand write.yaffs 22000000 3c00000 e718c0(最後的是大小,需要使用下載後的位元組,包含oob)
其中,
22000000是映像包下載後的地址
3c00000是nand分割槽的起始地址
e718c0這個是映像包的大小
三 修改
- yaffs2/utils/mkyaffs2image.c
160行,增加
char oobData[spareSize];
188行,增加
//return write(outFile,&pt,spareSize);
memset(oobData,0xFF,spareSize);
memcpy(&(oobData[2]),&pt,sizeof(yaffs_PackedTags2));
??? return write(outFile,oobData,spareSize);
#make
在當前目錄下生成 mkyaffs2image
- uboot修改
具體見《uboot.doc》