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

課程講師 / Jollen

Moko365 講師暨技術總監,Flowchain 基金會(新加坡)創辦人。Jollen 在 Embedded Linux 與 Linux Device Driver 有超過 20 年的研發與企業內訓經驗,在 Android Framework 軟體架構方面,也有 15 年的授課經驗,更長期在科技業擔任 Linux & Android 技術顧問。

Jollen 在 Linux 基金會舉辦的 Open Source Summit 全球開發者社群大會上,多次擔任講者發表演說,在開源領域有多年經驗。此外,於 2017 年開始,在歐洲與加拿大發表有關區塊鏈與去中心化 IoT 架構的論文,並獲 ACM SIGBED Review 刊登。Jollen 在 2016 年創辦 Flowchain 基金會,開發原創區塊鏈作業系統技術,提供 IoT 與 Blockchain 技術整合服務,並獲得多項相關國際專利。更多資訊,請參考 Jollen’s Blog

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 Device Driver 的最大瓶頸是什麼?Kernel Synchrinization 一直是 Linux 驅動程式工程師的痛點。在入門課程裡,講師將透過一系列的 Exercise 協助學員建立「Kernel 同步」的概念。在進階課程裡,Jollen 老師將使用 1.5 天的課程時間,徹底分析 Linux 核心的同步機制,以及 Linux 驅動程式的同步實作。

Moko365 Team

課程方向

Jollen 老師說:「如何分析程式碼,並分別找出在單處理器與多處理器環境下的同步問題,是學習 Kernel Synchronization 的基本功。」進階課將引導學員,建立 Kernel Synchrinization 的分析能力,並學習單處理器與多處理器的同步分析技巧。受訓後的學員,都能輕鬆駕馭 Mutex、Spinlock、IRQ disabling 等同步技術。

品質特色

台灣首屈一指的 Linux 驅動程式課程,企業內訓指名講師。本課程內容累積超過 10 年的公開課程經驗,內容精實且設計完整。Linux 驅動程式是一門進入門檻較高的學科,在講師過去的授課經驗中發現,其自學難度高的主要原因之一是缺乏有效的學習方法,Jollen 依據自己多年的教學經驗,設計了一套有效率的學習方法,能協助工程師快速掌握 Linux 驅動程式的核心觀念。

除了驅動程式的設計與實作,會因為要與 Android 整合而有所不同,Jollen 老師特別整理過去的研發經驗,為同學說明這個部份的技術。本課程將繼續堅持小班教學,讓大家都可以得到最佳的上課品質。

更新通知

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

改版通知:

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

SP002

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
第 07 堂課:Kernel Synchronization (1/2)
  • 基本 Kernel Synchronization
  • Race Condition 與分析技巧練習
  • Reentrancy 與 Mutex
  • Spinlock
Jollen
第二天
09:30 am-04:30 pm
第 07 堂課:Kernel Synchronization (2/2)
  • 單處理器 vs 多處理器
  • IRQ Disabling
  • Interrupt Context 與 Process Contenxt 同步控制
  • 進階 Kernel Lock APIs
Jollen
第三天
09:30 am-04:30 pm
第 08 堂課:Memory Mapped I/O 與 User-space driver
第 09 堂課:周邊驅動程式與 Sysfs
  • USB Subsystem
  • Input Device
  • Hardware Monitoring
  • I2C Subsystem
Jollen
第四天
09:30 am-04:30 pm
第 09 堂課:周邊驅動程式與 Sysfs
  • Subsystem(分層架構)觀念解析與實務
  • Sysfs 架構與實作
  • Sysfs Class Driver
  • Process Model、架構設計與穩定性
第 10 堂課:Android & Linux Device Driver
  • Android 與 Linux 驅動程式整合: HAL 架構介紹
  • 解析 Android 系統下的驅動程式實作差異

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 天)

● 開課前一週,天天早安鳥;開課前一週完成繳費享有「早安鳥」優惠價:NT$ 23,200,我要早安鳥報名

● 持 VIP Code 或仕橙會員卡,再折 NT$ 1,000

● 持仕橙折價卷:依面額折抵,一門課程限用一張,可搭配 VIP Code 或仕橙會員卡使用

● 持仕橙折價卷的學員,請於來信說明,並於開課當日繳交,如無法繳交折價卷者,須補繳課程費用

● 日期:2017 年 06 月 10、11、17、18 日,仕橙版第 36 期

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

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

下載報名表(.doc)

下載報名表(.pdf)

* 為必須填寫欄位

仕橙3G教室

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

Moko365 (仕橙3G教室) 成立於 2009 年,專注於 Android / Linux / Node.js / IoT / Blockchain 技術領域,是老字號的 Professional Training Center,為各大企業提供技術顧問與培訓服務,並協助企業進行人才養成。企業客戶涵蓋科技、金融、物流、傳播等,服務國內外近 100 企業;包含公開課程在內,累積訓練超過 10,000 人次。更多有關資訊,請瀏覽 www.moko365.com