SeaBIOS(3) - 启动流程

本文详细介绍了SeaBIOS的启动流程,从vCPU上电的reset_vector开始,经过POST阶段,再到maininit()函数,涉及初始化debug串口、拷贝SeaBIOS到内存、配置系统资源、初始化中断向量表、配置硬件设备、执行PCI Option ROM等步骤,最终执行0x19中断启动操作系统。
摘要由CSDN通过智能技术生成

SeaBIOS程序的各种入口点都在src/romlayout.S这个文件中定义了,启动包括了vCPU上电后开始执行的起点src/romlayout.S:reset_vector,该位置会被QEMU加载到vCPU物理空间的0xFFFFFFF0位置。该处的指令是一个跳转指令,该指令会跳转到src/romlayout.S:entry_post位置,然后判断是否是系统resume,如果不是则跳转到post.c:handle_post()函数处,开始POST(Power On Self Test)阶段。


post.c:handle_post()主要执行如下操作:

  1. 初始化debug串口

  2. 将SeaBIOS程序拷贝到0xC0000 ~ 0x100000内存区域,并且将这段内存区域的属性设置为可写的。

  3. 检测当前平台信息,如使用的芯片组类型,内存大小等,创建相应的E820表表项,设置内存分配函数分配内存时从哪些内存区域获取内存。

  4. 跳转到maininit()函数


maininit()函数会对各种系统资源进行初始化,然后寻找可启动的设备,详细步骤如下:

  1. 对系统的各种接口进行初始化,主要是软件上的接口,没怎么动到其他硬件

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值