【30天自制操作系统】第二天

本文详细介绍了自制操作系统的初始步骤,包括使用Notepad++编辑代码,理解启动区代码的作用,了解BIOS加载过程,以及通过makefile进行编译和运行。在启动区代码中,涉及了初始化寄存器、显示字符和调用显卡BIOS等关键操作。通过连续的四次跳跃,最终进入操作系统的世界。同时,文章也解析了makefile的工作原理,用于生成ipl.bin和helloos.img等镜像文件。

1.编辑器用Notepad++就行
2.代码核心区解释

在这里插入图片描述
(1)ORG 0x7c00h是这段代码的拷贝在内存中的首地址
(文件编译后存在磁盘里,BIOS从磁盘的启动盘引导)

(2)接着就是初始化各种寄存器

(3)设置SI为msg的地址

(4)putloop也是一个地址,putloop:到jmp putloop指令为止这段汇编指令是从msg所在的内存地址一次取8位,即一个字节到al寄存器中,然后设置显示的格式,其中的CMP AL,0是看有没有取完字符串,取完就跳转到fin,让CPU待机。

(5)int 10是调用显卡BIOS

3.书中所说的制作启动区,就是我们写的这些代码
电脑开机过程:
(1)按下开机键,CPU 将 PC 寄存器的值强制初始化为 0xffff0,这个位置是 BIOS 程序的入口地址(一跳)

(2)该入口地址处是一个跳转指令,跳转到 0xfe05b 位置,开始执行(二跳)

(3)执行了一些硬件检测工作后,最后一步将启动区内容加载到内存 0x7c00,并跳转到这里(三跳)
(4)启动区代码主要是加载操作系统内核,并跳转到加载处(四跳)

经过这连续的四次跳跃,终于来到了操作系统的世界了,剩下的内容,可以说是整个操作系统课程所讲述的原理,分段、分页、建立中断、设备驱动、内存管理、进程管理、文件系统、用户态接口等等。

而我们所写的这段启动区代码会被加载到内存为0x7c00h的内存区域,然后PC设置为0x7c00h,开始执行一条条指令
BIOS实模式下的内存分布如图(感谢低并发编程公众号的作者)
在这里插入图片描述

我们制作的磁盘映像文件就是启动盘(启动盘最后两个字节为0x55, 0xaa,就是BIOS用来查找启动盘的标志),而ipl.bin文件只是名字不一样,本质也是磁盘映像文件,制作磁盘映像文件会根据你定义的磁盘属性来制作(就是核心代码之前那段定义指令)

4.makefile入门
make.exe是一个直接编译(一步到位)的程序

输入命令make run直接得到镜像文件
(1)首先用make.bat这个批处理程序调用make.exe执行(run为传递的参数)
…\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

(2)然后make.exe会根据参数找到makefile中的执行命令执行相应指令

这是makefile文件里的内容
default :
…/z_tools/make.exe img

ipl.bin : ipl.nas Makefile
…/z_tools/nask.exe ipl.nas ipl.bin ipl.lst

helloos.img : ipl.bin Makefile
…/z_tools/edimg.exe imgin:…/z_tools/fdimg0at.tek
wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img

asm :
…/z_tools/make.exe -r ipl.bin

img :
…/z_tools/make.exe -r helloos.img

run :
…/z_tools/make.exe img
copy helloos.img …\z_tools\qemu\fdimage0.bin
…/z_tools/make.exe -C …/z_tools/qemu

install :
…/z_tools/make.exe img
…/z_tools/imgtol.com w a: helloos.img

clean :
-del ipl.bin
-del ipl.lst

src_only :
…/z_tools/make.exe clean
-del helloos.img

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值