3dwoo大學簡體電腦書店
嵌入式Linux設備驅動程序開發指南(原書第2版)
( 簡體 字)
作者:阿爾貝托·利貝拉爾·德·洛斯里奧斯(Alberto Liberal de los Ríos)類別:1. -> 作業系統 -> Linux
   2. -> 電腦組織與體系結構 -> 嵌入式系統
   3. -> 程式設計 -> 驅動程式
出版社:機械工業出版社嵌入式Linux設備驅動程序開發指南(原書第2版) 3dWoo書號: 54775
詢問書籍請說出此書號!
有庫存
NT售價: 795
出版日:6/1/2021
頁數:550
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787111684558 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
第1章 構建系統1
1.1 引導加載程序1
1.2 Linux內核3
1.3 系統調用接口和C運行時庫6
1.4 系統共享庫7
1.5 根文件系統8
1.6 Linux啟動過程9
1.7 構建嵌入式Linux系統10
1.8 設置以太網通信11
1.9 為NXP i.MX7D處理器構建嵌入式Linux系統11
1.9.1 簡介12
1.9.2 主機軟件包12
1.9.3 設置repo工具13
1.9.4 Yocto工程的安裝和映像構建13
1.9.5 Yocto 之外的工作15
1.9.6 構建Linux內核18
1.9.7 安裝TFTP服務器20
1.9.8 安裝NFS服務器20
1.9.9 設置U-Boot環境變量21
1.10 為Microchip SAMA5D2處理器構建嵌入式Linux系統21
1.10.1 簡介22
1.10.2 主機軟件包22
1.10.3 Yocto工程的安裝和映像構建22
1.10.4 Yocto 之外的工作25
1.10.5 構建Linux內核25
1.10.6 安裝TFTP服務器27
1.10.7 安裝NFS服務器27
1.10.8 設置U-Boot環境變量28
1.11 為Broadcom BCM2837處理器構建Linux嵌入式系統28
1.11.1 Raspbian28
1.11.2 構建Linux內核29
1.11.3 將文件復制到Raspberry Pi31
1.12 使用Eclipse33
1.12.1 用于內核源碼的Eclipse配置33
1.12.2 用于開發Linux驅動程序的Eclipse配置38
第2章 Linux設備與驅動模型42
2.1 總線核心驅動42
2.2 總線控制器驅動45
2.3 設備驅動45
2.4 設備樹簡介46
第3章 最簡驅動程序50
3.1 許可證51
3.2 實驗3-1:“helloworld”模塊51
3.3 代碼清單3-1:helloworld_imx.c52
3.4 代碼清單3-2:Makefile52
3.5 helloworld_imx.ko演示53
3.6 實驗3-2:“帶參數的helloworld”模塊53
3.7 代碼清單3-3:helloworld_imx_with_parameters.c54
3.8 helloworld_imx_with_parameters.ko演示54
3.9 實驗3-3:“helloworld計時”模塊55
3.10 代碼清單3-4:helloworld_imx_with_timing.c55
3.11 helloworld_imx_with_timing.ko演示56
第4章 字符設備驅動57
4.1 實驗4-1:“helloworld字符設備”模塊59
4.2 代碼清單4-1:helloworld_imx_char_driver.c63
4.3 代碼清單4-2:Makefile65
4.4 代碼清單 4-3:ioctl_test.c65
4.5 helloworld_imx_char_driver.ko演示66
4.6 將模塊添加到內核構建66
4.7 使用設備文件系統創建設備文件67
4.8 實驗4-2:“class字符設備”模塊68
4.9 代碼清單4-4:helloworld_imx_class_driver.c70
4.10 helloworld_imx_class_driver.ko演示72
4.11 雜項字符設備驅動72
4.12 實驗4-3:“雜項字符設備”模塊73
4.13 代碼清單4-5:misc_imx_driver.c74
4.14 misc_imx_driver.ko演示75
第5章 平臺設備驅動76
5.1 實驗5-1:“平臺設備”模塊78
5.2 代碼清單5-1:hellokeys_imx.c81
5.3 hellokeys_imx.ko演示82
5.4 操作硬件的文檔82
5.5 硬件命名約定83
5.6 引腳控制器84
5.7 引腳控制子系統86
5.8 設備樹引腳控制器綁定92
5.9 GPIO 控制器驅動96
5.10 GPIO描述符使用者接口98
5.10.1 獲取和釋放GPIO98
5.10.2 使用GPIO99
5.10.3 GPIO映射到中斷99
5.10.4 GPIO設備樹100
5.11 在內核和用戶態之間交換數據100
5.12 MMIO(內存映射I/O)設備訪問101
5.13 實驗5-2:“RGB LED平臺設備”模塊103
5.13.1 i.MX7D處理器的硬件描述103
5.13.2 SAMA5D2處理器的硬件描述105
5.13.3 BCM2837處理器的硬件描述107
5.13.4 i.MX7D處理器的設備樹107
5.13.5 SAMA5D2處理器的設備樹111
5.13.6 BCM2837處理器的設備樹114
5.13.7 “RGB LED平臺設備”模塊的代碼描述115
5.14 代碼清單5-2:ledRGB_sam_platform.c119
5.15 ledRGB_sam_platform.ko演示124
5.16 平臺驅動資源124
5.17 Linux LED類126
5.18 實驗5-3:“RGB LED類”模塊128
5.18.1 i.MX7D、SAMA5D2和BCM2837處理器的設備樹128
5.18.2 “RGB LED類”模塊的代碼描述130
5.19 代碼清單5.3:ledRGB_sam_class_platform.c134
5.20 ledRGB_sam_class_platform.ko演示137
5.21 用戶態中的平臺設備驅動137
5.22 用戶定義的I/O:UIO139
5.22.1 UIO如何運轉140
5.22.2 內核中的UIO API141
5.23 實驗5-4:“LED UIO平臺”模塊142
5.23.1 i.MX7D、SAMA5D2和BCM2837處理器的設備樹143
5.23.2 “LED UIO平臺”模塊的代碼描述144
5.24 代碼清單5-4:led_sam_UIO_platform.c146
5.25 代碼清單5-5:UIO_app.c148
5.26 led_sam_UIO_platform.ko及UIO_app演示150
第6章 I2C從端驅動151
6.1 Linux I2C 子系統152
6.2 編寫I2C 從端驅動155
6.2.1 注冊I2C從端驅動155
6.2.2 在設備樹中聲明I2C設備157
6.3 實驗6-1:“I2C I/O 擴展設備”模塊159
6.3.1 i.MX7D處理器的硬件描述159
6.3.2 SAMA5D2 處理器的硬件描述159
6.3.3 BCM2837處理器的硬件描述160
6.3.4 i.MX7D處理器的設備樹161
6.3.5 SAMA5D2處理器的設備樹162
6.3.6 BCM2837處理器的設備樹163
6.3.7 “I2C I/O擴展設備”模塊的代碼描述164
6.4 代碼清單6-1:io_imx_expander.c167
6.5 io_imx_expander.ko演示170
6.6 sysfs文件系統171
6.7 實驗6-2:“I2C多顯LED”模塊174
6.7.1 i.MX7D處理器的硬件描述175
6.7.2 SAMA5D2處理器的硬件描述176
6.7.3 BCM2837處理器的硬件描述176
6.7.4 i.MX7D處理器的設備樹177
6.7.5 SAMA5D2處理器的設備樹178
6.7.6 BCM2837處理器的設備樹180
6.7.7 ACPI和設備樹的統一設備屬性接口181
6.7.8 “I2C多顯LED”模塊的代碼描述182
6.8 代碼清單6-2:ltc3206_imx_led_class.c186
6.9 ltc3206_imx_led_class.ko演示192
第7章 處理設備驅動中的中斷194
7.1 GPIO控制器在Linux內核的中斷域196
7.2 設備樹中斷處理203
7.3 在Linux設備驅動中申請中斷206
7.4 實驗7-1:“按鈕中斷設備”模塊207
7.4.1 i.MX7D處理器的硬件描述208
7.4.2 SAMA5D2處理器的硬件描述208
7.4.3 BCM2837處理器的硬件描述208
7.4.4 i.MX7D 處理器的設備樹208
7.4.5 SAMA5D2 處理器的設備樹209
7.4.6 BCM2837 處理器的設備樹210
7.4.7 “按鈕中斷設備”模塊的代碼描述211
7.5 代碼清單7-1:int_imx_key.c213
7.6 int_imx_key.ko演示215
7.7 延遲工作215
7.7.1 軟中斷216
7.7.2 tasklet217
7.7.3 定時器218
7.7.4 線程化的中斷221
7.7.5 工作隊列223
7.8 內核中的鎖226
7.8.1 鎖和單處理器內核227
7.8.2 在中斷和進程上下文之間共享自旋鎖227
7.8.3 在用戶上下文使用鎖227
7.9 內核中的睡眠228
7.10 實驗7-2:“睡眠設備”模塊229
7.10.1 i.MX7D處理器的設備樹230
7.10.2 SAMA5D2處理器的設備樹231
7.10.3 BCM2837處理器的設備樹232
7.10.4 “睡眠設備”模塊的代碼描述233
7.11 代碼清單7-2:int_imx_key_wait.c236
7.12 int_imx_key_wait.ko演示239
7.13 內核線程239
7.14 實驗7-3:“keyled類”模塊240
7.14.1 i.MX7D處理器的硬件描述240
7.14.2 SAMA5D2處理器的硬件描述241
7.14.3 BCM2837處理器的硬件描述241
7.14.4 i.MX7D 處理器的設備樹242
7.14.5 SAMA5D2處理器的設備樹245
7.14.6 BCM2837處理器的設備樹247
7.14.7 “keyled類”模塊的代碼描述249
7.15 代碼清單7-3:keyled_imx_class.c255
7.16 keyled_imx_class.ko演示264
第8章 在Linux驅動中分配內存266
8.1 查詢ARM的MMU轉換表267
8.2 Linux地址的類型271
8.3 用戶進程的虛擬地址到物理地址的映射273
8.4 內核的虛擬地址到物理地址的映射273
8.5 內核內存分配器275
8.5.1 頁面分配器275
8.5.2 頁面分配器接口275
8.5.3 SLAB分配器276
8.5.4 SLAB分配器接口278
8.5.5 kmalloc內存分配器279
8.6 實驗8-1:“鏈表內存分配”模塊280
8.7 代碼清單8-1:linkedlist_imx_platform.c283
8.8 linkedlist_imx_platform.ko演示287
第9章 在Linux設備驅動中使用DMA288
9.1 緩存一致性288
9.2 Linux DMA引擎API289
9.3 實驗9-1:“流式DMA”模塊295
9.4 代碼清單9-1:sdma_imx_m2m.c302
9.5 sdma_imx_m2m.ko演示 306
9.6 DMA分散/聚集映射306
9.7 實驗9-2:“分散/聚集DMA設備”模塊 307
9.8 代碼清單9-2:sdma_imx_sg_m2m.c310
9.9 sdma_imx_sg_m2m.ko演示 315
9.10 用戶態DMA315
9.11 實驗9-3:“用戶態DMA”模塊317
9.12 代碼清單9-3:sdma_imx_mmap.c319
9.13 代碼清單9-4:sdma.c323
9.14 sdma_imx_mmap.ko演示324
第10章 輸入子系統設備驅動框架325
10.1 輸入子系統驅動程序326
10.2 實驗10-1:“輸入子系統加速度計”模塊327
10.2.1 設備樹329
10.2.2 使用I2C交互的輸入框架330
10.2.3 使用輸入設備的輸入框架331
10.3 代碼清單10-1:i2c_imx_accel.c334
10.4 i2c_imx_accel.ko演示336
10.5 在Linux中使用SPI337
10.6 Linux的SPI子系統339
10.7 編寫SPI從設備驅動程序 342
10.7.1 注冊SPI從設備驅動程序 342
10.7.2 在設備樹中聲明SPI設備343
10.8 實驗10-2:“SPI加速度計輸入設備”模塊346
10.8.1 i.MX7D 處理器的硬件描述347
10.8.2 SAMA5D2處理器的硬件描述 347
10.8.3 BCM2837處理器的硬件描述 348
10.8.4 i.MX7D處理器的設備樹348
10.8.5 SAMA5D2處理器的設備樹 349
10.8.6 BCM2837處理器的設備樹350
10.8.7 “SPI加速度計輸入設備”模塊的代碼描述351
10.9 代碼清單10-2:adxl345_imx.c360
10.10 adxl345_imx.ko演示371
第11章 設備驅動中的工業IO 子系統373
11.1 IIO設備的sysfs接口375
11.2 IIO設備通道375
11.3 iio_info數據結構377
11.4 緩沖區378
11.4.1 IIO緩沖區的sysfs接口378
11.4.2 設置IIO緩沖區379
11.4.3 觸發器380
11.4.4 觸發式緩沖區380
11.5 工業I/O事件382
11.6 IIO工具386
11.7 實驗11-1:“IIO子系統DAC”模塊386
11.7.1 設備樹387
11.7.2 用作I2C交互的工業框架389
11.7.3 用作IIO設備的工業框架389
11.8 代碼清單11-1:ltc2607_imx_dual_device.c394
11.9 實驗11-2:“SPIDEV雙通道ADC用戶”應用程序的“IIO子系統DAC”模塊397
11.9.1 i.MX7D處理器的硬件描述399
11.9.2 SAMA5D2處理器的硬件描述399
11.9.3 BCM2837處理器的硬件描述399
11.9.4 i.MX7D處理器的設備樹400
11.9.5 SAMA5D2處理器的設備樹400
11.9.6 BCM2837處理器的設備樹401
11.10 代碼清單 11-2:LTC2422_spidev.c401
11.11 ltc2607_imx_dual_device.ko配合LTC2422_spidev使用演示404
11.12 實驗11-3:“IIO子系統ADC”模塊406
11.12.1 設備樹406
11.12.2 用作SPI交互的工業框架407
11.12.3 用作IIO設備的工業框架408
11.13 代碼清單11-3:ltc2422_imx_dual.c411
11.14 代碼清單11-4:ltc2422_app.c413
11.15 ltc2422_imx_dual.ko配合ltc2422_app使用演示414
11.16 實驗11-4:“具備硬件觸發功能的IIO子系統ADC”模塊415
11.16.1 i.MX7D、SAMA5D2和BCM2837處理器的設備樹415
11.16.2 驅動里的睡眠和喚醒418
11.16.3 中斷管理420
11.17 代碼清單11-5:ltc2422_imx_trigger.c420
11.18 ltc2422_imx_trigger.ko配合LTC2422_app使用演示423
第12章 在Linux設備驅動程序中使用regmap API424
12.1 regmap的實現425
12.2 實驗12-1:“SPI regmap IIO 設備”模塊428
12.3 代碼清單12-1:adxl345_imx_iio.c437
12.4 adxl345_imx_iio.ko演示446
第13章 Linux USB設備驅動450
13.1 USB 2.0總線拓撲450
13.2 USB總線枚舉和設備布局451
13.3 USB數據傳輸453
13.4 USB設備類別454
13.5 USB描述符454
13.5.1 USB設備描述符455
13.5.2 USB配置描述符456
13.5.3 USB接口描述符457
13.5.4 USB端點描述符458
13.5.5 USB字符串描述符459
13.5.6 USB HID描述符459
13.6 Linux USB子系統461
13.7 編寫Linux USB設備驅動程序462
13.7.1 注冊USB設備驅動程序462
13.7.2 Linux主機端數據類型463
13.7.3 USB請求塊465
13.8 實驗13-1:USB HID設備應用程序468
13.8.1 步驟1:創建一個新工程468
13.8.2 步驟2:配置Harmony469
13.8.3 步驟3:修改生成的代碼471
13.8.4 步驟4:聲明USB狀態機的狀態471
13.8.5 步驟5:添加新成員到APP_DATA類型472
13.8.6 步驟6:聲明接收緩沖區和發送緩沖區473
13.8.7 步驟7:初始化新成員473
13.8.8 步驟8:處理彈出474
13.8.9 步驟9:處理HID事件474
13.8.10 步驟10:創建USB狀態機475
13.8.11 步驟11:調度新的報告接收請求477
13.8.12 步驟12:接收、準備和發送報告478
13.8.13 步驟13:燒寫應用程序479
13.9 實驗13-2:“USB LED”模塊479
13.10 代碼清單13-1:usb_led.c483
13.11 usb_led.ko演示485
13.12 實驗13-3:“USB LED和開關”模塊486
13.13 代碼清單13-2:usb_urb_int_led.c490
13.14 usb_urb_int_led.ko演示495
13.15 實驗13-4:“連接到USB多顯LED的I2C”模塊496
13.16 代碼清單13-3:usb_ltc3206.c505
13.17 usb_ltc3206.ko演示510
附錄 將內核模塊移植到MicrochipSAMA5D27-SOM1上513
參考文獻526
術語表528
嵌入式微處理器功能強大、節能和低成本與嵌入式Linux系統的靈活性結合,促使業界許多公司基于嵌入式微處理器開發出了很多新產品。本書教讀者基于設備樹嵌入式Linux系統如何開發設備驅動程序。讀者將學習編寫不同類型的Linux驅動程序,以及與內核和用戶空間交互的應用程序程序接口(API)和方法。本書以實戰為核心,闡述了Linux內核基礎知識,將編寫大約30個驅動程序并移植到三種不同的微處理器上。本書在實驗部分中基于NXP i.MX7D、Microchip SAMA5D2和Broadcom BCM2837三種不同微處理器詳細闡述了驅動程序的開發的實現,讀者可參考實驗部分選擇開發和測試自己的驅動程序。在閱讀本書之前,建議讀者先購買一個基于這些微處理器之一的開發板,板上至少應有一個SPI和I2C控制器,例如Raspberry Pi3模型B板。
pagetop