kernel启动流程

ROM code:

没有看过代码,在固化ROM里执行,估计是初始化一些必要的东西,然后把bootloader加载到sram里。sram可以直接总线访问,ddr需要初始化才能使用

bootloader:

初始化芯片和其他,ddr_init,把uboot从flash里加载到ddr里准备执行,跳转到uboot

uboot

start.s->board.c->main.c

start.S

更改cpsr寄存器的值,实际上就是关闭irq和fiq,切换模式到el1。

flush dcache,disable icache,invalidate tlb。

跳转到lowlevel_init函数。

lowlevel_init:

gic_init->enable irq in el3->push slave cpu to wait main cpu correct setup spin table ->disable irq in el3

main cpu ->b main

跳转到main函数:

arm/arm/lib目录下的crt0_64.S里的_main函数:

为gd_t分配stack空间跳转到board_init_f执行

从CONFIG_SYS_INIT_SP_ADDR地址开始分配gd_t大小的空间暂时放gd_t。

CONFIG_SYS_INIT_SP_ADDR为ram高位物理地址顶减去(4K+gd_t大小)

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值