操作系统-操作系统开发工具:需要建议



所以我在圣诞节买了一台新电脑,它预装了Windows 8。现在,我在让它在同一个驱动器上运行Linux Ubuntu和W8时遇到了足够多的麻烦。一个硬盘驱动器有两个操作系统,需要对驱动器进行分区,这样两个OS就不会相互冲突。现在有一个名为迷你分区工具向导的程序在Windows 8中运行(Linux上也有一个类似的程序,名为gparted(,只要不覆盖当前使用的操作系统,就可以创建和调整硬盘分区的大小。

长话短说:我想写我自己的迷你操作系统,专门用于引导控制和硬盘管理。也就是说,一旦我把它编写、调试并编译成可执行代码,我就会把它放在USB记忆棒上,我可以从BIOS菜单中启动它,然后直接设置硬盘分区,甚至在必要时格式化我的硬盘。我很惊讶BIOS没有自己操作的用户选项。

所以我的问题是:我可以只使用C/C++的工具吗?或者我需要内联程序集代码吗?或者编写一个用于C++程序的汇编代码模块。很确定迷你分区工具向导不是开源的(Windows也是(。以前从未写过和操作系统,所以我对此非常熟悉,但我愿意并能够花时间学习它是如何做到的。

我可以只使用C/C++的工具吗?或者我需要内联程序集代码吗?

您将需要一些程序集,而不是内联类型。编译后的C/C++代码预计已经设置和配置了很多东西(例如,CPU的32位保护模式、堆栈、各种CPU寄存器的值、设备驱动程序、中断、C/C++内存管理器等(,而BIOS只需从磁盘加载一个512字节长的扇区并将控制权转移到它,而无需设置任何内容,而CPU仍处于16位模式。

因此,您需要编写一些汇编代码:

  • 从磁盘加载更多的东西,你不认为所有东西都能容纳512字节,是吗
  • 将CPU切换到32位保护模式
  • 重新配置中断控制器,使中断不会映射到与保护模式异常相同的中断向量上(好吧,这一小部分可以在C中完成(
  • 写入异常处理程序
  • 为计时器和键盘等基本部件编写中断处理程序(如果仔细设计,您可能只需要在汇编中完成其中的一小部分,其余部分可以在C中完成(

然后,您需要为其他一切编写32位I/O设备驱动程序,因为在切换之后,您就不能使用BIOS了。或者,您可以实现一个虚拟8086机器(使用虚拟8086模式(,以便将这些东西委托回BIOS,这也不是一件小事。这其中的大部分可以用C语言完成,但仍然需要一些汇编代码的知识或使用。

您还需要重新实现C(C++(标准库的某些部分,因此malloc()/newputch()getchar()fopen()time()等使用您的低级API,而不是Windows或Linux。

准备燃烧几年时间,从一无所有、缺乏知识和经验到有所作为。

是的,你确实可以在osdev.org上开始学习。还有一些有用的新闻组:comp.lang.asm.x86和alt.os.development.

最新更新