嵌入式Linux驅動開發實踐

嵌入式Linux驅動開發實踐

《嵌入式Linux驅動開發實踐》是一本清華大學出版社出版的圖書,作者是朱文偉。

基本介紹

  • 中文名:嵌入式Linux驅動開發實踐
  • 作者:朱文偉
  • 出版時間:2024年1月1日
  • 出版社:清華大學出版社
  • 出版地:北京
  • ISBN:9787302649243
  • 定價:89 元
  • 開本:16 開
  • 裝幀:平裝
內容簡介,作者簡介,圖書目錄,

內容簡介

人們日常生活中打交道最多的就是嵌入式系統,目前廣泛使用的手機、MP3播放器、智慧型家用電器、無人機、自動駕駛汽車、機器人等都用到了嵌入式系統,嵌入式系統的開發占整個計算機系統開發的比重也越來越大。本書詳細講解嵌入式Linux驅動開發和設備端系統構建,並配套全書實例原始碼和作者QQ答疑服務。
《嵌入式Linux驅動開發實踐》共分12章,內容包括嵌入式系統概述、搭建Linux安全開發環境、必會的嵌入式開發套用層技術、核心模組開發、字元設備驅動、驅動模組的並發控制、塊設備驅動、Linux平台驅動、基於AArch64的核心和檔案系統、設備樹、I2C驅動實戰、SPI驅動實戰。
《嵌入式Linux驅動開發實踐》適合作為嵌入式Linux驅動開發初學者的入門書,以及嵌入式Linux開發人員的參考書,也適合作為高等院校電子、通信、自動化、計算機等專業“嵌入式作業系統”課程的教材和教學參考書。

作者簡介

朱文偉,名校計算機專業統招碩士,20多年C\C++、Java開發經驗。主導開發過密碼、圖形、人工智慧等產品。精通Linux、Windows系統開發及資料庫開發技術。著有圖書:

圖書目錄

