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