源起一直以來想自己寫一個OS,練練功,去年到今年斷斷續續花了一至兩個月時間,寫了 我自己的陽春作業系統,最近正在整理程式碼做個記錄;證明有達成自己的目標。以下是從我的Xubuntu 10.10 執行benos 使用QEMU的畫面截圖。
qemu-system-x86_64 -boot a -M pc-0.11 -fda /home/ben/osdev/../main.img
畫面左上為Ben OS 執行結果。
目前實作了下列功能:
- 簡易的記憶體管理
- Timer中斷處理
- 鍵盤I/O, 佇列
- 多個執行緒的多工切換
- 簡單的命令模式 (ps, uname, free, clear, type mem)
- 精簡 libc 函式庫
在寫自己小OS過程中,最痛苦的莫過於不知道為什麼OS又沒畫面了。開發期間,學習了不少以前觀念有些模糊的部分,例如:如何進入保護模式、程式執行期權限模式、記憶管理、多工處理等等。
之後可能的研究議題如下:
- 如何編繹及改寫BenOS支援網路開機方式(PXE)?
- 如何支援檔案系統從S-ATA 硬碟?
如果想寫自己的OS,如何開始呢?
首先在完全沒有基礎情況,起步是最難的。
打造個人作業系統 核心編譯與系統開發Linux 0.01 (2005.5)
- 偏重Linux 0.01 相關觀念介紹
- 較不適合初學者
30天打造OS!系統自作入門 (2010.3)
- 偏重圖形介面實作,且用到許多自制工具或其他工具
- 較適合進階網友
Orange's 一個作業系統的實現 (2010.5)
- 比較全面詳細介紹觀念細節
再來最常遇到就是卡關,卡在某一環節良久,無法解決。這時如果有人可以討論,相信情況會大為改善。
在wiki at osdev.org裡有英文文章,如英文尚可考慮精讀,有很多初學者的參考文章。
另外在Jserv's CURT v1 ARM 精簡作業系統一文中,Jserv 留言說有熱心網友將CURT v1移植到i386平台,可供大家參考練習。以上一點淺見,希望對您有所幫助。
更新2011-07-22:
建立共筆用的站台:Julu 作業系統開發協作平台,有興趣的人可留言(改到社群論壇,詳參閱協作平台),歡迎一同編修內容。
更新2011-07-22:
建立共筆用的站台:Julu 作業系統開發協作平台,有興趣的人可留言(改到社群論壇,詳參閱協作平台),歡迎一同編修內容。
更新2011-08-17:
更新2011-12-14
BOS 使用新的bootloader(By Dennis) 以及初步整合VFS(By Wayling)
14 則留言:
Great work!
Thanks for bringing it to the world. :)
感謝你的支持, 希望有空多交流!
+1
GJ++
Hi GJ, 已將相關訊息寄到您的信箱,請查收後,回覆. THX
碁峰資訊,作業系統開發實戰手冊,以開發一個視窗作業系統為例.有說到桌面部分.
已更新書目
m(_ _)m(拜)
對您這篇文章非常有興趣~小弟今年剛成為資工系新鮮人,也很想自己實作一個OS。但是我沒有組語的基礎,不知您推薦的書目中是否都需要組語的基礎呢?
目前我手上有一本2005年的NASM教學書(當時想玩玩ollydbg,結果忙一忙就忘了),但組語似乎都跟CPU的關聯很深,不知那本書的code現在是否還能用?
還請閣下指點迷津m(_ _)m
目前所列書目,大都需要部分組合語言來實作Bootloader,保護模式相關與硬體基本IO port部分。 NASM對i386的程式碼而言,應該都還適用。對於i386自製OS相當多,有個小建議,在OSDev.org裡有相關bootloader,保護模式實作範例,你可從中找到可執行的精簡OS,再開始試著修改,會較容易瞭解組語運作,另外,國外MIT OSE 的課程 http://pdos.csail.mit.edu/6.828/2010/schedule.html,其中開始的幾堂課也有十分詳細的OS開發新手所需觀念說明。如果你想買書來參考,你可以考慮Orange's一個作業系統的實現或作業系統開發實戰手冊這二本書。另外可參考我的朋友的自製OS:ChildhoodOS(http://www.codemud.net/~thinker/GinGin_CGI.py/show_id_doc/414)幾乎由C及極少量的C內嵌組語寫成,若你不想碰太多組語的話。
找了好久...終於也看到自製OS的同好啦
不然都是去os dev看英文(暈)
也不敢問XD
太棒囉!
歡迎加入討論,可參考社群活動http://julu.staros.mobi/或到 http://groups.google.com/group/juluosdev?hl=zh-TW論壇提出你的問題,大家交流一下.(^.^)
您很厲害呢
請問我可以再我自己寫的作業系統中使用您的原始碼嗎
筆者著重在學習的部分,所以有引入部分第三方的原始碼,所以請參閱下列本專案BSD License部分, 你可以註明出處並自由使用。其他第三方部分,用來學習應該沒有問題,如果用於商業請洽各作者。
https://github.com/benwei/bos/blob/develop/License
你的目的要學習寫OS,建議你從下列MIT開放課程會對OS開發有更完整的認識。
http://pdos.csail.mit.edu/6.828/2011/overview.html
MIT 的 xv6 OS
http://pdos.csail.mit.edu/6.828/2011/xv6.html
張貼留言