本週進行「Linux Device Drivers」訓練課程,開始帶領學員在 JK2410 開發板上實際撰寫硬體控制的程式碼。前一階段課程費了許多功夫解釋整個架構和觀念,這部份是與硬體無關的主題,主要針對 Linux 作業系統本身的實作與機制做觀念解說,例如:scheduling(為什麼要使用 wait queue 做 I/O 排程、以及使用時機)、critical section 等等。
我們花了一點時間幫同學建立基本概念,主要都是基本功的訓練,整理如下:
1. JK2410 開發板的操作:如何下載 kernel 與 rootfs 到開發板。
2. Kernel 編譯與設定:toolchain 的取得與安裝、Linux kernel 原始碼的取得、如何設定 kernel、如何包裝成 u-boot 格式。
3. 如何將 cdata 移植到 kernel source tree:透過 Config.in(2.4 kernel)與 Makefile 的修改,將過去辛苦從零寫起的 cdata 驅動程式移植到 kernel 原始碼目錄裡。目前我們的做法是,將 cdata 範例與 kernel 編譯成一個 image 檔,理由是,現階段暫時不去碰 root filesystem。
4. 在 JK2410 開發板上實際把玩 cdata 範例,過去我們都是在 PC 端操作,這次終於能將 cdata 移植到 ARM9 開發板上,並實際操作了。
我們在編譯 kernel 的過程中,也機會教育同學如何思考並解決一些編譯時的錯誤:
5. 如何選擇正確的驅動程式,例如:JK2410 的 serial driver。
6. linking 階段的錯誤(undefined reference)以及解決問題的思考邏輯。
7. compiling 階段的錯誤,以及解決問題的思考邏輯。
這些都是課程由 host 端進入到 target 端(ARM9)時,同學必須要具備的基本功夫,大家可將以上 7 點做為基本能力檢核的 check list。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw