历史上的今天

今天是:2024年11月14日(星期四)

2019年11月14日 | u-boot 第一阶段启动流程

发布者:初入茅庐 来源: 51hei关键字:u-boot  第一阶段  启动流程 手机看文章 扫描二维码
随时随地手机看文章

一、u-boot启动流程

        第一步:
        S5pc100中IROM中的代码 自动将NAND FLASH的前16KB拷贝到SRAM的0x34000 ,然后bootload的第一部分开始执行,初始化DRAM。
        
        第二步:
        bootload将nandflash中所有的bootload拷贝到DRAM中。

        第三步:
        跳转到DRAM中开始执行bootload的第二部分代码。
 

二、第一阶段启动流程 
 
裁剪之后的start.S文件如下:

    .globl _start

    _start: b        reset


    /***********************************设置异常向量表***************************************/

            ldr        pc, _undefined_instruction

            ldr        pc, _software_interrupt

            ldr        pc, _prefetch_abort

            ldr        pc, _data_abort

            ldr        pc, _not_used

            ldr        pc, _irq

            ldr        pc, _fiq


    _undefined_instruction: .word undefined_instruction

    _software_interrupt:        .word software_interrupt

    _prefetch_abort:        .word prefetch_abort

    _data_abort:                .word data_abort

    _not_used:                .word not_used

    _irq:                        .word irq

    _fiq:                        .word fiq

    _pad:                        .word 0x12345678 /* now 16*4=64 */


    .balignl 16,0xdeadbeef


    /**************************************设置异常向量表************************************/







    _TEXT_BASE:

            #TEXT_BASE 0x20f00000

            .word        TEXT_BASE


    _armboot_start:

            #_start 0x20f00000 

            .word _start


    /*

    * These are defined in the board-specific linker script.

    *链接脚本指定:

    *__bss_start bss段起始地址

    *__end       bss段结束地址

    */

    _bss_start:

            .word __bss_start


    _bss_end:

            .word _end


    /*

    * the actual reset code

    */


    /******************************设置ARM核为SVC管理模式********************************/

    reset:

            /*

             * set the cpu to SVC32 mode

             * 切换ARM核到管理模式

             */

            mrs        r0, cpsr

            bic        r0, r0, #0x1f

            orr        r0, r0, #0xd3

            msr        cpsr,r0


    /*****************************设置ARM核为SVC管理模式*********************************/

            








            bl        cpu_init_crit

            





    /*********************************搬移u-boot到DRAM************************************/


    #if  NOR FLASH 启动         

    relocate:                                @ relocate U-Boot to RAM

            adr        r0, _start                @ r0 <- current position of code

            ldr        r1, _TEXT_BASE                @ test if we run from flash or RAM

            cmp        r0, r1                        @ don't reloc during debug

            beq        stack_setup


            ldr        r2, _armboot_start

            ldr        r3, _bss_start

            sub        r2, r3, r2                @ r2 <- size of armboot

            add        r2, r0, r2                @ r2 <- source end address


    copy_loop:                                @ copy 32 bytes at a time

            ldmia        r0!, {r3 - r10}                @ copy from source address [r0]

            stmia        r1!, {r3 - r10}                @ copy to   target address [r1]

            cmp        r0, r2                        @ until source end addreee [r2]

            ble        copy_loop 


    #else NAND FLASH 启动 

            

    relocate:                                @ relocate U-Boot to RAM

            adr        r0, _start                @ r0 <- current position of code

            ldr        r1, _TEXT_BASE        @ test if we run from DRAM or SRAM

            cmp        r0, r1                        @ don't reloc during debug

            beq        stack_setup

            

            ldr sp,_TEXT_BASE 

            

            ldr r0,_TEXT_BASE        

            mov r1,#0x0 

            mov r2,#0x50000


            bl  copy_uboot_to_dram


    #endif 


    /**************************搬移u-boot到DRAM************************************/








    /**********************************设置栈空间****************************************/







            /* Set up the stack */

    stack_setup:

            ldr        r0, _TEXT_BASE                @ upper 128 KiB: relocated uboot

            sub        r0, r0, #CONFIG_SYS_MALLOC_LEN @ malloc area [1M + 128KB]

            sub        r0, r0, #CONFIG_SYS_GBL_DATA_SIZE @ bdinfo   [128字节]

            sub        sp, r0, #12                @ leave 3 words for abort-stack

            and        sp, sp, #~7                @ 8 byte alinged for (ldr/str)d



    /*******************************设置栈空间********************************************/




    /**********************************清除BSS段*******************************************/


            /* Clear BSS (if any). Is below tx (watch load addr - need space) */

    clear_bss:

            ldr        r0, _bss_start                @ find start of bss segment

            ldr        r1, _bss_end                @ stop here

            mov        r2, #0x00000000                @ clear value

    clbss_l:

            str        r2, [r0]                @ clear BSS location

            cmp        r0, r1                        @ are we at the end yet

            add        r0, r0, #4                @ increment clear index pointer

            bne        clbss_l                        @ keep clearing till at end

