手把手教你學Linux設備驅動開發
北京迅為電子有限公司
買這商品的人也買了...
-
嵌入式 Linux 應用開發完全手冊$539$512 -
程式設計師的自我修養-連結、載入、程式庫$580$493 -
機器學習開發神器!Google Cloud Platform 雲端開發應用超入門$490$416 -
Kaggle 競賽攻頂秘笈 -- 揭開 Grandmaster 的特徵工程心法,掌握制勝的關鍵技術$1,000$850 -
超圖解 ESP32 深度實作$880$748 -
$559嵌入式 C語言自我修養 — 從芯片、編譯器到操作系統 -
$801原子嵌入式 Linux 驅動開發詳解 -
$504穿越作業系統迷霧:從零實現作業系統 -
寫程式前的必學工具:命令列、編輯器、Git/GitHub,軟體開發三本柱一次搞定$490$387 -
AI 超神筆記術:NotebookLM 高效資料整理與分析 250技$480$379 -
$504C++ OpenCV圖像處理——理論、方法與實踐 -
$652基於HLS的深度經網絡FPGA硬件加速器設計 從算法到硬件 -
FPGA 匠人手記:工程師的技術成長之路$593$563 -
深度學習習題詳解$539$512 -
Harness 工程實戰:從零開始駕馭 AI 軟件工程$479$455 -
AI 驅動開發 - 從 Prompt 到 Loop,建立可控、可驗、可恢復的工程系統$720$568 -
用 macOS 完整部署地端模型$1,080$853 -
化繁為簡的藝術 - 高併發大模型複雜架構實作$980$774 -
萬顆 GPU 的訓練:分散式機器學習 — 系統工程與實戰 (好評熱銷版)$1,280$1,011 -
JavaScript 程式設計|從核心語法、動態網頁到 AI 應用程式$620$489 -
AI 超神全能助理術:Gemini Notebook 高效資料整理與分析 300技 (全新無敵升級版) (附範例/提示詞/6大影音教學)$499$394 -
Google Gemini Spark AI 代理人跨域落地師全攻略:你交辦,它做完—教師、主管、上班族、商家、接案者的 24 小時 AI 秘書$690$538 -
輕鬆學會 RAG 實作開發:在 NVIDIA 微服務打造零幻覺的 LLM 與生成式 AI$620$483 -
ChatGPT × Codex 全攻略:從零基礎到自動化,打造你的 AI Agent 工作流$1,000$780 -
像工程師一樣思考,一書讀懂 CPO:圖解資料中心光互連 (Co-Packaged Optics)$450$382
相關主題
商品描述
Linux 設備驅動程序(常簡稱為驅動)開發是構建智能硬件與物聯網系統的核心技術,它不僅要求開發者深入理解 Linux 內核工作機制,還要求開發者掌握硬件交互、並發控制、中斷處理等關鍵系統級編程技能。 本書系統講解嵌入式 Linux 設備驅動的知識體系與開發方法。全書從前置知識與Linux內核編程出發,深入講解字符設備驅動、並發與競爭、I/O 模型、中斷、平臺總線、設備樹、設備模型、熱插拔技術等核心機制。在此基礎上,本書結合現代嵌入式開發的實際需求,深入剖析pinctrl 與GPIO子系統、輸入子系統等關鍵框架。之後,以單總線、I2C 總線、SPI 總線、串口通信、PWM、CAN 總線等為例,系統闡述復雜總線設備的驅動開發流程,並進一步拓展至網絡設備、IIO 子系統、USB 子系統及塊設備驅動的實現,涵蓋從外設到網絡、從通信到存儲的各個驅動開發領域。 本書面向嵌入式系統開發工程師、Linux 驅動工程師,以及具有相關基礎的嵌入式開發愛好者,既可作為系統學習驅動開發的指南,也可作為高校嵌入式相關課程的教學參考書。
作者簡介
北京迅為電子有限公司(簡稱迅為公司)是一家專註於嵌入式平臺與解決方案的高新技術公司,也是物聯網與邊緣計算領域的重要技術創新公司。 迅為公司研發團隊在嵌入式領域擁有十余年的技術積累與行業實踐經驗,在硬件設計、嵌入式 Linux 系統與 Android 系統定制、底層驅動開發、系統性能優化及合規性設計等方向形成了完整的技術棧,具備出色的跨行業項目落地能力。團隊長期深耕嵌入式核心技術,致力於為工業物聯網、智能終端、邊緣計算等領域提供可靠的嵌入式平臺與解決方案,持續助力國家智能制造與信息化建設。
目錄大綱
第 1 章 前置知識..............................................1 1.1 Linux 基礎知識.................................1 1.1.1 Linux 的前身——UNIX ...........1 1.1.2 GNU 和 Linux 的發展 ..............2 1.1.3 Linux 的優勢.............................2 1.1.4 Linux 版本命名.........................3 1.2 設備驅動開發的基礎知識.............5 1.2.1 設備驅動分類............................5 1.2.2 框架學習法................................5 1.3 iTOP 開發板介紹.............................6 1.3.1 連接方式介紹............................6 1.3.2 核心板介紹................................8 1.3.3 底板介紹..................................11 1.4 小結.....................................................13 第 2 章 Linux 內核編程 ...............................14 2.1 Linux 內核源碼結構......................14 2.2 helloworld 驅動程序 ......................15 2.3 將驅動編譯為內核模塊 ...............16 2.3.1 內核模塊編譯及加載與卸載....16 2.3.2 內核模塊參數傳遞..................17 2.3.3 內核模塊符號導出..................19 2.3.4 內核模塊的加載流程..............19 2.4 將驅動編譯進內核.........................20 2.4.1 圖形化操作界面......................20 2.4.2 Kconfig 與 Makefile ................21 2.4.3 編譯進內核的驅動的加載流程..................22 2.5 小結....................................................24 第 3 章 字符設備驅動..................................25 3.1 文件操作集......................................25 3.2 字符設備註冊..................................26 3.2.1 申請和釋放設備號 .................26 3.2.2 創建設備節點 .........................26 3.2.3 註冊字符設備 .........................27 3.3 雜項設備註冊..................................28 3.4 內核空間與用戶空間數據交互機制...........................29 3.5 文件私有數據管理........................30 3.6 ioctl()函數..........................................31 3.7 內核定時器......................................33 3.8 RTC 驅動..........................................35 3.9 看門狗驅動......................................36 3.10 驅動程序調試方法......................38 3.11 小結..................................................39 第 4 章 並發與競爭.......................................40 4.1 並發與競爭概述.............................40 4.2 原子操作...........................................40 4.3 自旋鎖................................................42 4.4 信號量................................................44 4.5 互斥鎖................................................46 4.6 小結....................................................46 第 5 章 I/O 模型............................................. 47 5.1 阻塞與非阻塞 I/O ......................... 47 5.2 I/O 多路復用................................... 51 5.3 信號驅動 I/O................................... 52 5.4 小結.................................................... 53 第 6 章 中斷 .................................................... 54 6.1 中斷概述........................................... 54 6.2 中斷的申請與處理........................ 55 6.3 中斷的底半部實現方法............... 57 6.3.1 tasklet....................................... 57 6.3.2 軟中斷..................................... 59 6.3.3 工作隊列................................. 60 6.3.4 中斷線程化............................. 62 6.4 小結.................................................... 63 第 7 章 平臺總線........................................... 64 7.1 平臺總線模型................................. 64 7.2 平臺總線驅動開發........................ 67 7.2.1 平臺設備註冊和卸載............. 67 7.2.2 平臺驅動註冊和卸載............. 68 7.3 小結.................................................... 69 第 8 章 設備樹................................................ 70 8.1 設備樹概述...................................... 70 8.2 設備樹語法...................................... 71 8.2.1 根節點..................................... 71 8.2.2 子節點..................................... 71 8.2.3 reg 屬性................................... 72 8.2.4 compatible 屬性 ...................... 72 8.2.5 中斷相關屬性......................... 73 8.2.6 自定義屬性............................. 74 8.2.7 修改或追加節點內容............. 74 8.2.8 包含文件................................. 75 8.3 常用的 of 操作函數....................... 75 8.3.1 查找節點函數......................... 75 8.3.2 獲取屬性函數......................... 76 8.3.3 映射函數................................. 76 8.3.4 獲取中斷資源函數................. 77 8.4 設備樹展開流程............................. 77 8.5 設備樹插件.......................................81 8.6 小結.....................................................82 第 9 章 設備模型............................................83 9.1 設備模型概述..................................83 9.1.1 總線..........................................83 9.1.2 設備..........................................84 9.1.3 設備驅動..................................84 9.1.4 類..............................................86 9.2 kobject 與 kset ..................................87 9.3 引用計數...........................................91 9.4 小結.....................................................93 第 10 章 熱插拔技術 ....................................94 10.1 熱插拔概述....................................94 10.2 udev 和 mdev 規則.......................94 10.3 小結..................................................97 第 11 章 pinctrl 與 GPIO 子系統 .............98 11.1 pinctrl 子系統概述.......................98 11.2 pinctrl 子系統使用.....................101 11.3 GPIO 子系統概述 .....................106 11.4 pinctrl 子系統與GPIO 子系統配合使用.................107 11.5 小結................................................109 第 12 章 輸入子系統 ..................................110 12.1 輸入子系統概述.........................110 12.2 輸入設備驅動開發....................114 12.3 輸入事件處理驅動開發...........117 12.4 上報數據分析..............................119 12.4.1 數據格式簡介....................119 12.4.2 實例分析............................120 12.5 小結................................................122 第 13 章 單總線............................................123 13.1 單總線概述..................................123 13.2 DS18B20 寄存器介紹...............124 13.3 DS18B20 指令介紹 ...................125 13.4 DS18B20 驅動開發....................126 13.4.1 申請 GPIO ...........................126 13.4.2 實現復位時序......................126 13.4.3 實現寫時序..........................127 13.4.4 實現讀時序..........................129 13.4.5 實現溫度讀取功能..............130 13.5 小結 ................................................130 第 14 章 I2C 總線.........................................131 14.1 I2C 總線概述................................131 14.2 I2C 時序分析................................132 14.3 I2C 子系統框架 ...........................134 14.4 I2C設備驅動開發.......................135 14.4.1 i2c_client 部分...................135 14.4.2 i2c_driver 部分 ..................137 14.4.3 I2C讀寫函數......................138 14.5 在應用層使用I2C 總線............141 14.6 i2c-tools 的使用...........................143 14.6.1 i2cdetect:掃描I2C總線設備................143 14.6.2 i2cdump:讀取設備寄存器的值...............144 14.6.3 i2cset:向指定寄存器寫入數據..............145 14.6.4 i2cget:從指定寄存器讀取數據..............145 14.7 小結 ................................................145 第 15 章 SPI 總線........................................146 15.1 SPI 總線概述...............................146 15.2 SPI 工作模式...............................147 15.3 SPI 子系統框架 ..........................149 15.4 SPI 設備驅動開發......................150 15.4.1 spi_device 部分..................150 15.4.2 spi_driver 部分...................151 15.4.3 SPI 讀寫函數.....................153 15.5 在應用層使用 SPI 總線...........155 15.5.1 spidev 工具組簡介 ............155 15.5.2 SPI 應用開發.....................156 15.6 小結 ................................................158 第 16 章 串口通信.......................................159 16.1 串口概述.......................................159 16.2 串口通信協議.............................160 16.3 串口應用開發.............................160 16.4 小結................................................162 第 17 章 PWM..............................................163 17.1 PWM 概述...................................163 17.2 PWM 驅動開發..........................165 17.2.1 PWM 子系統核心 API .....165 17.2.2 PWM 驅動程序編寫.........166 17.3 模擬 PWM...................................167 17.4 小結................................................169 第 18 章 CAN 總線.....................................170 18.1 CAN 概述.....................................170 18.2 CAN 幀格式................................170 18.3 CAN 總線仲裁機制..................176 18.4 CAN 應用開發............................177 18.4.1 套接字創建與綁定 ...........177 18.4.2 數據發送應用 ...................178 18.4.3 數據接收應用 ...................179 18.5 小結................................................181 第 19 章 網絡設備.......................................182 19.1 網絡設備概述.............................182 19.2 以太網接口..................................184 19.3 網絡體系架構.............................188 19.4 數據封裝與解封裝....................190 19.5 網絡設備驅動框架....................191 19.6 網絡設備驅動開發....................194 19.6.1 註冊/註銷網絡設備驅動 ...194 19.6.2 初始化網絡設備 ...............195 19.6.3 打開/關閉網絡設備 ..........196 19.6.4 數據收發流程 ...................197 19.7 網絡應用編程.............................199 19.7.1 TCP 套接字編程...............199 19.7.2 UDP 套接字編程 ..............201 19.8 小結................................................204 第 20 章 IIO 子系統.................................... 205 20.1 IIO 子系統概述 ......................... 205 20.1.1 IIO 核心結構體介紹......... 205 20.1.2 IIO 設備註冊..................... 208 20.2 使用sysfs接口操作ADC設備............................ 209 20.3 基於IIO的ADC設備驅動開發實戰........................ 210 20.3.1 IIO API 函數介紹 ............. 210 20.3.2 ADC 設備驅動程序編寫.... 211 20.4 小結................................................ 212 第 21 章 USB 子系統 ................................ 213 21.1 USB 簡介 ..................................... 213 21.2 USB 協議介紹............................ 214 21.2.1 USB 描述符 ...................... 214 21.2.2 USB 通信數據格式 .......... 218 21.2.3 USB 枚舉 .......................... 222 21.3 USB 驅動框架............................ 223 21.4 USB 設備驅動............................ 224 21.4.1 USB 設備驅動框架 .......... 224 21.4.2 USB 請求塊 ...................... 226 21.4.3 probe 和 disconnect 函數... 228 21.5 Gadget Function 驅動................ 231 21.6 小結................................................ 232 第 22 章 塊設備........................................... 233 22.1 塊設備簡介.................................. 233 22.1.1 什麼是塊設備....................233 22.1.2 常見存儲介質....................234 22.2 文件系統與存儲設備................236 22.2.1 什麼是文件系統................236 22.2.2 文件系統的種類................237 22.3 塊設備驅動框架.........................238 22.3.1 通用塊層............................238 22.3.2 I/O 調度層 .........................240 22.3.3 塊設備驅動層....................240 22.4 塊設備驅動開發.........................241 22.4.1 register_blkdev()函數 ........241 22.4.2 unregister_blkdev()函數 ....241 22.4.3 blk_mq_init_sq_queue()函數.............241 22.4.4 blk_cleanup_queue()函數....242 22.4.5 set_capacity()函數 .............242 22.4.6 add_disk()函數...................242 22.4.7 blk_mq_start_request()函數..............242 22.4.8 blk_rq_pos()函數...............243 22.4.9 blk_rq_cur_bytes()函數.....243 22.4.10 bio_data()函數 .................243 22.4.11 blk_update_request()函數.............243 22.4.12 blk_mq_end_request() 函數..................243 22.4.13 alloc_disk 宏 ....................244 22.4.14 rq_data_dir 宏 ..................244 22.4.15 vmem 虛擬塊設備驅動的實現.................244 22.5 小結.........................................246