目 錄
第 1 章 嵌入式系統概述 1
1.1 嵌入式系統 1
1.2 Linux作業系統 2
1.3 Linux作為嵌入式作業系統的優勢 2
1.4 嵌入式系統的開發流程 4
1.5 嵌入式Linux系統的體系結構 5
1.5.1 嵌入式處理器 5
1.5.2 嵌入式外圍硬體設備 5
1.5.3 嵌入式作業系統 6
1.5.4 設備驅動 6
1.5.5 嵌入式套用軟體 6
1.6 嵌入式Linux系統的設計與實現 6
1.7 Linux作業系統核心 7
1.7.1 Linux核心的組成 7
1.7.2 Linux核心各部分的工作機制 8
1.8 Linux設備驅動程式 12
1.8.1 Linux設備驅動概述 12
1.8.2 設備驅動的功能 13
1.8.3 設備的分類 13
1.8.4 驅動的分類 14
1.8.5 設備驅動與核心的關係 16
1.8.6 設備驅動的結構 17
1.8.7 設備驅動的設計和實現步驟 19
第 2 章 搭建Linux驅動開發環境 22
2.1 準備虛擬機環境 22
2.1.1 在VMware下安裝Linux 22
2.1.2 開啟登錄時的root賬號 25
2.1.3 關閉核心自動更新 27
2.1.4 解決Ubuntu上的vi方向鍵問題 27
2.1.5 關閉防火牆 27
2.1.6 配置安裝源 28
2.1.7 安裝網路工具包 28
2.1.8 安裝基本開發工具 29
2.1.9 啟用SSH 29
2.1.10 做個快照 30
2.1.11 連線虛擬機Linux 31
2.1.12 和虛擬機互傳檔案 42
2.2 安裝編譯工具 42
2.3 使用VS Code開發核心驅動程式 43
2.4 使用Visual C++ 2017開發應用程式 48
第 3 章 嵌入式開發必會套用層技術 51
3.1 Linux啟動過程 51
3.2 圖形模式與命令模式的切換方式 53
3.3 在檔案中搜尋 53
3.4 Linux關機和重啟 54
3.5 開機自啟動 55
3.6 查看Ubuntu的核心版本 56
3.7 查看Ubuntu作業系統的版本 57
3.8 配置檔案的區別 57
3.9 讓/etc/profile檔案修改後立即生效 58
3.10 測試Web伺服器的性能 59
3.10.1 架設Web伺服器Apache 59
3.10.2 在Windows下測試Web伺服器的性能 60
3.10.3 在Linux下測試Web伺服器的性能 61
3.11 Linux中的檔案許可權 66
3.12 環境變數的獲取和設定 66
3.13 解析命令行參數函式 69
第 4 章 核心模組開發 70
4.1 Linux核心概述 70
4.2 核心模組簡介 71
4.2.1 何為核心模組 71
4.2.2 增加核心功能的兩種方法 72
4.2.3 使用模組的優缺點 72
4.2.4 常用的模組操作命令 72
4.2.5 Linux核心程式結構 73
第 5 章 字元設備驅動 76
5.1 Linux設備框架 76
5.2 字元設備的概念 77
5.3 字元設備驅動 80
5.3.1 file_operations結構體 80
5.3.2 字元設備驅動開發步驟 82
5.3.3 設備號的分配 85
5.4 驅動開發的常用函式 86
5.4.1 copy_from_user函式 86
5.4.2 copy_to_user函式 87
5.4.3 printk函式 88
5.4.4 register_chrdev函式 89
5.4.5 register_chrdev_region函式 91
5.4.6 alloc_chrdev_region函式 91
5.4.7 cdev_init函式 91
5.4.8 cdev_alloc函式 92
5.4.9 cdev_add函式 93
5.4.10 cdev_del函式 95
5.4.11 宏class_create 95
5.4.12 device_create函式 96
5.4.13 device_del函式 96
5.4.14 unregister_chrdev函式 97
5.4.15 實戰字元設備驅動 97
5.5 字元設備的ioctl接口 106
5.5.1 什麼是ioctl接口 106
5.5.2 為什麼要引入ioctl接口 106
5.5.3 ioctl如何使用 106
5.5.4 定義命令 107
5.5.5 ioctl的基本套用 109
5.5.6 ioctl處理結構體 112
5.6 Linux虛擬驅動框架設計 114
5.7 虛擬LED驅動的實現 116
第 6 章 驅動模組的並發控制 122
6.1 嵌入式Linux系統的空間組成 122
6.1.1 作業系統核心 122
6.1.2 作業系統的空間組成及模式 123
6.1.3 用戶空間訪問核心空間及模式切換 123
6.2 進程的基本概念 124
6.2.1 進程和執行緒的定義 124
6.2.2 進程的類型 125
6.2.3 進程的記憶體結構 125
6.2.4 多任務機制 126
6.2.5 進程與程式 126
6.2.6 進程標識符 127
6.2.7 執行緒標識符 129
6.2.8 執行緒組及其標識符TGID 129
6.2.9 進程描述符 131
6.2.10 會話、進程組以及控制終端 138
6.3 PID的管理 139
6.3.1 PID散列表 140
6.3.2 PID命名空間 140
6.3.3 局部ID和全局ID 142
6.3.4 進程PID結構 143
6.3.5 pid_link哈希表存儲 143
6.4 進程切換分析 145
6.4.1 進程的模式和分類 145
6.4.2 進程的5種基本狀態 146
6.4.3 進程的切換過程分析 147
6.5 核心進程和執行緒管理編程 148
6.5.1 獲得進程PID結構體 148
6.5.2 從命名空間下的PID找到對應的PID結構體 149
6.5.3 獲取進程的進程號 150
6.5.4 改變PID結構體的count欄位 151
6.5.5 獲取進程描述符信息 152
6.5.6 釋放進程所占用的Cache空間 153
6.5.7 喚醒進程 154
6.5.8 創建一個新的核心執行緒 156
6.5.9 終止指定進程 158
6.5.10 結束當前正在執行的進程 159
6.6 並發控制的基本概念 160
6.6.1 什麼是並發 160
6.6.2 臨界資源與臨界區 160
6.6.3 原子操作 160
6.6.4 並發控制的內容 161
6.6.5 為何要並發控制 161
6.7 設備驅動的並發控制機制 162
6.7.1 並發控制的基礎操作 162
6.7.2 自旋鎖 164
6.7.3 信號量 165
6.7.4 其他的並發控制機制 166
6.7.5 驅動並發控制的設計方法 167
6.8 核心同步編程 170
6.8.1 設定原子類型的變數並讀取 170
6.8.2 遞增遞減原子變數值 171
6.8.3 初始化信號量 172
6.8.4 獲取信號量並減1(不可中斷) 173
6.8.5 獲取信號量並減1(可中斷) 174
6.8.6 在指定的時間內獲取信號量 175
6.8.7 釋放信號量 176
第 7 章 塊設備驅動 178
7.1 塊設備的概念 178
7.1.1 什麼是塊設備 178
7.1.2 常用的塊設備 178
7.1.3 塊設備和字元設備的區別 179
7.1.4 塊設備相關的幾個單位 180
7.1.5 塊設備的訪問 181
7.2 塊設備驅動程式的概念 182
7.2.1 什麼是塊設備驅動程式 182
7.2.2 為什麼需要了解塊設備驅動 182
7.2.3 塊設備驅動的組成部分 183
7.2.4 塊設備驅動框架 184
7.3 塊設備驅動的關鍵數據結構 187
7.3.1 通用硬碟結構gendisk 187
7.3.2 塊設備對象結構block_device 188
7.3.3 bio結構 189
7.3.4 請求佇列request_queue結構 189
7.3.5 請求結構request 190
7.3.6 磁碟操作結構block_device_operations 191
7.4 塊設備驅動中的I/O請求處理函式 192
7.4.1 使用請求佇列處理I/O請求 192
7.4.2 不使用請求佇列處理I/O請求 192
7.5 塊設備驅動編寫的步驟 193
7.6 重要函式 193
7.6.1 註冊 193
7.6.2 塊設備操作 194
7.7 實戰案例:用RAM模擬一個塊設備 195
第 8 章 Linux平台驅動 203
8.1 平台設備驅動模型 203
8.1.1 驅動的分隔與分離 203
8.1.2 驅動的分層 205
8.1.3 基本概念 205
8.1.4 什麼是platform匯流排 206
8.2 platform驅動 209
8.2.1 platform_driver結構體 209
8.2.2 platform主要函式 211
8.2.3 platform驅動框架 212
8.2.4 platform_device的註冊過程 214
8.3 platform設備 215
8.4 實現platform驅動 218
第 9 章 基於AArch64的核心和檔案系統 229
9.1 認識QEMU 230
9.1.1 QEMU是什麼 230
9.1.2 QEMU的兩種執行模式 231
9.1.3 QEMU的用途 231
9.1.4 使用QEMU虛擬機的幾種選擇 231
9.2 不編譯運行AArch64程式 232
9.2.1 準備一個現成的AArch64程式 233
9.2.2 安裝Linux版的QEMU 233
9.2.3 下載交叉編譯器 238
9.2.4 讓AArch64程式運行起來 238
9.3 編譯運行AArch64程式 240
9.4 製作簡易檔案系統 244
9.4.1 BusyBox簡介 245
9.4.2 編譯/安裝BusyBox 246
9.4.3 製作根檔案系統的映像檔案 249
9.5 非嵌入式方式啟動核心 250
9.5.1 BusyBox啟動過程簡要分析 254
9.5.2 在新核心系統中運行C程式 256
9.6 基本功能的完善 257
9.6.1 掛載proc支持ifconfig 257
9.6.2 掛載sysfs支持lspci 259
9.6.3 實現檔案系統可寫 264
9.7 QEMU用戶網路模式 265
9.7.1 不使用-net選項 265
9.7.2 使用-net選項 269
9.8 QEMU橋接網路模式 270
9.8.1 網橋的概念 270
9.8.2 TUN/TAP的工作原理 270
9.8.3 帶TAP的QEMU系統架構 272
9.8.4 brctl的簡單用法 273
9.8.5 三個網路配置選項 275
9.8.6 實戰橋接模式網路 277
9.8.7 手工命令創建TAP網卡 282
9.8.8 使用qemu-ifup 284
9.9 QEMU運行國產作業系統 285
9.9.1 安裝Windows版的QEMU 286
9.9.2 UEFI固件下載 286
9.9.3 安裝麒麟作業系統 287
9.9.4 運行麒麟系統 289
第 10 章 設備樹 291
10.1 設備樹的概念 291
10.1.1 什麼是設備樹 291
10.1.2 設備樹的起源 292
10.1.3 Linux核心對硬體的描述方式 294
10.1.4 設備樹和核心的關係 295
10.2 DTS檔案和DTSI檔案 295
10.3 DTB檔案和DTC檔案 296
10.4 設備樹框架 297
10.4.1 布局與節點 298
10.4.2 節點名 299
10.4.3 引用 300
10.4.4 cpus節點 301
10.5 屬性 302
10.5.1 兼容性屬性 303
10.5.2 model屬性 305
10.5.3 status屬性 305
10.5.4 #address-cells和#size-cells 305
10.5.5 reg屬性 306
10.5.6 ranges屬性 307
10.5.7 name屬性 308
10.5.8 device_type屬性 308
10.5.9 address屬性 308
10.5.10 interrupts屬性 309
10.6 設備樹操作常用API 311
10.6.1 device_node 311
10.6.2 查找節點API 312
10.6.3 提取通用屬性API 312
10.6.4 提取addr屬性API 313
10.6.5 提取resource屬性API 314
10.6.6 提取GPIO屬性API 315
10.6.7 提取irq屬性API 315
10.6.8 從設備樹中提取MAC地址 315
10.7 編寫設備樹並編譯 315
第 11 章 I2C驅動實戰 317
11.1 I2C的基本概念 317
11.1.1 匯流排的定義 317
11.1.2 什麼是I2C 318
11.1.3 I2C匯流排 318
11.1.4 I2C匯流排規範 318
11.1.5 I2C匯流排的特點 319
11.2 I2C驅動實戰 320
第 12 章 SPI驅動實戰 334
12.1 SPI概述 334
12.1.1 什麼是SPI 334
12.1.2 SPI工作模式 337
12.1.3 SPI傳輸機制 338
12.1.4 I2C和SPI的對比 340
12.2 SPI驅動軟體架構 340
12.2.1 SPI通用設備驅動程式 341
12.2.2 SPI控制器驅動程式 342
12.2.3 SPI協定驅動程式 342
12.2.4 佇列化 343
12.3 SPI虛擬驅動實戰 343

相關詞條

熱門詞條

聯絡我們