日期:2014-05-16 浏览次数:20605 次
本文章主要针对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
添加如下内容:
// MichaelTang add for Nandflash start /* NAND flash controller */ #define S5PC1XX_PA_NAND (0xE7200000) #define S5PC1XX_SZ_NAND SZ_1M // MichaelTang add for Nandflash end ----
2. 添加一个新的头文件:
@arch/arm/mach-s5pc100/include/mach/nand.h
#ifndef __MACH_NAND_H #define __MACH_NAND_H #include <linux/mtd/partitions.h> struct s3c_nand_mtd_info { uint chip_nr; uint mtd_part_nr; struct mtd_partition *partition; }; #endif
3. 修改寄存器头文件
@arch/arm/plat-samsung/include/plat/regs-nand.h
在regs-nand.h中添加如下宏:
// MichaelTang add for nand reg start /* for s3c_nand.c */ #define S3C_NFCONF S3C2410_NFREG(0x00) #define S3C_NFCONT S3C2410_NFREG(0x04) #define S3C_NFCMMD S3C2410_NFREG(0x08) #define S3C_NFADDR S3C2410_NFREG(0x0c) #define S3C_NFDATA8 S3C2410_NFREG(0x10) #define S3C_NFDATA S3C2410_NFREG(0x10) #define S3C_NFMECCDATA0 S3C2410_NFREG(0x14) #define S3C_NFMECCDATA1 S3C2410_NFREG(0x18) #define S3C_NFSECCDATA S3C2410_NFREG(0x1c) #define S3C_NFSBLK S3C2410_NFREG(0x20) #define S3C_NFEBLK S3C2410_NFREG(0x24) #define S3C_NFSTAT S3C2410_NFREG(0x28) #define S3C_NFMECCERR0 S3C2410_NFREG(0x2c) #define S3C_NFMECCERR1 S3C2410_NFREG(0x30) #define S3C_NFMECC0 S3C2410_NFREG(0x34) #define S3C_NFMECC1 S3C2410_NFREG(0x38) #define S3C_NFSECC S3C2410_NFREG(0x3c) #define S3C_NFMLCBITPT S3C2410_NFREG(0x40) #define S3C_NF8ECCERR0 S3C2410_NFREG(0x44) #define S3C_NF8ECCERR1 S3C2410_NFREG(0x48) #define S3C_NF8ECCERR2 S3C2410_NFREG(0x4C) #define S3C_NFM8ECC0 S3C2410_NFREG(0x50) #define S3C_NFM8ECC1 S3C2410_NFREG(0x54) #define S3C_NFM8ECC2 S3C2410_NFREG(0x58) #define S3C_NFM8ECC3 S3C2410_NFREG(0x5C) #define S3C_NFMLC8BITPT0 S3C2410_NFREG(0x60) #define S3C_NFMLC8BITPT1 S3C2410_NFREG(0x64) #define S3C_NFCONF_NANDBOOT (1<<31) #define S3C_NFCONF_ECCCLKCON (1<<30) #define S3C_NFCONF_ECC_MLC (1<<24) #define S3C_NFCONF_ECC_1BIT (0<<23) #define S3C_NFCONF_ECC_4BIT (2<<23) #define S3C_NFCONF_ECC_8BIT (1<<23) #define S3C_NFCONF_TACLS(x