从CPU上电到系统启动的三个过程的大致总结
来源:互联网 发布:淘宝拍卖会官网 编辑:程序博客网 时间:2024/06/05 12:05
最近看了一下系统上电启动过程,总结一下,bootloader共有三种方式:Flash加载、RAM加载、文件系统加载。
Flash加载:
1.CPU复位完成,执行第一条指令(往往为跳转指令)跳到BootRom内硬件初始化代码位置,进行初始化。
2.完成CPU初始化,设置CPU的段寄存器、堆栈指针等,完成其他硬件初始化。
3.硬件初始化完成,跳转到Flash存储器特定位置开始执行,这个位置一定是代码段(TEXT段)中的一个特定位置。
4.将Flash中的DATA节代码复制到RAM中。
5.完成后,根据BSS节大小,在RAM中预留内存空间,留给未被初始化的变量使用。汇编部分执行完毕,进入操作系统初始化阶段。
优点:节约物理内存,缺点是FlashRAM慢,性能影响较大。Flash是只读的,无法实现自我修改。操作系统核心编译时必须指定TEXT节,DATA节和BSS节的起始地址(开发困难)
。
RAM加载:
1,2同上。
3.位于BootRom中的代码,把位于Flash中的操作系统和应用程序的TEXT节从Flash中转移到RAM中,这个过程中,搬移代码要知道TEXT节的起始地址和大小,可以在操作系统映像的开始处设置一个数据结构指明大小和目标位置。
4.搬移DATA节。
5.完成RSS节在RAM中的预留
6.跳转到RAM中操作系统的入口点,启动系统。
从文件系统加载运行(需要额外的驱动):
1、2相同。
3.BootRom中的引导代码通过外部设备的驱动程序读取外部设备,把操作系统和应用程序加载到RAM中,可以不区分TEXT和DATA节,统一搬移。
4.完成二进制映像加载后,BootRom中代码设置操作系统预留BSS空间。
5.跳到系统入口点。
除了这几种加载方式外还有从串口,从以太网接口,,usb接口等加载方式,无非是在BootRom中实现一个驱动来完成设备数据的读取。
- 从CPU上电到系统启动的三个过程的大致总结
- V8编译的大致过程
- cpu读写数据的大致流程
- Linux系统启动的过程
- Android系统启动的过程
- (大总结)从寻找fragment静态导入activity总是失败的解决方法中了解android应用的系统启动过程
- android的adapter的大致使用过程
- linux系统启动过程的详解
- linux系统启动经历的过程
- 浏览器访问一个页面的大致过程
- 一次MySQL查询的大致过程
- 复印机的工作过程大致如下
- Socket网络编程的大致总结
- django大致学习后的总结
- Android编译过程总结及android中各种img文件的作用以及系统启动过程
- Android编译过程总结及android中各种img文件的作用以及系统启动过程
- Android编译过程总结及android中各种img文件的作用以及系统启动过程
- Android编译过程总结及android中各种img文件的作用以及系统启动过程
- 使用new String 后台转码之后 转成utf-8在火狐中转换正常,IE中还是乱码
- ppt转换器免费下载使用教程
- Torch7 A Matlab-like Environment for Machine Learning
- 简单的刷票程序
- oracle 处理大数据量问题
- 从CPU上电到系统启动的三个过程的大致总结
- android之调用系统自带资源的两种方式
- Nginx 配置文件config
- shell 入参
- 算法系列之九:计算几何与图形学有关的几种常用算法(二)
- ViewPager学习demo2
- Android TextView 设置字间距和行间距
- 【DP】最长公共子序列。
- 笔记-论文-PCANet A Simple Deep Learning Baseline for Image Classification?