操作系统入手点在于自启,而非一般程序的点击启动。
所以作者从启动区文件入手,先制作.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格式。
![](https://i-blog.csdnimg.cn/blog_migrate/477031ceb0af66e32335529d0409e907.png)
使用gcc将.c转换为.gas,为了使用nask(我怀疑就是在搞事情,因为gcc也可以生成.obj),所以讲.gas转换为.nas,之后没有将其转换为.bin文件,而是转换为另一种形式的.obj文件,原书的解释为“事实上这正是C语言的不便之处,目标文件是一种特殊的机器语言,必须与其他文件链接才能转换成真正可以执行的机器语言”(这里可执行的机器语言,应该是指单纯的.bin)最后的bim文件没有详细讲解,只说是一般二进制文件的映像文件,关于和.hrb的区别,书中表示后来涉及。
得到hrb后就可以,类似于1图的形式,(以sys.hrb替换sys.bin)使用ending,生成.img文件。
本以为结束了,,,,,,,结果作者引入了调用函数(也就是开始启用连接了)
不过连接函数这次是以汇编形式写的
![](https://i-blog.csdnimg.cn/blog_migrate/26ac11960a757e89d181640e85c8934d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d81b03515dcca450fe166da5726faf2f.png)
C这里的io_hlt()函数,指的是_io_hlt,在nas中应该是属于地址,然后通过地址重命名再进行索引,不过,如此一来,是否还能进行重载,如何进行重载这个问题需要进行讨论。
至于nas中的 void io_hlt()只是注释,如果贸然改变
_io_hlt,就肯定会出现调用不了的问题,已试验过,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/ab5e848c6ec56dc0e225c94b974e3f1f.png)