市面上已經出現不少教導如何撰寫小型作業系統的書籍,相關線上課程也不少,藉由研讀與實作這些寶貴知識,可以讓我們面對複雜系統時,更得心應手。在我看過的資料裡,一步步寫嵌入式操作系統算是最淺顯易懂,並且說理清晰的一本。
以下是各章節的簡介:
第一章:搭建工作環境
作者針對 S3C2410 晶片進行開發,這是一顆 ARM920T 的 SoC ,線上資源豐富,複雜度也不高。以 Skyeye 作為模擬器,免去實際硬體燒錄的麻煩,不過要注意某些程式碼稍嫌簡化,若在實際硬體上需再加進一些初始化動作,但並不影響整體學習。toolchain 使用目前業界慣用的 GNU toolchain 。
第二章:基礎知識
如果在學習 OS 之前,欠缺基本的 linking, loading 的觀念,並且也對基本程式開發工具不熟悉,那麼這章可以好好看一下,作者提供剛剛好夠用的說明。若需要對 linker 與 loader 的完整觀念,可以閱讀程式設計師的自我修養。
第三章:操作系統的啟動
這章講解 ARM 的啟動流程,以及必需的初始化設定,讀者可以從這章了解 ARM 的基本架構,尤其是 MMU 的設定部份。由於是 ARMv4 的架構,所以相比於目前最新的 ARMv7, v8 要來的簡潔很多,但主要的功能卻又相當完備,非常適合學習。
第四章:打印函數
這章教導如何實作 printf ,主要說明了 C 語言中的 variadic funtion 底層原理,如果沒玩弄過 stack 的朋友,可以好好玩一下。:-)
第五章:中斷處理
即使是撰寫過不少 Linux driver 的朋友,可能都不曾設定過 interrupt controller,透過這章的說明,可以嘗試一下如何將 interrupt 與特定 CPU 掛鉤,並思考不同 interrupt 策略的取捨。我個人認為這章稍嫌不足的部份是說明 interrupt source 的幾種關鍵屬性,尤其是 trigger type 的選擇。有機會整理好後再發一篇 blog 說明我的想法 。
第六章:動態內存管理
對 OS 而言,記憶體管理除了 MMU 以外,另一個重點就是如何有效動態分配。作者在這章實作了簡易版本的 buddy system 與 slab layer。無論實作與說明都非常精彩。
第七章:框架
這邊指得是 driver framework 與 virtual filesystem 的想法與實作。採用了 Unix 的傳統 - Everything is file。熟練的 C 程式設計師會覺得很簡單,但我相信,如果對 C 語言使用的還不夠熟練的朋友,看到這章很可能會有點頭昏。推荐閱讀系統程序員成長計劃。或...嗯,多讀好的 C open source projects 來學習如何用 C 來進行抽象化機制。:P
第八章:運行用戶程序
說明如何以模組化的方式為 OS 加進新功能。也就是如何讓應用程式可以獨立於 OS 而開發。要達到這點,OS 變需要提供約定的規範,也就是要如何準備適當的執行檔格式與系統呼叫。
第九章:進程
最後一章將 multitasking 完成,重點在於如何實作 context-switch,並且與 OS 其他部份協同運作。到了這章,就可以體會 OS 的設計取捨,往往體現在許多面向上。
最後,這本書最令我喜歡的是它的厚度,僅僅兩百多頁,就完成一個說明清楚的小 OS。但這並不代表研讀此書是輕鬆的,從上面的簡介中你可以發現,雖然這是一本 OS 實作入門書,但是如果不俱備足夠的基礎,還是不容易完成的。 :-)
以下是各章節的簡介:
第一章:搭建工作環境
作者針對 S3C2410 晶片進行開發,這是一顆 ARM920T 的 SoC ,線上資源豐富,複雜度也不高。以 Skyeye 作為模擬器,免去實際硬體燒錄的麻煩,不過要注意某些程式碼稍嫌簡化,若在實際硬體上需再加進一些初始化動作,但並不影響整體學習。toolchain 使用目前業界慣用的 GNU toolchain 。
第二章:基礎知識
如果在學習 OS 之前,欠缺基本的 linking, loading 的觀念,並且也對基本程式開發工具不熟悉,那麼這章可以好好看一下,作者提供剛剛好夠用的說明。若需要對 linker 與 loader 的完整觀念,可以閱讀程式設計師的自我修養。
第三章:操作系統的啟動
這章講解 ARM 的啟動流程,以及必需的初始化設定,讀者可以從這章了解 ARM 的基本架構,尤其是 MMU 的設定部份。由於是 ARMv4 的架構,所以相比於目前最新的 ARMv7, v8 要來的簡潔很多,但主要的功能卻又相當完備,非常適合學習。
第四章:打印函數
這章教導如何實作 printf ,主要說明了 C 語言中的 variadic funtion 底層原理,如果沒玩弄過 stack 的朋友,可以好好玩一下。:-)
第五章:中斷處理
即使是撰寫過不少 Linux driver 的朋友,可能都不曾設定過 interrupt controller,透過這章的說明,可以嘗試一下如何將 interrupt 與特定 CPU 掛鉤,並思考不同 interrupt 策略的取捨。我個人認為這章稍嫌不足的部份是說明 interrupt source 的幾種關鍵屬性,尤其是 trigger type 的選擇。有機會整理好後再發一篇 blog 說明我的想法 。
第六章:動態內存管理
對 OS 而言,記憶體管理除了 MMU 以外,另一個重點就是如何有效動態分配。作者在這章實作了簡易版本的 buddy system 與 slab layer。無論實作與說明都非常精彩。
第七章:框架
這邊指得是 driver framework 與 virtual filesystem 的想法與實作。採用了 Unix 的傳統 - Everything is file。熟練的 C 程式設計師會覺得很簡單,但我相信,如果對 C 語言使用的還不夠熟練的朋友,看到這章很可能會有點頭昏。推荐閱讀系統程序員成長計劃。或...嗯,多讀好的 C open source projects 來學習如何用 C 來進行抽象化機制。:P
第八章:運行用戶程序
說明如何以模組化的方式為 OS 加進新功能。也就是如何讓應用程式可以獨立於 OS 而開發。要達到這點,OS 變需要提供約定的規範,也就是要如何準備適當的執行檔格式與系統呼叫。
第九章:進程
最後一章將 multitasking 完成,重點在於如何實作 context-switch,並且與 OS 其他部份協同運作。到了這章,就可以體會 OS 的設計取捨,往往體現在許多面向上。
最後,這本書最令我喜歡的是它的厚度,僅僅兩百多頁,就完成一個說明清楚的小 OS。但這並不代表研讀此書是輕鬆的,從上面的簡介中你可以發現,雖然這是一本 OS 實作入門書,但是如果不俱備足夠的基礎,還是不容易完成的。 :-)
留言
張貼留言