u-boot-2010.09移植(A)
第一阶段
1.开发环境
系统:centOS6.5 linux版本:2.6.32 交叉编译器:buildroot-2012.08
以上工具已经准备好,具体安装步骤不再赘述,将着重介绍u-boot-2010.09移植到fl2440开发板的全过程。
2.从http://ftp.denx.de/pub/u-boot/下载u-boot-2010.09的源码包,注意不要下u-boot-2010.09-rc1.tar.bz2或u-boot-2010.09-rc2.tar.bz2 版本的 ,因为带rc的为测试版本,我们下载u-boot-2010.09.tar.bz2
3.新建u-boot-2010.09用于存放我们下载的源码包
[weishusheng@centos]$ mkdir u-boot-2010.09
4.进入u-boot-2010.09目录,上传u-boot源码包
[weishusheng@centos]$cd u-boot-2010.09
5.解压源码包
[weishusheng@centos u-boot-2010.09]$ tar -xjf u-boot-2010.09.tar.bz2
6.打开U-boot-2010.09解压目录下的boards.cfg在241行smdk2410后添加fl2440的配置选项:
fl2440 arm arm920t fl2440 - s3c24x0
(注意这里不能写错,我曾经就把s3c24x0写成s3c2440,编译会报错)
7.在/board子目录中建立自己的开发板fl2440目录,并以smdk2410为模板,建立文件
[weishusheng@centos u-boot-2010.09]$ cd board
[weishusheng@centos board]$ mkdir fl2440
[weishusheng@centos board]$ cp -arf samsung/smdk2410/* fl2440
[weishusheng@centos board]$ mv fl2440/smdk2410.c fl2440/fl2440.c
修改fl2440目录下的Makefile中的28行
COBJS := smdk2410.o flash.o为
COBJS := fl2440.o flash.o
8.在include/configs/中建立开发板的配置头文件
[weishusheng@centos u-boot-2010.09]$ cp include/configs/smdk2410.h include/configs/fl2440.h
9.测试编译是否成功(成功)
[weishusheng@centos u-boot-2010.09]$ make fl2440_config
Configuring for fl2440 board...
添加串口打印启动信息部分
1.修改文件arch/arm/cpu/arm920t/start.S
将117,118两行注释掉,这个是用于LED跳转的,没什么用,也没有程序可跳
117 @ bl coloured_LED_init
118 @ bl red_LED_on
2.将134-170 行注释掉,这个代码是定义特殊寄存器和屏蔽中断的,我们将在后面的程序中操作
3.进入board/fl2440/lowlevel_init.S
在128行,添加以下寄存器定义
#define S3C24X0_INTERRUPT_BASE 0x4A000000
#define S3C24X0_CLOCK_POWER_BASE 0x4C000000
#define S3C2410_NAND_BASE 0x4E000000
#define S3C24X0_WATCHDOG_BASE 0x53000000
#define S3C24X0_GPIO_BASE 0x56000000
#define GPBCON 0x56000010
#define GPBDAT 0x56000014
#define GPBUP 0x56000018
#define INTMSK_OFFSET 0x08
#define INTSUBMSK_OFFSET 0x1c
#define MPLLCON_OFFSET 0x04
#define CLKDIVN_OFFSET 0x14
#define NFCONF_OFFSET 0x00
#define NFCONT_OFFSET 0x04
#define NFCMD_OFFSET 0x08
#define NFSTAT_OFFSET 0x20
#define MDIV_405 0x7f << 12
#define PSDIV_405 0x21
#define MDIV_200 0xa1 << 12
#define PSDIV_200 0x31
在155行lowlevel_init:后面添加
关闭看门狗
/****** Disable Watchdog ******/
ldr r0, =S3C24X0_WATCHDOG_BASE
mov r1, #0
str r1, [r0]
接着屏蔽所有中断
/****** Disable interrupt by mask all IRQ mask ******/
ldr r0, =S3C24X0_INTERRUPT_BASE
mvn r1, #0x0
str r1, [r0, #INTMSK_OFFSET]
str r1, [r0, #INTSUBMSK_OFFSET]
接着初始化系统时钟,总线时钟
/****** Initialize System Clock, FCLK:HCLK:PCLK = 1:4:8,default FCLK is 120MHz ******/
ldr r0, =S3C24X0_CLOCK_POWER_BASE
mov r1, #5
str r1, [r0, #CLKDIVN_OFFSET]
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0
mov r2, #MDIV_405
add r2, r2, #PSDIV_405
str r2, [r0, #MPLLCON_OFFSET]
接着初始化nandflash
/***** Initialize Nandflash controller ******/
mov r1, #S3C2410_NAND_BASE
ldr r2, =( (7<<12)|(7<<8)|(7<<4)|(0<<0) )
str r2, [r1, #NFCONF_OFFSET]
ldr r2, =( (1<<4)|(0<<1)|(1<<0) ) @ Active low CE controller
str r2, [r1, #NFCONT_OFFSET]
ldr r2, =(0x6) @ RnB Clear
str r2, [r1, #NFSTAT_OFFSET]
mov r2, #0xff @ Reset Nandflash
strb r2, [r1, #NFCMD_OFFSET]
mov r3, #0 @ Delay for a while
delay:
add r3, r3, #0x1
cmp r3, #0xa
blt delay
wait:
ldr r2, [r1, #NFSTAT_OFFSET] @ wait ready
tst r2, #0x4
beq wait
4.修改include/asm/arch-s3c24x0/s3c24x0.h
将该文件中所有的#if defined(CONFIG_S3C2410)
都修改为#if defined(CONFIG_S3C2410) || defined (CONFIG_S3C2440)
支持s3c2440开发板
在160行左右修改nandflash的寄存器定义,修改s3c2410_nand结构体为如下
#if defined (CONFIG_S3C2440)
/* NAND FLASH (see S3C2440 manual chapter 6) */
struct s3c2410_nand
{
u32 NFCONF;
u32 NFCONT;
u32 NFCMD;
u32 NFADDR;
u32 NFDATA;
u32 NFMECCD0;
u32 NFMECCD1;
u32 NFSECCD;
u32 NFSTAT;
u32 NFESTAT0;
u32 NFESTAT1;
u32 NFMECC0;
u32 NFMECC1;
u32 NFSECC;
u32 NFSBLK;
u32 NFEBLK;
};
#endif
124行左右修改s3c24x0_clock_power结构体如下
struct s3c24x0_clock_power
{
u32 LOCKTIME;
u32 MPLLCON;
u32 UPLLCON;
u32 CLKCON;
u32 CLKSLOW;
u32 CLKDIVN;
#if defined (CONFIG_S3C2440)
u32 CAMDIVN;
#endif
};
5.include/asm/arch/s3c24x0_cpu.h,补充对s3c2440的支持
23行,修改#elif defined (CONFIG_S3C2410)为
#elif defined (CONFIG_S3C2410) || (CONFIG_S3C2440)
6.修改arch/arm/cpu/arm920t/s3c24x0/timer.c文件
184行添加支持s3c2440
defined(CONFIG_S3C2440) || \
7.修改arch/arm/cpu/arm920t/s3c24x0/speed.c
在static ulong get_PLLCLK(int pllreg)函数里大概66行(return (CONFIG_SYS_CLK_FREQ * m) / (p << s);的上一行)添加
#if defined(CONFIG_S3C2440) /* add by weishusheng */
if(pllreg == MPLL)
return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));
else if(pllreg == UPLL)
#endif
80行左右修改get_HCLK()函数如下
ulong get_HCLK(void)
{
struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();
//return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();
#if defined(CONFIG_S3C2440) /* Modify by hurryliu*/
if (readl(&clk_power->CLKDIVN) & 0x6)
{
if ((readl(&clk_power->CLKDIVN) & 0x6)==2)
return(get_FCLK()/2);
if ((readl(&clk_power->CLKDIVN) & 0x6)==6)
return((readl(&clk_power->CAMDIVN) & 0x100) ? get_FCLK()/6 : get_FCLK()/3);
if ((readl(&clk_power->CLKDIVN) & 0x6)==4)
return((readl(&clk_power->CAMDIVN) & 0x200) ? get_FCLK()/8 : get_FCLK()/4);
return(get_FCLK());
}
else
return(get_FCLK());
#else
return((readl(&clk_power->CLKDIVN) & 0x2) ? get_FCLK()/2 : get_FCLK());
#endif /* Modify end*/
}
8.修改lowlevel_init.S 修改各个bank寄存器数值
[weishusheng@centos u-boot-2010.09]$ vim board/fl2440/lowlevel_init.S
54行的#define B1_BWSCON (DW32) 改为#define B1_BWSCON (DW16)
88行左右B3_改为如下(前面的数字是我的行号)
88 #define B3_Tacs 0xc
89 #define B3_Tcos 0x7
90 #define B3_Tacc 0xf
91 #define B3_Tcoh 0x1
92 #define B3_Tah 0x0
93 #define B3_Tacp 0x0
94 #define B3_PMC 0x0
144行左右修改为如下
104 #define B5_Tacs 0xc
105 #define B5_Tcos 0x7
106 #define B5_Tacc 0xf
107 #define B5_Tcoh 0x1
108 #define B5_Tah 0x0
109 #define B5_Tacp 0x0
110 #define B5_PMC 0x0
120行左右 /* REFRESH parameter */改为如下
120 /* REFRESH parameter */
121 #define REFEN 0x1 /* Refresh enable */
122 #define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
123 #define Trc 0x3 /* 7clk add by wei*/
124 #define Tchr 0x2 /* 3clk */
125
126
127 #if defined(CONFIG_S3C2440)
128 #define Trp 0x2 /* 4clk */
129 #define REFCNT 1012
130 #else
131 #define Trp 0x0 /* 2clk */
132 #define REFCNT 0x0459
133 #endif
134 /**************************************/
9.修改include/configs/fl2440.h
在38行添加#define CONFIG_S3C2440 1
在31行定义在内存中运行的宏,支持在内存中运行(当需下载到nandflash时把以下这个宏去掉)
#define CONFIG_SKIP_LOWLEVEL_INIT 1
在120行,修改为自己的开发板启动信息
#define CONFIG_SYS_PROMPT "[fl2440@wss]# "
这些工作做完后,下载到内存中运行,连接串口,就可以看到打印的信息了(如下)
U-Boot 2010.09 (Aug 18 2014 - 11:17:12)
DRAM: 64 MiB
Flash: 512 KiB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: CS8900-0
[fl2440@wss]#
[fl2440@wss]#
[fl2440@wss]#
转载于:https://www.cnblogs.com/thinkinglife/p/3919681.html
u-boot-2010.09移植(A)相关推荐
- u-boot移植随笔:u-boot2010.09移植到8MB Nor Flash的S3C2440,第一步搞定(补记)
这个本来是我发在csdn上的帖子,有一次使用搜索引擎时不小心搜索到.于是再将它放到博客里. 芯片:S3C2440(目前大部分的开发板在某个层次上讲是一样的) Nor Flash:SST39VF6401 ...
- 我常去的编程技术网站[最近更新:2010.09.29]
[序言] 其实大家都可以成为一个厉害的软件开发人员,希望大家通过了解我提供的这些网站找到自己的兴趣爱好,以增强自己的信心. [建议] 为了能让更多的朋友看到此链接,如果大家是csdn用户,那么请选 ...
- Spring Boot(09)——使用SpringMVC
使用SpringMVC 使用SpringMVC最简单的方法是在pom.xml中加入spring-boot-starter-web依赖,这样Spring Boot的AutoConfiguration模块 ...
- 学习笔记【2010/09/20-2010/11/27】
gdb list 24,65 显示24-65行代码 list 24 显示24附近10行代码 list *1000 显示1000地址附近10行代码 list 显示当前行后面的源程序. ...
- 图灵2010.09书讯
图灵五周年活动汇集 : [互动]图灵五周年盛大庆典 数千好书免费送 [互动]图灵五周年--纪念国际知名的UNIX和网络专家Stevens [互动]图灵五周年--精品数学书买赠活动 [卓越]图灵五周年- ...
- Spring Boot进阶(09):集成EasyPoi,实现Excel文件多sheet导入导出,你得会 | 保姆级教学,超级详细,建议收藏
1. 前言
- 字典树模板及讲解 http://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html
Tire的数据结构定义: #define MAX 26 typedef struct Trie { Trie *next[MAX]; int v; //根据需要变化 }; Trie *root; ne ...
- 【信息技术】【2010.09】声纳和水下摄像机图像分析
本文为瑞典查尔姆斯理工大学(作者:Emil Andersson)的硕士论文,共34页. 本论文研究在声纳和水下摄像机图像上使用滤波器和先进算法的可能性.用于正常图像的滤波器对水下图像是否同样有用:是否 ...
- 2010.09.28_ximo_纠正下VMP脱壳中的修复DLL的错误
http://hi.baidu.com/ximo2006/blog/item/ff0d3211f139f7def6039e75.html 用来纠正下<也来谈谈VMP2.05的脱壳>中,那个 ...
最新文章
- OpenCV-Python官方文档学习笔记(上)
- 数据库和缓存的双写一致性问题
- Linux 应用---make及makefile的编写
- IBM 前面板显示信息提示
- python字典嵌套列表怎么访问值的某个元素_python – 访问嵌套在字典中的值
- OpenCV Sobel和Scharr (索贝尔和夏尔滤波器检测边缘)
- 一小段Python的sha256/md5/sha1验证
- 类扩展(Class Extension)
- QQ截图取色器:没有吸管工具的情况下,跨软件随时随地快捷取色
- 数据可视化上集:使用Gliffy,ProcessOn迅速绘制论文中的流程图,系统结构图
- 三十七、缓存注解@Cacheable、@CacheEvict、@CachePut详解
- win7如何更改文件类型_如何在win10中使用云笔记软件来做pdf手写笔记或绘图? - 敬业签便签...
- python具体学什么-python主要用于什么开发
- 停车场管理系统(C++)
- 微信短视频加速,张小龙的步子不妨更大一些!
- HTTP状态码及说明大全
- 作为程序员要多注意身体(华佗教你睡觉)
- VR三维数字沙盘电子沙盘大数据可视化交互GIS系统开发教程第15课
- 刚进互联网公司做 JAVA 后端开发,基本上什么都不会该怎么办?我来告诉你
- 姓氏头像框一键制作小程序源码+附微语模块
热门文章
- dorado 刷新_dorado BDF常见问题
- python神经网络库识别验证码_基于TensorFlow 使用卷积神经网络识别字符型图片验证码...
- 小肽相关1~peptidomic discovery of short open reading frame–encoded peptides in human cells
- 导入php插件_漏洞分析丨WordPress评论插件wpDiscuz任意文件上传
- 数据分析中常用的数据模型
- 安装 卸载 mysql linux,Linux 下MySQL 安装与卸载
- s7五杀大数据英雄_大数据公布新赛季拿五杀最多的英雄,韩信垫底,她却拿到手抽筋!...
- oracle vm 加大存储,Oracle VM VirtualBox下ubuntu虚拟机存储空间不够解决方案
- 孙鑫-MFC笔记十--修改应用程序外观
- linux系统修改自动启动项,linux修改启动项