u-boot2012.04移植到jz2440 -- ->正常显示u-boot启动信息

    在u-boot2012.04 的版本中,没有S3C2440的相关代码。因此需要单板的移植、

主机环境:ubuntu12.04 32bit

交叉编译器:rm-none-linux-gnueabi-      4.3.2

u-boot版本:2012.04

开源地址:http://git.oschina.net/gxx9203/u-boot2012.04_jz2440

第一部分: 构建smdk2440单板

1 底层文件
    cd board/samsung
    cp smdk2410 smdk2440 -rf  
    cd smdk2440/
    mv smdk2410.c  smdk2440.c
    vim Makefile
         28 COBJS   := smdk2410.o   
          ==》28 COBJS   := smdk2440.o   
    cd ../../..
1.2 配置文件
    cd  cd include/configs/   
    cp smdk2410.h  smdk2440.h
                 修改#define CONFIG_S3C2410      /* specifically a SAMSUNG S3C2410 SoC */ 为
                #define CONFIG_S3C2440      /* specifically a SAMSUNG S3C2440 SoC */   
                修改
                 #define CONFIG_SMDK2410     /* on a SAMSUNG SMDK2410 Board */       
                为
                 #define CONFIG_SMDK2440     /* on a SAMSUNG SMDK2440 Board */     
               
                修改 #define CONFIG_SYS_PROMPT   "SMDK2410 # "   
                  为
                  = #define CONFIG_SYS_PROMPT   "SMDK2440 # "   
1.3 smdk2440_config
    vim boards.cfg
    添加
    75 smdk2440                     arm         arm920t     -                   samsung  
1.4 make  smdk2440_config
1.5 make  
    在make 后会出现文件,先注释掉    //#define CONFIG_CMD_NAND (  include/configs/smdk2440.h) 来解决编译的问题,

此阶段的目的,是构建一个单板,能够实现正常的编译过程,为了适合2440单板,还需要对对刚刚移植的信息,进行修改。

 第二部分:修改时钟配置和内存配置

     对于2440 来说。原文件存在着一下的问题:

   ①时钟设置不对

  ② 由于时钟不对,导致内存设置出现问题。

   ---------------------------------------------------------------

①    Smdk2440.c \board\samsung\smdk2440)中 int board_early_init_f(void) 对MPLL的设置

在 start.s 文件关闭中断后,添加如下的代码

/* FCLK:HCLK:PCLK = 1:2:4 */
    /* default FCLK is 120 MHz ! */

    ldr r0, =0x4c000014
    //    mov r1, #0x03;              // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
    mov r1, #0x05;              // FCLK:HCLK:PCLK=1:4:8
    str r1, [r0]

    /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
    mrc    p15, 0, r1, c1, c0, 0        /* 读出控制寄存器 */
    orr    r1, r1, #0xc0000000            /* 设置为“asynchronous bus mode” */
    mcr    p15, 0, r1, c1, c0, 0        /* 写入控制寄存器 */

#define S3C2440_MPLL_400MHZ     ((0x5c<<12)|(0x01<<4)|(0x01))
    ldr r0, =0x4c000004
    ldr r1, =S3C2440_MPLL_400MHZ
    str r1, [r0]

    /* 启动ICACHE */
    mrc p15, 0, r0, c1, c0, 0    @ read control reg
    orr r0, r0, #(1<<12)
    mcr    p15, 0, r0, c1, c0, 0   @ write it back

同时在cpu_init_crit后,添加如下的代码

#ifndef CONFIG_SKIP_LOWLEVEL_INIT
	bl	cpu_init_crit
#endif

	ldr	sp, =(CONFIG_SYS_INIT_SP_ADDR)
	bic	sp, sp, #7 /* 8-byte alignment for ABI compliance */
	
	bl nand_init_ll  //见git地址

	mov r0, #0
	//ldr r1, =_start 
	ldr r1, _TEXT_BASE 
	ldr r2, _bss_start_ofs 
	
	bl copy_code_to_sdram
	bl clear_bss

	ldr pc, =call_board_init_f


/* Set stackpointer in internal RAM to call board_init_f */
call_board_init_f:

	ldr	r0,=0x00000000
	bl	board_init_f
	/*board_init_f 的返回值放在 r0 中*/ 
	ldr  r1, _TEXT_BASE

	/*设置栈*/
	ldr sp,base_sp 
	/*第二阶段的代码*/
	bl  board_init_r 
此处进行了sdram 的初始化,将nand flash中的数据拷贝到sdram中。

同时对sdram的设置也需要改变、

在替换lowlevel_init.S \board\samsung\smdk2440)

SMRDATA:
 

    .long 0x22011110     //BWSCON
    .long 0x00000700     //BANKCON0
    .long 0x00000700     //BANKCON1
    .long 0x00000700     //BANKCON2
    .long 0x00000700     //BANKCON3  
    .long 0x00000740     //BANKCON4
    .long 0x00000700     //BANKCON5
    .long 0x00018005     //BANKCON6
    .long 0x00018005     //BANKCON7
    .long 0x008C04F4     // REFRESH
    .long 0x000000B1     //BANKSIZE
    .long 0x00000030     //MRSRB6
    .long 0x00000030     //MRSRB7



make  之后。烧写,u-boot会出现乱码现象。此时波特率配置存在问题

 

   init_sequence
                                serial_init,        /* serial communications setup */
                                        get_current(void)
                                             default_serial_console();
                                                s3c24xx_serial0_device;
                                                    .....
                                                DECLARE_S3C_SERIAL_FUNCTIONS(0);
                                                                serial_setbrg_dev(port); \
                                                                    serial_setbrg_dev
                                                                        _serial_setbrg
                                                                                    reg = get_PCLK() / (16 * gd->baudrate) - 1;
                                                                                                return (readl(&clk_power->clkdivn) & 1) ? get_HCLK() / 2 : get_HCLK();
                                                                                                          #ifdef CONFIG_S3C2440 Speed.c (\arch\arm\cpu\arm920t\s3c24x0\speed.c)    

  需要配置  CONFIG_S3C2440       (include/configs/smdk2440.h)
   

现在移植的u-boot已经能够正常的从 启动。  

第三部分:支持nand 启动      

修改u-boot支持nand flash 启动  
    原来的代码在连接是加了-pie 选项。是的u-boot里边多了"rel" .dynsym  
    使得代码非常大。不利于nand 启动。 (重定位的代码应当小于4K)
    修改Makefile 去掉-pie
        搜索grep "\-pie" * -nR
        arch/arm/config.mk:88:LDFLAGS_u-boot += -pie
修改u-boot中的nand 支持nand 启动
    添加文件 init.c (boadr/samsung/smdk2440) 修改Makefile
    修改     #define CONFIG_SYS_TEXT_BASE    0x33f80000    Smdk2440.h (include\configs)
  修改start.s
     修改_main 去掉重定位
     修改连接脚本  把starts.S init.c lowlevel.S 放在最前边

             顶层目录的u-boot.lds 自动生成的
             find -name "u-boot.lds" 搜索    
             ./arch/arm/cpu/u-boot.lds
         编译后,通过查看u-boot.lds 和u-boot.dis 看是否符合预期
         33f80048 <_bss_end_ofs>:
    33f80048:    00098d84     andeq    r8, r9, r4, lsl #27







    






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值