从网上下载YAFFS2源码,之所以没用YAFFS源码,是因为YAFFS2中的mkyaffs工具更容易创建,直接make即可得到(之后发现此工具有问题)。
1、 将YAFFS编译进入内核。此步只需要用YAFFS2源码中的patch包patch一下内核就OK了。在make menuconfig时,要选中“Lets Yaffs do its own ECC”,如果出现读写错误,就要用flash_eraseall将对应的mtd区擦除一下。如果选择“Use older-style on-NAND data format with pageStatus byte”,则在mount –t yaffs时会出现“yaffs: mtd device has only 8 bytes for tags, need 9”的错误,原因是导致编译时开启了CONFIG_YAFFS_9BYTE_TAGS控制字:
#ifndef CONFIG_YAFFS_9BYTE_TAGS # define YTAG1_SIZE 8 #else # define YTAG1_SIZE 9 #endif
|
2、 此版本的内核中,super_operations结构已经没有put_inode这个变量了,所以在yaffs_fs.c文件中注释掉:
// .put_inode = yaffs_put_inode, //modified by Jacky_Xu @ 2008.10.24
|
3、 在yaffs_fs.c文件中加入:
extern struct proc_dir_entry proc_root;
|
这样,进入内核后cat /proc/filesystems,会出现yaffs,yaffs2两项,说明YAFFS文件系统已经被内核支持。手动挂载:
mount –t yaffs /dev/mtdblock2 /mnt/yaffs
|
然后读写文件,都正常。复位之后,文件还存在,说明YAFFS文件系统已经可以工作了。
这里,可以把之前用busybox做好的一套rootfs文件包复制到/mnt/yaffs下,再修改内核参数为noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,
让其直接从/dev/mtdblock2挂载YAFFS,这样开机就直接进入了YAFFS的根文件系统之下了!如下:
……. yaffs: dev is 32505858 name is "mtdblock2" yaffs: passed flags "" yaffs: Attempting MTD mount on 31.2, "mtdblock2" VFS: Mounted root (yaffs filesystem). Freeing init memory: 148K init started: BusyBox v1.11.1 (2008-07-13 22:36:35 CST) starting pid 856, tty '': '/etc/init.d/rcS' Processing etc/init.d/rc.S Mount all Start mdev.... **************************************************** RootFS by NFS, s3c2410 Created by Jacky Xu @ 2008.7.13 Enjoy ****************************************************
starting pid 860, tty '': '-/bin/sh' Processing /etc/profile Set search library path Set user path Set PS1 All
[root@Jacky /]#
|
待解决的问题:用mkyaffsimage创建的根文件系统包无法正常使用。
阅读(3033) | 评论(0) | 转发(1) |