编译测试:

1.将写好的uboot复制到linux下面

2.make编译,然后将错误的地方修改,生成boot.bin

(编译出错的解决方案:http://www.cnblogs.com/lifexy/p/7326172.html)

3.通过make生成的反汇编来查看代码是否正确

4.通过oflash烧写到板子nand flash上

5.查看串口是否数据打印 

发现串口无数据,发现两处错误:

5.1在init.C中define定义 没有加大括号,没有定义volatile型


例如:

#define NFCONF       *((unsigned long *)0x4E000000)

需要改为: #define NFCONF      (*((volatile unsigned long *)0x4E000000) )


5.2 在init.C中nand_read_addr()函数出错,代码如下:

void nand_read_addr(unsigned int addr)
{
volatile int i;
NFADDR=( addr>>)&0xff; //A7~A0
for(i=;i<;i++);
NFADDR=( addr>>)&0x0f; //A11~A8
for(i=;i<;i++);
NFADDR=( addr>>)&0xff; //A19~A12
for(i=;i<;i++); NFADDR=( addr>>)&0xff; //A27~A20
for(i=;i<;i++); NFADDR=( addr>>)&0xff; //A28
for(i=;i<;i++);
}

上面之所以错是因为nand flash是2048B一页,这里的写的一页是A11~A0,其值=4096,已经属于两页大小了

应该改为:

void nand_read_addr(unsigned int addr)
{
unsigned int col = addr % ;
unsigned int page = addr / ;
volatile int i;
NFADDR=(col>>)&0xff; //A7~A0
for(i=;i<;i++);
NFADDR=(col>>)&0x0f; //A10~A8
for(i=;i<;i++);
NFADDR=(page>>)&0xff; //A18~A11
for(i=;i<;i++);
NFADDR=(page>>)&0xff; //A26~A19
for(i=;i<;i++);
NFADDR=(page>>)&0xff; //A27
for(i=;i<;i++);
}

优化改进(加快内核启动时间)

1 提高CPU频率

将CPU频率设为最大值400MHZ(内核启动时间7S变为6S,因为HCLK和PCLK频率没有改变)

然后分频系数FCLK:HCLK:PCLK需要设置为1:4:8

因为HCLK最高133MHZ,这里需要设置为100MHZ

PCLK最高50MHZ,这里需要设置为50HZ

如下图所示,得出 CLKDIVN寄存器需要等于0X5即可

通过下图看出,提高CPU频率需要设置MPLLCON中MDIV、PDIV、SDIV

通过下图得出,取400MHZ时,设置MDIV为0X5C,PDIV为0x1,SDIV为0x1

所以改进代码如下:

#define S3C2440_MPLL_400MHZ     ((0x5c<<12)|(0x01<<4)|(0x01))  //设置FCLK=400MHZ
/* 2.设置时钟(必须设为异步总线模式) */
ldr r0,=CLKDIVN
mov r1,# /*FCLK:HCLK:PCLK=1:4:8*/
str r1,[r0]
mrc p15, , r1, c1, c0 /* 读出控制寄存器 */
orr r1, r1, #0xc0000000 /* 设置为“asynchronous bus mode” */
mcr p15, , r1, c1, c0, /* 写入控制寄存器 */ ldr r0,=MPLLCON
ldr r1,= S3C2440_MPLL_400MHZ //使用复杂的数不能用mov,需要用ldr
str r1,[r0]
2.开启ICAHE(内核启动时间6S变为1.5S)
CAHE介绍:

通过高速缓存存储器来加快对内存的数据访问,在CAHE中有ICAHE(指令缓存)和DCAHE(数据缓存)
ICAHE: 指令缓存,用来存放执行这些数据的指令
DCAHE:用来存放数据,需要开启MMU才能开启DCAHE
在没开启ICAHE之前,CPU读取SDRAM地址数据时,每次都需要先访问一次地址值,在读数据.
当开了ICAHE后,第一次读取SDRAM地址数据时,ICAHE发现缓存里没有这个地址数据,然后将SDRAM中需要读取的那部分一大块内存数据都复制在缓存中,后面陆续读取数据就不会再访问SDRAM了,直到CPU没有找到地址数据后ICAHE再从SDRAM中重新复制 

通过CP15协处理器来开启ICAHE

(CP15协处理器操作用法:  http://www.cnblogs.com/lifexy/p/7203786.html)

从上面链接中可以找到ICAHE控制位在CP15的寄存器C1中位12(如下图), 然后通过MRS和MSR向该位12置1,开启ICAHE

所以代码如下(放在SDRAM初始化之前)

   mrc p15, , r0, c1, c0,                      //将 CP15 的寄存器 C1 的值读到 r0 中
orr r0, r0, #(<<) //将r0中位12置1
mcr p15,, r0,c1,c0, //开启ICAHE

第2阶段——编写uboot之编译测试以及改进(3)的更多相关文章

  1. 第2阶段——编写uboot之硬件初始化和制作链接脚本lds(1)

    目标: 1.关看门狗 2.设置时钟 3.初始化SDRAM (初始化寄存器以及清除bss段) 4.重定位 (将nand/nor中代码COPY到链接地址上,需要初始化nandflash,读flash) 5 ...

  2. 第2阶段——编写uboot之启动内核和制作Makefile(2)

    目标: 1   添加头文件setup.h和serial.h 2   写main函数   2.1 帮内核设置串口0, (内核启动会打印出启动信息) 2.2把内核读入到SDRAM 2.3设置参数(参考u- ...

  3. Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码

    Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...

  4. mvn编写主代码与测试代码

    maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目 ...

  5. (五)u-boot2013.01.01 for TQ210:《移植前的准备及u-boot初编译》

    移植前的准备 移植前,要做的事情是搭建开发环境以及对U-boot源码的获取.首先说一下开发环境: 1.此次U-boot移植的硬件平台是天嵌的TQ210开发板: CPU:板载核心是S5PV210(Cor ...

  6. day111:MoFang:邀请好友流程&生成邀请好友二维码&第三方应用识别二维码&本地编译测试&记录邀请人信息

    目录 1.邀请业务逻辑流程图 2.邀请好友-前端 3.邀请好友-后端接口(生成二维码) 4.前端获取后端生成的二维码 5.前端长按页面,保存图片到相册 6.客户端通过第三方识别微信二维码,服务端提供对 ...

  7. gcc编译的四个阶段:预处理,编译,汇编,链接

    1:gcc编译的四个阶段:预处理,编译,汇编,链接 #vi file.c #gcc -E file.c -o file.i//-E查看且预处理后停止编译,-o生成目标文件,-i表示已预处理 #gcc  ...

  8. 实现如下类之间的继承关系,并编写Music类来测试这些类。

    实现如下类之间的继承关系,并编写Music类来测试这些类. package com.hanqi.test; public class Instrument { //输出弹奏乐器 public void ...

  9. (九)uboot配置编译、源码分析

    一.X210官方uboot配置编译实践1.找到官方移植好的uboot(BSP概念)(1)源头的源代码是uboot官网下载的.这个下载的源代码可能没有你当前使用的开发板的移植,甚至找不到当前开发板使用的 ...

随机推荐

  1. JAVA多线程之wait/notify

    本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...

  2. Tp3.2提交表单与操作表单

    笔记笔记 先去建个表———— 然后把我输入的东西 存到表里: <input type="submit" id="tijiao" value="提 ...

  3. X-NUCA 2017 web专题赛训练题 阳光总在风雨后和default wp

     0X0.前言 X-NUCA 2017来了,想起2016 web专题赛,题目都打不开,希望这次主办方能够搞好点吧!还没开赛,依照惯例会有赛前指导,放一些训练题让CTFer们好感受一下题目. 题目有一大 ...

  4. Linux 组配置文件(/etc/group)

    一.概述 Linux 组配置(/etc/group)文件分为4个字段,分别为: 组名.组密码.GID和组成员. 二.示例 用户apple和banana的默认组为fruit. [root@titan ~ ...

  5. vue学习笔记(1)—— 组件化实现todoList

    一.环境搭建 1.npm 大型应用时推荐用npm安装,npm能很好的和webpack等模块打包器配合使用.具体安装步骤请参考网上的诸多教程.完成后使用如下命令安装vue. $ npm install ...

  6. 学起来 —— CSS 入门基础

    Hello,大家好! 小女来更博啦!CSS福利送上~~~ 首先给大家介绍一下CSS到底是什么? 一.CSS概念 W3C规范中,要求有三条:一 为"两个分离",二 为语言遵循语义化, ...

  7. 关于ftp出现425错误

    在centos上搭建一个ftp,一切都配置好之后,我去访问时仍然会出现425 Failed to establish connection.这个错误,经过一番查找,原来是这个 -A INPUT -j ...

  8. ASP.NET WebApi 使用Swagger生成接口文档

    前言 公司一直采用Word文档方式与客户端进行交流.随着时间的推移,接口变的越来越多,文档变得也很繁重.而且一份文档经常由多个开发人员维护,很难保证文档的完整性.而且有时写完代码也忘了去更新文档,为了 ...

  9. Java入门——(1)Java编程基础

    Java入门--(1)Java编程基础 第二章 Java编程基础   JAVA 代码的基本格式: 修饰符 class 类名{ 程序代码 }   2.1关键字:赋予了特殊含义的单词.   2.2标识符: ...

  10. Jmeter+badboy环境搭建

    [JMeter安装] 1. 访问官网 下载jmeter包 http://jmeter.apache.org/ 2. 解压到安装目录 D:\Program Files (x86)\apache-jmet ...