所以我为圣诞节买了一台新电脑,它预装了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)。从来没有写过和操作系统,所以我对此很满意,但愿意并且能够花时间去学习它是如何完成的。
答案 0 :(得分:1)
我可以使用C / C ++工具独占完成吗?或者我是否需要内联汇编代码?
您需要一些装配而不是内联类型。您编译的C / C ++代码需要设置和配置一些内容(例如CPU的32位保护模式,堆栈,各种CPU寄存器的值,设备驱动程序,中断,C / C ++内存管理器)等等,而BIOS只是从磁盘加载一个512字节长的扇区,并将控制转移到它,而不设置任何东西,CPU仍处于16位模式。
因此,您需要编写一些汇编代码:
然后你需要为其他所有东西编写32位I / O设备驱动程序,因为在切换后你无法使用BIOS。或者,你可以实现一个虚拟8086机器(使用虚拟8086模式),以便将这些东西委托回BIOS,这也不是一件小事。其中大部分可以在C中完成,但仍然需要一些知识或使用汇编代码。
您还需要重新实现C(C ++)标准库的某些部分,因此malloc()
/ new
,putch()
,getchar()
,{{1 },fopen()
等使用您的低级API而不是Windows'或Linux'。
准备好燃烧几年,以便从无到有,缺乏知识和经验来做事。
是的,你确实可以在osdev.org开始学习东西。还有一些有用的新闻组:comp.lang.asm.x86和alt.os.development。