Android2.3.4在OK6410上的移植

前几天一直在考虑着把android系统移植到mini2440上去,搞了好几天发现没头绪,表示鸭梨大啊,网上资料也都一些零零碎碎的,正在灰常无语的时候,实验室有个朋友有块OK6410,刚好空闲着,这不刚合我口味不,立马的拿上开发板,哎怎么说呢,那知道拿着飞凌的6410鸭梨更大了,哥还搞了两个SD卡,真奶奶的无语啊。

大概花了整整一天是时间,才学会怎么玩这个开发板.唉,最后我考虑了很久,又由于时间不是很给力的情况下,我还是选择这样来移植,(android2.3.4配套的是Linux2.6.36内核)

最后我觉得先移植Linux,再做个补丁直接打到android内核文件上去,这样可能效果会好些.毕竟是菜鸟级选手嘛。

今天开始移植在移植NANDFLASH的时候简直是快崩溃了,编译过无数次原因也找到了,怎么修改都有错,最后将内核镜像下载到SDRAM中运行的时候就是不显示我所分的区,在网上查阅各种资料,貌似这个基于OK6410的Linux系统移植的资料也不是很多啊......最后解压了飞凌提供的移植好的代码一看原来它们自己写了NANDFLASH的驱动。。。。也正好我一直是卡在校验那个地方动都动不得,又经过几个小时的折腾终于把这个NAND支持给移植上去了NAND型号(K9GAG08U00)

赶紧做个笔记吧,这对以后肯定是大大的有用

环境:Ubuntu10.10

Linux内核:linux2.6.36.2.tar,gz

uboot:uboot.1.1.6飞凌官方自带

目标机:OK6410

SDRAM:128M

NAND:K9GAG08U00

交叉编译器:arm-linux-gcc 飞凌自带

说明:红色代码段部分是需要修改或者添加的部分

一、移植准备

源代码下载 交叉编译器的安装等.这里省了。。。。。。。

二、解压源码进入源码主目录

2.1、修改Makefile

大概是在191~192行修改成如下:

ARCH ?= arm
CROSS_COMPILE ?= arm-linux-

保存退出

2.2克隆板层文件

进入板层文件目录下

#cd arch/arm/mach-s3c64xx/

#cp mach-smdk6410.c mach-eilian6410.c //这名字随便你了取了

使用VI编辑器将mach-eilian6410.c中的所有smdk6410都改成eilian6410 ,这个性移植不,操作如下,在命令模式下输入哦

2.2.3、修改arch/arm/mach-s3c64xx/目录下的Kconfig 和Makefile 修改如下

因为Linux中都是用Makefile来管理的,操作如下

先修改Kconfig 打开Kconfig文件拷贝110------132行代码并做如下修改

config MACH_EILIAN6410
bool "EILIAN6410"
select CPU_S3C6410
select SAMSUNG_DEV_ADC
select S3C_DEV_HSMMC
select S3C_DEV_HSMMC1
select S3C_DEV_I2C1
select SAMSUNG_DEV_IDE
select S3C_DEV_FB
select S3C_DEV_RTC
select SAMSUNG_DEV_TS
select S3C_DEV_USB_HOST
select S3C_DEV_USB_HSOTG
select S3C_DEV_WDT
select SAMSUNG_DEV_KEYPAD
select HAVE_S3C2410_WATCHDOG
select S3C64XX_SETUP_SDHCI
select S3C64XX_SETUP_I2C1
select S3C64XX_SETUP_IDE
select S3C64XX_SETUP_FB_24BPP
select S3C64XX_SETUP_KEYPAD
help
Machine support for the Samsung EILIAN6410

道理同上的打开Makefile 在第61行添加

obj-$(CONFIG_MACH_EILIAN6410) += mach-eilian6410.o

修改kconfig能使我们在配置菜单中能找到EILIAN6410这款开发板,在Makfile中添加哪行代码后能使该项配置生效

2.2.4、测试一下先/ 测试前先做如下工作回到主目录进行清除和加载缺省文件及配置

#make distclean

#cp arch/arm/configs/s3c6400_defconfig .config

#make menuconfig

这个配置没什么好配置的,选中我们的目标板就OK,看下图

现在看看上面我们修改的那个Kconfig和Makefile起作用了吧。。。选中后退出执行

#make zImage

。。。。。。。测试通过

3、让目标板支持NANDFLASH

3.1.1、修改板层文件mach-eilian6410.c 进入相应的目录下

#vi mach-eilian6410.c

添加如下一段代码

/************************************************
* Configuring Nandflash on Eilian6410
************************************************
*/
struct mtd_partition eilian6410_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 = (200*SZ_1M) ,
},
{
.name = "File System",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};

//将NANDFLASH分成四个区域,这些分区大小必须要和你的UBOOT中NAND的分区要一致,否则后果自负。。
static struct s3c2410_nand_set eilian6410_nand_sets[] = {
[0] = {
.name = "nand",
.nr_chips = 1,
.nr_partitions = ARRAY_SIZE(eilian6410_nand_part),
.partitions = eilian6410_nand_part,
},
};

//在arch/arm/plat-samsung/include/plat/目录下的nand.h文件中有两个结构体

这两个结构体都是与具体的芯片相关的,里面的有些东西需要我们在板层文件中给他们传值

/********************************************************************************

定义芯片信息

struct s3c2410_nand_set {
unsigned int disable_ecc:1;
unsigned int flash_bbt:1;

unsigned int options;
int nr_chips;
int nr_partitions;
char *name;
int *nr_map;
struct mtd_partition *partitions;
struct nand_ecclayout *ecc_layout;
};
/***对于NANDFLASH作为平台设备的一些时序信息等
struct s3c2410_platform_nand {
/* timing information for controller, all times in nanoseconds */

int tacls; /* time for active CLE/ALE to nWE/nOE */
int twrph0; /* active time for nWE/nOE */
int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */

unsigned int ignore_unset_ecc:1;

int nr_sets;
struct s3c2410_nand_set *sets;

void (*select_chip)(struct s3c2410_nand_set *,
int chip);
};

/**********************************************************************************

static struct s3c2410_platform_nand eilian6410_nand_info = {
.tacls = 25,
.twrph0 = 55,
.twrph1 = 40,
.nr_sets = ARRAY_SIZE(eilian6410_nand_sets),
.sets = eilian6410_nand_sets,
};
/************************************************
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
************************************************
*/

该代码放在static struct platform_device *eilian6410_devices[] __initdata = {上面就行

同时记得添加如下头文件

#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <plat/nand.h>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值