MIPS UBOOT

来源:互联网 发布:js div 赋值 编辑:程序博客网 时间:2024/05/21 09:32

启动过程:

1、msc_spl\board\Pisces\start.S                                                 _start

工作过程

a、Check reset status   (第二阶段 忽略)

la t0, CPM_RSRlw t1, 0(t0)andi t1, 0x4bnez t1, resume_from_sleepnop

b、Clear watch registers (第二阶段 忽略)

mtc0 zero, CP0_WATCHLOmtc0 zero, CP0_WATCHHI
c、设置CP0_STATUS (第二阶段 忽略)

li t0,0x0040FC04mtc0 t0,CP0_STATUS

d、设置CP0_CAUSE (第二阶段 忽略)

li t1, 0x00800000mtc0 t1, CP0_CAUSE

e、设置CP0_CONFIG

li t0, CONF_CM_UNCACHEDmtc0 t0, CP0_CONFIG

f、 Initialize GOT pointer

bal 1fnop.word _GLOBAL_OFFSET_TABLE_1:move gp, ralw t1, 0(ra)move gp, t1

g、设置栈指针sp,跳转至spl_boot (第二阶段 忽略)

la sp, 0x80004000la t9, spl_bootj t9nop


 注意:第二阶段在此调用如下代码:

li t0, CFG_SDRAM_BASE + CFG_INIT_SP_OFFSETla sp, 0(t0)la t9, board_init_fj t9nop

2、msc_spl\board\Pisces\Msc_boot_jz4770.c   spl_boot

     初始化硬件:     

__cpm_start_dmac();__cpm_start_ddr();...uart_init();serial_init();...pll_init();sdram_init();mmc_load();//将mmc中偏移地址32加载到0x80100000,大小为512kflush_cache_all();//执行0x80100000处的代码,此时将重新返回start.S执行

3、msc_spl\board\Pisces\start.S                                                 _start

3、Lib_mips\Board.c                                               board_init_f 

   a、初始化硬件包括:

jz_board_init  初始化 gpio clocks dram etc timer_init  定时器 env_init   环境变量 init_baudrate   波特率 serial_init   串口 console_init_f display_banner  打印uboot版本 checkboard  打印设备名词  init_func_ram  调用jz4770_ddr.c中的initdram(0)函数 得到SDRAM大小为128M 存储在gd->ram_size中

    b、初始化LCD,将framebuffer指针存储在gd->fb_base中

    c、预留出UBoot文件使用的空间 uboot_end-TEXT_BASE

    d、预留出malloc的堆空间 896k

    e、预留出board info空间  存储在gd->bd中

    f、预留出global data空间

    g、预留出启动参数空间,存储在bd->bi_boot_params中

    h、最后:     

bd->bi_memstart=0x80000000bd->bi_memsize=gd->ram_size(128M)bd->bi_baudrate=gd->baudrate
调用relocate_code(栈指针,global_data,UBOOT的SDRAM预留地址)

     

4、cpu\mips\start.S                                                  relocate_code

5、Lib_mips\Board.c                                               board_init_r

6、Common\Main.c                                                 main_loop

7、Common\Main.c                                                 run_command

8、Common\Cmd_msc.c                                        do_msc

9、Common\Cmd_bootm.c                                     do_bootm