FL2440的U-boot-2010.09移植

鉴于u-boot的2010.09版本之后的结构发生很大变化,特别是它启动步骤的改变,使得支持Nand flash启动支持的困难,我尝试了几次,最后从Nand flash启动后uboot的指令却无法支持了,而2010.09版本是U-boot结构发生改变的最后一个版本,其中已添加了S3C2440的支持(不像以前的版本需要在很多文件中的CONFIG_S3C2410后加上CONFIG_S3C2440),于是选择它作为fl2440的bootloader。

相关阅读:

U-Boot源代码下载地址 http://www.linuxidc.com/Linux/2011-07/38897.htm

FL2440的U-boot-2010.09移植(一)http://www.linuxidc.com/Linux/2012-06/63755.htm
FL2440的U-boot-2010.09移植(二)http://www.linuxidc.com/Linux/2012-06/63756.htm
FL2440的U-boot-2010.09移植(三)DM9000网卡及开发板相关配置 http://www.linuxidc.com/Linux/2012-07/64155.htm
FL2440的U-boot-2010.09移植(四) 添加NOR FLash启动支持 http://www.linuxidc.com/Linux/2012-07/64156.htm
FL2440的U-boot-2010.09移植(五)uboot架构中NAND FLash驱动修改 http://www.linuxidc.com/Linux/2012-07/64157.htm
FL2440的U-boot-2010.09移植(六)NAND FLash启动支持 http://www.linuxidc.com/Linux/2012-07/641587.htm
FL2440的U-boot-2010.09移植(七)LCD的支持 http://www.linuxidc.com/Linux/2012-07/641587.htm
针对FL2440开发板的u-boot-2010.09版本补丁 http://www.linuxidc.com/Linux/2012-07/64116.htm

在Uboot中添加fl2440开发板的支持

1、打开U-boot-2010.09解压目录下的boards.cfg在smdk2410后添加fl2440的配置选项:

  1. smdk2410            arm arm920t     -       samsung     s3c24x0  
  2. fl2440          arm arm920t     fl2440      -       s3c24x0  

2、在/board子目录中建立自己的开发板fl2440目录

www.linuxidc.com @linuxidc:~/Desktop/uboot/u-boot-2010.09$ cd board
www.linuxidc.com @linuxidc:~/Desktop/uboot/u-boot-2010.09/board$ mkdir fl2440
www.linuxidc.com @linuxidc:~/Desktop/uboot/u-boot-2010.09/board$ cp -arf samsung/smdk2410/* fl2440/
www.linuxidc.com @linuxidc:~/Desktop/uboot/u-boot-2010.09/board$ cd fl2440/
www.linuxidc.com @linuxidc:~/Desktop/uboot/u-boot-2010.09/board/fl2440$ mv smdk2410.c fl2440.c
 还要记得修改自己的开发板fl2440目录下的Makefile文件28行,不然编译时会出错:
修改Makefile的依赖文件
COBJS   := smdk2410.o  flash.o 为 COBJS    := fl2440.o  flash.o

3、在include/configs/中建立开发板的配置头文件

www.linuxidc.com @linuxidc:~/Desktop/uboot/u-boot-2010.09$ cp include/configs/smdk2410.h include/configs/fl2440.h

(4)添加fl2440的配置文件,测试编译能否成功
配置
www.linuxidc.com @linuxidc:~/Desktop/uboot/u-boot-2010.09$ make fl2440_config
Configuring for fl2440 board...
测试编译
www.linuxidc.com @linuxidc:~/Desktop/uboot/u-boot-2010.09$ make

正常情况下应该输出成功了

注意:如果编译时出现以下错误(这是编译器的问题,没出错就不要修改):
uses hardware FP, whereas u-boot uses software FP
修改的方法:cpu/arm920t/config.mk的21行:PLATFORM_RELFLAGS += -fno-common -ffixed-r8 #-msoft-float ,删除msoft-float项。然后clean一下,重新make


针对FL2440开发板的u-boot-2010.09版本补丁 http://www.linuxidc.com/Linux/2012-07/64116.htm

一、汇编文件修改,这部分主要集中修改修改cpu/arm920t/start.S文件。

1、删除AT91RM9200使用的LED代码,117、118行,关闭LED代码。

  1. // bl coloured_LED_init   
  2. // bl red_LED_on  

2、修改编译条件支持s3c2440,修改寄存器地址定义,修改 CPU频率初始化设置

  1. # if defined(CONFIG_S3C2400)  
  2. #  define pWTCON    0x15300000  
  3. #  define INTMSK    0x14400008  /* Interupt-Controller base addresses */  
  4. #  define CLKDIVN   0x14800014  /* clock divisor register */  
  5. #else  
  6. #  define pWTCON    0x53000000  
  7. #  define INTMSK    0x4A000008  /* Interupt-Controller base addresses */  
  8. #  define INTSUBMSK 0x4A00001C  
  9. #  define CLKDIVN   0x4C000014  /* clock divisor register */  
  10. # endif  
  11. 添加  
  12. #  define CLK_CTL_BASE  0x4C000000  
  13. #  define MDIV_405      0x7f<<12          
  14. #  define PSDIV_405     0x21            /*set s3c2440 MPLL 405MHZ*/  
  15. #  define MDIV_200      0xa1<<12  
  16. #  define PSDIV_200     0x31            /*set s3c2410 MPLL 200MHZ*/   

