Linux操作系统的BIOS启动流程
来源:互联网 发布:画柜子软件 编辑:程序博客网 时间:2024/06/05 08:52
要理解大致的启动流程现需要了解几组常用的寄存器:
1,CS + IP:其中CS是段寄存器,或者是CODE段寄存器,存储的是段的基地址。IP是程序段寄存器的偏移量。两者结合,确定下一条CPU指令的执行地址。
2,SS + SP:其实,SS是堆栈寄存器,而SP是堆栈寄存器偏移。前者存储的是堆栈的基地址,后者存储的是栈的栈顶。另外,如果使用到了BP,默认的基地址也是SS,通过BP可以访问的不仅仅是栈顶,通过SS和BP可以访问整个堆栈。
3,DS/ES + 有效地址,这一组寄存器决定是附加数据的。
上面就是常用的几组寄存器,其中Linux启动阶段关系比较大的还是第一组。
当电脑启动或者复位的按钮按下的时候,CPU会把CS寄存器设置为0xFFF0,段基地址设置为0xFFFF0000,段长度设置为64KB。而IP被设置为0xFFF0。因此此时CPU的代码指向0xFFFFFFF0,也就是4GB最后64KB的最后64B处。
上面这段基本上是来自于别人的书籍,但是从理解来看,最初的CS寄存器赋值为0xFFF0我还是没有弄明白什么含义。是完全没有用还是赋值为0xFFF0之后其段基地址的数值就是0xFFFF0000?总体的程序执行位置还是把握住基地址加IP偏移量计算出来应该问题就不大了。
程序的运行位置正好是现在的系统BIOS的存放位置,而这里会存放一条JMP的指令。跳转到BIOS的程序中的某个位置开始执行。
BIOS开始执行后,在一系列的硬件检测等操作结束之后,BIOS会把与老机器兼容的程序复制到最低端地址大小为1MB内存的末端64KB区域中。然后跳转到这个地方,让CPU在真是的地址模式下进行运行。而这个1MB内存的末端64KB的区域被称为BIOS的影子区域。
上面的过程完成之后,BIOS会从硬盘或者其他的设备加载引导程序,程序被加载到内存的0x7c00的地方开始执行。
这整个过程的流程还是比较清晰的,但是代码实现以及硬件启动软件的模式我还是比较感兴趣,这跟我现在嵌入式软件中遇到的startup是很像的。而这部分的实现,直到现在我都没有弄明白。
- Linux操作系统的BIOS启动流程
- 操作系统启动的伯乐---BIOS
- Linux 操作系统启动流程
- Linux 操作系统启动流程
- Linux操作系统启动流程
- Linux操作系统启动流程
- 操作系统的启动流程
- BIOS 启动流程
- Linux 操作系统启动部分的主要执行流程
- Linux操作系统启动流程与Grub的配置方法(
- Linux操作系统启动流程与Grub的配置方法
- Linux操作系统的启动
- BIOS下启动Linux的过程
- Linux的启动流程
- Linux的启动流程
- linux的启动流程
- linux的启动流程
- Linux 启动的流程
- 通过URL来获取网络上的资源下载
- 整数分解为2的幂
- 最小生成树两种算法比较与实现
- Lintcode学习之旅(网上资源借鉴)
- .NET快速信息化系统开发框架 V3.2--Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能
- Linux操作系统的BIOS启动流程
- 网络管理(二)
- Java8源码-Hashtable(2)
- Nginx + keepalived 实现高可用HA 【主从架构】
- 大数乘法
- 动态规划算法
- 同一服务器部署多个tomcat配置
- lintcode 173 单链表插入排序 python
- 用CSS3美化半个字符巧妙方法