Android、HTML5、Node.js 與 IoT 高品質訓練課程供應者

Linux 驅動程式完整訓練:Jollen 的 10 堂課(入門)

仕橙版第 36 期

本課程內容累積超過 15 年以上的公開課程經驗,內容精實且設計完整,並堅持小班教學,讓大家都可以得到最佳的上課品質。Linux 驅動程式是一門進入門檻較高的學科,在講師過去的授課經驗中發現,其自學難度高的主要原因之一是缺乏有 效的學習方法,Jollen 依據自己多年的教學經驗,設計了一套有效率的學習方法,能協助工程師快速掌握 Linux 驅動程式的核心觀念。

講師 Jollen

Moko365 技術總監暨講師、Mokoversity 開放創新學院創辦人、WoT.City 技術長。曾為 Motorola、HTC、LG、OPPO、騰迅、廣達電腦等知名企業,提供 Android、Linux 與 HTML5 專業訓練,並擔任顧問。長期從事 Embedded Linux、Android Framework、HTML5 與 Linux Device Drivers 研究與開發。Jollen 近期投入 Web of Things 的雲端架構設計,並且成立 WoT.City 開源計畫。Jollen’s Blog

如何學好 Linux 驅動程式?Linux Device Driver 的學習方式,首重「完整的觀念體系」,面對現有的 Driver 程式碼時,才能輕鬆應對。本課程帶領同學「從無到有撰寫架構良好的驅動程式」,並「對作業系統原理進行分析」,透過一個完整驅動程式的分析與研發過程,讓同學親身體驗一個高品質驅動程式形成的每個細節,真正學會 Linux Device Driver。

Moko365 Team

課程方向

本課程帶領同學「從無到有撰寫架構良好的驅動程式」,並「對作業系統原理進行分析」,透過一個完整驅動程式的分析與研發過程,讓同學親身體驗一個高品質驅動程式形成的每個細節,真正學會 Linux Device Driver。「Linux 驅動程式完整訓練:Jollen 的 10 堂課」內容相當廣泛。進入 Embedded Linux System 領域,並打造厚實基礎能力,最重要的軟體課程,就是 Linux 驅動程式。

品質特色

Linux 驅動程式是一門進入門檻較高的學科,在講師過去的授課經驗中發現,其自學難度高的主要原因之一是缺乏有效的學習方法,講師依據自己多年的教學經驗,設計了一套有效率的學習方法,能協助工程師快速掌握 Linux 驅動程式的核心觀念。

台灣首屈一指的 Linux 驅動程式課程,超過 10 年的公開課紀錄,企業內訓指名講師。除了驅動程式的設計與實作,會因為要與 Android 整合而有所不同,Jollen 老師特別整理過去的研發經驗,為同學說明這個部份的技術。Jollen 老師過去為多家科技大廠提供顧問服務,所累積的心得,也整合至課程內容。本課程將繼續堅持小班教學,讓大家都可以得到最佳的上課品質。

更新通知:

課程已針對 Kernel 4.x 進行更新

改版通知:

課程新增加 LinkIt Smart 7688 驅動程式實作練習 2016.11.03 New!

SP001

Linux 驅動程式是一門進入門檻較高的學科,在 Jollen 過去的授課經驗中發現,其自學難度高的主要原因之一是缺乏有 效的學習方法;主題本身雖然也有難度,但卻未必是學不通的主因。

技術性課程的教育訓練,是否能帶給同學優質的學習,教材內容是否包含一般化的材料(不能只是 Case Study),也是重點。

目前雖然有 O’reilly 的 Linux Device Drivers, 3e 聖經本,但對初學者而言,若沒有一個有效的學習方法,想要有效率地學會驅動程式,仍然是比較有難度的。Jollen 依據自己多年的教學經驗,設計了一套有效率的學習課程,Jollen 課程的目的是為了協助工程師快速掌握 Linux 驅動程式的核心觀念。本文的目的則是說明研讀 Linux 驅動程式的正確方法。

Linux 驅動程式的重點在於「觀念」而非程式碼的語法,Linux 驅動程式觀念的核心精神為如何設計機制良好的 Kernel 程式。善用 Linux 的 APIs 來設計機制(Mechanism)與行為(Behavior)良好的驅動程式,是學習 Linux 驅動程式的重點。

對 Device Driver 設計師而言,我們所要做的工作可分成 2 個層面來討論:Virtual Device Driver 與 Physical Device Driver。

1. Virtual Device Driver:往上層支援 Linux Kernel 所提供的 Virtual File System 層,並藉此實作 System Calls。使用者可透過 System Call Interface 與 Device Driver 溝通。

2. Physical Device Driver:往下層使用 Linux Kernel 所提供的 Device Interface 來存取並控制實體硬體裝置。 Virtual Device Driver 的主題重要性大於 Physical Device Driver,如何善用 Linux 所提供的介面(Interface)來設計驅動程式,並配合 User Application 來設計應用程式是這個主題的重點。

