fbpx

P 728x90 113

 

banner linux driver v2 1

現在位置:艾鍗學院Embedded Linux 課程> 嵌入式Linux驅動程式

你有這樣的問題嗎


▪ 有8051, AVR單晶片等MCU開發經驗,如I2C, SPI 等,但不知如何將這些Driver移植到 Linux平台
▪ 
Linux 驅動程式程式進入點在那裡? Linux 驅動程式要如何跟上層的應用程式溝通?不同硬體裝置l驅動程式的架構是不是不同? 在Linux多工的環境下, 驅動程式如何處理多工同時存取? 同步I/O與非同步I/O、中斷、DMAI/O方式,Linux 驅動程式如何撰寫?
▪ 看過一些
Linux 驅動程式的書,但看不懂或者是,.....好像懂,但卻又不知如何寫起?!
▪ 為什麼
Windows USB Driver裝不起來? 安裝過程因找不到檔案而安裝失敗 
▪ 如何看懂 
HID格式、如何獲得device傳送過來的資料?

 

課程目標

快速上手: Raspberry Pi Linux驅動程式並且搭配本公司所設計的Raspberry Pi I/O擴充板作為驅動程式實戰演練,實戰GPIO, UART, I2C, SPILinux硬體驅動,並了解USB硬體架構以及LinuxUSB的軟體框架。

1. Linux驅動程式初探-Linux核心程式介面:

學習Driver撰寫的各個層面包含核心APIs、中斷處理、同步、記憶體管理等等。導正學員Linux Device Driver與 Linux 基本作業系統的觀念,為將來的Driver coding打下良好的基礎。可以了解user-spacekernel-space 之間的關係。可以開始研讀及參考kernel裡面或是別人撰寫的 device driver source code

2. 實際硬體驅動-Linux驅動程式:

能了解硬體工作原理與kernel對特定硬體的驅動程式架構。你可以了解真實硬體驅動程式的開發。如UART, GPIO I2CSPI 等驅動程式。

3. 教你如何於Linux 下開發USB設備的驅動程式:

你會了解USB硬體架構以及LinuxUSB的軟體框架。課程從USB HID 類別到USB Mass Storage 類別,由淺入深一步步帶你從實作中,學會USB開發方法與除錯技巧。 此外,課程使用立肯科技USB邏輯分析儀器,揭開你看不到的USB的神秘面紗。

課程全面採用艾鍗所設計的最新Raspberry Pi I/O 擴充板

ADC、DC馬達驅動、G-sensor、紅外線收發器、OLED、Buzzer、LED、Button、DIP Switch、Relay 
new Raspberry PI IO v3

課程大綱 
本課桯使用Linux Kernel 4.14.x 版本
【Linux 驅動程式實戰】
不管你是要自己撰寫或移植,這都是資深嵌入式系統工程師的必修課。 帶你熟悉Linux驅動程式架構並能實際動手撰寫Linux 核心底層的驅動程式。 了解如何撰寫Linux硬體驅動程式,配合Raspberry Pi 硬體實戰 GPIO Driver、Linux中斷處理、UART Driver、SPI Driver、I2C Driver、ADC Driver等Driver。

● 字元裝置Driver 
● Linux Misc Device
● Linux GPIO 驅動程式 for LED, Button,Relay
● Linux 中斷註冊 & 中斷控制器HAL層架構 
 Bottom Halves (Tasklet & Work Queue)
● 進階字元Driver: 

Non-blocking I/O : 使用Wait Queue & completion 機制

kernel 對UserSpace通知: SIGIO 信號非同步通知,call_usermodehelper()

● Kernel Timer List (Jiffies, timer ticks) for LED 閃爍
● Linux Serial port 驅動程式 for Bluetooth 模組
● Linux Platform Device & Platform Driver 架構
● Linux Device Tree 
● Linux SPI Client驅動程式 for ADC Driver (MCP3008)
● Linux IIO Driver(Linux Industrial I/O Subsystem) 

● Linux SPI Bus master 驅動程式 for BCM2835 SPI controller
Linux I2C Client驅動程式 for EEPROM
Linux I2C Bus master驅動程式 for BCM2835 I2C controller
● Linux User Space Driver - BCM2835 C I/O Library

 

【Linux USB 驅動程式實戰】
若你Linux的開發平台上有USB Interface(不管是Client或Host),都會需要學,可學到1:Linux USB SW Stack . 2.如何在Linux上和USB interface的device溝通(ex:有些Modem模組就是USB Interface)。
Part I Fundamentals of USB

