30 天自制操作系统day3


操作系统入手点在于自启,而非一般程序的点击启动。
所以作者从启动区文件入手,先制作.img映像文件,为了制作映像文件,需要汇编文件.nas,映像文件分为启动区文件ipl和真正的操作系统文件.sys。逻辑图如下:


nas只是证明我们采用了汇编的方式,如果我们愿意,照一开始的方式采取输入二进制码也是可以的。括号中的内容表示我们使用的工具,目的是异于区分。sys与ipl最终都是.bin文件,最后使用ending工具将其整合成img,整合为img后就可以install并且run了。(这里算是较为清晰的,一旦涉及C语言后,因为有大量的中间文件,所以把文件,方式区分清楚很有必要。)
基础程序如此,然后为了进一步abstraction,将使用c语言进行sys的编辑与运行,因为涉及到C语言的编译与连接,接下来步骤会较为繁琐。i
因为长期以来使用的都是成熟的IDE,花在IDE上时间最长的自然就是编辑,但是我建议转变思维眼光,IDE最重要的工作应该是转换(编译),(以及其中的DEBUG),与连接,文本编辑的话给个记事本都可以。比如nas,最重要的就是将nas格式转换为bin格式。


使用gcc将.c转换为.gas,为了使用nask(我怀疑就是在搞事情,因为gcc也可以生成.obj),所以讲.gas转换为.nas,之后没有将其转换为.bin文件,而是转换为另一种形式的.obj文件,原书的解释为“事实上这正是C语言的不便之处,目标文件是一种特殊的机器语言,必须与其他文件链接才能转换成真正可以执行的机器语言”(这里可执行的机器语言,应该是指单纯的.bin)最后的bim文件没有详细讲解,只说是一般二进制文件的映像文件,关于和.hrb的区别,书中表示后来涉及。
得到hrb后就可以,类似于1图的形式,(以sys.hrb替换sys.bin)使用ending,生成.img文件。
本以为结束了,,,,,,,结果作者引入了调用函数(也就是开始启用连接了)
不过连接函数这次是以汇编形式写的


C这里的io_hlt()函数,指的是_io_hlt,在nas中应该是属于地址,然后通过地址重命名再进行索引,不过,如此一来,是否还能进行重载,如何进行重载这个问题需要进行讨论。
至于nas中的 void io_hlt()只是注释,如果贸然改变 _io_hlt,就肯定会出现调用不了的问题,已试验过,如下图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值