Raspberry Pi (ARMv6)上自幹一個微小作業系統

      大約半年前,我加入fb的F9 based JuluOS與黃敬群老師(Jserv)成大嵌入式系統課程社團,我才發現原來台灣有那麼多人在研究作業系統開發,我也想試試開發一個小小的OS。

     從0開始寫一個OS是相當有趣的過程,可以檢視自己對C、資料結構、作業系統、計算機組織的瞭解程度,誠實的面對自己,雖然自己在系統廠工作幾年了,還是很多基礎知識不足,也許這就是為什麼那麼多高手可以在ic design house,而我在系統廠吧,寫這個小OS,只是學習的開始,接下來我會多研究其它的OS,例如:xv6、F9 microkernel、freeRTOS...

      我把開發流程一步一步記錄,從bare metal Helloworld,加入printk,配置MMU, IRQ中斷,記憶體管理(Buddy system),到最後加入system call、process fork與round robin scheduling,方便學習。
 
     所有原始程式碼都放在github上: https://github.com/tzuCarlos/RaspberryPi
     我使用qmeu測試:
     這邊有執行的結果:https://github.com/tzuCarlos/RaspberryPi/blob/master/mimiOS/RESULT

     系統說明:
        先拖稿一下,下班還要唸書,顧嬰兒很累的,改天有空補上一步步說明XD

     未來工作:
     1.把ARM的架構跟ARM組合語言弄熟。
     2.系統memory map我還沒好好規畫,只是想到做什麼功能,就找一塊出來。
     3. 沒有檔案系統,沒有shell、沒有驅動程式構架。  
     4. 寫個RTOS吧.






推薦社群、blog、書藉:
1. F9 based JuluOS, https://www.facebook.com/groups/224024274384934/
2. 黃敬群老師(Jserv)成大課程,https://www.facebook.com/groups/ncku.embedded2015/
3. Benux Wei, 精簡版作業系統實戰: 自製OS用Qemu執,
     http://ben6.blogspot.tw/2011/05/qemu.html
4.loda筆記, http://loda.hala01.com
5. 陳鐘誠老師的網站: http://ccckmit.wikidot.com
6. 作者:李無言, 一步步写嵌入式操作系统
7.  Andrew Sloss (Author), Dominic Symes (Author), Chris Wright (Author), "ARM System Developer's Guide: Designing and Optimizing System Software".
8. Randal E. Bryant, David R. O'Hallaron, "Computer Systems: A Programmer's Perspective" (這是CMU教才,我目前主管是CMU博士畢業XD,相當推!)

留言

descent寫道…
請問你只有用 qemu 嗎? 有在真實機器上測試嗎?
karose寫道…
Hi,感謝你提醒我這重要的事!,一開始有放上機器測,後來就沒有了,原因是1.記憶卡要插拔麻煩 2.qmeu模擬器跟真實機器的位址讀image位址不同,每次都要重build。 pi-baremetal 這有frame buffer,可以輸出到螢幕上,不用serial線,您可以先試試這個。
descent寫道…
請問你有 jtag 還是靠 qemu 來 debug?
tai271828寫道…
請問測試用的 qemu 版本是?我自己試過三個版本 (自己編譯的 qemu 2.3.0、Ubuntu 14.04 repository 預設的、自己編譯 github 上面有人刻意 suupport pi 的版本),不過這三個版本都沒有 -M raspi 可以用。請問這是 qemu 版本的問題嗎?還是我在使用 qemu 上方法不對?謝謝。
tai271828寫道…
自問自答 XD
用 git clone https://github.com/Torlus/qemu.git 取得 source code 之後,
要記得用 git checkout rpi 切換到有 -M raspi 選項的 branch
之後自行編譯完就可以用了。
編譯的時候還需要 makeinfo 這個工具,
如果是使用 Ubuntu 編譯的話,
另外 sudo apt-get install texinfo 裝上 texinfo 這個套件就有 makeinfo 可以使用了。
karose寫道…
我用qmeu 來測試與debug,沒用到jtag.

這個網誌中的熱門文章

C語言,大數運算,階層筆記

Linux VLAN 筆記