Linux3.4.0 Yaffs2文件系统移植-支持Android4.0
本文章主要针对FS100,S5PC100的Android4.0.4 Yaffs2文件系统移植过程,对于类似Android系统或类似Linux内核(版本高于2.6.35)有参考意义。
本文分两部分:
一、Nandflash驱动移植
由于内核里面没有S5PC100的Nandflash驱动,所以,我们将Nandflash的驱动文件拷贝到内核目录中:
将s3c_nand.c拷贝到:drivers/mtd/nand/中(s3c_nand.c放到了空间共享里了:http://download.csdn.net/detail/mr_raptor/4848511)。
Nand驱动修改位置:
1. 添加Nand物理地址
@arch/arm/mach-s5pc100/include/mach/map.h
添加如下内容:
#ifdef CONFIG_YAFFS_YAFFS2static int yaffs2_internal_read_super_mtd(struct super_block *sb, void *data, int silent){ return yaffs_internal_read_super(2, sb, data, silent) ? 0 : -EINVAL;}// MichaelTang modify start#if 0static int yaffs2_read_super(struct file_system_type *fs, int flags, const char *dev_name, void *data, struct vfsmount *mnt){ return get_sb_bdev(fs, flags, dev_name, data, yaffs2_internal_read_super_mtd, mnt);}static struct file_system_type yaffs2_fs_type = { .owner = THIS_MODULE, .name = "yaffs2", .get_sb = yaffs2_read_super, .kill_sb = kill_block_super, .fs_flags = FS_REQUIRES_DEV,};#elsestatic struct super_block *yaffs2_read_super(struct file_system_type *fs, int flags, const char *dev_name, void *data){ return mount_bdev(fs, flags, dev_name, data, yaffs2_internal_read_super_mtd);}static struct file_system_type yaffs2_fs_type = { .owner = THIS_MODULE, .name = "yaffs2", //.get_sb = yaffs2_read_super, .mount = yaffs2_read_super, .kill_sb = kill_block_super, .fs_flags = FS_REQUIRES_DEV,};#endif// MichaelTang modify end问题5:
error: 'MTD_OOB_AUTO' undeclared
找不到符号MTD_OOB_AUTO,新内核里名字发生了改变:
@include/mtd/mtd-abi.h
MTD_OOB_AUTO -> MTD_OPS_AUTO_OOB
所以源码中所有的位置都改一下即可,共有2个文件使用到:
@fs/yaffs2/yaffs_mtdif1.c
@fs/yaffs2/yaffs_mtdif2.c
可能出的问题:
end_writeback找不到符号
解决方法:end_writeback(inode)改成clear_inode(inode)
---------------------------------------
另:随着Android4.0.4版本的更新,其文件系统体积也直线提升,生成的映像有250M左右,由于S5PC100内存只有256M,所以使用UBOOT烧写时就可能出问题,通过USB或tftp下载的文件系统将Uboot代码覆盖了,我们将uboot的运行地址放到最高的几M处。
假如,默认运行地址为0x27e00000,新运行地址为0x2f000000,S5PC100物理内存空间(0x20000000~0x30000000共256M)。
grep "0x27e00000" -R ./
替换了所有的地址就行了
主要是config.h、smdkc100.h和汇编代码文件中定义的几个和地址搬运有关的宏。