2013-02-25 65 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