内核映像文件

操作系统运行
1,OS引导流程:PC机加电->PC机BIOS固件->加载可引导设备中的GRUB->GRUB引导->加载磁盘分区中程序->OS运行。

2,PC机BIOS固件是固化在PC机主板上的ROM芯片中的,掉电也能保存。
1)PC机上电后第一条指令就是BIOS固件中的,它负责检测和初始化CPU、内存及主板平台。
2)然后加载引导设备(大概率是硬盘)中第一个扇区数据,到0x7c00地址开始的内存空间,接着跳转到0x7c00处执行指令。

3,汇编语言定义CRUB的多引导协议头,让GRUB识别OS,之后关掉中断,设定CPU工作模式,再初始化CPU的寄存器和C语言的运行环境,最后是CPU工作模式所需要的数据。
1)OS不能直接使用C语言编写,C作为通用的高级语言,不能直接操作特定的硬件;
2)C语言的函数调用、函数传参,都需要用栈,而栈是一块内存空间,满足后进先出特性,由CPU特定的栈寄存器指向,需要汇编代码先初始化好CPU的寄存器和C语言的运行环境,汇编代码和C代码分别由编绎器nasm和GCC编成可链接模块,由LD链接器链接在一起,形成可执行的程序文件。

屏幕显示
1,计算机屏幕显示是显卡的输出,有集成在主板上的集显,有做在CPU芯片内的核显,还有独立存在通过PCIE接口连接的独显。
1)游戏的3D图形显示涉及顶点处理、多边形生成和变换、纹理、着色、打光、栅格化等,这些任务计算量巨大,独显有自己的RAM、多达几百个运算核心的处理器,独显不仅仅可以显示图像,还可以执行大规模并行计算。

2,显卡支持VESA标准下两种工作模式:字符模式和图形模式,并提供VGABIOS的固件程序。
1)显卡字符模式将屏幕分成24行,每行80个字符,再将24*80个字符映射到以0xb8000地址开始的内存中,内存中每两个字节对应一个屏幕字符,一个字节是字符的ASCII码,一个字节为字符的颜色值。
2)C中printf函数的实现将打印字符串依次写入到0xb8000地址开始的显存中,循环写入时跳过字符的颜色信息空间。

编绎安装OS
1,操作系统编绎工具make读取makefile文件,构建一个或多个目标target。
1)目标后紧跟用于构建该目标所需要的文件及构建该目标所需要的命令及参数,检查文件依赖关系。
2)第一次构建目标后,下次执行make时,根据目标依赖的文件是否更新决定是否编绎该目标,如果依赖文件没有更新且目标已存在,则不会构建新目标。

2,GRUB显示启动项到屏幕,由用户选择启动项,最后根据启动项对应信息,加载OS文件到内存。
1)GRUB在启动时加载grub.cfg文本文件,根据其中内容执行相应操作,其中一部分内容就是启动项。
2)将OS的启动项代码追加到grub.cfg文件,OS的.bin复制到root路径下,重启计算机就可以看到OS的启动项,选择OS项就可以成功启动OS了。

3,OS的启动项有GRUB加载分区模块识别分区,加载ext文件系统模块识别ext文件系统,boot目录挂载分区,最后加载OS程序。

内核映像文件
1,内核工程有多个文件,将多个文件封装成一个文件,使GRUB只需要加载一个文件,这个文件称为内核映像文件。
1)其中包含二级引导器模块、内核模块、图片和字库文件。
2)内核映像文件包含4KB大小的GRUB头,GRUB通过该部分代码识别映像文件,再根据映像文件头描述符和文件头描述符里的信息,解析映像文件中的其他文件。
3)映像文件头描述符和文件头描述符是两个C语言结构体。

2,安装虚拟机建立虚拟电脑,以文件系统模拟虚拟硬盘,格式化虚拟硬盘,安装GRUB。
1)虚拟机中的操作系统数据写入主机系统下特定模式的文件,以文件模拟硬盘;
2)虚拟格式文件需要格式化后才能使用,即在硬盘上建立文件系统。

3,二级引导器作为操作系统的先驱,需要收集机器信息,确定计算机能不能运行操作系统,对CPU、内存、显卡进行初级的配置,放置好内核相关文件。
1)实现调用BIOS中断的功能,实现收集机器信息建立页面数据,实现检查CPU工作模式和内存视图,实现解析映像文件功能,实现切换显卡图形模式,实现字符输出。
2)检查CPU支持的工作模式,收集内存布局信息是否符合操作系统最低运行要求,设置操作系统需要的MMU页表,设置显卡模式,释放中文字体文件。
3)不执行具体的加载任务,而是解析内核文件、收集机器环境信息。

4,GRUB头,一让GRUB识别;二设置C语言运行环境可调用C函数;三查找二级引导器的核心文件,并存储到特定的内存地址上;四跳转到二级引导器主模块。
1)设置C语言运行环境,主要是初始化CPU的寄存器,加载GDT,切换到CPU的保护模式。
2)二级引导器需要获得内存布局信息,设置显卡图形模式,由BIOS提供中断服务,但C语言中不可调用BIOS中断;
3)C语言代码工作在32位保护模式下,BIOS中断工作在16位的实模式,需要先保存C语言环境下的CPU上下文,即保护模式下所有通用寄存器、段寄存器、程序指针寄存器、栈寄存器保存在内存中,再切换回实模式,调用BIOS中断,保存返回结果到内存中,再切换回保护模式,重新加载第一步中保存的寄存器,C语言代码恢复执行。
4)CPU进入长模式后,寄存器的位宽变了,需要重新初始化。

5,检查收集机器信息,负责检查CPU模式、收集内存信息,设置内核栈,放置内核字体、建立MMU页表数据。
1)内核文件和字库文件和其它文件一起打包到映像文件中,需要解包出来,存放在特定物理内存空间中。
2)建立MMU页表数据,目的是在内核开启长模式时,准备好MMU需要的页表数据,大小为16GB,长模式下2MB的分页方式。

6,计算机加电启动时,显卡自动进入文本模式,文本模式只能显示ASCII字符,不能显示汉字和图形,需要显卡切换到图形模式。
1)切换显卡模式需要用到BIOS中断。
2)VBE是显卡一个图形规范标准,定义了显卡的几种图形模式,每个模式包括屏幕分辨率,像素格式与大小,显存大小。
3)每个像素点占用显存的32位数据(4字节,红、绿、蓝、透明各占8位),在对应的显存地址写入相应的像素数据,屏幕对应位置即可显示。
4)在图格式文件中,除了文件头的数据就是图形像素点的数据,24位位图每个像素占用3字节,并且位置是倒置的,第一个像素点的数据在文件最后,依次将位图文件数据倒序写入显存中,就可以显示了。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值