ARM Embedded Linux驅動程式設計工程師課程
###課程特色### 本課程是為了想學習如何使用C語言,透過Linux系統,去控制各種硬體周邊的學員而設計的。除了會講解各種硬體的基本運作原理外,還會教您如何撰寫Linux驅動程式,讓您能夠直接控制各種周邊。除此之外,也會對Linux內如何撰寫中斷、多工、記憶體控制等內容詳加介紹。如果您已經會C語言,本課程能讓您感受完全掌控整個嵌入式系統的成就感。
Level: Intermediate
Total Hours: 54 小時
Number of Lessons: 18
開課日期: Oct 29, 2015
Day of the week: Wed
NTD 97,200

Course Introduction

###課程目標###

了解嵌入式各種周邊硬體的運作原理。
運用 C 語言技術編修、調整驅動程式。
能撰寫 Linux 驅動程式,並控制各種周邊。
了解 Linux 中如何撰寫中斷、多工、或存取記憶體相關程式。

###課程對象###

  • 已經有 C 語言程式基礎,想學習如何撰寫程式操控整個嵌入式系統硬體的學員。
  • 對嵌入式程式設計有興趣者。
  • 有心朝嵌入式軟體工程師領域邁進的學員。
  • 未來對於進入 Embedded Linux 相關工程師有興趣者。

###課程內容###

第一章 驅動程式概論

  • 何謂驅動程式
  • 是否一定要有作業系統
  • 撰寫驅動程式應考慮的事項
  • 編寫驅動程式的技術基礎

第二章 驅動程式開發簡介

  • 撰寫驅動程式的方法
  • 「模組(Driver Module)」介紹
  • Linux 驅動程式的分類
  • User Space 驅動程式

第三章 開發環境設定

  • 作業系統
  • 文字編輯器
  • 編譯器
  • 核心原始碼
  • 開發板執行環境
  • 驗證環境安裝是否正確

第四章 您的第一個驅動程式

  • Hello! World! 模組
  • 將驅動程式編譯為模組
  • 由模組外傳入參數

第五章 核心基礎資料結構

  • 一般資料型別
  • 核心資料型別
  • 檔案系統相關資料結構:inode, dentry, file
  • 核心內常用資料結構:list_head, klist, kobject, kset, subsystem

第六章 裝置驅動程式模型

  • 裝置驅動程式模型簡介
  • udev 裝置檔案系統簡介
  • sysfs
  • udev 相關結構體:device, device_driver, bus_type, class

第七章 字元驅動程式

  • 字元驅動程式簡介
  • cdev 結構體介紹
  • 裝置編號介紹
  • file_operations 結構體介紹
  • 範例:globalmem

第八章 並行控制

  • 並行控制簡介:並行控制與競爭條件
  • 並行控制基本機制
  • – 中斷抑制(Interrupt Disable)
  • – 單體操作(Atomic Operations)
  • 自旋鎖系列
  • – Spin Lock
  • – Read-Write Spin Lock
  • – Seqlock
  • – Read-Copy-Update (RCU)
  • 信號體系列
  • – Semaphore
  • – Completion
  • – Read-Write Semaphore
  • – Mutex

第九章 阻塞與非阻塞式 I/O

  • 簡介
  • 阻塞式 I/O:等候佇列(Waiting Queue)
  • – 資料結構介紹:wait_queue_head_t, wait_queue_t
  • – 定義與初始化
  • – 增減等候佇列內的項目
  • – 休眠與喚醒佇列內的項目
  • – 範例
  • 非阻塞式 I/O:輪詢(Polling)
  • – 基本原理
  • – 相關函式:select(), poll(), epoll()
  • – 範例

第十章 阻塞與非阻塞式 I/O

  • 信號通知(Signaling)
  • 如何使驅動程式支援非同步 I/O
  • 範例

第十一章 中斷

  • 中斷簡介
  • Linux 中斷機制:頂部/底部中斷
  • Linux 中斷實作
  • 中斷共享
  • 實例

第十二章 記憶體存取

  • Linux 記憶體管理原理與各種位址空間
  • – Physical Address
  • – Bus Address
  • – Kernel Logical Address
  • – Kernel Virtual Address
  • – User Virtual Address
  • 核心記憶體申請:kmalloc() / kfree() vs. vmalloc() / vfree()
  • 虛擬與實體記憶體映射
  • 核心記憶體回收機制
  • – Lookaside Cache
  • – Memory Pool

第十三章 LED 驅動程式

  • LED 驅動的硬體原理
  • LED 驅動程式實例解說
  • – 製作驅動程式骨架
  • – 註冊驅動程式
  • – 相關函式撰寫:open(), release(), ioctl()
  • – 測試與驗證

第十四章 按鍵驅動程式

  • 按鍵驅動程式的硬體原理
  • 專案環境設定
  • 實例解說
  • – 驅動程式的註冊
  • – 相關函式的撰寫:open(), release(), iotrl(), read(), write()
  • – 中斷改寫與攔截
  • – 測試與驗證

第十五章 背光調整與脈寬調變

  • 背光調整硬體原理
  • 類比與數位轉換:脈寬調變(PWM, Pulse Width Modulation)
  • 實例解說
  • – 電路圖相關腳位說明
  • – 設定脈寬調變用的「計時器(Timer)」
  • – 程式碼撰寫

第十六章 USB 驅動程式

  • USB 特性簡介
  • USB 邏輯單元:Device, Config, Interface, Endpoint
  • USB 命令封包:URB (Usb Request Block)
  • 實例解說

第十七章 LCD 驅動程式

  • LCD 硬體原理
  • 影格緩衝區(Frame Buffer)
  • LCD 三大驅動程式
  • – 主驅動程式(Main Character Device Driver)
  • – 影格緩衝區驅動程式(Frame Buffer Device Driver)
  • – 背光驅動程式(Backlight Device Driver)
  • 實例解說