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,
};
bootrom启动流程【转】的更多相关文章
- Zynq启动流程
前言 Zynq启动流程和ARM处理器类似,PS部分是启动和配置过程的主设备,芯片引导必须由处理器驱动,系统上电复位后会读取设备模式引脚来决定从什么设备启动芯片.如下表Boot Devices条目所示, ...
- MyCat源码分析系列之——配置信息和启动流程
更多MyCat源码分析,请戳MyCat源码分析系列 MyCat配置信息 除了一些默认的配置参数,大多数的MyCat配置信息是通过读取若干.xml/.properties文件获取的,主要包括: 1)se ...
- Android进阶系列之源码分析Activity的启动流程
美女镇楼,辟邪! 源码,是一个程序猿前进路上一个大的而又不得不去翻越障碍,我讨厌源码,看着一大堆.5000多行,要看完得啥时候去了啊.不过做安卓的总有这一天,自从踏上这条不归路,我就认命了.好吧,我慢 ...
- Spring Boot启动流程详解(一)
环境 本文基于Spring Boot版本1.3.3, 使用了spring-boot-starter-web. 配置完成后,编写了代码如下: @SpringBootApplication public ...
- linux启动流程及自定义gurb
linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...
- linux启动流程
看了深入理解linux内核一书的最后对linux启动流程的介绍,下面就把我能理解的写一下吧: bios(硬件加电自检POST,寻找第一个启动设备) the boot loader(可以从硬盘启动也可以 ...
- webapp启动流程
webapp启动流程 看了这个教程,其实所有的webapp大致都是这个流程了.
- Tomcat源码分析之—具体启动流程分析
从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...
- 嵌入式Linux驱动学习之路(五)u-boot启动流程分析
这里说的u-boot启动流程,值得是从上电开机执行u-boot,到u-boot,到u-boot加载操作系统的过程.这一过程可以分为两个过程,各个阶段的功能如下. 第一阶段的功能: 硬件设备初始化. 加 ...
随机推荐
- An overview of the Spring MVC request flow
The Spring MVC request flow in short: When we enter a URL in the browser, the request comes to the d ...
- JS学习笔记-1--基本知识和注意事项
1.JS开始的目的主要是验证表单的输入验证 2.是一种具有面向对象能力的.解释型语言.是基于事件驱动的相对较安全的客户端脚本语言 3.JS 特点:松散型:变量不具备一个明确的类型: 对象属性:把属 ...
- hdu 1548 A strange lift 宽搜bfs+优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 There is a strange lift.The lift can stop can at ...
- NYOJ-73 比大小 AC 分类: NYOJ 2014-01-17 21:29 195人阅读 评论(0) 收藏
典型的大数题目,这只是大数的比较,到时还有大数加减乘除,更加还有乘方,对于大数,一般用数组或者字符串,因为其他的结构类型一般都没有那么大 的范围!! 这道题目需要你仔细回想怎么比较俩个数字的大小,考虑 ...
- 研究Dropbox Server端文件系统
一.传统文件系统 可以理解成两部分:1.真正的storage区,被分割成n个扇区:2.文件系统,其实就是一个FAT表. 二.Dropbox的文件系统 例如,一个modeo.mov的文件,大小为15M. ...
- tcp 多线程与多进程调用close
http://blog.csdn.net/russell_tao/article/details/13092727 大家知道,所谓线程其实就是“轻量级”的进程.创建进程只能是一个进程(父进程)创建另一 ...
- Css选择器的优先级
a = 行内样式style. b = ID选择器的数量. c = 类.伪类和属性选择器的数量. d = 类型选择器和伪元素选择器的数量. 选择器 等级(a,b,c,d) style=”” 1,0,0, ...
- appium获取android app的包名和主Activity
方法一在appium的android setting中选择下载到电脑上的app包,获取Activity. 方法二在android-sdk中安装build-tools包,进入这个目录.aapt dump ...
- test1
test1test1test1test1test1test1test1test1test1test1test1test1test1test1test1test1test1test1test1test1 ...
- php 修改 AppServ 下Apache 端口
php 修改 AppServ 下Apache 端口 步骤一:把 C:\AppServ\Apache2.2\conf 中httpd.conf修改了 还不正确 步骤二:把httpd.conf 中List ...