ok6410 uboot nandflash移植

1.4  Nandflash移植

先解决上面的错误,修改arch/arm/cpu/arm1176/s3c64xx/timer.c

static ulong timer_load_val;修改为 DECLARE_GLOBAL_DATA_PTR;

删除下面的两个定义:

/* Internal tick units */

/* Last decremneter snapshot */

static unsigned long lastdec;

/* Monotonic incrementing timer */

static unsigned long long timestamp;

接着把:

timers->TCFG0 =PRESCALER << 8;

if (timer_load_val == 0) {

timer_load_val =get_PCLK() / PRESCALER * (100 / 4); /* 100s */

timers->TCFG1 =(timers->TCFG1 & ~0xf0000) | 0x20000;

}

修改为:

timers->TCFG0 =PRESCALER << 8;

gd->timer_rate_hz =get_PCLK() / PRESCALER * (100 / 4); /* 100s */

timers->TCFG1 = (timers->TCFG1& ~0xf0000) | 0x20000;

将lastdec = timers->TCNTB4 = timer_load_val;修改为:

gd->lastinc = timers->TCNTB4 = gd->timer_rate_hz;

将timestamp = 0;修改为gd->timer_reset_value = 0;

将unsigned long long get_ticks(void)

{

ulong now = read_timer();

if (lastdec >= now) {

/* normal mode */

timestamp +=lastdec - now;

} else {

/* we have anoverflow ... */

timestamp +=lastdec + timer_load_val - now;

}

lastdec = now;

return timestamp;

}

修改为:

unsigned long long get_ticks(void)

{

ulong now = read_timer();

if (gd->lastinc >=now) {

/* normal mode */

gd->timer_reset_value += gd->lastinc - now;

} else {

/* we have anoverflow ... */

gd->timer_reset_value += gd->lastinc + gd->timer_rate_hz - now;

}

gd->lastinc = now;

returngd->timer_reset_value;

}

将ulong get_tbclk(void)

{

/* We overrun in 100s */

return(ulong)(timer_load_val / 100);

}

ulong get_timer_masked(void)

{

unsigned long long res =get_ticks();

do_div (res,(timer_load_val / (100 * CONFIG_SYS_HZ)));

return res;

}

修改为:

ulong get_tbclk(void)

{

/* We overrun in 100s */

return(ulong)(gd->timer_rate_hz / 100);

}

ulong get_timer_masked(void)

{

unsigned long long res =get_ticks();

//do_div (res,(timer_load_val / (100 * CONFIG_SYS_HZ)));

return res;

}

修改nand_spl/board/samsung/ok6410/ok6410_nand_spl.c将

void board_init_f(unsigned long bootflag)

{

relocate_code(CONFIG_SYS_TEXT_BASE - TOTAL_MALLOC_LEN, NULL,

CONFIG_SYS_TEXT_BASE);

}

改为:

void board_init_f(unsigned long bootflag)

{

relocate_code(8*1024,NULL,

CONFIG_SYS_TEXT_BASE);

}

修改bl1的配置大小:nand_spl/board/samsung/ok6410/config.mk

# PAD_TO used to generate a 4kByte binary needed for the combined image

# -> PAD_TO = CONFIG_SYS_TEXT_BASE + 4096

PAD_TO  := $(shell expr$$[$(CONFIG_SYS_TEXT_BASE) + 4096])

修改为

# PAD_TO used to generate a 8kByte binary needed for the combined image

# -> PAD_TO = CONFIG_SYS_TEXT_BASE + 8192

PAD_TO  := $(shell expr$(CONFIG_SYS_TEXT_BASE) + 8192)

重新编译烧写:

Nandflash的初始化过程如下:

board_init_rànand_initànand_init_chipàboard_nand_initànand_scanà

nand_scan_identànand_scan_tailànand_register

在drivers/mtd/nand/nand_ids.c文件中定义了连个数组:nand_flash_ids[]和nand_manuf_ids[]。

添加ok6410 nandflash型号:

/* 16 Gigabit */

{"NAND 2GiB 1,8V8-bit",        0xA5, 0, 2048, 0,LP_OPTIONS},

{"NAND 2GiB 3,3V8-bit",        0xD5, 0, 2048, 0,LP_OPTIONS},

{"NAND 2GiB 3,3V8-bit",        0x38, 4096, 2048,4096*128, LP_OPTIONS},

{"NAND 2GiB 1,8V16-bit",       0xB5, 0, 2048, 0,LP_OPTIONS16},

{"NAND 2GiB 3,3V16-bit",       0xC5, 0, 2048, 0,LP_OPTIONS16},

每个字段的含义如下:注意  IDcode需要自己测。

Name. ID code, pagesize, chipsize in MegaByte, eraseblock size, options

重新编译烧写:

这里nandflash是使用的4位ecc校验,有兴趣的可以自己实现8位ecc校验,6410是支持8位ecc的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 23:01:35

