訂閱課程,只需名字與Email

Android Camera HAL: 攝像視訊架構與實作 / 2010.11.21 獨家課程首開班結訓囉

Android Telephony & RIL 獨家首開,專業的通訊系統課程 / 2010.09.12 首開班結訓囉

Android 2 應用開發入門(仕橙版第6期) / 2010.07.23 順利結訓

Android Porting + Embedded Linux 基礎訓練班 / 台北班 2010.07.18 順利結訓

Android 框架與底層技術培訓課程 / Motorola內訓班 2010.07.06

Android HAL & Framework: 軟硬整合與實作細節 / 深圳班 2010.06.29 結訓

Linux 驅動程式完整訓練: Jollen 的 10 堂課 (第27期)

  1. 因應產品趨勢的改變,以及技術的大幅更新 (Linux kernel);同時,也因應講師希望,將過去二年多來所主導的產品開發經驗納入課程,「Linux 驅動程式完整訓練: Jollen 的 10 堂課」做了相當幅度的調整!同樣是 10 堂課,同樣是 48 小時的訓練時數,內容將更加廣泛。
  2. 本課程將繼續堅持小班教學,歡迎報名參加。

課程名稱
Linux 驅動程式完整訓練: Jollen 的 10 堂課 (第27期)

課程代碼
101M002

業界最資深的 Linux Device Driver 課程「Linux驅動程式完整訓練: Jollen的10堂課」好評邁入第久年、第27期!全程由資深講師 Jollen Chen 親授。

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

課程理念

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 驅動程式課程!

開課時程
日期:
  • 第一階段-入門:2012/2/11、2012/2/12、2012/2/18、2012/2/19,每週六日
  • 第二階段-進階:2012/3/10、2012/3/11、2012/3/17、2012/3/18,每週六日
時間:09:30-12:30/13:30-16:30,每天6小時,訓練時數共48小時

報名費用
NT$43,800

優惠方案
  • 2012/2/3 前完成繳費享有「早安鳥」優惠價:NT$43,800*0.88=NT$38,500
  • 持VIP Code(Jollen’s學員報名-需提供課程名稱與課程編號供確認),再折NT$1,000
  • 持仕橙折價卷:依面額折抵,一門課程限用一張,可搭配VIP Code使用
  • 持仕橙折價卷的學員,請於填寫報名表時勾選,並於開課當日繳交,如無法繳交折價卷者,須補繳課程費用

系統課程
穩定、實用、高品質

課程大綱
第01堂課:Linux 驅動程式架構 (含 Kernel 2.6)
第02堂課:Linux 驅動程式設計流程
第03堂課:I/O 的存取觀念
第04堂課:read/write 與 Wait Queue
第05堂課:Kernel Timer、Task Queue 與 Work Queue
第06堂課:Touch Screen、GPIO 與 Interrupt Handler
第07堂課:Memory Mapped I/O
第08堂課:USB, PCI & Network Device
第09堂課:Subsystem (分層架構) 觀念解析與實務
第10堂課:嵌入式Linux Device Driver

  • Swap partition 的使用
  • Compcache: 針對少量記憶體的嵌入式平臺
  • Software suspend & wake up
  • Serial & Console 驅動程式
  • JFFS2 與 MTD 驅動程式
  • Power Management 驅動程式
  • SD/MMC 驅動程式
  • GPRS Modem 驅動程式 (以 Openmoko NeoFreerunner 為例)

觀念解析課程,以 qemu 模擬器搭配 S3C2410/S3C6410 開發板上課。嵌入式Linux Device Driver部份課程,以手機做為案例進行小組討論。 (講師參與開發之 Android 手機)

Subsystem 分層架構

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

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

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

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

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

Embedded Linux Device 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」的新課程內容,教您撰寫正確的嵌入式驅動程式!

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

  • 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)
  • Exercise 12:實作 Memory-Mapped I/O

先訓練同學實作架構完整與行為良好的驅動程式框架,再教授如何將自已寫的程式整合到 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 探索

課程目標
  • 學會 Linux 驅動程式架構與基本的 Linux 驅動程式觀念
  • Linux 驅動程式的入門關鍵點為「觀念的解析」,有了觀念後,便能快速看懂 Linux 的驅動程式,這也是許多 Linux 驅動程式初學者的障礙
  • 本課程為觀念導向並實作一個整體性的範例,並實際撰寫程式以了解 user-space 與 kernel-space 的關係,絕對是獨家的課程內容
  • 在 S3C6410 開發板上進行實作練習

授課講師

Jollen’s Consulting | Jollen Chen 資深講師

更詳細的講師介紹,請訪問 Jollen 老師的網站:

上課地點
台北市:地點待定(另行通知)

課程注意事項
  • 課程費用皆不含匯款/轉帳手續費
  • 本課程為實作導向, 為達最好的學習效果, 請學員自備NB. 若有任何問題請來電詢問
    1. 安裝 ubuntu 8.04
    2. 使用 Windows 環境的同學,請安裝 VirtualBox (4.x),老師將會提供上課環境 (Virtualbox image)


課程歷史紀錄

關於本課程的歷史活動紀錄:

  • 2011年07月24日:仕橙版第26期

  • 2011年04月10日:仕橙版第25期


  • 2009年11月14日:Jollen老師至仕橙3G教室開辦「Linux 驅動程式完整訓練: Jollen 的 10 堂課 ,第18期」課程上課實況。
  • 專業的Linux Device Driver 課程,專注Linux驅動程式教育訓練多年,堅持小班教學,廣受好評Linux 驅動程式課程。