● Introduction to USB Architecture
● USB Data Flow Type
● USB Communication protocol
● USB Device Enumeration
 Linux USB Driver Software Framework

Linux USB Host Controller Driver

Linux USB Class driver

Linux USB Core and API

Linux Urbs

●USB Debug using USB Protocol Analyzer (使用立肯科技USB分析儀)
Part II Linux USB Driver實作 (Writing a USB Driver)

● USB HID – Mouse driver 實作

如何看懂 HID-Mouse資料格式

如何獲得mouse device傳送過來的資料

如何獲得mouse device的descriptors

透過USB Mouse控制Raspberry Pi GPIO

● USB HID – keyboard driver實作

如何看懂 HID-Keyboard資料格式

如何獲得kerboard device傳送過來的資料

如何獲得kerboard device的descriptors

Lab應用: 透過USB鍵盤向控制Raspberry Pi GPIO

● USB HID雙向通訊應用

● USB Mass storage實作

如何看懂 Mass Storage資料格式

如何得到Flash Drive的相關資訊 (ex:隨身碟名稱,容量…)

如何得到Flash Drive的Partition Type

Lab應用: SCSI command讀寫Flash Drive

 
 

適合對象

1. 需要移植或整合一些DriverLinux平台上。
2. 已在嵌入式Linux開發相關領域,欲再增強本身Linux Device Driver專業技能者。
3. 想學會如何撰寫完整Linux驅動程式與開發技巧。

職涯方向

Linux驅動程式工程師 |  嵌入式Linux系統開發工程師 韌體工程師 | Linux 軟體工程師 | Linux平台驅動程式 Linux System Engineer |  Embedded Linux driver programmer  |  Linux Firmware Engineer  |  資訊家電設計師  |  網路應用程式設計師  

師資陣容與實務分享

 

teacher1

Collin  講師具18年嵌入式開發與Linux驅動程式設計經驗

▪ 國立雲林科技大學電機系

▪ Linux 驅動程式  ▪ Embedded linux 開發  ▪ ARM u-boot 開發

▪ 產品開發經驗: Android cell phone, P.O.S(工業電腦)

 
嵌入式Linux系統的另外一個主要工作就是加入新硬體,此時我們要能了解硬體界面、控制原理與晶片功能,更重要的是為它撰寫一隻Linux驅動程式。 涉及底層Linux驅動程式架構,對於Linux核心程心的掌握是一定要具備的!如何學好它?先要有一個實驗平台搭配硬體裝置,試著學會同步與非同步I/O控制、硬體中斷、I/O通訊等實際裝置驅動才有真正的感覺在設計驅動程式。此外,Linux驅動程式開發也是要準備好相關開發環境,才能開始編譯,所以通常沒概念者也難以切入。 Linux驅動程式是嵌入式系統的核心技術之一,但台灣很少有大學能夠開這種課程,因此初入職場的工程師,即使程度好的也僅僅只具觀念上與架構上的認知而已,鮮少有人真正有驅動程式的開發經驗。

 

teacher4

Kangta  ※講師具18年以上Linux嵌入式系統驅動程式設計經驗,在國內一線PC/NB ODM廠擔任主任級資深工程師!

▪ 輔仁大學電子工程碩士  ▪ 上市公司資深軟韌體設計工程師

▪ Embedded Linux Device Driver  ▪ C/C++  ▪ 嵌入式Linux程式設計

