操作系统的编写
由于对操作系统的热爱,一直想写一个自己的操作系统,现在做一个简单的progress report..
看了囧博士的《linux-0.11内核完全注释》和《自己动手编写操作系统》,苦于这两个系统一个由于编译环境相对古老,还有一个完全在window编译环境下讲解,着实很费功夫。况且我对GNU的热爱,因此我选择了gnu的编译环境,测试示例则采用自己动手写操作系统中的例子。
这两本书基于的处理器架构均是x86结构,我又不得不学习x86的编程,从内存寻址,到实模式切换保护模式等等,费了很大功夫。
接着我要能够利用bochs模拟器去运行我的程序,我就得必须能够让我的代码能够在as86和ld86下运行,对熟悉这个编程环境也花了好久,感觉最有进展的是那天领导不在,我搞了一天,成果巨大啊,总算完成了x86启动代码的编写,以及完成从实模式切换到保护模式。在模拟器中我使用floppy启动,因此我必须在linux模拟floppy,对于bootsect和setup的代码读取已经完成,然后就是要在floppy的后面几个扇区完成对system的读写。linux-0.11是利用自己编写的build.c完成的,我也决定采用这个方法。
问题出现了,为了能够让bootsect能够将system代码搬运到0x10000处,则首先得让system编译的文件能够被build识别。我首先决定先写一个head.s和初始化的main函数,但是利用如今的编译器是无法编译成在minux-1.5下面的可执行文件,因为编译参数发生了巨大变化,我目前想到的方法是,首先编译一个剥离gcc头的2进制文件,然后再bootsect代码中添加对system的读写,然后去测试代码是否被真正copy以及是否可以在保护模式下运行。PS:由于对于bochs调试环境的熟悉,我应该有能力完成这样的代码测试。
看了囧博士的《linux-0.11内核完全注释》和《自己动手编写操作系统》,苦于这两个系统一个由于编译环境相对古老,还有一个完全在window编译环境下讲解,着实很费功夫。况且我对GNU的热爱,因此我选择了gnu的编译环境,测试示例则采用自己动手写操作系统中的例子。
这两本书基于的处理器架构均是x86结构,我又不得不学习x86的编程,从内存寻址,到实模式切换保护模式等等,费了很大功夫。
接着我要能够利用bochs模拟器去运行我的程序,我就得必须能够让我的代码能够在as86和ld86下运行,对熟悉这个编程环境也花了好久,感觉最有进展的是那天领导不在,我搞了一天,成果巨大啊,总算完成了x86启动代码的编写,以及完成从实模式切换到保护模式。在模拟器中我使用floppy启动,因此我必须在linux模拟floppy,对于bootsect和setup的代码读取已经完成,然后就是要在floppy的后面几个扇区完成对system的读写。linux-0.11是利用自己编写的build.c完成的,我也决定采用这个方法。
问题出现了,为了能够让bootsect能够将system代码搬运到0x10000处,则首先得让system编译的文件能够被build识别。我首先决定先写一个head.s和初始化的main函数,但是利用如今的编译器是无法编译成在minux-1.5下面的可执行文件,因为编译参数发生了巨大变化,我目前想到的方法是,首先编译一个剥离gcc头的2进制文件,然后再bootsect代码中添加对system的读写,然后去测试代码是否被真正copy以及是否可以在保护模式下运行。PS:由于对于bochs调试环境的熟悉,我应该有能力完成这样的代码测试。
> 我来回应