Real6410移植Linux-2.6.39.1记录(一)

2014-11-24 09:24:36 · 作者: · 浏览: 0

// 主题:Real6410移植linux-2.6.39.1
// 作者:kevinjz2010@gmail.com
// 版权:kevinjz原创
// 平台:linux-2.39.1 real6410 (real6410开发板)
// 发布日期:2011-06-21
// 最后修改:2011-06-23
// 注意事项:欢迎转载,但不得在转载的时候擅自修改、删除文章的任何部分
//-----------------------------------------------------------


一、http://www.kernel.org/下载linux-2.6.39.1内核源码,解压至文件夹。


二、进入源码所在文件夹,对内核进行配置


$ make menuconfig


arch/arm/configs/s3c6400_deconfig拷贝至内核根目录,并修改根目录中的Makefile,将其中的


ARCH = arm


CROSS_COMPILE = arm-linux-


$ make s3c6400_deconfig


以上计生成了s3c6410的默认配置,之后在次基础上进行修改。


修改内核中的机器识别码,/arch/arm/tools/mach-types.h,搜索6410,将其机器码改为1626(与u-boot中的匹配即可,也可一修改uboot中的机器码/include/configs/smdk6410.h


注:编译器采用gcc-4.5.1


三、添加SD驱动(参考华天正论坛上的移植方法):


1、首platform设备注册。修改arch/arm/mach-s3c64xx/mach-real6410.c文件


在其中加入:


&s3c_device_hsmmc0,


&s3c_device_hsmmc1,



static struct platform_device *real6410_devices[] __initdata = {//定义6410中的外设->platform_device结构体中的设备种类,各种外设的具体定义一般在plat文件夹中定义。


//其中包括外设的name,此值需要和相应外设驱动中platform_driver结构体中的name相对应,


//nand的名称在arch/arm/plat-sumsang/dev-nand.h


//定义为"s3c6410-nand",在驱动文件/drivers/mtd/nand/s3c_nand.c中对应为"s3c6410-nand"


//又如SD->hsmmc0外设,其namearch/arm/plat-sumsang/dev-hsmmc.c中定义为"s3c-sdhci",


//在驱动文件drivers/mmc/host/sdhci-s3c.c中的platform_driver中对应为"s3c-sdhci"


//每个外设有其独有的资源->resource(包括寄存器资源以及中断资源,


//其中申明了外设在cpu寄存其中的地址范围以及中断种类,一般在plat文件夹中定义)


//每个外设有其独有的定义结构体(在plat文件夹中对应的头文件中定义)


&real6410_device_eth,


&s3c_device_hsmmc0,


&s3c_device_hsmmc1,


&s3c_device_fb,


&s3c_device_nand,


&s3c_device_adc,


&s3c_device_ts,


&s3c_device_ohci,


};



2、定义platdata,若要使用自定义数据,则在上面的文件中添加:


/*--------------------------------SD---------------------------------*/


/*static struct s3c_sdhci_platdata real6410_hsmmc0_pdata = {//该结构体位于plat/sdhci.h


.max_width = 4,


.cd_type = S3C_SDHCI_CD_INTERNAL,


};



static struct s3c_sdhci_platdata real6410_hsmmc1_pdata = {


.max_width = 4,


.cd_type = S3C_SDHCI_CD_PERMANENT,


};*/


若要使用内核默认设置数据,则在arch/arm/plat-samsung/dev-hsmmcnum.c中定义了,可以直接使用。



3、在real6410_machine_init函数中加入:


//--------------------------------若使用自定义,则添加如下--------------SD驱动初始化注册


// s3c_sdhci0_set_platdata(&real6410_hsmmc0_pdata);//该函数位于plat-samsung/dev-hsmmc(0~3).c


// s3c_sdhci1_set_platdata(&real6410_hsmmc1_pdata);


//--------------------------------若使用默认定义则用以下的-----------------------------------


s3c_sdhci0_set_platdata(&s3c_hsmmc0_def_platdata);


s3c_sdhci1_set_platdata(&s3c_hsmmc1_def_platdata);


//实际经测试,此步骤可以省略,应该内核某处已经完成了这个任务,但我没有找到在哪里。



4、加入头文件


#include


#include



5、在内核中添加配置中选择SD驱动


$ make menuconfig,REAL手册中的添加SD驱动


另外在file systems->native language support中,将default NLS option的值改为utf8,并选上NLS UTF-8 以及nls iso8859-1simple chinene



自此,SD驱动配置完成



四、添加nand驱动(参考华天正论坛上的移植方法),



1、在/arch/arm/mach-s3c64xx/mach-real6410.c添加分区信息(不许要添加头文件)


struct mtd_partition real6410_nand_part[] = {


#if 0


{


.name = "Bootloader",


.offset = 0,


.size = (256*SZ_1K),


.mask_flags = MTD_CAP_NANDFLASH,


},


{


.name ="Kernel",


.offset = (256*SZ_1K),


.size = (4*SZ_1M)-(256*SZ_1K),


.mask_flags = MTD_CAP_NANDFLASH,


},


#endif


{


.name = "cramfs",


.offset = (4*SZ_1M),


.size = (4*SZ_1M),//此处华天正论坛置顶贴上说是定义为,(4*SZ_1M),但经过实验不成功,可能和UOOT中的定义要匹配才行。


},


{


.name = "ubifs",


.offset = MTDPART_OFS_APPEND,


.size = MTDPART_SIZ_FULL,


},


};


2、定义,在上面的文件加入:


static struct s3c2410_nand_set real641