博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移植最新Uboot到JZ2440开发板
阅读量:5995 次
发布时间:2019-06-20

本文共 3882 字,大约阅读时间需要 12 分钟。

    下载最新版U-boot,建立Source Insight工程,在建立工程的时候注意,去掉一些很明显不属于硬件的分支代码。

     例如,arch目录下面的除开arm子目录之外的其他目录,都可以不添加。

                  arm目录下,cpu子目录只需要添加和板子对于的体系结构代码即可。

                  例如,板子S3C2410是arm920t的,因此,只需要添加arm920t目录下面的:

                  添加所有红框框中的代码就处理完cpu目录的代码添加。

                   arm目录下的inclue目录里面有asm目录,里面定义了多种体系结构的头文件,我们只需要添加自身对于板级的头文件:

                   在此目录下,我们只需要添加 arch-s3c24x0里面的全部文件和外部零散的其他通用头文件。

                 

             board目录下面的,除开samsung子目录之外,其他的目录都不需要添加

             根目录下面的 tools、test、scripts、post、net这些子目录,都不需要添加。

     Uboot的源码在git仓库中维护,git地址为 git://www.denx.de/git/u-boot.git , U-Boot项目主页。

 

初始编译

     make smdk2410_deconfig, 出现如下错误:

   

     解决方法,编译时,指定交叉编译工具前缀 make CROSS_COMPILE=arm-linux-

     解决后再次出现如下错误,

      

    解决方法:可以在include/configs/smdk2410.h 里面添加一个宏定义 #define CONFIG_ENV_SIZE 0x2000

  

   解决方法:使用更新的交叉编译工具链  arm-linux-gcc-4.3.2.tar.bz2

用未经过任何修改的Uboot代码编译后,是不能运行在板子上面的。需要针对自身硬件进行修改,具体步骤如下:

1. 将board/samung/ 目录下面的 smdk2410目录全部拷贝一份,取名为smdk2440

    将include/configs目录下的smdk2410.h 复制一份,取名为smdk2440.h

2. 新版本的Uboot已经去掉了 boards.cfg文件,改为make menuconfig来配置,所有的config文件都在configs目录下。

    3. 修改Uboot代码中的问题:

       在start.S中,

     而设置PLL的时钟的函数在_main中的board_init_f中初始化函数列表中的  boad_early_init_f 中,设置MPLL倍频值。它应该要在设置分频系数和初始化内存控制器之间来设置。

     可以做如下修改:

    

    注释掉这里的MPLL设置,修改start.S中的 设置分频系数参数。

1:  // arch/arm/cpu/arm920t/Start.S
2:  #if 0
3:      /* FCLK:HCLK:PCLK = 1:2:4 */
4:      /* default FCLK is 120 MHz ! */
5:      ldr    r0, =CLKDIVN
6:      mov    r1, #3
7:      str    r1, [r0]
8:      #else
9:      /* 2. 设置时钟 */
10:      ldr r0, =0x4c000014
11:      //  mov r1, #0x03;            // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
12:      mov r1, #0x05;            // FCLK:HCLK:PCLK=1:4:8
13:      str r1, [r0]
14:   
15:      /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
16:      mrc p15, 0, r1, c1, c0, 0       /* 读出控制寄存器 */
17:      orr r1, r1, #0xc0000000         /* 设置为“asynchronous bus mode” */
18:      mcr p15, 0, r1, c1, c0, 0       /* 写入控制寄存器 */
19:   
20:      #define S3C2440_MPLL_400MHZ     ((0x5c<<12)|(0x01<<4)|(0x01))
21:      /* MPLLCON = S3C2440_MPLL_200MHZ */
22:      ldr r0, =0x4c000004
23:      ldr r1, =S3C2440_MPLL_400MHZ
24:      str r1, [r0]
25:   
26:      /* 启动ICACHE */
27:      mrc p15, 0, r0, c1, c0, 0   @ read control reg
28:      orr r0, r0, #(1<<12)
29:      mcr p15, 0, r0, c1, c0, 0   @ write it back
30:      #endif

   内存控制器的设置值改为如下:

1:  //board/samsung/smdk2410/lowlevel_init.S
2:  SMRDATA:
3:  #if 0
4:      .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
5:      .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
6:      .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
7:      .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
8:      .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
9:      .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
10:      .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
11:      .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
12:      .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
13:      .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
14:      .word 0x32
15:      .word 0x30
16:      .word 0x30
17:  #else
18:  SMRDATA:
19:      .long 0x22011110     //BWSCON
20:      .long 0x00000700     //BANKCON0
21:      .long 0x00000700     //BANKCON1
22:      .long 0x00000700     //BANKCON2
23:      .long 0x00000700     //BANKCON3
24:      .long 0x00000700     //BANKCON4
25:      .long 0x00000700     //BANKCON5
26:      .long 0x00018005     //BANKCON6
27:      .long 0x00018005     //BANKCON7
28:      .long 0x008C04F4     //REFRESH
29:      .long 0x000000B1     //BANKSIZE
30:      .long 0x00000030     //MRSRB6
31:      .long 0x00000030     //MRSRB7
32:  #endif

    如果串口打印出乱码,一般来说是波特率设置不正常。

    未完待续-…………………………

Technorati 标签:

转载地址:http://gpqlx.baihongyu.com/

你可能感兴趣的文章
整合ucenter经典教程
查看>>
mogodb(1) 简介
查看>>
使用wireshark抓取TCP包分析1
查看>>
LeetCode-15-3Sum
查看>>
Navicat for Mysql 10.x 注册码收藏
查看>>
CoverflowJS
查看>>
Java新手入门的30个基本概念
查看>>
Codeforces Round #395 C. Timofey and a tree
查看>>
Oracle连接字符串大全
查看>>
drawable animation基础
查看>>
Spring中ClassPathXmlApplicationContext类的简单使用
查看>>
中断的作用
查看>>
eclipse使用git提交项目
查看>>
C# 调用网易“易盾” Web API
查看>>
Python-入门第四篇
查看>>
#、%和$符号在OGNL表达式中的作用
查看>>
Android4.2项目目录结构
查看>>
Map的常用方法
查看>>
DocumentBuilder setEntityResolver() Method
查看>>
NLP 自然语言处理 会议 整理
查看>>