- 论坛徽章:
- 0
|
从网上下载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创建的根文件系统包无法正常使用。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/58780/showart_1335367.html |
|