Android_UBOOT分析(二)执行顺序

来源:互联网 发布:性 婚姻 知乎 编辑:程序博客网 时间:2024/06/05 01:13

--作者:赖玉平(Peter Lai)aulyp@163.com

         6410的板子一上电,,首先跑的是uboot-ARMEasy6410/cpu/s3c64xx下的start.S,它生成了start.o文件。在这里进行一系列的初始工作,例如内存控制器,MMU等,就像WINCE里的EBOOT下面的startup.s所做的工作,如果是要加入IROM启动,NOR启动等,都是要在这里就开始做切换。例如,要从IROM启动,cpu_init_crit就要调用到nand_asm_init函数,这个函数是由start_irom.s文件提供。
接下来进入到Bootloader Stage 2即C语言代码部分,入口是start_armboot,对应的源文件是lib_arm/board.c,
从lib_arm/board.c的源码不难分析出系统的启动流程:首先初始化全局数据表,然后顺序执行函数指针数组init_sequence中的一系列初始化函数——由其在本文件中的相关定义可得知初始化流程:

init_fnc_t *init_sequence[] = {
    cpu_init,        /* basic cpu dependent setup */
    board_init,        /* basic board dependent setup */
    interrupt_init,        /* set up exceptions */
    env_init,        /* initialize environment *///这个函数受存储界面不同而不同!
    init_baudrate,        /* initialze baudrate settings */
    serial_init,        /* serial communications setup */
    console_init_f,        /* stage 1 init of console */
    display_banner,        /* say that we are here */
#if defined(CONFIG_DISPLAY_CPUINFO)
    print_cpuinfo,        /* display cpu info (and speed) */
#endif
#if defined(CONFIG_DISPLAY_BOARDINFO)
    checkboard,        /* display board info */
#endif
    dram_init,        /* configure available RAM banks */
    display_dram_config,
    NULL,
}; 
在执行这个函数序列的过程中,任何一个函数异常返回都会导致u-boot“死锁”或说“挂起”在hang()函数的死循环当中。

若一切顺利,接下来就调用

要学好嵌入式,还是建议买一个开发板,这样学习来会更快!

推荐下面4款,你可以根据你的经济能力来选一个


1、高级嵌入式开发板 ARM-A8内核,价格在2200~2700
X-210开发板(代码开放度高,XBOOT很牛)   
Mini210开发板 (友善的板子,有沉淀)

2、入门级嵌入式开发板 ARM11内核  ,价格在500~650之间
Tiny6410    (友善之臂经典之作)     
OK6410    (特点是支持WINCE7.0)

可以去风火轮团队的店里看一下,在他们那里买开发板有个好处,他们提供更周到的技术支持

风火轮技术开发团队  www.arm-cn.com

官方淘宝店:smartfire.taobao.com