bootrom启动流程【转】

简介:

转自:http://blog.csdn.net/blueoceanindream/article/details/6851787

闲来无事,总结一下linux bootrom的启动流程:

环境:MIPS+linux+交换机

nor flash和nand flash

nor flash:引脚多;支持片内执行;

nand flash:引脚通过IO串行实现,不支持片内执行;

一.基本概念

对于linux的bootloader主要可以分为四个层次:

1.firmware+bootloader

采用固件和bootloader两部分的bootrom方式,在Marvell平台中,CPU中集成了bootrom芯片,实质上是nand flash,CPU上电启动过程中,先执行固件中的程序,然后再执行boot代码。由于固件中代码已经初始化了串口,因此我们开发boot中不需要顾及串口初始化。

2.linux内核参数传递

不止是linux,vxworks也一样,image参数主要通过bootloader进行传递,或者是系统默认的,在我们系统中,都是采用bootloader把参数设置好,向image传递固定数据结构的地址,image启动时就能够获取参数,并按照预定的方式启动。

3.文件系统

主要是基于Flash等内存设备上,包含linux运行时所用的应用程序、库等,比如说给开发提供的Shell、动态链接程序。

4.用户应用程序

存储在文件系统中,例如会在文件系统和内核总放置一个图形化界面,例如minigui。

 

linux 常见分区:

bootloader + boot parameter + linux kernel + boot filesystem

 

二.boot常见的启动阶段

在我们产品中,首先设置CPU status寄存器KX,SX,UX;然后读取是哪个CORE,决定走不同的分支;然后读取不同的芯片版本,决定走不同分支;并区分是软复位和硬复位;区分不同的CORE,初始化相应的TLB映射,并根据不同的CORE,计算每个CORE需要执行的代码段。

函数board_init_f()是在flash中执行的,是重要函数。

board_init_f()中调用lib_mips/board.c文件中定义的 init_sequence[]函数指针数组中的函数
init_fnc_t *init_sequence[] = {
octeon_boot_bus_init, ----> lib_mips/lib_octeon.c/octeon_boot_bus_init()
timer_init,  ----> lib_mips/time.c/timer_init()
env_init,  ----> common/env_flash.c/env_init() /*CFG_ENV_IS_IN_FLASH*/
early_board_init, ----> board/octeon_ebt3000/octeon_ebt3000_board.c
init_baudrate, ----> lib_mips/board.c/init_baudrate()
serial_init,  ----> 无
console_init_f, ----> common/console.c/console_init_f()
display_banner, ----> lib_mips/board.c/display_banner()
init_dram,  ----> lib_mips/board.c/init_dram()
checkboard,  ----> board/octeon_ebt3000/octeon_ebt3000_board.c
init_func_ram,
NULL,
};














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/5264314.html,如需转载请自行联系原作者

相关文章
|
4月前
|
Shell Linux
uboot启动流程源码分析(二)
uboot启动流程源码分析(二)
36 0
|
7天前
|
Java Linux Android开发
Android系统的启动流程
Android系统的启动流程
16 1
|
4月前
|
Linux C语言 芯片
uboot启动流程源码分析(一)
uboot启动流程源码分析(一)
36 0
|
4月前
|
Linux C语言 芯片
【系统启动】uboot启动流程源码分析
【系统启动】uboot启动流程源码分析
39 0
|
Java
深入理解 NioEventLoop启动流程
深入理解 NioEventLoop启动流程
134 0
|
存储 安全 Java
Android系统启动流程
今天说《Android体系架构》第一篇内容,关于Android系统启动的过程。
171 0
Android系统启动流程
|
Linux 内存技术
U-boot 大体启动流程
U-boot 大体启动流程
|
存储 内存技术
u-boot关于启动流程
u-boot关于启动流程
80 0
u-boot关于启动流程
SpringMVC源码分析和启动流程
SpringMvc原理和启动流程
3981 0
|
Android开发
Activity 的启动流程源码剖析(三)
简单分析 Activity 的启动流程(三) 这一篇主要看 ApplicationThread 相关的流程 源码的版本 Android 27 V4 27.
1099 0