最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

焦点速看:05 第一个c函数

来源:博客园

hal_start 函数:执行板级初始化,

初始化hal层:


(资料图片)

就是硬件抽象层,分离硬件特性,向上提供接口,让内核不在关注硬件相关的细节,也能方便以后的 移植和扩展;Cosmos是x86平台下 的,其他平台替换hal层即可;

init_hal函数,初始化平台、初始化内存、初始化中断;

  • 初始化平台:init_halplatform

两个任务:一是把二级引导器建立的机器信息结构体复制到hal层的一个全局变量中,方便内核使用里面的信息,之后二级引导器建立的数据所占用的内存都会释放;init_machbstart函数;

复制machbstart_t 结构体,同时因为进入长模式,需要转化为虚拟地址;

二是初始化图形显示驱动,内核在运行过程需要向屏幕输出信息;init_bdvideo函数

初始化图形数据结构,包括分辨率,图形模式,图形驱动指针,结构体实现dftgraph_t,其中包括了图形驱动操作函数指针结构体 dftghops_t ;

初始化bga图形显卡的函数指针; 初始化vbe图形显卡的函数指针; 清空屏幕; 显示背景图片;

这儿就可以做一个显示背景的实验了;

  • 初始化内存:init_halmm

halmm.c文件,向内存管理器提供内存布局信息;之前在二级引导器中获取的内存布局信息位基础 ,e820map_t结构体数组,设计一个新的结构体 phymmarge_t;包括内核要保留的一部分内存空间;

  • 初始化中断:

x86CPU最多支持256个中断,需要有256个中断门描述符和中断处理程序入口;中断表 gate_t 结构体,IDTR寄存器指向它;set_idt_desc函数实现填充结构体; 中断处理程序只需要负责:保护CPU寄存器,调用中断处理器,恢复CPU寄存器;这三部分用汇编写 kernel.asm文件;

初始化内核层:

关键词: