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
仕橙版第 38 期
本課程內容累積超過 20 年以上的公開課與企業內訓經驗,內容精實且設計完整,並堅持小班教學,讓大家都可以得到最佳的上課品質。Linux 驅動程式是一門進入門檻較高的學科,在講師過去的授課經驗中發現,其自學難度高的主要原因之一是缺乏有 效的學習方法,Jollen 依據自己多年的教學經驗,設計了一套有效率的學習方法,能協助工程師快速掌握 Linux 驅動程式的核心觀念。
學習 Linux Device Driver 的最大瓶頸是什麼?Kernel Synchrinization 一直是 Linux 驅動程式工程師的痛點。在課程裡,講師將透過一系列的 Exercise 協助學員建立「Kernel 同步」的概念。在進階課程裡,Jollen 老師將使用 1.5 天的課程時間,徹底分析 Linux 核心的同步機制,以及 Linux 驅動程式的同步實作。
如何學好 Linux 驅動程式?Linux Device Driver 的學習方式,首重「完整的觀念體系」,面對現有的 Driver 程式碼時,才能輕鬆應對。本課程帶領同學「從無到有撰寫架構良好的驅動程式」,並「對作業系統原理進行分析」,透過一個完整驅動程式的分析與研發過程,讓同學親身體驗一個高品質驅動程式形成的每個細節,真正學會 Linux Device Driver。
本課程帶領同學「從無到有撰寫架構良好的驅動程式」,並「對作業系統原理進行分析」,透過一個完整驅動程式的分析與研發過程,讓同學親身體驗一個高品質驅動程式形成的每個細節,真正學會 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 6.x (mainline) 進行更新
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):
問題一:哪些會造成 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)
|
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)
|
Jollen |
第六天 09:30 am-04:30 pm |
第 07 堂課:Kernel Synchronization (2/2)
|
Jollen |
第七天 09:30 am-04:30 pm |
第 08 堂課:Memory Mapped I/O 與 User-space driver 第 09 堂課:Subsystems 與 Class Driver
|
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 道精心設計題目,教同學從無到有寫一個完整的驅動程式,每個練習皆提供參考解答:
先訓練同學實作架構完整與行為良好的驅動程式框架,再教授如何將自已寫的程式整合到 Linux Kernel,並移植到開發板。
第二階段
教同學使用 Source-level Debug 來偵錯,並了解同步存取如何影響 Kernel 穩定性:
第三階段
教同學使用 Source-level Debug 方式,了解 Linux 的 Memory Model。課堂使用講師自行製作的迷小核心(20k 左右的 Linux Kernel)來進行 Kernel 原始碼研究:
第四階段
演練 Android 與 Linux 驅動程式整合專題,了解 Linux 驅動程式如何與 Android 整合:
● 學會 Linux 驅動程式架構與基本的 Linux 驅動程式觀念
● Linux 驅動程式的入門關鍵點為「觀念的解析」,有了觀念後,便能快速看懂 Linux 的驅動程式,這也是許多 Linux 驅動程式初學者的障礙
● 本課程為觀念導向並實作一個整體性的範例,並實際撰寫程式以了解 User-space 與 Kernel-space 的關係,絕對是獨家的課程內容
● 在 ARM 開發板與 LinkIt Smart 7688 上進行實作練習(New!)
● 了解 Linux 驅動程式與 Android 的整合實作
● 懂 C 語言
● Linux 終端機環境操作
● 具備基本的作業系統觀念(未具備者請課前預習)
實體課程:NT$65,800(上課時數 48 小時,共計 8 天)
線上課程:NT$30,800(影片時數 24 小時,線上視訊 6 小時,共計 30 小時)
● 自 2018 年起,仕橙 3G 教室課程改採遠端教學(視訊)與企業內訓為主,若您對實體教室課程有興趣,敬請採取預約報名方式,不便之處請見諒。
本課程由仕橙3G教室 (Moko365 Inc) 開發與製作,內容由仕橙研策科技有限公司版權所有,並保留所有權利。未經書面授權同意,請勿轉載、引用或複製內文。本公司業聘請承展智權暨商務法律事務所陳丁章律師、李子聿律師等,擔任本公司電子商務及智權法務諮詢顧問,並此籲請各界尊重本公司之智慧財產權。
Moko365 (仕橙3G教室) 成立於 2009 年,專注於 Android / Linux / Node.js / IoT / Blockchain 技術領域,是老字號的 Professional Training Center,為各大企業提供技術顧問與培訓服務,並協助企業進行人才養成。企業客戶涵蓋科技、金融、物流、傳播等,服務國內外近 100 企業;包含公開課程在內,累積訓練超過 10,000 人次。更多有關資訊,請瀏覽 www.moko365.com