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

課程講師 / Jollen

Moko365 講師技術總監、Mokoversity 創辦人、Flowchain.co 創辦人。Jollen 在 Embedded Linux 與 Linux 驅動程式有超過 15 年的開發經驗,從 2007 年開始專注在 Android 底層框架的開發,是台灣與大陸知名的 Android Framework 技術專家,更長期在科技大廠擔任 Android 軟硬整合技術顧問。

目前在台灣、大陸、美國與歐洲的科技公司,擔任區塊鏈技術顧問,同時也是 Hyperledger Taipei Meetup 共同負責人。於 2017 年在歐洲與加拿大發表二篇有關區塊鏈與去中心化 IoT 架構的論文,並獲 ACM SIGBED Review 刊登。Jollen 在 2016 年創辦 Flowchain.co,開發原創區塊鏈作業系統技術,提供 IoT 與 Blockchain 技術整合服務;其公司被國外媒體評為 10 大區塊鏈新創觀察名單之一。

其它請參考Jollen’s Blog & Jollen’s Github

Linux 驅動程式完整訓練:Jollen 的 10 堂課

仕橙版第 38 期

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

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

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

Moko365 Team

課程方向

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

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

品質特色

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

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

更新通知:

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

改版通知:

語音(Audio)相關應用將成為重要的主流領域,本課程正式新增 Linux ALSA 驅動程式完整介紹2017.09.25 New!

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

上課時數:48 小時,共計 8 天。

時程 上課大綱 講師
第一天
09:30 am-04:30 pm
第 01 堂課:Linux 驅動程式架構(包含 Kernel 4.x)
  • An overview of the big picture
  • Hello to layered architecture
  • The new kobject in kernel 2.6
  • File operations
  • Design flow of cdata
  • Understand process and kernel scheduling
Jollen
第二天
09:30 am-04:30 pm
第 02 堂課:Linux 驅動程式設計流程與 Kernel API

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

第 04 堂課:Blocking I/O 與 Process Scheduling

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

第 06 堂課:中斷處理(Interrupt Handling)與 Bottom Half
Jollen
第五天
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 堂課:Subsystems 與 Class Driver
  • USB Subsystem
  • Input Device Subsystem
  • Hardware Monitoring
Jollen
第八天
09:30 am-04:30 pm
第 10 堂課:Linux ALSA 驅動程式完整學習(Audio 專題)New!

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$51,000(上課時數 48 小時,共計 8 天)

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

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

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

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

● 日期:2018 年 06 月 30 日; 07 月 01、07、08日; 08 月 04、05、11、12日,仕橙版第 38 期

● 時間: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