Real6410移植Linux-2.6.39.1记录


// 主题: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 <plat/sdhci.h>

#include <linux/mmc/host.h>

 

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 real6410_nand_sets[] = {

[0] = {

.name = "nand",

.nr_chips = 1,

.nr_partitions = ARRAY_SIZE(real6410_nand_part),

.partitions = real6410_nand_part,

},

};

 

static struct s3c2410_platform_nand real6410_nand_info = {//读写nand的时钟信息,在S3C6410手册中查找数据

.tacls = 25,

.twrph0 = 55,

.twrph1 = 40,

.nr_sets = ARRAY_SIZE(real6410_nand_sets),

.sets = real6410_nand_sets,

};

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

3、在real6410_machine_init函数中加入:

//---------------------------------nand驱动初始化注册-----------------------------------------

s3c_nand_set_platdata(&real6410_nand_info);

4、配置内核

$ make menuconfig

device driver->MTD support中选中

MTD partitioning support Command line partition table parsingCaching block device access to MTD devicesNAND Device Supportenable ubi

nand device suppot中选中 NAND Flash support for Samsung S3C SoCs Samsung S3C NAND driver debugSamsung S3C NAND Hardware ECC

此处需要注意:对上面几个选项”shift+/”,发现其是对2410进行配置的,所以需要nand驱动文件夹中的Kconfig,将/drivers/mtd/nand/Konfig修改,把对应选项的2410改成3add_mtd_partitionsSC,原因查看Makefile中的对应选项的config要求。

file systems->misc filesystem-> 中加入cramfsUBI的支持,可以参照real28内核的配置

5、将real6410 28内核中的/drivers/mtd/nand/s3c_nand.c拷贝之39内核的相应文件夹,并修改probe函数#if defined(CONFIG_MTD_NAND_S3C_HWECC)之前的部分,可以将友善38内核的相应部分复制过来。

6、编译cramfs文件系统

$sudo apt-get install cramfsprogs

拷贝REAL6410cramfs系统源码,

$mkcramfs root_mkfs rootfs.cramfs

下载文件系统到开发板

7、修改内核启动参数

setenv bootargs noinitrd root=/dev/mtdblock0 console=ttySAC0 init=/linuxrc video=fb:AT070TN83

8、最后当然要检查一下内核选项,配置好之后编译下载;

9、至此,REAL6410已经能从CRAMFS文件系统启动了!

  • 1
  • 2
  • 3
  • 下一页

相关内容