-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Linux設備驅動開發詳解

( 簡體 字)
作者:華清遠見嵌入式培訓中心 宋寶華類別:1. -> 電腦組織與體系結構 -> 嵌入式系統 -> 嵌入式Linux
   2. -> 作業系統 -> Linux
   3. -> 程式設計 -> 驅動程式
譯者:
出版社:人民郵電出版社Linux設備驅動開發詳解 3dWoo書號: 11039
詢問書籍請說出此書號!

缺書
不接受訂購

出版日:2/1/2008
頁數:686
光碟數:1
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
不接受訂購
ISBN:9787115172396
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

內容簡介:

本書是一本介紹Linux設備驅動開發理論、框架與實例的書,本書以Linux 2.6版本內核為藍本,詳細介紹自旋鎖、信號量、完成量、中斷頂/底半部、定時器、內存和I/O映射以及異步通知、阻塞I/O、非阻塞I/O等Linux設備驅動理論;字符設備、塊設備、TTY設備、I2C設備、LCD設備、音頻設備、USB設備、網絡設備、PCI設備等Linux設備驅動的架構和框架中各個復雜數據架構和函數的關系,并講解了大量Linux驅動開發的大量實例,使讀者能夠獨立開發各類Linux設備驅動。
  本書內容全面,實例豐富,操作性強,語言通俗易懂,適合廣大Linux開發人員、嵌入式工程師參考使用。
目錄:

第1篇 Linux設備驅動入門

第1章 設備驅動概述 2
1.1 設備驅動的作用 3
1.2 無操作系統時的設備驅動 3
1.3 有操作系統時的設備驅動 5
1.4 Linux設備驅動 6
1.4.1 設備的分類及特點 6
1.4.2 Linux設備驅動與整個軟硬件系統的關系 7
1.4.3 編寫Linux設備驅動的技術基礎 8
1.4.4 Linux設備驅動的學習方法 8
1.5 設備驅動的Hello World:LED驅動 11
1.5.1 無操作系統時的LED驅動 11
1.5.2 Linux系統下的LED驅動 12

第2章 驅動設計的硬件基礎 16
2.1 處理器 17
2.1.1 通用處理器 17
2.1.2 數字信號處理器 18
2.2 存儲器 20
2.3 接口與總線 24
2.3.1 串口 24
2.3.2 I2C總線 25
2.3.3 USB 26
2.3.4 以太網接口 27
2.3.5 ISA總線 28
2.3.6 PCI和cPCI 29
2.4 CPLD和FPGA 33
2.5 原理圖分析 35
2.5.1 原理圖分析的內容 35
2.5.2 原理圖的分析方法 36
2.6 硬件時序分析 37
2.6.1 時序分析的概念 37
2.6.2 典型硬件時序 38
2.7 儀器儀表使用 39
2.7.1 萬用表 39
2.7.2 示波器 39
2.7.3 邏輯分析儀 41
2.8 總結 42

第3章 Linux內核及內核編程 43
3.1 Linux內核的發展與演變 44
3.2 Linux 2.6內核的特點 45
3.3 Linux內核的組成 46
3.3.1 Linux內核源代碼目錄結構 46
3.3.2 Linux內核的組成部分 47
3.3.3 Linux內核空間與用戶空間 49
3.4 Linux內核的編譯及加載 50
3.4.1 Linux內核的編譯 50
3.4.2 Kconfig和Makefile 57
3.4.3 Linux內核的引導 63
3.5 Linux下的C編程 65
3.5.1 Linux程序命名習慣 65
3.5.2 GNU C與ANSI C 66
3.5.3 do { } while(0) 70
3.5.4 goto 71
3.6 總結 71

第2篇 Linux設備驅動核心理論

第4章 Linux內核模塊 74
4.1 Linux內核模塊簡介 75
4.2 Linux內核模塊的程序結構 76
4.3 模塊加載函數 77
4.4 模塊卸載函數 78
4.5 模塊參數 78
4.6 導出符號 80
4.7 模塊聲明與描述 81
4.8 模塊的使用計數 81
4.9 模塊的編譯 82
4.10 模塊與GPL 83
4.11 總結 84

