uboot-2012-4.1移植 (一)分析uboot

1   cd board/samsung/
    cp smdk2410/ smdk2440/ -rf
    cp smdk2410.h smdk2440.h
    cd ../../
    修改boards.cfg
    仿照
  smdk2410                     arm         arm920t     -                   samsung        s3c24x0
  添加:
  smdk2440                     arm         arm920t     -                   samsung        s3c24x0
  make smdk2440_config
  make
  编译uboot,烧写到nor flash中,测试运行。应该是不能运行的!

2. 分析u-boot: 通过链接命令分析组成文件、阅读代码分析启动过程
   a. 初始化硬件:关看门狗、设置时钟、设置SDRAM、初始化NAND FLASH
   b. 如果bootloader比较大,要把它重定位到SDRAM
   c. 把内核从NAND FLASH读到SDRAM
   d. 设置"要传给内核的参数"
   e. 跳转执行内核

2.1 _start: b start_code
2.2 set the cpu to SVC32 mode 设置CPU工作在管理模式
2.3 /* turn off the watchdog */关看门狗,关中断
 
2.4 /* FCLK:HCLK:PCLK = 1:2:4 */
  /* default FCLK is 120 MHz ! */
  ldr r0, =CLKDIVN
  mov r1, #3
  str r1, [r0]
  时钟设置不对,此处需要修改
2.5 调用cpu_init_crit用来对指令\数据cache,关MMU等协处理器操作
  #ifndef CONFIG_SKIP_LOWLEVEL_INIT
   bl cpu_init_crit
  #endif
2.6 调用 call_board_init_f 设置堆栈,然后调用C函数 board_init_f 位于arch\arm\lib\board.c
    call_board_init_f
2.7    调用 init_sequence 数组中的所有函数
      board_init_f
        board_early_init_f  //设置系统时钟,GPIO等
      relocate_code(addr_sp, id, addr);//重定位代码
2.8 relocate把nor中的代码复制到sdram中。
2.8.1 nor中的代码复制到sdram
2.8.2 程序的链接地址是0,访问全局变量、静态变量、调用函数时是使"基于0地址编译得到的地址"
      现在把程序复制到了SDRAM

      需要修改代码,把"基于0地址编译得到的地址"改为新地址
2.8.3 程序里有些地址在链接时不能确定,要到运行前才能确定:fixabs
2.9  清bss
2.10 调用C函数board_init_r:第2阶段的代码
    ldr r0, _board_init_r_ofs
    adr r1, _start
    add lr, r0, r1
    add lr, lr, r9
    /* setup parameters for board_init_r */
    mov r0, r5  /* gd_t */
    mov r1, r6  /* dest_addr */
    /* jump to it ... */
    mov pc, lr
        /*修改lr的值把_board_init_r_ofs 的值加上r1(值为_start),再加上r9(偏移地址长度),
        得到一个返回值,也就是函数 board_init_r 的入口地址。从而实现程序从Nor运行到sdram
        中运行的跳转*/
    _board_init_r_ofs:
     .word board_init_r - _start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值