digital-camera

課程資料

嵌入式系統設計概論與實作

開課:曹孝櫟老師

修課年度:100資工系

上課時針對嵌入式系統各方面探討,包含 bootloader 原理,OS,硬體,開發,業界情況,一些嵌入式作業系統、開發工具。實驗用的板子是是 ARM 平台,並常使用 linux 系統,所以也會提到這部份的課題。在 OCW 網站上有影音可看:〈嵌入式系統設計概論與實作〉

實驗部份主要是利用 PCM7230 板子做實驗,包含燒錄開機程式和作業系統等等。最後的實驗和專題則是在 Openmoko 手機平台上進行,不過老師說每年不一定一樣。

老師上課時有提到一本教科書《Real-Time Concepts for Embedded Systems》,內容主要是嵌入式系統實做的一些概念。如果要跟實驗比較相關的話,推薦《Building Embedded Linux Systems》,尤其對實驗 1 非常有幫助。

上課方式

上課主要是使用投影片上課。老師非常能言善道,有時一張投影片就可以講一節課。說話速度很快,內容也很有趣,有時會有一些經驗談。雖然因為不點名,而且上課內容跟實驗內容也沒有絕對關係,加上又不考試,所以後期學生較少。然而其實是很值得一聽的。

實驗的方面是以兩人為一組,每組會發一份板子等實驗用具。要自己找時間去做,然後在星期三晚上去 demo。由於一開始的實驗需要用到 RS232parallel port,但是最近的電腦很少支援,所以也有額外開放時間讓同學到實驗教室使用電腦。

評分方式

沒有期中期末考和小考,所有評分就由 8 次 lab 和最後的期末 project 決定

  • Labs 80%
  • Final Project 20%

有時候lab會有額外的 bonus 可以做,不過最後lab評分似乎是看大家做的情形來決定分數,所以如果大部分的人都有做 bonus 的話,就得做完所有 bonus 才能得到滿分。本學期課程中僅有 lab 3 的 bonus 可以讓分數超過該次實驗的滿分。

考試作業

每次實驗都需繳交報告,有時也得繳交原始碼。期末專題的部份,需繳交 proposal, slides, report,最後以簡報方式介紹自己的專題,並實際 demo。

一開始的實驗因為剛在熟悉環境所以每兩個星期交一次,後來的實驗就是每星期一次了。Lab 主題如下:

Lab 1 - Environment Setup/System Installation/Hello World

在 PC 上建立 PCM7230 平台的 toolchain,包含 gcc cross compiler, 編譯 glibc,以及燒錄開機程式, linux kernel,檔案系統等等。並執行 hello world 程式。

Bonus:

  • 撰寫 echo 程式透過 RS232 和 host 溝通。
  • 設定開機時自動執行程式。

Lab 2 - Bootloader

重新編譯 Intrinsyc i-boot-lite bootloader,加上自訂訊息,以及新增多重開機功能。實際燒錄至板子上。

Bonus: 研究 bootloader 的組語程式碼,並加上註解說明程式流程。

Lab 3 - Non-OS Embedded Application

移除 iboot bootloader 中的不必要功能,縮減大小。新增檔案加密功能,可以加密放置在 CompactFlash Card 上的檔案。

Bonus:

  • 在 CF Card 插入時自動加密其上特定或所有檔案。
  • UBoot bootloader 移植到 PCM7230 平台上。
  • 修改 UBoot,使其可以有監聽網路封包的功能。

Lab 4 - Windows CE

透過 Windows CE .NET Platform Builder 4.2 編譯並安裝 Windows CE 至板子上,透過 eMbedded Visual C++ 4.0 撰寫 hello world 程式至板子上。

Bonus:

  • 縮減 WinCE 作業系統大小。
  • 開機時自動執行 hello world。

Lab 5 - Linux Kernel and Root Filesystem

重新編譯 Linux 核心,並修改檔案系統,安裝 bash ,設定開機時自動執行程式。

Bonus: 透過各種方法縮減核心大小。

Lab 6 - Interrupt Tracing and Simple Device Driver Programming

在 linux 核心中插入訊息,觀察中斷發生流程。編譯範例驅動程式,觀察滑鼠移動時的印出訊息。

Lab 7 - Network Packet Tracing

修改 linux 核心以及 /proc 檔案系統,實做簡易網路封包監聽功能。

Lab 8 - Burning U-boot/Kernel/Root Filesystem for Openmoko

利用 Openmoko 官方提供的工具燒錄 bootloader / kernel / root filesystemNeo FreeRunner 手機上,然後執行範例程式,觀察重力加速器的數值。

Final Project

利用 Openmoko 手機平台,配合至少一種感應器,實做創意專題。也提供材料費可以購買外裝感應器。

結語

自己覺得整個課程最難的地方其實是第一個實驗,要安裝 linux 作業系統(也可安裝在 Virtual machine 上),而且因為要建立的 toolchain 平台是非常古老的版本,所以常會有奇妙的相容性必須解決,或者得使用非常古老的 linux 作業系統,途中常常要自己 Google 才能找到答案。

由於 RS232 的接頭實在太難找,但一開始沒有開放電腦教室,我們還曾去順發購買線材,從主機板上剛好有的 RS232 接頭接出來。(如果主機板完全沒有 RS232 的話,想買 RS232 卡會非常貴,不切實際)

後期的實驗大致上只要照著實驗講義做就不會有問題,如果有問題,通常是硬體有問體。(確實也曾遇到不少次硬體問題)不過在做 WinCE 實驗時,會有一些軟體似乎要在 Windows XP 上才能跑。(或者也可能是 32-bit / 64-bit 等問題)所以感覺修這堂課也重灌了很多次作業系統 (笑)

整體來說嵌入式其實不像之前學長們說得那麼辛苦,至少跟這學期的編譯器和人工智慧比起來似乎輕鬆不少,這學期也要感謝組員的幫忙所以才那麼順利。