第5章 Linux文件系統與設備文件系統 85
5.1 Linux文件操作 86
5.1.1 文件操作的相關系統調用 86
5.1.2 C庫函數的文件操作 88
5.2 Linux文件系統 90
5.2.1 Linux文件系統目錄結構 90
5.2.2 Linux文件系統與設備驅動 91
5.3 devfs設備文件系統 95
5.4 udev設備文件系統 96
5.4.1 udev與devfs的區別 96
5.4.2 sysfs文件系統與Linux設備模型 96
5.4.3 udev的組成 108
5.4.4 udev規則文件 109
5.4.5 創建和配置udev 111
5.5 總結 113

第6章 字符設備驅動 114
6.1 Linux字符設備驅動結構 115
6.1.1 cdev結構體 115
6.1.2 分配和釋放設備號 116
6.1.3 file_operations結構體 116
6.1.4 Linux字符設備驅動的組成 118
6.2 globalmem虛擬設備實例描述 121
6.3 globalmem設備驅動 121
6.3.1 頭文件、宏及設備結構體 121
6.3.2 加載與卸載設備驅動 122
6.3.3 讀寫函數 123
6.3.4 seek()函數 124
6.3.5 ioctl()函數 125
6.3.6 使用文件私有數據 127
6.4 globalmem驅動在用戶空間的驗證 133
6.5 總結 134

第7章 Linux設備驅動中的并發控制 135
7.1 并發與競態 136
7.2 中斷屏蔽 137
7.3 原子操作 137
7.3.1 整型原子操作 138
7.3.2 位原子操作 138
7.4 自旋鎖 139
7.4.1 自旋鎖的使用 139
7.4.2 讀寫自旋鎖 141
7.4.3 順序鎖 143
7.4.4 讀-拷貝-更新 144
7.5 信號量 148
7.5.1 信號量的使用 148
7.5.2 信號量用于同步 150
7.5.3 完成量用于同步 150
7.5.4 自旋鎖vs信號量 151
7.5.5 讀寫信號量 152
7.6 互斥體 152
7.7 增加并發控制后的globalmem驅動 153
7.8 總結 156

第8章 Linux設備驅動中的阻塞與非阻塞I/O 157
8.1 阻塞與非阻塞I/O 158
8.1.1 等待隊列 158
8.1.2 支持阻塞操作的globalfifo設備驅動 162
8.1.3 在用戶空間驗證globalfifo的讀寫 167
8.2 輪詢操作 167
8.2.1 輪詢的概念與作用 167
8.2.2 應用程序中的輪詢編程 168
8.2.3 設備驅動中的輪詢編程 168
8.3 支持輪詢操作的globalfifo驅動 169
8.3.1 在globalfifo驅動中增加輪詢操作 169
8.3.2 在用戶空間驗證globalfifo設備的輪詢 170
8.4 總結 171

第9章 Linux設備驅動中的異步通知與異步I/O 172
9.1 異步通知的概念與作用 173
9.2 Linux異步通知編程 173
9.2.1 Linux信號 173
9.2.2 信號的接收 175
9.2.3 信號的釋放 176
9.3 支持異步通知的globalfifo驅動 178
9.3.1 在globalfifo驅動中增加異步通知 178
9.3.2 在用戶空間驗證globalfifo的異步通知 180
9.4 Linux 2.6異步I/O 181
9.4.1 AIO概念與GNU C庫函數 181
9.4.2 使用信號作為AIO的通知 184
9.4.3 使用回調函數作為AIO的通知 185
9.4.4 AIO與設備驅動 186
9.5 總結 188

第10章 中斷與時鐘 189
10.1 中斷與定時器 190
10.2 Linux中斷處理程序架構 191
10.3 Linux中斷編程 192
10.3.1 申請和釋放中斷 192
10.3.2 使能和屏蔽中斷 193
10.3.3 底半部機制 193
10.3.4 實例:S3C2410實時鐘中斷 196
10.4 中斷共享 197
10.5 內核定時器 199
10.5.1 內核定時器編程 199
10.5.2 實例:秒字符設備 201
10.6 內核延時 205
10.6.1 短延遲 205
10.6.2 長延遲 205
10.6.3 睡著延遲 206
10.7 總結 207

第11章 內存與I/O訪問 208
11.1 CPU與內存和I/O 209
11.1.1 內存空間與I/O空間 209
11.1.2 內存管理單元MMU 210
11.2 Linux內存管理 213
11.3 內存存取 215
11.3.1 用戶空間內存動態申請 215
11.3.2 內核空間內存動態申請 215
11.3.3 虛擬地址與物理地址關系 218
11.4 設備I/O端口和I/O內存的訪問 219
11.4.1 Linux I/O端口和I/O內存訪問接口 219
11.4.2 申請與釋放設備I/O端口和I/O內存 221
11.4.3 設備I/O端口和I/O內存訪問流程 221
11.4.4 將設備地址映射到用戶空間 222
11.5 I/O內存靜態映射 227
11.6 DMA 230
11.6.1 DMA與Cache一致性 230
11.6.2 Linux下的DMA編程 231
11.7 總結 240