與 User Application 如何互動,是撰寫驅動程式時所要考慮的重要一環,只考量驅動程式本身的設計,而忽略或輕忽 User Application 的設計,是錯誤的觀念。 Jollen 的 10 堂課,獨家並且觀念正確的帶領您了解 User-space 與 Kernel-space 的關係。

Virtual Device Driver 的目的在於善用 Linux 的 APIs 來設計機制(Mechanism)與行為(Behavior)良好的驅動程式,因此「觀念」的重要性遠大於「語法」的討論。

Physical Device Driver 則是討論「如何透過 I/O memory」來控制裝置,也就是與晶片組的溝通。 Linux Device Driver 的撰寫必須多了解一些更低階或低層的硬體知識,才能融會貫通。站在軟體與韌體的角度而言,我們不必要太深入硬體的實作細節,但了解其原理對增進功力是絕對有幫助的。

若您已是 Linux 驅動程式初學者,或是參加過其它 Linux 驅動程式課程,可藉由以下問題,衡量您是否真正了解 Linux 驅動程式的設計。

考量以下 5 種作業系統狀態(Status):

  1. Driver Code Reentrancy
  2. Thread Concurrent Access
  3. SMP
  4. Interrupt-Mode
  5. Task in Process Context

問題一:哪些會造成 Driver 出現同步問題?

問題二:經驗上,single process 存取 Driver 時,會出現哪些同步問題?

問題三:經驗上,multi-thread 存取 Driver 時,會出現哪些同步問題?

問題四:分析與思考 Framebuffer 驅動程式的設計,哪些現象會影響效能?

問題五:如上,如何改進?

Jollen 的 10 堂課帶您寫出好程式。課程範例經過嚴謹的設計,課程不使用「實驗用」的程式碼(Simple Code)做為範例;在專業的研發工作上,這類型的程式碼又稱為玩具碼(Disty Code),雖然透過 Simple Code 是一種很好的學習方式,但專業性不足,面臨真正研發工作時,仍不知所措。請選擇真正有正確教學內容的 Linux 驅動程式課程!

上課時數:24 小時,共計 4 天。

時程 上課大綱 講師
第一天
09:30 am-04:30 pm
第 01 堂課:Linux 驅動程式架構(包含 Kernel 4.x)
Jollen
第二天
09:30 am-04:30 pm
第 02 堂課:Linux 驅動程式設計流程

Jollen
第三天
09:30 am-04:30 pm
第 03 堂課:I/O 存取觀念與 read/write

第 04 堂課:Blocking I/O 與 Wait Queue

Jollen
第四天
09:30 am-04:30 pm
第 05 堂課:Kernel Timer 與 Work Queue

第 06 堂課:中斷處理(Interrupt Handling)與 Bottom Half
Jollen

Linux 驅動程式採用分層架構的觀念設計,透過「註冊」與「回呼」的機制(Registration and Callback)來清楚地區分每一層的關係。初學者若無法掌握 Linux 驅動程式分層設計的關念,甚至無法接受層架構的觀念的話,當然也就無法有效學會 Linux 驅動程式。

Linux Kernel 這種分層架構的實作,必須利用以下 2 個步驟方能實現:1. 下層呼叫上層所提供的註冊函數,將自己註冊到上層。 2. 上層驅動程式 Callback 下層。

分層架構的實作必須在下層將自己註冊給上層,上層再回呼下層;上層的驅動程式必須提供註冊函數供下層呼叫,下層驅動程式所使用的註冊函數也將決定自己的上層架構。

最上層的驅動呼叫的註冊函數是由 Linux Kernel 所提供的基本註冊函數,因此最上層的驅動程式是將自己註冊到 Linux Kernel 裡,即 Virtual Filesystem 層。下層註冊到上層的實作只需要使用上層所提供的註冊函數即可,上層的驅動程式必須能處理下層的註冊動作。

研讀 Linux 驅動程式時,必須先將驅動程式的分層關係畫清楚,才能有效率地閱讀原始程式碼。Jollen 的 10 堂課,將有精采的分層架構觀念解析,並帶領同學親自動手,設計一個分層架構完整的嚴謹 Driver。

您學的是真正的「Embeded Linux Device Driver」?

Linux Kernel 現存的驅動程式,都可以經由簡單修改與 Cross Compile 移植到嵌入式裝置,或是開發板上,而這些驅動程式,原本就能在 PC 以及其它硬體上執行;因此,修改 I/O memory 的存取方式,並進行 Cross Compile 後安裝至開發板,並不是真正的「Embedded 」驅動程式

正確的 Embedeed 驅動程式,需要考量「目標裝置的特性」與「硬體規格」,接著再進行驅動程式的調整,以符合裝罝特性。例如:針對記憶體很小的硬體裝置,加入 Linux 2.6 的新機制「Compcache」,或是針對手持裝置,加入「Software Suspend」的功能

針對 Embedded 的應用,Jollen 的 10 堂課特別加入「Embedded Linux Device Driver」的新課程內容,教您撰寫正確的嵌入式驅動程式!

第一階段

