【一】Uboot-2017.11源码分析启动过程之汇编部分

本文详细介绍了UBoot-2017.11版本在启动过程中涉及的汇编代码,包括设置中断向量表、保存启动参数、检查Hypervisor支持、关闭中断、设置CPU模式以及初始化函数的调用流程。通过对源码的分析,揭示了CPU如何从0x0000 0000地址开始执行,并逐步完成系统启动前的关键步骤。
摘要由CSDN通过智能技术生成

1 设置中断向量表

CPU在上电后,首先从0x0000 0000地址开始执行程序,uboot编译后,在程序的起始地址处存放了中断向量表,该部分代码为汇编语言写的,代码存储于arch\arm\cpu\armv7目录下的start.S中,如下所示:

/*************************************************************************

 *

 * Startup Code (reset vector)

 *

 * Do important init only if we don't startfrom memory!

 * Setup memory and board specific bits priorto relocation.

 * Relocate armboot to ram. Setup stack.

 *

 *************************************************************************/

.globl reset

         .globl save_boot_params_ret

#ifdefCONFIG_ARMV7_LPAE

         .global        switch_to_hypervisor_ret

#endif

reset:

         /* Allow the board to save importantregisters */

         b       save_boot_params

save_boot_params_ret:

#ifdefCONFIG_ARMV7_LPAE

/*

 * check for Hypervisor support

 */

         mrc   p15,0, r0, c0, c1, 1                @ readID_PFR1

         and    r0,r0, #CPUID_ARM_VIRT_MASK    @ maskvirtualization bits

         cmp   r0,#(1 << CPUID_ARM_VIRT_SHIFT)

         beq    switch_to_hypervisor

switch_to_hypervisor_ret:

#endif

第32行,程序一开始声明了三个全局的三个标签reset,ave_boot_params_ret,switch_to_hypervisor_ret,接着开始执行reset标签处的代码,即b         save_boot_params,跳转至save_boot_params处,如下所示:

/*************************************************************************

 *

 * void save_boot_params(u32 r0, u32 r1, u32r2, u32 r3)

 *     __attribute__((weak));

 *

 * Stack pointer is not yet initialized at thismoment

 * Don't save anything to stack even ifcompiled with -O0

 *

 *************************************************************************/

ENTRY(save_boot_params)

         b       save_boot_params_ret           @ back to my caller

ENDPROC(save_boot_params)

         .weak         save_boot_params

所有资料来源网上,与朋友分享 u-boot-1.1.6之cpu/arm920t/start.s分析 2 u-boot中.lds连接脚本文件的分析 12 分享一篇我总结的uboot学习笔记(转) 15 U-BOOT内存布局及启动过程浅析 22 u-boot中的命令实现 25 U-BOOT环境变量实现 28 1.相关文件 28 2.数据结构 28 3.ENV 的初始化 30 3.1env_init 30 3.2 env_relocate 30 3.3*env_relocate_spec 31 4. ENV 的保存 31 U-Boot环境变量 32 u-boot代码链接的问题 35 ldr和adr在使用标号表达式作为操作数的区别 40 start_armboot浅析 42 1.全局数据结构的初始化 42 2.调用通用初始化函数 43 3.初始化具体设备 44 4.初始化环境变量 44 5.进入主循环 44 u-boot编译过程 44 mkconfig文件的分析 47 从NAND闪存中启动U-BOOT的设计 50 引言 50 NAND闪存工作原理 51 从NAND闪存启动U-BOOT的设计思路 51 具体设计 51 支持NAND闪存的启动程序设计 51 支持U-BOOT命令设计 52 结语 53 参考文献 53 U-boot给kernel传参数和kernel读取参数—struct tag (以及补充) 53 1 、u-boot 给kernel 传RAM 参数 54 2 、Kernel 读取U-boot 传递的相关参数 56 3 、关于U-boot 中的bd 和gd 59 U-BOOT源码分析及移植 60 一、u-boot工程的总体结构: 61 1、源代码组织 61 2.makefile简要分析 61 3、u-boot的通用目录是怎么做到与平台无关的? 63 4、smkd2410其余重要的文件 : 63 二、u-boot的流程、主要的数据结构、内存分配 64 1、u-boot启动流程: 64 2、u-boot主要的数据结构 66 3、u-boot重定位后的内存分布: 68 三、u-boot的重要细节 。 68 关于U-boot中命令相关的编程 : 73 四、U-boot在ST2410的移植,基于NOR FLASH和NAND FLASH启动。 76 1、从smdk2410到ST2410: 76 2、移植过程: 76 3、移植要考虑的问题: 77 4、SST39VF1601: 77 5、我实现的flash.c主要部分: 78 6、增加从Nand 启动的代码 : 82 7、添加网络命令。 87
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值