2013-02-25 67 views
2

所以我在圣诞节找到了一台新电脑,并预装了Windows 8。现在我已经有了足够的麻烦让它在同一个驱动器上同时运行Linux Ubuntu和W8。拥有2个操作系统的单个硬盘驱动器需要对驱动器进行分区,以便2个操作系统不会相互冲突。现在有一个名为的迷你分区工具向导,它在Windows 8中运行(并且有一个类似Linux的程序,名为gparted),它允许您创建硬盘分区并调整其大小,只要不覆盖操作系统你目前正在使用。要长话短说:我想写我自己的专用于引导控制和硬盘管理的迷你操作系统。也就是说,一旦我将它写入,调试并编译为可执行代码,我会将它放在USB存储卡上,我可以从BIOS菜单启动,然后直接设置硬盘驱动器分区,并根据需要格式化硬盘驱动器。我很惊讶BIOS没有用户自己选择的选项。操作系统开发工具:需要建议

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

+0

http://osdev.org,你需要组装。 – 2013-02-25 17:27:52

回答

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()fopen()time()等使用低级别的API,而不是Windows'或Linux ”。

准备烧几年,从无到有,缺乏知识和经验的工作。

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