第12章 Linux字符設備驅動綜合實例 241
12.1 按鍵的設備驅動 242
12.1.1 按鍵的硬件原理 242
12.1.2 按鍵驅動中的數據結構 243
12.1.3 按鍵驅動的模塊加載和卸載函數 244
12.1.4 按鍵設備驅動中斷、定時器處理程序 245
12.1.5 按鍵設備驅動的打開、釋放函數 247
12.1.6 按鍵設備驅動讀函數 247
12.2 觸摸屏的設備驅動 248
12.2.1 觸摸屏的硬件原理 248
12.2.2 觸摸屏設備驅動中數據結構 250
12.2.3 觸摸屏驅動中的硬件控制 251
12.2.4 觸摸屏驅動模塊加載和卸載函數 252
12.2.5 觸摸屏驅動中斷、定時器處理程序 252
12.2.6 觸摸屏設備驅動的打開、釋放函數 255
12.2.7 觸摸屏設備驅動的讀函數 255
12.2.8 觸摸屏設備驅動的輪詢與異步通知 256
12.2.9 Linux輸入子系統 257
12.3 DSP HPI的設備驅動 258
12.3.1 HPI接口的硬件原理 258
12.3.2 HPI接口設備驅動中數據結構 259
12.3.3 HPI接口設備驅動的讀寫函數 260
12.4 NVRAM設備驅動 261
12.4.1 NVRAM設備驅動的數據結構 261
12.4.2 NVRAM設備驅動的模塊加載與卸載函數 262
12.4.3 NVRAM設備驅動讀寫函數 262
12.4.4 NVRAM設備驅動的seek函數 263
12.5 看門狗設備驅動 264
12.5.1 看門狗硬件原理 264
12.5.2 看門狗驅動中的數據結構 265
12.5.3 看門狗驅動模塊的加載和卸載函數 268
12.5.4 看門狗驅動探測和移除函數 269
12.5.5 看門狗驅動的掛起和恢復函數 271
12.5.6 看門狗驅動的打開和釋放函數 272
12.5.7 看門狗驅動寫函數 274
12.6 總結 274

第3篇 Linux設備驅動實例

第13章 Linux塊設備驅動 276
13.1 塊設備的I/O操作特點 277
13.2 Linux塊設備驅動結構 277
13.2.1 block_device_operations結構體 277
13.2.2 gendisk結構體 278
13.2.3 request與bio結構體 280
13.2.4 塊設備驅動注冊與注銷 288
13.3 Linux塊設備驅動的模塊加載與卸載 288
13.4 塊設備的打開與釋放 291
13.5 塊設備驅動的ioctl函數 291
13.6 塊設備驅動的I/O請求處理 292
13.6.1 使用請求隊列 292
13.6.2 不使用請求隊列 295
13.7 實例1:RamDisk驅動 296
13.7.1 RamDisk的硬件原理 296
13.7.2 RamDisk驅動模塊的加載與卸載 296
13.7.3 RamDisk設備驅動block_device_operations及成員函數 299
13.7.4 RamDisk I/O請求處理 300
13.8 實例2:IDE硬盤設備驅動 300
13.8.1 IDE硬盤設備原理 300
13.8.2 IDE硬盤設備驅動的block_device_operations及成員函數 303
13.8.3 IDE硬盤設備驅動的I/O請求處理 304
13.8.4 在內核中增加對新系統IDE設備的支持 310
13.9 總結 313

第14章 Linux終端設備驅動 314
14.1 終端設備 315
14.2 終端設備驅動結構 316
14.3 終端設備驅動的初始化與釋放 321
14.3.1 模塊加載與卸載函數 321
14.3.2 打開與關閉函數 322
14.4 數據發送和接收 323
14.5 tty線路設置 326
14.5.1 線路設置用戶空間接口 326
14.5.2 tty驅動的set_termios函數 327
14.5.3 tty驅動的tiocmget和tiocmset函數 328
14.5.4 tty驅動的ioctl函數 329
14.6 UART設備驅動 330
14.7 S3C2410 UART的驅動實例 335
14.7.1 S3C2410串口硬件描述 335
14.7.2 S3C2410串口驅動的數據結構 338
14.7.3 S3C2410串口驅動的初始化與釋放 341
14.7.4 S3C2410串口數據收發 344
14.7.5 S3C2410串口線路設置 350
14.8 總結 352

