筆記參考了宋寶華老師的《Linux設備驅動開發詳解:基於最新的Linux 4.0內核》以及韋東山老師的嵌入式驅動教程
筆記開發環境:
單板:第一章到第八章使用TINY4412-1611;第九章及之后章節使用iTOP4412_SCP精英版
編譯工具鏈:arm-linux-gcc-4.3.2
內核版本:linux-3.5-20170221
busybox版本:busybox-1.20.0
重要知識點會使用加粗字體
1、驅動基礎:系統調用過程
2、點亮LED:字符驅動框架;完成init()和exit();完成write()、open()和release();LED字符驅動完整代碼
3、中斷分析以及按鍵中斷:內核中斷分析;等待隊列;按鍵中斷字符驅動程序;中斷的底半部機制;中斷共享
4、poll()、select()和epoll():poll()函數;select()函數;epoll()函數;poll()、select()和epoll()的區別;驅動程序的poll()函數
5、並發控制:並發與競態;中斷屏蔽;原子操作;自旋鎖;信號量;互斥體;互斥體和自旋鎖的選擇
6、異步通知:應用程序異步通知signal();驅動程序異步通知fasync()
7、內核定時器:內核定時器的使用方法;完整代碼
8、輸入子系統:輸入子系統分層;input.c分析;input_dev;input_handler;input_dev和input_handler的連接過程;總結;更改key.c為輸入子系統
9、總線設備驅動模型:platform_device;platform_driver;platform_bus_type;總結;更改led.c為總線設備驅動
10、LCD的framebuffer設備驅動:fb_info;fb_ops;framebuffer驅動調用流程
11、三星平台framebuffer驅動:平台驅動使用的結構體;platform_driver;platform_device;關系總結;s3cfb_lcd
12、使用PWM調整LCD背光亮度:用戶空間調整背光亮度;PWM子系統;三星平台驅動分析
13、GPIO子系統:gpio_direction_output()分析;內核中GPIO的使用函數;LED驅動優化
14、i2c子系統:i2c框架分析;核心層提供的注冊函數;i2c-s3c2410.c文件分析;設備驅動層程序編寫過程
15、電容觸摸屏驅動:電容觸摸屏檢測原理;電容觸摸屏控制芯片驅動分析;自己實現觸摸屏驅動
16、USB驅動:USB固件和USB傳輸方式;Linux USB設備驅動模型;USB數據傳輸;USB鼠標設備驅動
17、塊設備驅動:塊設備概念和讀寫過程;塊設備框架分析;塊設備驅動編寫步驟
18、Nand Flash驅動和Nor Flash驅動:Nand Flash驅動分析;MTD子系統框架分析;Nor Flash驅動分析;Nand Flash驅動和Nor Flash驅動編寫
19、eMMC驅動框架分析:MMC簡介;MMC框架分析;MMC驅動框架總結
20、網卡框架分析、虛擬網卡驅動和DM9621驅動分析:網絡設備驅動的結構;網絡設備驅動分析;虛擬網卡驅動編寫過程及代碼;DM9621驅動分析
21、RTC驅動:RTC設備驅動分析;修改內核支持RTC
22、DMA驅動:DMA簡介;DMA Engine介紹和DMA設備驅動步驟;DMA設備驅動程序
23、uevnet機制和U盤自動掛載:uevent機制;編輯mdev.conf實現U盤自動掛載
24、V4L2框架主要結構體分析和虛擬攝像頭驅動編寫:V4L2框架主要結構體分析;核心層提供的注冊函數;v4l2_device和video_device的file_operations分析;v4l2.c的init()函數分析;數據傳輸和控制結構體分析;虛擬攝像頭驅動vivi.c虛擬機測試;ioctl()執行過程和v4l2_ioctl_ops必需函數指針的確定;數據的獲取過程;虛擬攝像頭驅動程序編寫過程