`
saybody
  • 浏览: 867505 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

u-boot总的启动流程代码分析

阅读更多

u-boot总的启动流程如下
->reset
-> 设置CPU模式
-> 关闭看门狗/中断
-> 设置处理器时钟/片上总线
-> 初始化调试串口
-> MMU/外部总线/SDRAM等初始化
-> rom代码/数据搬移到ram
-> 初始化函数调用栈
-> 初始化外围设备/参数
-> 启动完毕,进入main_loop循环

u-boot主要提供以下功能:

设置目标板硬件参数并初始化;
为操作系统传递必要信息;
执行交互式的底层操作;
智能化装载操作系统;
引导和运行的固件程序;
支持大容量存储和USB接口

s3c2410复位之后,pc指针会指向0x0地址。在u-boot代码中,该0x0地址是一个向量表,
第一条指令跳转branch到复位代码start_code。 位于cpu/arm920t/start.S汇编语言文件第53行:

.globl _start<wbr></wbr> _start:<wbr></wbr> b start_code<wbr></wbr>
<wbr></wbr><wbr></wbr><wbr></wbr> ldr pc, _undefined_instruction
<wbr></wbr><wbr></wbr><wbr></wbr> ldr pc, _software_interrupt
<wbr></wbr><wbr></wbr><wbr></wbr> ldr pc, _prefetch_abort
<wbr></wbr><wbr></wbr><wbr></wbr> ldr pc, _data_abort
<wbr></wbr><wbr></wbr><wbr></wbr> ldr pc, _not_used
<wbr></wbr><wbr></wbr><wbr></wbr> ldr pc, _irq
<wbr></wbr><wbr></wbr><wbr></wbr> ldr pc, _fiq
复位指令跳转之后来到第154行,开始执行arm920t处理器的基本初始化。
首先修改当前程序状态寄存器CPSR,使处理器进入Supervisor|32 bit ARM模式,
并关闭ARM9TDMI中断和快速中断,这是通过设置CPSR相应掩码实现的:

start_code:<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>
<wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr> mrs r0,cpsr
<wbr></wbr><wbr></wbr> bic r0,r0,#0x1f
<wbr></wbr><wbr></wbr> orr r0,r0,#0xd3
<wbr></wbr><wbr></wbr> msr cpsr,r0<wbr></wbr>
紧接着,将S3C2410特有的WTCON寄存器清零,此举仅为关闭看门狗,代码位置是234行:

<wbr></wbr><wbr></wbr><wbr></wbr> ldr r0, =pWTCON
<wbr></wbr>mov r1, #0x0
<wbr></wbr>str r1, [r0]
然后在241行,将S3C2410中断控制器INTMSK寄存器置为全1,
INTSUBMSK置为0x7ff,禁止全部中断源。S3C2410手册358页起对此有详细描述:

<wbr></wbr><wbr></wbr><wbr></wbr> mov r1, #0xffffffff
<wbr></wbr>ldr r0, =INTMSK
<wbr></wbr>str r1, [r0]
<wbr></wbr># if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined(CONFIG_S3C2442) || /<wbr></wbr><wbr></wbr><wbr></wbr> defined(CONFIG_S3C2443)
<wbr></wbr>ldr r1, =INTSUBMSK_val
<wbr></wbr>ldr r0, =INTSUBMSK
<wbr></wbr>str r1, [r0]
<wbr></wbr># endif
接下来在259行,访问arm920t控制寄存器CP15,并置位最高两位[31,30]。
此两位置为0b11后,处理器时钟被设置为异步模式,允许处理器异步访问总线:

<wbr></wbr><wbr></wbr><wbr></wbr> mrc p15, 0, r1, c1, c0, 0
<wbr></wbr>orr r1, r1, #0xc0000000
<wbr></wbr>mcr p15, 0, r1, c1, c0, 0
至此arm920t相关的配置完成。

根据不同的编译时选项和运行时参数,代码会在360行进入相应的分支,分别是

从nand启动,代码执行lowlevel_init,主要是清除cpu cache,以及关闭mmu和i-cache,
并且根据板极硬件配置初始化外部存储器总线和GPIO,最后把代码从nand flash中拷贝到ram中并继续执行。
通过操作CP15完成flush处理器arm920t的cache和tlb,并关闭mmu和i-cache:

分享到:
评论

相关推荐

    u-boot源码分析

    3、u-boot的重要细节,主要分析流程中各函数的功能。 4、基于FS2410板子的u-boot移植。实现了NOR Flash和NAND Flash启动,网络功能。  这些认识源于自己移植u-boot过程中查找的资料和对源码的简单阅读。下面主要以...

    U-Boot启动第二阶段代码分析.rar_U-Boot启动;第二阶段_arm_启动分析

    U-Boot第一阶段的启动流程。(nandflash启动,把nand的4k代码考到sram中,因为nand没址线,不能映射到内存,所以通过sram进行过度,sram中4k代码把整个uboot拷贝到sdram上,初始化好堆栈,为c语言提供条件,进入uboot...

    u-boot 详细移植过程讲解

    详细的讲解了u-boot启动代码的移植过程,还有常遇到的问题分析解决,u-boot 运行轨迹的详细分析,能让你不仅仅学会移植u-boot,还能知道移植u-boot的细节原理。

    U-BOOT启动过程的详细介绍

    详细介绍了u-boot的启动过程,通过代码讲解的方式,很容易了解u-boot是怎么启动的

    U-BOOT的启动流程及移植

    U-BOOT的启动流程及移植 u-boot的原理及开发代码

    U-Boot在LPC2210上的移植分析

    笔者以PHILIP公司生产的LPC2210 处理器为硬件基础,详细分析了U-Boot软件启动流程,以及针对U-Boot源码本身并不支持的LPC2210处理器应用U-Boot作为Bootloader的移植方法,最后给出了U-Boot在LPC2210上的移植实例。

    从Nand Flash启动U-BOOT的基本原理

    前4K完成的主要工作就是U-BOOT启动的第一个阶段(stage1)。 根据U-BOOT的执行流程图,可知要实现从NAND闪存中启动U-BOOT,首先需要初始化NAND闪存,并从NAND闪存中把U-BOOT搬移到RAM中,最后需要让U-BOOT支持NAND闪存...

    u-boot_2014_04初步分析

    采用的uboot版本是u-boot-2014.04,以smdk2410为例进行分析,分析了它的配置、启动流程、代码重定位以及内存布局。

    u-boot启动过程

    u-boot启动过程 详细的了解整个启动流程,汇编代码的分析

    Sifive 结构cpu的U-BOOT整个系统运行流程分析

    Sifive 结构cpu的U-BOOT整个系统运行流程分析: 包含源代码start.s和程序分析文档

    ARm 处理器 U-boot启动过程详解

    ARm 处理器 U-boot启动过程详解 ,包含源代码好

    嵌入式系统/ARM技术中的U-BOOT的启动流程及移植

    文中对u-boot的启动流程作了介绍,详细给出了u-boot在S3C44B0开发板上的移植方法和步骤。  关键词:bootloader;u-boot;嵌入式系统;移植;S3C44B0 1 Bootloader及u-boot简介 Bootloader 代码是芯片...

    u-boot启动代码start.S详解

    \u-boot启动代码start.S详解——介绍了uboot的目录结构,uboot启动代码,uboot编译,系统启动流程

    U-Boot在44B0X开发板上的移植以及代码分析

    U-Boot在44B0X开发板上的移植以及代码分析.通过本文档学习U-Boot在44B0X开发板上的移植,以及源码学习U-Boot启动过程。

    U-BOOT启动过程分析

    关于Linux下uboot启动过程的分析 以及源代码

    OMPL138及U.docx

    OMPL138及U-Boot的启动过程分析(一) 4 OMPL138及U-Boot的启动过程分析(二) 8 OMPL138及U-Boot的启动过程分析(三) 10 OMPL138及U-Boot的启动过程分析(四) 25 U-Boot命令--制作自己的U-Boot菜单(一) 26 检测...

    uboot代码详细分析.pdf

    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启动...

    Uboot启动流程分析(基于u-boot1.1.4)

    这是学习u-boot的绝好文章,不但分析了链接脚本,还深入到了ARM的汇编代码分析,是难得的好文章。

    u-boot代码详细注释及结构图

    花了几天时间,参考正点原子的手册,把uboot的启动流程捋了一遍,画了uboot的结构图,顺带给代码加了中文注释

    bootloader与u-boot移植

    讲述bootloader结构,bootloader启动过程,常用bootloader命令,u-boot源代码结构,u-boot的移植方法与过程。

Global site tag (gtag.js) - Google Analytics