OS开发工具:需要建议

时间:2013-02-25 17:21:19

标签: operating-system

所以我为圣诞节买了一台新电脑,它预装了Windows 8。现在我遇到了太多麻烦,让它在同一个驱动器上运行Linux Ubuntu和W8。拥有单个硬盘驱动器的2个操作系统需要对驱动器进行分区,以使2个OS不会相互冲突。现在有一个名为 Mini Partition Tool Wizard 的程序在Windows 8中运行(并且有一个类似的Linux程序,名为gparted),它允许您创建和调整硬盘分区的大小,只要你不要t覆盖您当前使用的操作系统。

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

所以我的问题是:我可以使用C / C ++工具专门做这个吗?或者我是否需要内联汇编代码?或者编写一个在C ++程序中使用的汇编代码模块。很确定Mini Partition Tool Wizard不是开源的(也不是Windows)。从来没有写过和操作系统,所以我对此很满意,但愿意并且能够花时间去学习它是如何完成的。

1 个答案:

答案 0 :(得分:1)

  

我可以使用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(),{{1 },fopen()等使用您的低级API而不是Windows'或Linux'。

准备好燃烧几年,以便从无到有,缺乏知识和经验来做事。

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