zoukankan      html  css  js  c++  java
  • 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 更容易。

  • 相关阅读:
    docker 安装mysql
    Java web项目搭建系列之二 Jetty下运行项目
    Java web项目搭建系列之一 Eclipse中新建Maven项目
    Maven 添加其他Maven组件配置问题
    C# 中定义扩展方法
    Oracle 函数
    【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name
    Linux精简版系统安装网络配置问题解决
    Rsync 故障排查整理
    Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.
  • 原文地址:https://www.cnblogs.com/plinx/p/3050179.html
Copyright © 2011-2022 走看看