教程概覽 文檔教程更新至第18篇-PWM 第1篇 驅動基礎篇 第2篇 字符設備基礎 第3篇 并發與競爭 第4篇 高級字符設備進階第5篇 中斷 第6篇 平臺總線 第7篇 設備樹 第8篇 設備樹插件 第9篇 設備模型 第10篇 熱插拔 第11篇 pinctrl子系統 第12篇 GPIO子系統 第13篇 輸入子系統 第14篇 單總線 第15篇 I2C 第16篇 SPI 第17篇 串口 第18篇 PWM 驅動基礎-進階篇 未完待續,持續更新中... 視頻教程更新至二十期 第一期_驅動基礎(包含進階篇) 第二期_字符設備基礎 第三期_并發與競爭 第四期_高級字符設備進階 第五期_中斷 第六期_平臺總線 第七期_設備樹 第八期_設備樹插件 第九期_設備模型 第十期_熱插拔第十一期_pinctrl子系統 第十二期_GPIO子系統 第十三期_輸入子系統 第十四期_單總線 第十五期_I2C 第十六期_SPI 第十七期_串口 第十八期_PWM 第十九期_RTC 第二十期_看門狗 未完待續,持續更新中... 更新內容 ◆教程更新 《iTOP-RK3568開發板驅動開發指南》V2.4 新增第十八篇_PWM ◆文檔+網盤獲取方式 聯系旺旺客服加入RK3568售后群 教程目錄 ✦ 第一篇 驅動基礎 第1章 前言 第2章 你好!內核源碼 第3章 helloworld 驅動實驗 第4章 內核模塊實驗 第5章 驅動模塊傳參實驗 第6章 內核模塊符號導出實驗 ✦ 第二篇 字符設備基礎 第7章 menuconfig圖形化配置實驗 第8章 驅動模塊編譯進內核實驗 第9章 申請字符設備號實驗 第10章 注冊字符設備實驗 第11章 創建設備節點實驗 第12章 字符設備驅動框架實驗 第13章 雜項設備驅動實驗 第14章 內核空間與用戶空間數據交互實驗 第15章 文件私有數據實驗 第16章 一個驅動兼容不同設備實驗 第17章 Linux錯誤處理實驗 第18章 點亮LED燈實驗 ✦ 第三篇 并發與競爭 第19章 并發與競爭實驗 第20章 原子操作實驗 第21章 自旋鎖實驗 第22章 自旋鎖死鎖實驗 第23章 信號量實驗 第24章 互斥鎖實驗 ✦ 第四篇 高級字符設備進階 第25章 IO模型引入實驗 第26章 阻塞IO實驗 第27章 非阻塞IO實驗 第28章 IO多路復用實驗 第29章 信號驅動IO實驗 第30章 定時器實驗 第31章 秒字符設備驅動實驗 第32章 Linux內核打印實驗 第33章 llseek定位設備驅動實驗 第34章 IOCTL驅動傳參實驗 第35章 IOCTL地址傳參實驗 第36章 封裝驅動API接口實驗 第37章 優化驅動穩定性和效率實驗 第38章 驅動調試方法實驗 ✦ 第五篇 中斷 第39章 中斷實驗 第40章 中斷申請流程 第41章 中斷下文tasklet實驗 第42章 軟中斷實驗 第43章 特殊的軟中斷tasklet分析實驗 第44章 共享工作隊列實驗 第45章 自定義工作隊列實驗 第46章 延遲工作實驗 第47章 工作隊列傳參實驗 第48章 并發管理工作隊列實驗 第49章 中斷線程化實驗 ✦第六篇 平臺總線 第50章 平臺總線模型介紹 第51章 注冊platform設備實驗 第52章 注冊platform驅動實驗 第53章 probe函數編寫實驗 第54章 點亮LED燈實驗(平臺總線) ✦ 第七篇 設備樹 第55章 初識設備樹 第56章 設備樹基本語法 第57章 實例分析:中斷 第58章 實例分析:時鐘 第59章 實例分析:CPU 第60章 實例分析:GPIO 第61章 實例分析:pinctrl 第62章 dtb文件格式講解 第63章 dtb展開成device_node實驗 第64章 device_node轉換成platform_device實驗 第65章 設備樹下platform_device和platform_driver匹配實驗 第66章 of操作函數實驗:獲取設備樹節點 第67章 of操作函數實驗:獲取屬性 第68章 ranges屬性實驗 第69章 of操作函數實驗:獲取中斷資源 第70章 參考文檔:設備樹bindings ✦ 第八篇 設備樹插件 第71章 設備樹插件介紹 第72章 設備樹插件語法和編譯實驗 第73章 設備樹插件使用實驗 第74章 虛擬文件系統ConfigFS介紹 第75章 ConfigFS的核心數據結構 第76章 注冊configfs子系統實驗 第77章 注冊group容器實驗 第78章 用戶空間創建item實驗 第79章 完善drop和release函數實驗 第80章 注冊attribute實驗 第81章 實現多級目錄實驗 第82章 移植設備樹插件驅動實驗 第83章 設備樹插件驅動分析實驗 第84章設備樹插件參考資料介紹 ✦第九篇 設備模型 第85章設備模型基本框架-kobject和kset 第86章 創建kobject實驗 第87章 創建kset實驗 第88章 為什么要引入設備模型 第89章 進一步探究設備模型 第90章 虛擬文件系統sysfs目錄層次分析實驗 第91章 什么是引用計數器 第92章 引用計數器實驗 第93章 kobject釋放實例分析實驗 第95章 創建屬性文件并實現讀寫功能實驗1 第96章 優化屬性文件讀寫函數實驗 第97章 創建屬性文件并實現讀寫功能實驗2 第98章 創建多個屬性文件的簡便方法 第99章 注冊一個自己的總線實驗 第100章 在總線目錄下創建屬性文件實驗 第101章 總線注冊流程理論分析實驗 第102章 platform總線注冊流程實例分析實驗 第103章 在總線下注冊設備實驗 第104章 設備注冊流程分析實驗 第105章 platform總線設備注冊流程實例分析實驗 第106章 為什么注冊總線之前要先注冊設備實例分析實驗 第107章 在自己的總線下注冊驅動實驗 第108章 驅動注冊流程分析實驗 第109章 probe函數執行流程分析實驗 第110章 加載驅動和加載設備先后順序分析實驗 第111章 platform總線注冊驅動流程實例分析實驗 ✦第十篇 熱插拔 第112章 熱插拔簡介 第113章 內核是如何發送事件到用戶空間 第114章 內核發送事件到用戶空間的方法 第115章 完善kset_uevent_ops結構體實驗 第116章 netlink監聽廣播信息實驗 第117章 uevent_helper實驗 第118章 使用udev掛載U盤和T卡實驗 第119章使用mdev掛載U盤和T卡實驗 ✦ 第十一篇pinctrl子系統 第120章 pinctrl子系統的引入 第121章 pinctrl probe函數講解 第122章pinctrl 子系統函數操作集 第123章dt_node_to_map函數分析 第124章pinctrl_bind_pins函數 第125章 add_setting函數分析 第126章 通過pinctrl狀態設置引腳復用實驗 第127章 猜想驗證 ✦ 第十二篇 GPIO子系統 第128章 GPIO入門實驗 第129章 GPIO控制和操作實驗 第130章 GPIO的調試方法 第131章 GPIO子系統API函數的引入 第132章 獲取單個gpio描述實驗 第133章 GPIO操作函數實驗 第134章 三級節點操作函數實驗 第135章 GPIO子系統與pinctrl子系統相結合實驗 第136章 實戰:實現動態切換引腳復用功能 ✦ 第十三篇 輸入子系統 第137章 初識input子系統 第138章 輸入子系統框架 第139章 輸入子系統數據結構介紹 第140章 認識內核中輸入子系統的源碼和裁剪 第141章 編寫最簡單的設備驅動層代碼 第142章 從最簡單的設備驅動代碼入手分析匹配規則 第143章 多對多的匹配關系分析 第144章 繼續完善設備驅動層代碼 第145 章 輸入子系統上報數據格式分析 第146章 通用事件處理層connect函數分析 第147章 通用事件處理層分配設備號分析 第148章 通用事件處理層open函數分析 第149章 通用事件處理層數據上報流程分析 第150章 通用事件處理層event函數分析 第151章 通用事件處理層read和write函數分析 第152章 核心層代碼分析 第153章 固定輸入設備的設備節點實驗 第154章 固定usb設備的設備節點實驗 ✦ 第十四篇 單總線 第155章 單總線簡介 第156章 DS18B20介紹 第157章 DS18B20驅動框架編寫 第158章 DS18B20編寫字符設備驅動框架 第159章 DS18B20驅動設備樹 第160章 DS18B20驅動復位時序編寫 第161章 DS18B20驅動寫時序編寫 第162章 DS18B20驅動讀時序編寫 第163章 DS18B20驅動溫度讀取編寫 163.4 運行測試 第164章 DS18B20驅動使用ioctl設置分辨率 第165章 DS18B20驅動使用ioctl讀取分辨率 ✦ 第十五篇 I2C 第166章 初步認識I2C 第167章 I2C上拉電阻 第168章 I2C通信時序介紹 第169章I2C子系統框架學習 第170章I2C client代碼編寫(設備樹) 第171章I2C 驅動框架編寫 第172章 使用C文件編寫I2C client代碼 第173章 完善FT5X06設備節點和驅動 第174章 FT5X06驅動程序I2C通信部分編寫 第175章 i2c_transfer函數解析 第176章 通過邏輯分析儀認識I2C波形 第177章 FT5X06數據上報部分驅動程序編寫 第178章 i2c_client結構體分析 第179章在應用程序中使用I2C 第180章 I2C Tools工具講解 第181章 使用GPIO模擬I2C驅動 第182章 使用Linux中默認的模擬I2C驅動程序 第183章 SMBus總線介紹 ✦ 第十六篇 SPI 第184章 初步認識SPI 第185章 SPI子系統框架 第186章 通用SPI外設代碼框架編寫 第187章 mcp2515驅動編寫:注冊字符設備 第188章 mcp2515驅動編寫:復位函數 第189章 mcp2515驅動編寫:讀寄存器函數 第190章 配置模式下寄存器的配置 第191章 mcp2515驅動編寫:修改工作模式 第192章 mcp2515驅動編寫:完善write和read函數 第193章 Linux中通用SPI設備驅動 第194章 如何在Linux中使用模擬SPI 第195章 實踐:移植官方mcp2515驅動 ✦ 第十七篇 串口 第196章 串口簡介 第197章 串口通信協議 第198章 串口通信接口類型 第199章 串口子系統框架 第200章uart_driver注冊流程分析 第202章 串口編程 第203章 GPS模塊編程 ✦第十八篇 PWM 第204章 初步認識PWM 204.1 PWM基礎知識 204.2 iTOP-RK3568開發板PWM接口介紹 204.3 SG-90舵機介紹 第205章 PWM子系統框架 205.1 PWM設備驅動層 205.2 PWM核心層 205.3 PWM適配器驅動層 第206章 使用sysfs接口操作pwm 206.1 配置PWM設備樹 206.2 使用sysfs操作PWM 第207章 pwm控制器注冊流程分析 第208章 SG90舵機驅動實驗 208.1 pwm子系統API講解 208.1.1 pwm_config 函數 208.1.2 pwm_set_polarity 函數 208.1.3 pwm_enable 函數 208.1.4 pwm_disable 函數 208.1.5 devm_of_pwm_get 函數 208.2 完善SG90設備樹 208.3 實驗程序編寫 208.3.1 編寫驅動程序 208.3.2 編寫測試APP 208.4 運行測試 208.4.1 編譯驅動程序 208.4.2 編譯應用程序 208.4.3 運行測試 第209章 模擬PWM 209.1 高精度定時器介紹 209.2.1 高精度定時器API講解 209.2.1 hrtimer_init 209.2.2 hrtimer_set 209.2.3 hrtimer_srart 209.2.4 hrtimer_forward 209.2.5 hrtimer_cancel 209.3 修改LED設備樹 209.4 實驗程序編寫 209.4.1 編寫驅動程序 209.4.2 編寫測試APP 209.5 運行測試 209.5.1 編譯驅動程序 209.5.2 編譯應用程序 209.5.3 運行測試 209.6 呼吸燈實驗 第210章 sysyfs操作pwm原理講解 第211章 pwm輸入捕獲驅動實驗 211.1 設備樹的修改 211.2 驅動代碼分析 211.2.1 probe函數 211.2.2 PWM模式初始化函數 211.2.3 PWM 捕獲中斷處理函數 211.2.4 讀函數 211.3 實驗程序編寫 211.3.1 編寫驅動程序 211.3.2 編寫測試APP 211.4 運行測試 211.4.1 編譯驅動程序 211.4.2 編譯應用程序 211.4.3 運行測試 ✦ 驅動基礎-進階篇 進階1 編譯進內核的驅動系統是如何運行的? 進階2 讓驅動快一點被加載實驗 進階3 驅動代碼使用Makefile的宏 進階4 內核是如何運行ko文件的_insmod 進階5 自定義實現insmod命令實驗 進階6 內核運行ko文件實驗——系統調用 進階7 向系統中添加一個系統調用 進階8 內核運行ko文件總結 |