這里我主要移植的是增加yaffs2文件系統支持,修改和移植nand驅動。
1.不知道為什么我這yaffs2的補丁打上了就沒發現過編譯錯誤,相當順利啊 呵呵。
附上補丁地址-----------------------------------點擊打開鏈接
修改補丁里patch‐ker.sh 文件。
屏蔽下面這段代碼。
# Can we handle this version?
#if [ $VERSION ‐ne 2 ‐o $PATCHLEVEL ‐lt 6 ]
#then
# echo "Cannot patch kernel version $VERSION.$PATCHLEVEL.$SUBLEVEL, must be 2.6.x
or higher"
# exit 1;
#fi
然后直接./patch-ker.sh c m -----(內核源碼路徑)
2.修改頂層makefile 的arch 和交叉編譯器cross_compile
3.復制配置文件smdk6400_defconfig,為smdk6410_defconfig
由于配置文件太長,詳見這個下載這個配置文檔————————點擊打開鏈接,關于配置的問題就不再提了
4.nand支持部分
修改/file/linuxj/arch/arm/mach-s3c64xx/mach-smdk6410.c 若沒有這個文件就復制mach-smdk6400.c
1)添加頭文件
#include
#include
#include
2)添加分區配置
/*
* Configuring Nandflash on SMDK6410
*/
struct mtd_partition ok6410_nand_part[] = {
{
.name??= "Bootloader",
.offset??= 0,
.size??= (1 * SZ_1M),
.mask_flags?= MTD_CAP_NANDFLASH,
},
{
.name??= "Kernel",
.offset??= (1 * SZ_1M),
.size??= (5*SZ_1M) ,
.mask_flags?= MTD_CAP_NANDFLASH,
},
/*
{
.name??= "User",
.offset??= (6 * SZ_1M),
.size??= (120*SZ_1M) ,
},
*/
{
.name??= "File System",
.offset??= MTDPART_OFS_APPEND,
.size??= MTDPART_SIZ_FULL,
}
};
static struct s3c2410_nand_set ok6410_nand_sets[] = {
[0] = {
.name?????? = "nand",
.nr_chips?? = 1,
.nr_partitions? = ARRAY_SIZE(ok6410_nand_part),
.partitions = ok6410_nand_part,
},
};
static struct s3c2410_platform_nand ok6410_nand_info = {
.tacls????? = 25,
.twrph0???? = 55,
.twrph1???? = 40,
.nr_sets??? = ARRAY_SIZE(ok6410_nand_sets),
.sets?????? = ok6410_nand_sets,
};
在platform_device *smdk6410_devices[] __initdata里面添加&s3c_device_nand
#ifdef CONFIG_REGULATOR
&smdk6410_b_pwr_5v,
#endif
&smdk6410_lcd_powerdev,
&smdk6410_smsc911x,
&s3c_device_adc,
&s3c_device_nand,
在smdk6410_machine_init(void)里面添加
s3c_nand_set_platdata(&ok6410_nand_info);
3)nand驅動支持
1.去網上下個開源的S3C_nand.c源碼或者到這里下載----------------------點擊打開鏈接
2.當然只這樣拷貝了對內核來說不起任何作用,內核根本不會去編譯它,所以現在需要
修改drivers/mtd/nand/目錄下的配置文件Kconfig和Makfile告知內核來編譯s3c_nand.c驅
動程序文件。
在Kconfig中添加如下信息,這樣在內核配置的menuconfig中就能看到選項了:
config MTD_NAND_S3C
tristate "NAND support for Samsung S3C"
depends on (ARCH_S3C64XX || ARCH_S5P64XX || ARCH_S5PC1XX) && MTD_NAND
help
This enables the NAND flash controller on the S3C
No board specific support is done by this driver, each board
must advertise a platform_device for the driver to attach.
config MTD_NAND_S3C_DEBUG
bool "S3C NAND driver debug"
depends on MTD_NAND_S3C
help
Enable debugging of the S3C NAND driver
config MTD_NAND_S3C_HWECC
bool "S3C NAND Hardware ECC"
depends on MTD_NAND_S3C
help
Enable the use of the S3C's internal ECC generator when
using NAND. Early versions of the chip have had problems with
incorrect ECC generation, and if using these, the default of
software ECC is preferable.
If you lay down a device with the hardware ECC, then you will
currently not be able to switch to software, as there is no
implementation for ECC method used by the S3C
.3.然后在Makefile中添加如下信息:
obj-$(CONFIG_MTD_NAND_S3C) ? ? ? ?+= s3c_nand.o
4.因為還沒有給6410的nand flash寄存器定義,但是在s3c_nand中使用了,所以編譯會有很多未定義錯誤
主要是在arch/arm/plat-samsung/include/plat/regs-nand.h添加
/* 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)?((x)<<12)
#define S3C_NFCONF_TWRPH0(x)?((x)<<8)
#define S3C_NFCONF_TWRPH1(x)?((x)<<4)
#define S3C_NFCONF_ADVFLASH?(1<<3)
#define S3C_NFCONF_PAGESIZE?(1<<2)
#define S3C_NFCONF_ADDRCYCLE?(1<<1)
#define S3C_NFCONF_BUSWIDTH?(1<<0)
#define S3C_NFCONT_ECC_ENC?(1<<18)
#define S3C_NFCONT_LOCKTGHT?(1<<17)
#define S3C_NFCONT_LOCKSOFT?(1<<16)
#define S3C_NFCONT_MECCLOCK?(1<<7)
#define S3C_NFCONT_SECCLOCK?(1<<6)
#define S3C_NFCONT_INITMECC?(1<<5)
#define S3C_NFCONT_INITSECC?(1<<4)
#define S3C_NFCONT_nFCE1?(1<<2)
#define S3C_NFCONT_nFCE0?(1<<1)
#define S3C_NFCONT_INITECC?(S3C_NFCONT_INITSECC | S3C_NFCONT_INITMECC)
#define S3C_NFSTAT_ECCENCDONE?(1<<7)
#define S3C_NFSTAT_ECCDECDONE?(1<<6)
#define S3C_NFSTAT_BUSY??(1<<0)
#define S3C_NFECCERR0_ECCBUSY?(1<<31)
OK移植先告一段落,移植預告 后期主要添加串口驅動 usb驅動