[1] [2]
关键字:u-boot  第一阶段  启动流程 引用地址:u-boot 第一阶段启动流程

上一篇:ARM编程时数据类型的影响
下一篇:TQ2440开发板 Linux第一个驱动--点灯

推荐阅读

客户交互企业Verint® Systems Inc.(纳斯达克股票代码:VRNT)日前宣布将进一步扩展其金融合规合作伙伴计划*。该计划由Verint领衔的业内领先企业组成,通过合作伙伴生态系统,助力金融服务机构有效应对日益严峻的合规挑战。 Verint近日推出了金融合规解决方案,该方案适用于自建及云端,能够支持现代化工作流程,并具备广泛功能,包括对统一通信解决方...
11月13日,猎豹移动公布了2019年第三季度财报。在行业整体下滑及国内广告行业疲软的态势下,猎豹移动实现总收入9.2亿,其中移动娱乐业务收入达5.32亿,同比增长6.9%,业务收入达3475万,同比增长88%;同时本季度公司实现Non-Gaap净利润4.9亿,同比增长152%。 同时,猎豹移动董事长兼CEO傅盛在电话会议中宣布,猎户星空已经签署B轮融资协议,预计...
集微网消息,随着新冠疫情的持续蔓延,很大程度上加速了线上办公模式转移,从而也催化了服务器储存市场规模。根据TrendForce集邦咨询旗下半导体研究处最新调查,在新冠疫情之下,除了智能终端装置的普及间接带动云端需求外,企业数字转型更加速云端服务的渗透率,加上数字经济如社群媒体互动与网络消费模式的黏着度提升,使云端供应商得以汇聚大量消费者数...

史海拾趣

问答坊 | AI 解惑

有调通过marvell wifi 8686 sdio接口驱动来讨论下???

正在调sdio接口的wifi 8686驱动,sdio确认好的,读写寄存器,加载固件都没问题。有以下问题: 1. 我是直接把驱动放在bsp中编的,wince启动后自动加载wifi驱动, 并且这个wifi驱动会自行搜索热点。我的理解是wifi驱动加载固件启动完wifi芯片注册网络 ...…

查看全部问答∨

protel 99se中,sp232E在哪个库中?

如题。 protel 99se中,SP232E所在的库叫什么?…

查看全部问答∨

lstAdd的使用问题!

    SESSION_POS_S *pTestpos1, *pTestpos2, *pTestpos3, *pPos;     LIST *pMyList = NULL;     int NodeIndex = 0;             DPRINT("-------- lstAdd测试 -------\\n ...…

查看全部问答∨

看看我的成果

本人长期从事单片机开发应用,积累了一定的经验。本人将毕生研究心得集成了文字,放在我的博客里,希望大家光临指导,并给点意见。我的博客地址;http://blog.mcuol.com/user/Article/500.html…

查看全部问答∨

f2812AD转换波动很大,不知是什么原因?

用电位器输出一个电压值,从我watch窗口看到的ADCresult值都在变化,变化比较大。如0xabc0,b为都会能差4,帮忙分析一下可能那里设置不对。谢谢!…

查看全部问答∨

ez430-rf2500遇到了问题。。求指点

 想请问你一下 那个ez430-rf2500为什么ed连上电池两个灯还是不闪。。ap的红灯在闪烁。。并且PC上温度只有一个ap温度显示。。就是说ed的没有反应。。好像是没有连接到网络。。后来又折腾了一下。。现在ap的红绿灯都在闪。。但是ed还是没反应。 ...…

查看全部问答∨

特权同学写的sdram控制器读出的数据全是FF?

最近在用特权同学写的sdram控制器,但是串口读出的数据全是FF,不知道出错在什么地方?用没用过调通的朋友,不吝赐教,万分感谢啊…

查看全部问答∨

高手帮忙看一下这程序

#include<reg51.h>    //  包含51单片机寄存器定义的头文件unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //数字0~9的段码unsigned char int_time ; //中断次数计数变量unsigned ...…

查看全部问答∨

Verilog HDL信号类型不一致

module main (                       ....); wire   clk1MHz; // 产生1MHz的时钟波形 // 输入为20MHz的时钟 clock_divider  instT1MHz &nb ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved