首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Linux3.4.0 Yaffs2文件系统移栽-支持Android4.0

2012-12-21 
Linux3.4.0 Yaffs2文件系统移植-支持Android4.0本文章主要针对FS100,S5PC100的Android4.0.4 Yaffs2文件系

Linux3.4.0 Yaffs2文件系统移植-支持Android4.0


本文章主要针对FS100,S5PC100的Android4.0.4 Yaffs2文件系统移植过程,对于类似Android系统或类似Linux内核(版本高于2.6.35)有参考意义。

本文分两部分:

    Nandflash驱动移植Yaffs2文件系统移植

一、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和汇编代码文件中定义的几个和地址搬运有关的宏。



热点排行