▪ Linux 驅動程式架構 ▪ Linux Device Driver架構 ▪ Linux Coding Style ▪ Kernel Space VS User Space ▪ Linux Device Driver種類 (Char, Block and Network) ▪ Compiling (Makefile,Kconfig) & Loading ▪ 開發環境建立-暖身: 我的第一個Kernel Module-Hello world
2. Common Kernel APIs
▪ Kernel Thread ▪ Synchronization (Spin Lock, Mutex, Semaphore) ▪ Memory Allocation ▪ Cache & Memory Map ▪ Proc file system ▪ Sysfs file system ▪ HAL I/O Routine ▪ Kernel Double Linked List
3. How to Debug Device Driver?
Part II - Linux 驅動程式實戰
● 字元裝置Driver ● Linux Misc Device ● Linux GPIO 驅動程式 for LED, Button,Relay ● Linux 中斷註冊 & 中斷控制器HAL層架構 ● Bottom Halves (Tasklet & Work Queue) ● 進階字元Driver:
● 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 驅動程式運行時包在核心裡面的,核心視驅動程式為「黑盒子」,核心不知道也不想知道驅動程式裡面那些硬體控制的細節,但上層應用程式或核心本身又要去使用硬體,所以核心只好 定義出一個"驅動程式架構與界面",之後核心才可 以透過這個界面來操作硬體而又不用去知道其硬體驅動程式的相關細節,諸如暫存器讀寫。