kernel启动流程
2016-05-11 20:00
267 查看
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大小)
没有看过代码,在固化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大小)
相关文章推荐
- kernel启动流程
- kernel启动流程
- SpringMVC java 配置 DispatcherServlet
- HDU 4300 (KMP)
- 湖南第七届省赛 报数游戏
- git冲突,commit your changes or stash them before you can merge.
- 如何在安卓中把方形图变成圆形图
- selenium---sl4j日志输出
- 学习小组小记
- POJ 2348/HDU 1525-Euclid's Game辗转相除法(博弈)
- wifidog源码分析 - 认证服务器心跳检测线程
- 基于LVS的DR模式实现PHP应用
- iOS数据持久化
- Linux 安装Tomcat指定JDK
- linux2.6.32.71如何在lcd上显示内核启动信息
- Python Tornado 异步和非阻塞I/O
- 深入理解递归算法的调用过程
- wifidog源码分析 - 客户端检测线程
- 解决tomcat上运行servlet使用jdbc异常的问题
- 几种爬虫工具比较