第15章 Linux的I2C核心、總線與設備驅動 353
15.1 Linux的I2C體系結構 354
15.2 Linux I2C核心 359
15.3 Linux I2C總線驅動 361
15.3.1 I2C適配器驅動加載與卸載 361
15.3.2 I2C總線通信方法 361
15.4 Linux I2C設備驅動 363
15.4.1 Linux I2C設備驅動的模塊加載與卸載 364
15.4.2 Linux I2C設備驅動的i2c_driver成員函數 364
15.4.3 Linux I2C設備驅動的文件操作接口 367
15.4.4 Linux的i2c-dev.c文件分析 368
15.5 S3C2410 I2C總線驅動實例 374
15.5.1 S3C2410 I2C控制器硬件描述 374
15.5.2 S3C2410 I2C總線驅動總體分析 374
15.5.3 S3C2410 I2C適配器驅動的模塊加載與卸載 375
15.5.4 S3C2410 I2C總線通信方法 378
15.6 SAA7113H視頻AD芯片的I2C設備驅動實例 383
15.6.1 SAA7113H視頻AD芯片硬件描述 383
15.6.2 SAA7113H視頻AD芯片驅動的模塊加載與卸載 384
15.6.3 SAA7113H設備驅動的i2c_driver成員函數 384
15.7 總結 386

第16章 Linux網絡設備驅動 387
16.1 Linux網絡設備驅動的結構 388
16.1.1 網絡協議接口層 388
16.1.2 網絡設備接口層 392
16.1.3 設備驅動功能層 395
16.1.4 網絡設備與媒介層 395
16.2 網絡設備驅動的注冊與注銷 395
16.3 網絡設備的初始化 397
16.4 網絡設備的打開與釋放 398
16.5 數據發送流程 399
16.6 數據接收流程 400
16.7 網絡連接狀態 402
16.8 參數設置和統計數據 404
16.9 CS8900網卡設備驅動實例 407
16.9.1 CS8900網卡硬件描述 407
16.9.2 CS8900網卡驅動設計分析 409
16.9.3 CS8900網卡注冊、初始化與注銷 410
16.9.4 CS8900網卡發送數據流程 415
16.9.5 CS8900網卡接收數據流程 416
16.10 總結 418

第17章 Linux音頻設備驅動 419
17.1 數字音頻設備 420
17.2 音頻設備硬件接口 421
17.2.1 PCM接口 421
17.2.2 IIS接口 421
17.2.3 AC97接口 421
17.3 Linux OSS音頻設備驅動 422
17.3.1 OSS驅動的組成 422
17.3.2 mixer接口 423
17.3.3 dsp接口 424
17.3.4 OSS用戶空間編程 425
17.4 Linux ALSA音頻設備驅動 431
17.4.1 ALSA的組成 431
17.4.2 card和組件管理 432
17.4.3 PCM設備 434
17.4.4 控制接口 444
17.4.5 AC97 API接口 449
17.4.6 ALSA用戶空間編程 451
17.5 S3C2410+UDA1341 OSS驅動實例 456
17.5.1 S3C2410與UDA1341接口硬件描述 456
17.5.2 注冊dsp和mixer接口 459
17.5.3 mixer接口的I/O控制函數 460
17.5.4 dsp接口音頻數據傳輸 462
17.6 SA1100+UDA1341 ALSA驅動實例 465
17.6.1 card注冊與注銷 465
17.6.2 PCM設備的實現 467
17.6.3 控制接口的實現 472
17.7 PXA255+AC97 ALSA驅動實例 474
17.8 總結 476

