• S3C6410之uboot回炉再造(5)设置堆栈与跳转至C入口


      直接切入主题

      1、设置堆栈

     1 skip_hw_init:
     2     /* Set up the stack                            */
     3 stack_setup:
     4     ldr    r0, =CONFIG_SYS_UBOOT_BASE    /* base of copy in DRAM        */
              //0x57e0_0000
     5     sub    r0, r0, #CONFIG_SYS_MALLOC_LEN    /* malloc area                      */
              //#define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE + 1024 * 1024)
              //#define CONFIG_ENV_SIZE  0x4000
              //减去环境变量存储区的大小
     6     sub    r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo                        */
              //#define CONFIG_SYS_GBL_DATA_SIZE  128
              //减去全局变量存储区的大小
     7     sub    sp, r0, #12        /* leave 3 words for abort-stack    */
              //留下 12 字节(即 3 个字)的堆栈空间
     8 

      我本人并不信任这段代码、因为我也参考过s3c-uboot1.1.6的代码。

      在s3c-uboot1.1.6的代码中,#ifdef 考虑的内容更全面也更具有逻辑依据一些。

      所以本次仅是分析、制作一套可以成功运行各项基本功能的代码,但在后期实用中不把这套代码当做长期支持使用的代码,以免遇到不可知的bug。

      2、清除BSS(Block Started by Symbol)段

     9 clear_bss:
    10     ldr    r0, _bss_start     /* find start of bss segment        */
    11     ldr    r1, _bss_end       /* stop here                        */
    12     mov     r2, #0            /* clear                            */
                       //注释很清楚了…、就不再解释
    13 
    14 clbss_l:
    15     str    r2, [r0]        /* clear loop...                    */
    16     add    r0, r0, #4    //循环清除bss
    17     cmp    r0, r1
    18     ble    clbss_l
    19 
    20 #ifndef CONFIG_NAND_SPL
    21     ldr    pc, _start_armboot  // C入口函数,选择在IRQ中断处理的代码分析之后说
    22 
    23 _start_armboot:
    24     .word start_armboot
    25 #else
    26     b    nand_boot
    27 /*    .word nand_boot*/
    28 #endif

      至此,汇编接口的代码就分析完了,再接着就是C语言 start_armboot 的分析了。

      小总结一下 start.S 中的构架,个人还是觉得原版的代码构架更清晰一些。

      在 uboot2010 中,代码构架偏向将 寻址类操作的几种放在 start.S 中,而其他操作的放到 lowlevel_init 中。

      而 uboot1.1.6 更在意 #ifdef 的运用,将更多的设置项分清楚。

      个人觉得 2010 逻辑更优秀,1.1.6 debug 更容易。

  • 相关阅读:
    2017-2018-1 20155226 20155234 实验一 开发环境的熟悉
    2017-2018-1 20155234 《信息安全系统设计基础》第四周课堂实践
    2017-2018-1 20155234第三周《信息安全系统设计基础》学习总结
    2017-2018-1 20155234第一周《信息安全系统设计基础》学习总结
    20155234 实验五 网络编程与安全
    20155234 2016-2017-2《Java程序设计》课程总结
    20155234 《Java程序设计》实验四 (Android程序设计)实验报告
    20155234 实验三 敏捷开发与XP实践
    2017-2018-1 20155231 《信息安全系统设计基础》第9周学习总结
    2017-2018-1 20155231 实验三 实时系统
  • 原文地址:https://www.cnblogs.com/plinx/p/3050179.html
Copyright © 2020-2023  润新知