
▶ 開發平台硬體Raspberry Pi
▶ 套件安裝管理及Linux常用指令
▶ 檔案結構與檔案系統
▶ 使用者帳號管理
▶ 伺服器安裝與設定
[講師實務經驗分享]
此門課是為了進入嵌入式Linux開發的預備課程,要在Linux作業系統開發,對Linux這套作業系統的操作環境須要有一定的熟悉度,包含Linux系統架構、檔案系統結構、指令操作、網路設定、常用伺服器建置等。
▶ 了解嵌入式系統架構並能進行軟硬體系統的整合、移植與開發。
▶ 在拿到一般嵌入式BSP後懂得如何開始,會知道如何進行核心組態與編譯,Boot loader 編譯以及Root File system建立等。 能熟悉GNU Toolchain的使用,包含GNU AutoTools與Makefile的撰寫。熟悉Open Source 程式與函式庫的移植技巧。 課程利用Raspberry Pi 開源硬體,讓你從空的SD card,從無到有建構自己的嵌入式Linux 系統並能使板子能開機。在Linux系統建立完成之後,教你開發Linux Pthread、Socket及File(Device)I/O的系統程式。最後,以嵌入式Linux常見的產品,如IPCam、Wi-Fi Router、NAS,手把手教你這些功能是如何被實現的。
[講師實務經驗分享]
嵌入式Linux開發初期,必須先建立好主機端的開發環境與GNU Toolchain (包含交叉編譯器版本的選擇),通常剛入行者,不是不會寫程式,而是被這個環境搞死。上這門課可以了解整個嵌入式Linux的架構觀念與開發流程(這對於剛切入領域甚為重要),包含boot loader、Linux核心交叉編譯、板子Flash空間配置、Root File system產生等。Linux有很多開源軟體,你會想要了解如何移植這些Open Source,不論是應用程式、函式庫,還是驅動程式。這時你會開始要去懂Makefile、Shared Library與Static Library、 kernel module等。也一定會遇到gcc或ld error等,要去了解問題所在,你會發現善用GNU Toolchain對於Debug或分析問題很有幫助。 有一個系統架構後,我們帶你進入實際產品應用,包含Wi-Fi Driver移植、USB Camera整合應用等,讓你更能想像該如何快速整合出一個嵌入式軟體架構。
【第三階段】 嵌入式Linux驅動程式實戰
▶ 不管你是要自己撰寫或移植,這都是資深嵌入式系統工程師的必修課。
[講師實務經驗分享]
嵌入式Linux系統的另外一個主要工作就是加入新硬體,此時我們要能了解硬體界面、控制原理與晶片功能,更重要的是為它撰寫一隻Linux驅動程式。涉及底層Linux驅動程式架構,對於Linux核心程心的掌握是一定要具備的!如何學好它?先要有一個實驗平台搭配硬體裝置,試著學會同步與非同步I/O控制、硬體中斷、I/O通訊等實際裝置驅動才有真正的感覺在設計驅動程式。此外,Linux驅動程式開發也是要準備好相關開發環境,才能開始編譯,所以通常沒概念者也難以切入。Linux驅動程式是嵌入式系統的核心技術之一,但大多數人的也僅僅只具觀念上與架構上的認知而已,鮮少有人真正有驅動程式的開發經驗,然而產業界對於RD研發工程師,有較高的職能要求。本課程使用Raspberry Pi ,並搭配我們自行設計的Raspberry Pi I/O擴充板作為驅動程式實戰演練,讓你快速上手Linux驅動程式!
【數位】Linux系統程式設計
▶ 了解Linux system call (如I/O, IPC, pthread等),而能運用這些system call實現linux程式,亦藉此了解OS在嵌入式系統所扮演的角色
▶ 了解 server/client程式運作與 TCP/IP原理
▶ 能夠以 C語言實作 TCP/UDP/Raw Socket
▶ 能夠以 ioctl/fcntl/setsockop去控制 Socket的行為
▶ 實現 Broadcast,Multicast
[講師實務經驗分享]
一般情況,通常整個嵌入式Linux系統的功能會有你自己寫的程式(可能也會去連結GPL或LGPL函式庫)並整合一些來自Open Source的程式。雖然Linux已存在很多的Open Source,但不可能永遠運氣這麼好都可以找到100%符合需求或規格的原始碼,所以你必須懂得如何修改成你要的功能。不論自己寫或移植Open Source,這些都是基於Linux核心,所以一定會用到Linux核心的能力,包含裝置I/O請求、多行程、同步處理、行程通訊等。若你的系統需要TCP/IP通訊,還得懂Socket網路程式設計。想自己寫並且能改得動Open Source的程式,其實要具備Linux系統程式設計的能力,你可以透過閱讀"Linux Programming Manual",但是篇幅之廣泛且多元,如果沒有對作業系統有一定的認知,不懂對系統呼叫(System call)所產生Linux背後的運作行為,很難了解真諦。因此若有經驗的人帶你看並且提供範例程式演練,對於學習會相當有幫助。
【數位】ARM Boot Loader設計
▶ 了解ARM核心架構與ARM例外處理
▶ 能熟悉ARM組合語言並能撰寫Startup code與Linker Script
▶ 配合Raspberry Pi硬體自幹 Boot code
[講師實務經驗分享]
沒有它,什麼都不會動!ARM Bootloader設計是嵌入式系統最底層的核心技術,如同電腦BIOS的角色。這技術就是談晶片開機的動作,從ARM初始化、DRAM初始化、Flash初始化、SoC中斷控制器到一般GPIO、UART等驅動。有能力設計Bootloaer你必須對你的CPU架構很清楚,例如使用ARM就必須了解ARM架構及指令集,了解Linker/Linker Script作用, 及了解你的SoC晶片手冊。Bootloader設計工作是位在嵌入式系統非常初期的階段,這對於IC設計公司或是會自己開IC的公司,是一項非常重要的核心技術。然而大多數系統廠商不常碰到這麼低階的開發技術,但若能擁有此項技術也會有非常多的幫助,因為有些工作是可以自己做的:如DRAM、Flash的容量的變更(這不是換chip而已) 要如何改code、如何設計韌體救援模式(韌體更新失敗時)、如何設計雙系統開機,如平板可以選擇Windows 10或Android 開機。在台灣很少有大學能夠開這種課程,因此知道這項技術核心的人非常少。在業界中會的人少,薪水更是高人一等!事實上,這個技術的學習是能夠有能力自幹一套作業系統的開始。