第18章 LCD設備驅動 477
18.1 LCD硬件原理 478
18.2 幀緩沖 480
18.2.1 幀緩沖的概念 480
18.2.2 顯示緩沖區與顯示點 480
18.2.3 Linux幀緩沖相關數據結構與函數 481
18.3 Linux幀緩沖設備驅動結構 487
18.4 幀緩沖設備驅動的模塊加載與卸載函數 487
18.5 幀緩沖設備顯示緩沖區的申請與釋放 489
18.6 幀緩沖設備的參數設置 490
18.6.1 定時參數 490
18.6.2 像素時鐘 491
18.6.3 顏色位域 491
18.6.4 固定參數 491
18.7 幀緩沖設備驅動的fb_ops成員函數 491
18.8 LCD設備驅動的讀寫、mmap和ioctl函數 493
18.9 幀緩沖設備的用戶空間訪問 499
18.10 Linux圖形用戶界面 504
18.10.1 Qt-X11/QtEmbedded/Qtopia 504
18.10.2 Microwindows/Nano-X 508
18.10.3 MiniGUI 511
18.11 實例:S3C2410 LCD設備驅動 514
18.11.1 S3C2410 LCD控制器硬件描述 514
18.11.2 S3C2410 LCD驅動的模塊加載與卸載函數 517
18.11.3 S3C2410 LCD驅動的探測與移除函數 520
18.11.4 S3C2410 LCD驅動掛起與恢復函數 524
18.11.5 S3C2410 LCD驅動的fb_ops成員函數 525
18.12 總結 528

第19章 Flash設備驅動 529
19.1 Linux Flash驅動結構 530
19.1.1 Linux MTD系統層次 530
19.1.2 Linux MTD系統接口 530
19.1.3 MTD用戶空間編程 534
19.2 NOR Flash驅動 538
19.3 NAND Flash驅動 541
19.4 NOR Flash驅動實例:S3C2410外圍的NOR Flash驅動 546
19.5 NAND Flash驅動實例:S3C2410外圍的NAND Flash驅動 549
19.5.1 S3C2410 NAND控制器硬件描述 549
19.5.2 nand_chip初始化和成員函數 549
19.5.3 NAND設備驅動初始化與釋放 553
19.6 Flash文件系統的建立 556
19.6.1 Flash轉換層 556
19.6.2 CramFS 557
19.6.3 JFFS/JFFS2 558
19.6.4 YAFFS/YAFFS2 559
19.7 總結 561

第20章 USB主機與設備驅動 562
20.1 Linux USB驅動層次 563
20.1.1 主機側與設備側USB驅動 563
20.1.2 設備、配置、接口、端點 564
20.2 USB主機驅動 568
20.2.1 USB主機驅動的整體結構 568
20.2.2 實例:S3C2410 USB 主機驅動 571
20.3 USB設備驅動 572
20.3.1 USB設備驅動整體結構 572
20.3.2 USB請求塊(URB) 577
20.3.3 探測和斷開函數 582
20.3.4 USB骨架程序 582
20.4 USB設備驅動實例 589
20.4.1 USB串口驅動 589
20.4.2 USB鍵盤驅動 594
20.5 總結 598

第21章 PCI設備驅動 599
21.1 PCI總線與配置空間 600
21.1.1 PCI總線的Linux描述 600
21.1.2 PCI設備的Linux描述 602
21.1.3 PCI配置空間訪問 603
21.2 PCI設備驅動結構 607
21.2.1 pci_driver結構體 607
21.2.2 PCI設備驅動的組成 612
21.2.3 舊版內核的PCI設備探測 615
21.3 實例:Intel 810主板聲卡驅動 617
21.4 總結 623

第4篇 Linux設備驅動測試、移植

第22章 Linux設備驅動的調試 626
22.1 Linux開發環境建設 627
22.1.1 實驗室建設 627
22.1.2 工具鏈 628
22.1.3 串口工具 629
22.2 GDB調試器用法 632
22.2.1 GDB基本用法 632
22.2.2 DDD圖形界面調試工具 640
22.3 Linux內核調試 642
22.4 內核打印信息-printk() 643
22.5 使用/proc 644
22.6 Oops 649
22.7 監視工具 650
22.8 內核調試器 652
22.8.1 kcore 652
22.8.2 KDB 654
22.8.3 KGDB 656
22.9 使用仿真器調試內核 657
22.10 應用程序調試 658
22.11 總結 659

第23章 Linux設備驅動的移植 660
23.1 編寫可移植的設備驅動 661
23.1.1 可移植的數據類型 661
23.1.2 結構體對界 662
23.1.3 Little Endian與Big Endian 663
23.1.4 內存頁面大小 664
23.2 巧用同類設備驅動 664
23.2.1 巧用demo板驅動 664
23.2.2 巧用類似芯片的驅動程序 665
23.2.3 借用芯片廠商的范例程序 668
23.3 從Linux 2.4移植設備驅動到Linux 2.6 668
23.4 Linux與其他操作系統之間的驅動移植 676
23.5 總結 684

參考文獻 685
序: