最新要闻

广告

手机

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

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

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

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

家电

04 设置工作模式与环境(下)收集信息

来源:博客园

本节将实现二级引导器的具体工作:检查CPU是否支持64位工作模式,收集内存信息,是否符合系统最低运行要求,接着再设置系统需要的MMU页表,显卡模式,释放中文字体文件;

init_bstartparm()函数:检查CPU模式,收集内存信息,设置内核栈,设置内核字体,建立内核MMU页表数据;

检查与收集机器信息:


(资料图片仅供参考)

machbstart_t结构体,清零,在内存1MB处初始化;

检查CPU:

init_chkcpu函数,使用CPUID指令检查是否支持64位长模式,并设置之前的machbstart_t结构体的mb_cpumode为64位;

获取内存布局:

s_e820结构体用来描述一段内存;init_mem函数完成:获取这个结构体数组;检查内存大小,不能太小;

其中的 mmap函数是通过之前的realadr_call_entry函数,调用了实模式下的_getmmap函数,此函数内部调用了BIOS中断,就能获取结构体数组;

初始化内核栈:

在machbstart_t结构体中,记录栈地址和栈大小,供内核在启动时使用;

注意要检查内核栈空间与内存中已经存在的信息是否发生冲突;

放置内核文件和字库文件:

内核已经编译成一个独立的二进制程序,和其他文件被一起打包到映像文件中,因此需要解包出来,放在特定的物理内存中;

r_file_to_padr函数在影像中查找相应的为念,并复制到对应的地址,返回文件大小;;放置完更新machbstart_t结构体中的数据;

结构体中mb_nextwtpadr始终指向下一段空闲内存的首地址;

建立页表数据:

在二级引导器中建立MMU页表数据,目的就是在内核加载运行之初开启长模式,MMU需要的页表数据已经准备好 了;

映射核心逻辑:两重循环,外层循环控制页目录顶指针,16项,内层循环执行一个页目录,每个页目录中有512个物理页地址;

内核启动初期,虚拟地址和物理地址要保持相同;

设置图像模式:

上电初,显卡会自动进入文本模式,不能显示汉字和图形;要切换到图像模式;

用BIOS中断,c函数调用;

处理VBE 模式的代码;定义了显卡的几种图形模式,包括分辨率,像素格式,显存大小;

串联:

在init_bstartparm函数中串联起来上述函数,依次调用;

显示logo:

24位 位图文件;logo函数,

运行实验之后更新;

关键词: