Real6410移植linux-2.6.39.1记录(1)-启动cramfs根文件系统

// 主题:Real6410移植linux-2.6.39.1

// 作者:kevinjz2010@gmail.com

// 版权:kevinjz原创

// 平台:linux-2.39.1 real6410 (real6410开发板)

// 发布日期:2011-06-21

// 最后修改:2011-10-06

// 注意事项:欢迎转载,但不得在转载的时候擅自修改、删除文章的任何部分

//-------------------------------------------------------------------------------------------------

 

一、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,

 

staticstruct 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---------------------------------*/

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

.max_width= 4,

.cd_type= S3C_SDHCI_CD_INTERNAL,

};

 

staticstruct 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驱动

另外在filesystems->native language support中,将defaultNLS option的值改为utf8,并选上NLSUTF-8以及nlsiso8859-1simplechinene

 

自此,SD驱动配置完成

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

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

structmtd_partition real6410_nand_part[] = {

#if0

{

.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),

},

{

.name= "ubifs",

.offset= MTDPART_OFS_APPEND,

.size= MTDPART_SIZ_FULL,

},

};

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

staticstruct s3c2410_nand_set real6410_nand_sets[] = {

[0]= {

.name ="nand",

.nr_chips =1,

.nr_partitions =ARRAY_SIZE(real6410_nand_part),

.partitions =real6410_nand_part,

},

};

 

staticstruct 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

devicedriver->MTD support中选中

MTDpartitioning supportCommandline partition table parsingCachingblock device access to MTD devicesNANDDevice Supportenableubi

nanddevice suppot中选中NANDFlash support for Samsung S3C SoCs SamsungS3C NAND driver debugSamsungS3C NAND Hardware ECC

此处需要注意:对上面几个选项查看帮助("?")发现它们是对2410进行配置的,所以需要nand驱动文件夹中的Kconfig,将/drivers/mtd/nand/Konfig修改,把对应选项的“2410”改成“S3C”,原因查看Makefile中的对应选项的config要求。

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

 

5、将real641028内核中的/drivers/mtd/nand/s3c_nand.c拷贝之39内核的相应文件夹,并修改probe函数#ifdefined(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=/linuxrcvideo=fb:AT070TN83

 

 

 

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值