操作系统实践之路——五、初始化(设置工作模式与环境)


前言

​ 这个章节会在这个 hal_start 函数里,首先执行板级初始化,其实就是 hal 层(硬件抽象层,下同)初始化,其中执行了平台初始化,hal 层的内存初始化,中断初始化,最后进入到内核层的初始化。

初始化平台

我们先来写好平台初始化函数,因为它需要最先被调用。

这个函数主要负责完成两个任务,一是把二级引导器建立的机器信息结构复制到 hal 层中的一个全局变量中(init_machbstart),方便内核中的其它代码使用里面的信息,之后二级引导器建立的数据所占用的内存都会被释放。二是要初始化图形显示驱动(init_bdvideo),内核在运行过程要在屏幕上输出信息。

初始化内存

首先,我们建立一个 halmm.c 文件,用于初始化内存,为了后面的内存管理器作好准备。

hal 层的内存初始化比较容易,只要向内存管理器提供内存空间布局信息就可以。

你可能在想,不对啊,明明我们在二级引导器中已经获取了内存布局信息,是的,但 Cosmos 的内存管理器需要保存更多的信息,最好是顺序的内存布局信息,这样可以增加额外的功能属性,同时降低代码的复杂度。

主要的原理就是根据 e820map_t 结构数组,建立了一个 phymmarge_t 结构数组,init_one_pmrge 函数正是把 e820map_t 结构中的信息复制到 phymmarge_t 结构中来。

初始化中断

​ 在 x86 CPU 上,最多支持 256 个中断,还记得前面所说的中断表和中断门描述符吗,这意味着我们要准备 256 个中断门描述符和 256 个中断处理程序的入口。

​ 有了中断门之后,还差中断入口处理程序,中断入口处理程序只负责这三件事:

  1. 保护 CPU 寄存器,即中断发生时的程序运行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值