▪ USB韌體設計 ▪ 8051單晶片/Assembly Language  ▪ 類比/數位電路設計

 
在業界有兩個很難入手技術,一個是RF無線通訊,另一個就是USB,因為都很複雜。在USB-IF (http://www.usb.org)上有很多公開文件,光是USB核心架構 (700多頁),而不同的硬體類別也有不同標準,例如USB Mouse、Keyboard 有HID標準、USB隨身碟也有USB Mass Storage標準,這麼多標準意謂你就要再去看文件,你才知道USB資料到底怎麼送,內容是長怎樣? 要真能消化它,豈能不勞心不勞力! 我以18年USB韌體設計與Linux USB驅動程式開發經驗,教你如何快速在Linux下開發USB設備的驅動程式,你會了解USB硬體架構以及Linux 在USB的軟體框架。帶你從實作中從USB HID 類別到USB Mass Storage 類別。另外我會用艾鍗採購的USB 3.0邏輯分析儀器,教你學習USB動作流程與除錯技巧。 USB比I2C、SPI、UART複雜度提升很高,但也由於在公司裡會的人其實很少,因此會的人價值也不同。
課程Q&A
1. 學習Linux驅動程式要具備那些基礎?
具備基本的Linux操作且熟悉C語言。另外,對於Linux系統程式有基本的開發經驗,尤其是與I/O相關的系統呼叫,如 read,write, ioctl, select等。最後,擁有一些基本硬體控制的觀念。
2. Linux驅動程式和核心之間的關係?
Linux 驅動程式運行時包在核心裡面的,核心視驅動程式為「黑盒子」,核心不知道也不想知道驅動程式裡面那些硬體控制的細節,但上層應用程式或核心本身又要去使用硬體,所以核心只好 定義出一個"驅動程式架構與界面",之後核心才可 以透過這個界面來操作硬體而又不用去知道其硬體驅動程式的相關細節,諸如暫存器讀寫。
3. Linux驅動程式架構?
Linux驅動程式的撰寫必須符合核心所定義的"架構",因為Linux驅動程式是和核心一起運行的,任何驅動程式設計錯誤,都可能導致kernel panic ! 但僅管如此,也不代表驅動程式的撰寫者一定要深入探究核心內部的太多細節,只要了解一些常用標準的kernel API與 synchronization之類的問題即可。要想寫出架構良好的Linux驅動程式,必須先理解核心某些子系統的運作原理或是各子系統之間的關連性,例如你要撰寫的是USB界面的網路卡,那麼你就要先去了解Linux核心所定義的USB子系統的架構,同時你也要去看網路子系統的架構,以及USB和網路子系統彼此間的關連性,例如資料流的傳遞和相關的kernel API。”架構”這一詞意謂著,核心已事先定義出一般化的資料結構與操作函式,你只要去撰寫特定的部份,通常也就是跟硬體有關的部份,所以整個Linux驅動程式並非總是從頭寫起。
4. Raspberry Pi 已有一些週邊GPIO Library可使用,如Wiring Pi ,那為什麼還要修這門課?
 
Wiring Pi 屬於在應用層User Space的作法, 而非在Kernel 核心層實作。應用層的Driver作法,必須等到root 檔案系統存在後才能執行, 無法在Linux kernel 開機階段就自動掛載driver,且應用層只能使用Polling 無法使用核心硬體中斷機制,所以Wiring Pi 的作法僅適合用在簡單慢速對效能不要求的裝置。本課程為底層 Kernel Space的作法效能高。另一方面, 從104觀察就業市場, Linux驅動程式或嵌入式Linux系統開發的相關工作, 指的都是在 Kernel Space的開發。然不可諱言, 對於一般學生使用Wiring Pi 這類的library 確實易於上手,畢竟僅需有Arduino開發能力即可, 只是產業界對於RD研發工程師而言,有較高的職能要求。
 
5. Raspberry Pi I/O 擴充板有什麼功能?
 
  • 1.由於Raspberry Pi 沒有類比輸入的能力: 所以此擴充板加入ADC 晶片以提供8 通道的類比訊號輸入, 如此可以讓Raspberry Pi 可以擁有連接類比感測器的的能力。
  • 2.拉出Pi的硬體PWM訊號腳, 並加入DC 驅動電路, 使Pi 可以直接連接DC 馬達及BLDC無刷馬達
  • 3.SB Debug Console: 不用再買Serial-TO-USB的轉接線材了, 本擴充板已內建PL2303晶片了, 故可以直接接到PC USB
  • 4.同時擁有IR紅外線發送器及接收器, 可以讓Pi當作多媒體的應用平台或IR遙控器
  • 5.具OLED的模組座,可以直接接上OLED用來顯示系統狀態 ( I2C OLED 將隨出貨附贈)
  • 6.TH1 可以直接連接光敏電阻, 可以進行光度感測 (光敏電阻將隨出貨附贈)
  • 7.內建 G-Sensor (LIS3DH) 可以感測Pi 在X,Y,Z軸方向的移動狀態
  • 8.具有nRF24L01的2.4G RF通訊模組座,可以進行2.4G 無線通訊實作
  • 9.用DIP Switch 記錄不同狀態,Pi 就能有不同的啓動狀態或選擇進入不同的功能模式
  • 10.接出I2C連接座、SPI連接座方便外接更多的數位式感測器
    了解更多... 
講義預覽

 

學過Linux驅動程式的學員也看了這些課程
 
上課花絮
▪ 從無到有的培訓過程,紮實前瞻且完善
 
▪ 經濟部工業局智慧電子學院短期在職訓練