Chinaunix首页 | 论坛 | 博客
  • 博客访问: 277829
  • 博文数量: 11
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-05 20:59
文章分类
文章存档

2010年(1)

2008年(10)

我的朋友

分类: LINUX

2008-10-25 23:34:30

    从网上下载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) |
给主人留下些什么吧!~~