ok6410 uboot nandflash移植的相关文章

Linux3.6.7在OK6410下的移植

这是在本学期期末整项目时习得的,不知道以后会不会有用. 一个天天整js+css+html的,突然弄Linux C,学到的确实不少. 遗憾的是,虽然努力了,导师还是觉得我进度慢把这部分砍掉了,唉. 前言 对于我这个新手而言,第一次学习linux,面对庞大的代码,复杂的程序结构和自身对linux知识的严重缺乏,一下子还真不知道该做什么.想想开发板厂家提供的演示程序,其过程是这样:先运行bootloader,bootloade引导linux内核启动,启动后再运行UI程序.对应的程序也有三个分别为u-b

嵌入式linux开发uboot移植(七)——三星官方uboot的移植

嵌入式linux开发uboot移植(七)--三星官方uboot的移植 友善之臂Smart210开发板是基于三星SMDKV210评估板裁剪.调整而来的.因此三星官方发布的基于SMDKV210评估板的uboot是移植uboot到Smart210开发板的最合适uboot版本.本文将SMDKV210的uboot移植到Smart210开发板.Smart210开发板的配置如下: SoC:Samsung S5PV210 SDRAM:512MB DDR2 RAM FLASH存储:2G MLC NAND Flas

(转)在嵌入式Linux系统(OK6410)中移植Boa 服务器

OK6410的Boa服务器移植: <一> Boa的编译 1. 从 www.boa.org 下载 Boa 服务器的最新版:boa-0.94.13.tar.gz. 2. 解压:tar xzf boa-0.94.13.tar.gz 3. 进入解压后的文件夹 boa-0.94.13内部的 src文件夹,对源文件进行如下修改 ================================================= 由于arm-linux-gcc 编译器版本过高,对语法的支持有一些改变,所以需要

【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,如果对这个课程有兴趣的,可以加我的QQ2059055336和我联系. 课程内容简介 本课程重点是给大家讲解嵌入式linux系统移植的开发方法,采用理论与实践,硬件与软件相结合的方法. 1.在每节开始之前先简单回顾上一节所讲的主要内容,并对本节所讲的内容先进行概述,讲解概念.技术要点,设计实现思路等内容,最后总结本次课程的要掌握的要点. 2.在讲课的过程中对关键技术

图像识别DM8127开发攻略——UBOOT的移植说明

图像识别DM8127开发攻略--UBOOT的移植说明 根据前几篇文章的介绍,想必大家对DM8127软件架构有了全局的认识,下面我们从开发的角度进行裁剪移植最基本的BOOT软件包,嵌入式开发人员拿到一个新的板子,就是要如何让板子能跑得起自己编译和移植的程序,这才有价值,否则直接拿别人的BIN文件直接烧写到板子上没啥意思. 一.DM8127 UBOOT编译说明DM8127 的UBOOT的版本是u-boot-2010.06, UBOOT代码 和 以前的DM6446-DM368-DM3730平台稍微不同

OK6410 uboot移植之sd启动

1  uboot移植 1.1移植准备工作 1.1.1安装交叉编译工具链 版本:arm-linux-gcc 4.4.1 环境:ubuntu14.04.01LTS 1.1.2建立OK6410配置项 从官网下载u-boot-2012.10.tar.bz2,由于uboot支持的smdk6400单板与我们的板子OK6410最相似,所以修改是基于smdk6400进行的,初步修改uboot建立OK6410配置项. 详细修改过程如下: 进入u-boot-2012.10顶层目录,在board/Samsung目录下

ok6410 uboot 网卡驱动

ok6410使用的网卡是DM9000,从启动信息来看uboot默认的网卡是CS8900. 修改驱动代码(board/Samsung/ok6410/ok6410.c): int board_eth_init(bd_t *bis) { int rc = 0; #ifdef CONFIG_CS8900 rc = cs8900_initialize(0,CONFIG_CS8900_BASE); #endif #ifdef CONFIG_DM9000 rc =dm9000_initialize(bis);

向UBOOT中移植代码总结

1.首先,将要移植的代码目录(如bootpicsnd)整个拷贝到UBOOT工程中,最好放到对应的board目录下. 2.在bootpicsnd目录里,新建一个Makefile,参考如下: # # (C) Copyright 2000-2007 # Wolfgang Denk, DENX Software Engineering, [email protected] # # See file CREDITS for list of people who contributed to this #

2017-9-13-Linux移植:u-boot的移植

1.u-boot下载地址:http://ftp.denx.de/pub/u-boot/ 2.Linux环境下使用tar命令解压压缩包:tar -xzvf file.tar.gz tar -xvf file.tar //解压 tar包tar -xzvf file.tar.gz //解压tar.gztar -xjvf file.tar.bz2 //解压 tar.bz2tar -xZvf file.tar.Z //解压tar.Ztar -Jxvf fle.tar.xz  //解压tar.xz 3.修改