共 15 道精心設計題目,教同學從無到有寫一個完整的驅動程式,每個練習皆提供參考解答:

  • Exercise 01:ioctl driver function
  • Exercise 02:multi-threaded
  • Exercise 03:private data
  • Exercise 04:reentrant code
  • Exercise 05:sleeping in kernel space
  • Exercise 06:scheduling
  • Exercise 07:wait queue
  • Exercise 08:semaphore
  • Exercise 09:critical section
  • Exercise 10:將練習作業整合到 Linux Kernel
  • Exercise 11:將 Linux kernel 移植到開發板(ARM9 與 LinkIt Smart 7688 (New!))
  • Exercise 12:實作 Memory-Mapped I/O
  • Exercise 13:實作 Sysfs
  • Exercise 14:開發 Android HAL
  • Exercise 15:整合至 Android

先訓練同學實作架構完整與行為良好的驅動程式框架,再教授如何將自已寫的程式整合到 Linux Kernel,並移植到開發板。

第二階段

教同學使用 Source-level Debug 來偵錯,並了解同步存取如何影響 Kernel 穩定性:

  • Exercise 01:使用 GDB 練習除錯
  • Exercise 02:分析 Kernel Panic(使用 Framebuufer 範例)
  • Exercise 03:加入 Semaphore 解決 Kernel Panic 錯誤

第三階段

教同學使用 Source-level Debug 方式,了解 Linux 的 Memory Model。課堂使用講師自行製作的迷小核心(20k 左右的 Linux Kernel)來進行 Kernel 原始碼研究:

  • Exercise 01:小型 Linux Kernel 介紹
  • Exercise 02:kmalloc() 原理解析
  • Exercise 03:Linux Memory Model 探索

第四階段

演練 Android 與 Linux 驅動程式整合專題,了解 Linux 驅動程式如何與 Android 整合:

  • Exercise 01:重構原有的 Linux 驅動程式
  • Exercise 02:如何重新實作舊有驅動程式,才能完善地整合至 Android?

● 學會 Linux 驅動程式架構與基本的 Linux 驅動程式觀念

● Linux 驅動程式的入門關鍵點為「觀念的解析」,有了觀念後,便能快速看懂 Linux 的驅動程式,這也是許多 Linux 驅動程式初學者的障礙

● 本課程為觀念導向並實作一個整體性的範例,並實際撰寫程式以了解 User-space 與 Kernel-space 的關係,絕對是獨家的課程內容

● 在 ARM 開發板與 LinkIt Smart 7688 上進行實作練習(New!)

● 了解 Linux 驅動程式與 Android 的整合實作

●  懂 C 語言

●  Linux 終端機環境操作

●  具備基本的作業系統觀念(未具備者請課前預習)

NT$25,500(上課時數 24 小時,共計 4 天)

●本課正提供預約報名優惠。預約報名課程,直接享有 82 折(NT$ 20,900)的最棒折扣:我要預約報名(請等候繳費通知、暫無須繳費)

● 預約報名優惠已為最低優惠,無法再合併其他優惠(VIP與折價券)

● 日期:2017 年日期未定,仕橙版第 36 期

● 時間:09:30~12:00,13:00~16:30(09:00 AM 開始報到)

台北市博愛路(詳細教室資訊另行公佈)

下載報名表(.doc)

下載報名表(.pdf)

● 本課正提供預約報名優惠。預約報名課程,直接享有 82 折(NT$ 20,900)的最棒折扣:我要預約報名(請等候繳費通知、暫無須繳費)

● 『預約報名』說明:

  1. 凡想參加課程者皆可事先預約
  2. 僅預約,不需繳交任何費用
  3. 待上課日期公布後,評估是否可以參加該期課程,如可以再進行課程繳費(預約優惠價)
  4. 如無法參加該期課程,亦不需繳交任何費用
  5. 預約人數超過六位以上,即公布上課日期
  6. 上課日期公佈後,即無法享有預約優惠價格
  7. 預約報名優惠已為最低優惠,無法再合併其他優惠(VIP與折價券)
* 為必須填寫欄位

仕橙3G教室

本課程由仕橙3G教室 (Moko365 Inc) 開發與製作,內容由仕橙研策科技有限公司版權所有,並保留所有權利。未經書面授權同意,請勿轉載、引用或複製內文。本公司業聘請承展智權暨商務法律事務所陳丁章律師、李子聿律師等,擔任本公司電子商務及智權法務諮詢顧問,並此籲請各界尊重本公司之智慧財產權。

Moko365 (仕橙3G教室) 為兩岸領先的科技顧問培訓機構,主要業務包含三項:1.Android底層軟體開發;2.協助客戶進行Code Review以及平台的移植;3.Android企業內訓,協助企業進行人才養成。客戶包含LG、宏達電、廣達會等國內外五十家企業、政府法人,累積訓練研發人員近五千人次。成立於2009年台北,在北京、上海、深圳均可提供服務。 目前是台灣開課規模最大、課程體系最完整的Android教育訓練中心。挾著深厚的技術實力與顧問諮詢經驗,2012成立Lightning Startup,協助客戶將行動通訊領域的好點子、好創意轉化成商品。更多有關資訊,請瀏覽 http://www.moko365.com/