board_init_f在/u-boot-2018.07-fmxx/arch/arm/mach-fmxx/spl.c中定义

board_init_f
之后,和转载的部分有出入: u-boot-2018.07-fmxx/arch/arm/lib/crt0.S 来仔细分析如下代码: #if ! defined(CONFIG_SPL_BUILD) //不执行 /*
 * Set up intermediate environment (new sp and gd) and call
 * relocate_code(addr_moni). Trick here is that we'll return
 * 'here' but relocated.
 */     ldr    r0, [r9, #GD_START_ADDR_SP]    /* sp = gd->start_addr_sp */
    bic    r0, r0, #7    /* 8-byte alignment for ABI compliance */
    mov    sp, r0
    ldr    r9, [r9, #GD_BD]        /* r9 = gd->bd */
    sub    r9, r9, #GD_SIZE        /* new GD is below bd */     adr    lr, here
    ldr    r0, [r9, #GD_RELOC_OFF]        /* r0 = gd->reloc_off */
    add    lr, lr, r0
#if defined(CONFIG_CPU_V7M)
    orr    lr, #1                /* As required by Thumb-only */
#endif
    ldr    r0, [r9, #GD_RELOCADDR]        /* r0 = gd->relocaddr */
    b    relocate_code
here:
/*
 * now relocate vectors
 */     bl    relocate_vectors /* Set up final (full) environment */     bl    c_runtime_cpu_setup    /* we still call old routine here */
#endif //#if ! defined(CONFIG_SPL_BUILD) 因为定义了CONFIG_SPL_BUILD 所以不包含上述段落 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_FRAMEWORK) //!defined(CONFIG_SPL_BUILD)为假 defined(CONFIG_SPL_FRAMEWORK) 为真 下面代码执行
# ifdef CONFIG_SPL_BUILD //执行
    /* Use a DRAM stack for the rest of SPL, if requested */
    bl    spl_relocate_stack_gd //common/spl/spl.c中定义
    cmp    r0, #0
    movne    sp, r0
    movne    r9, r0
# endif
    ldr    r0, =__bss_start    /* this is auto-relocated! */ #ifdef CONFIG_USE_ARCH_MEMSET //执行
    ldr    r3, =__bss_end        /* this is auto-relocated! */
    mov    r1, #0x00000000        /* prepare zero to clear BSS */     subs    r2, r3, r0        /* r2 = memset len */
    bl    memset
#else //不执行
    ldr    r1, =__bss_end        /* this is auto-relocated! */
    mov    r2, #0x00000000        /* prepare zero to clear BSS */ clbss_l:cmp    r0, r1            /* while not at end of BSS */
#if defined(CONFIG_CPU_V7M) //不执行
    itt    lo
#endif
    strlo    r2, [r0]        /* clear 32-bit BSS word */
    addlo    r0, r0, #4        /* move to next */
    blo    clbss_l
#endif // CONFIG_USE_ARCH_MEMSET #if ! defined(CONFIG_SPL_BUILD) //不执行
    bl coloured_LED_init
    bl red_led_on
#endif
    /* call board_init_r(gd_t *id, ulong dest_addr) */
    mov     r0, r9                  /* gd_t */
    ldr    r1, [r9, #GD_RELOCADDR]    /* dest_addr */
    /* call board_init_r */
#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD)
    ldr    lr, =board_init_r    /* this is auto-relocated! */
    bx    lr
#else //执行
    ldr    pc, =board_init_r    /* this is auto-relocated! */
#endif //CONFIG_IS_ENABLED(SYS_THUMB_BUILD)
    /* we should not return here. */
#endif ENDPROC(_main) 大概流程是
bl    spl_relocate_stack_gd
bl    memset  //bss清零
ldr    pc, =board_init_r //跳转到board_init_r

一般SPL会定义CONFIG_SPL,
在common/spl/Kconfig中
config SPL_FRAMEWORK
    bool "Support SPL based upon the common SPL framework"
    depends on SPL
    default y
默认选中SPL_FRAMEWORK 到底使用那个函数,要看Makefile和config的值 board_init_r在common/spl/spl.c中定义 该函数中有些调用
比如spl_board_init 在/u-boot-2018.07-fmxx/arch/arm/mach-fmxx/spl.c中定义
而spl_board_init又调用了preloader_console_init在common/spl/spl.c中定义
https://blog.csdn.net/voice_shen/article/details/17373671

https://www.cnblogs.com/maxpak/p/5593019.html

[uboot] (第三章)uboot流程——uboot-spl代码流程 后续2018版本分析的更多相关文章

  1. u-boot移植(三)---修改前工作:代码流程分析2

    一.vectors.S 1.1 代码地址 vectors.S (arch\arm\lib) 1.2 流程跳转 跳转符号 B 为 start.S 中的 reset 执行代码,暂且先不看,先看看 vect ...

  2. 第三章、Tiny4412 U-BOOT移植三 时钟设置【转】

    本文转自:http://blog.csdn.net/eshing/article/details/37521789 这一章说明配置时钟频率基本原理 OK,接着说,这次先讲讲CPU的系统时钟.U-BOO ...

  3. C语言 第三章 关系、逻辑运算与分支流程控制

    目录 一.关系运算 二.逻辑运算 三.运算优先级 四.if语句 4.0.代码块 4.1.单if语句 4.2.if else 4.3.多重if 4.4.?号:号表达式 五.switch语句 一.关系运算 ...

  4. SpringMvc执行流程及底层代码流程

    SpringMVC执行流程   01.客户端发送请求被我们在web.xml中配置DispatcherServlet(核心控制器)拦截: 默认执行DispatcherServlet中的 protecte ...

  5. git 一般的开发流程中的代码管理

    一般的开发流程中的代码管理 1. 从版本库中下载代码 git clone ssh://wenbin@192.168.1.3:29418/mustang-web 2. 针对某个feature(比如ins ...

  6. [uboot] (第三章)uboot流程——uboot-spl代码流程

    http://blog.csdn.net/ooonebook/article/details/52957395 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

  7. [uboot] (第三章)uboot流程——uboot-spl代码流程(转)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ooonebook/article/det ...

  8. [uboot] (第五章)uboot流程——uboot启动流程

    http://blog.csdn.net/ooonebook/article/details/53070065 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

  9. [uboot] (第四章)uboot流程——uboot编译流程

    http://blog.csdn.net/ooonebook/article/details/53000893 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

随机推荐

  1. 2-0 虚拟机与Linux系统安装

    虚拟机与Linux系统安装 虚拟机硬件选择 由于是初学Linux,所以我们通过在虚拟机里安装的方式学习Linux,如果不知道找虚拟机和Linux的话请看我上一篇博客:计算机基础 如果你已经准备好了虚拟 ...

  2. <转>经典测试用例:电梯、杯子、桌子、洗衣机

    1.测试项目:电梯 需求测试:查看电梯使用说明书.安全说明书等 界面测试:查看电梯外观 功能测试:测试电梯能否实现正常的上升和下降功能.电梯的按钮是否都可以用: 电梯门的打开,关闭是否正常:报警装置是 ...

  3. 大数据技术之kettle

    大数据技术之kettle 第1章            kettle概述 1.1    什么是kettle kettle是一款开源的ETL工具,纯java编写,可以在Windows.Linux.Uni ...

  4. [转帖]Linux的wget命令详解

    Linux的wget命令详解 来源不明 找到的也是转帖的 https://www.cnblogs.com/cindy-cindy/p/6847502.html Linux wget是一个下载文件的工具 ...

  5. (转)SQLServer查询数据库各种历史记录

    一. 数据库启动记录 1. 最近一次启动SQL Server的时间 select sqlserver_start_time from sys.dm_os_sys_info; --也可参考系统进程创建的 ...

  6. java-selenium浏览器常用操作命令

    一.浏览器操作命令 启动火狐浏览器(49版本以下) System.setProperty("webdriver.firefox.bin","D:\\Firefox\\fi ...

  7. 2019.11.9 csp-s 考前模拟

    2019.11.9 csp-s 考前模拟 是自闭少女lz /lb(泪奔 T1 我可能(呸,一定是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通 ...

  8. JAVA重载和数组

    Java 重载:相同的方法名,但参数个数或者类型不一样的情况下,自动执行不同的方法 数组:   int[] array=new int[5];  System.out.println(array); ...

  9. EJB通过注解方式注入并使用其它EJB或者服务、配置JBoss数据源

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/Jerome_s/article/details/37103171 通过注解方式注入并使用其他EJB或者服务 ...

  10. javaScript基础知识总汇

    javaScript是什么: 1.JavaScript 运行在客户端(浏览器)的编程语言 2.用来给HTML网页增加动态功能 3.用来给HTML网页增加动态功能. 4.Netscape在最初将其脚本语 ...