3、修改中断禁止部分

  1. # if defined(CONFIG_S3C2410)  
  2.  //ldr r1, =0x3ff  
  3.  ldr r1, =0x7ff  /*uboot error*/  
  4.  ldr r0, =INTSUBMSK  
  5.  str r1, [r0]  
  6. # endif  
  7. 后添加  
  8. #if defined(CONFIG_S3C2440)  
  9.         ldr     r1, =0x7ff  
  10.         ldr     r0, =INTSUBMSK  
  11.         str     r1, [r0]  
  12.         /*INTSUBMSK 关闭中断 S3C2440有15位*/  
  13. # endif  

4、修改时钟设置(2440的主频为405MHz),紧接着上面一步,在其后添加和修改为:

  1. #if defined(CONFIG_S3C2440)   
  2.         /* FCLK:HCLK:PCLK = 1:4:8 */  
  3.         /* default FCLK is 405 MHz ! */  
  4.         ldr r0, =CLKDIVN  
  5.         mov r1, #5  
  6.         str r1, [r0]  
  7.   
  8.         mrc     p15, 0, r1, c1, c0, 0  
  9.         orr     r1, r1, #0xc0000000 //asynchronous   
  10.         mcr     p15, 0, r1, c1, c0, 0  
  11.         /*上面这段代码见s3c2440a手册p215,HDIVN != 0 叫做异步总线模式*/  
  12.   
  13.         /* cpu clock FCLK = 405MHZ 通常我们叫400MHZ,实际是405MHZ,见S3C2440手册(英文版)chapt7,P227要习惯用英文手册:-)*/  
  14.         /*根据表中的数据设置MDIV,PDIV,SDIV*/  
  15.         mov     r1, #CLK_CTL_BASE  
  16.         mov     r2, #MDIV_405  
  17.         add     r2, r2, #PSDIV_405  
  18.         str     r2, [r1, #0x04] //写入MPLLCON   
  19.      
  20. #else   
  21.     /* FCLK:HCLK:PCLK = 1:2:4 */  
  22.     /* default FCLK is 120 MHz ! */  
  23.         ldr r0, =CLKDIVN  
  24.         mov r1, #3  
  25.         str r1, [r0]  
  26.         mrc     p15, 0, r1, c1, c0, 0  
  27.         orr     r1, r1, #0xc0000000 //asynchronous   
  28.         mcr     p15, 0, r1, c1, c0, 0  
  29.      
  30.         /* cpu clock is 200MHZ*/  
  31.         mov     r1, #CLK_CTL_BASE  
  32.         mov     r2, #MDIV_200  
  33.         add     r2, r2, #PSDIV_200  
  34.         str     r2, [r1, #0x04] //MPLLCON   
  35. #endif  

5、修改SDRAM的REFRESH刷新周期,修改board/fl2440/lowlevel_init.S文件

  1. #define REFCNT   1259   
  2. /*在SDRAM手册上P3上有64ms refresh period (8K Cycle)*/  
  3. /*结合fl2440开发板 preiod =64ms/8129=7.8125us,取7.9的话REFCNT的值为 (2048+1-7.9us*100Mhz)=1259*/  
  4.   
  5.   
  6.   
  7. #define Trp   0x0 /* 2clk */   
  8. /*RAS precharge Time SDRAM数据手册P10 tRP(min)=20ns 或者18ns(由型号决定)我们知道我们的HCLK=405/4Mhz 故可设成2clk(20ns),有些移植手册设为4clk 再次充电时间设大点问题也不大吧 */  
  9.   
  10. #define Trc   0x3 /* 7clk */   
  11. /*SDRAM ROW cycle time: Trc=Tsrc+Trp SDRAM数据手册p10 tRC(min)=65ns 或者60ns(由型号决定) 设为7即为70ns */  
  12.   
  13.   
  14. #define Tchr   0x2 /* 3clk */   
  15. /*为找到Tchr相关定义,在SMRDATA:后面设置REFRESH寄存器时(Tchr<<16),而实际上该寄存器(11~17)位为保留位,这里设置并没有意义(可能这个值在其他ARM体系中有用吧,但至少在S3C2440中是无效的)*/  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值