吳俊寬

  大一、大二暑假即服完兵役,且利用『五年一貫』計劃五年讀完大學及碩士,進入研究所期間學習了大量嵌入式系統知識,像是從硬體開機程式系統初始化後開始執行程式的流程、實時作業系統運作方式所有機制,閱讀大量的開發手冊以補足我缺乏的背景知識,最後在碩士論文中實作一個多核心實時作業系統並移植到欲執行的開發板上將我學習到的所有東西實作出來。

  碩士論文是基於一片被燒入 OpenRISC 1200 雙核心電路的 URduino FPGA 開發板上實作一個『多核心作業系統』,原始程式在   UrOS_on_URduino-MyPaper-  中。

Skills


實作實時作業系統:

  利用自己詳讀並使用過 CoOS、FreeRTOS 程式碼知道簡單的實時作業系統應必備那些功能。再閱讀實作於 Intel CPU 上的教學用作業系統 XV6 (Unix-like Teaching Operating System) 後學習多核心作業系統機制。最後結合自己的想法撰寫一個作業系統 UrRTOS。


移植作業系統:

  完成自作業系統基本架構後,必須先將其移植到開發板上才能開始功能測試,一般會撰寫 Arch 文件當作溝通介面連接到核心移植文件(GCC/OpenRISC/portasm.S)並使用其函式,並將核心移植文件中“上下文切換”相關變數及函式更改成與自己作業系統連接的相應名稱。

 - 例: TaskRunning 、 ContextSwitch() 、IncreaseTick()


系統除錯:

  此硬體的設計初衷是以可以自由配置大量硬體資源以及自由自由決定核心數目為目的,因而沒將核心間的溝通列入設計條件。所以我必須更改到整個開發版的 Verilog 以變更 Boot 要求 Flash 對 SRAM 做的工作,也需更改專案的 Link Script、Makefile 等文件配合C語言中 __attribute__ 的用法,去控制記憶體映射、程式區塊、資料區塊位址。甚至在堆疊還未初始化的地方除錯時,也需使用到組合語言撰寫測試指令。


驅動程式:

  在 STM32F429(ARM-CortexM4) 開發板上依照其參考手冊以及參考STM官方標準函式庫之文件撰寫UART驅動程式,並再撰寫一層介面與中斷暫存、中斷服務程式做結合,以管理字元的傳送、接收。在 Embedding_Driver_USART

   Linux 上的驅動程式練習,在 Linux_Driver_Character,練習撰寫最簡單的字符驅動程式使其可以註冊並傳送字符。

論文紀錄(點擊)

  實作前看了很多開發文件吸收背景知識,連結裡包含我論文的實作過程以及閱讀過的相關文件,可以知道有閱讀過什麼知識的經歷。