|
-- 會員 / 註冊 --
|
|
|
|
Linux設備驅動開發詳解:基于最新的Linux4.0內核 ( 簡體 字) |
作者:宋寶華 | 類別:1. -> 作業系統 -> Linux |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 42211 詢問書籍請說出此書號!【缺書】 NT售價: 445 元 |
出版日:8/13/2015 |
頁數:618 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111507895 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:本書介紹了Linux設備驅動開發理論、框架與實例,詳細說明了自旋鎖、信號量、完成量、中斷頂/底半部、定時器、內存和I/O映射以及異步通知、阻塞I/O、非阻塞I/O等Linux設備驅動理論,以及字符設備、塊設備、tty設備、I2c設備、LCD設備、音頻設備、USB設備、網絡設備、PCI設備等Linux設備驅動架構中各個復雜數據結構和函數的關系,并講解了Linux驅動開發的大量實例,使讀者能夠獨立開發各類Linux設備驅動。
|
目錄:贊譽 推薦序一 推薦序二 前言 第1章 Linux設備驅動概述及開發環境構建 1 1.1 設備驅動的作用 1 1.2 無操作系統時的設備驅動 2 1.3 有操作系統時的設備驅動 4 1.4 Linux設備驅動 5 1.4.1 設備的分類及特點 5 1.4.2 Linux設備驅動與整個軟硬件系統的關系 6 1.4.3 Linux設備驅動的重點、難點 7 1.5 Linux設備驅動的開發環境構建 8 1.5.1 PC上的Linux環境 8 1.5.2 QEMU實驗平臺 11 1.5.3 源代碼閱讀和編輯 13 1.6 設備驅動Hello World:LED驅動 15 1.6.1 無操作系統時的LED驅動 15 1.6.2 Linux下的LED驅動 15 第2章 驅動設計的硬件基礎 20 2.1 處理器 20 2.1.1 通用處理器 20 2.1.2 數字信號處理器 22 2.2 存儲器 24 2.3 接口與總線 28 2.3.1 串口 28 2.3.2 I2C 29 2.3.3 SPI 30 2.3.4 USB 31 2.3.5 以太網接口 33 2.3.6 PCI和PCI-E 34 2.3.7 SD和SDIO 36 2.4 CPLD和FPGA 37 2.5 原理圖分析 40 2.6 硬件時序分析 42 2.6.1 時序分析的概念 42 2.6.2 典型的硬件時序 43 2.7 芯片數據手冊閱讀方法 44 2.8 儀器儀表使用 47 2.8.1 萬用表 47 2.8.2 示波器 47 2.8.3 邏輯分析儀 49 2.9 總結 51 第3章 Linux內核及內核編程 52 3.1 Linux內核的發展與演變 52 3.2 Linux 2.6后的內核特點 56 3.3 Linux內核的組成 59 3.3.1 Linux內核源代碼的目錄結構 59 3.3.2 Linux內核的組成部分 60 3.3.3 Linux內核空間與用戶空間 64 3.4 Linux內核的編譯及加載 64 3.4.1 Linux內核的編譯 64 3.4.2 Kconfig和Makefile 66 3.4.3 Linux內核的引導 74 3.5 Linux下的C編程特點 75 3.5.1 Linux編碼風格 75 3.5.2 GNU C與ANSI C 78 3.5.3 do { } while(0) 語句 83 3.5.4 goto語句 85 3.6 工具鏈 85 3.7 實驗室建設 88 3.8 串口工具 89 3.9 總結 91 第4章 Linux內核模塊 92 4.1 Linux內核模塊簡介 92 4.2 Linux內核模塊程序結構 95 4.3 模塊加載函數 95 4.4 模塊卸載函數 97 4.5 模塊參數 97 4.6 導出符號 99 4.7 模塊聲明與描述 100 4.8 模塊的使用計數 100 4.9 模塊的編譯 101 4.10 使用模塊“繞開”GPL 102 4.11 總結 103 第5章 Linux文件系統與設備文件 104 5.1 Linux文件操作 104 5.1.1 文件操作系統調用 104 5.1.2 C庫文件操作 108 5.2 Linux文件系統 109 5.2.1 Linux文件系統目錄結構 109 5.2.2 Linux文件系統與設備驅動 110 5.3 devfs 114 5.4 udev用戶空間設備管理 116 5.4.1 udev與devfs的區別 116 5.4.2 sysfs文件系統與Linux設備模型 119 5.4.3 udev的組成 128 5.4.4 udev規則文件 129 5.5 總結 133 第6章 字符設備驅動 134 6.1 Linux字符設備驅動結構 134 6.1.1 cdev結構體 134 6.1.2 分配和釋放設備號 136 6.1.3 f?ile_operations結構體 136 6.1.4 Linux字符設備驅動的組成 138 6.2 globalmem虛擬設備實例描述 142 6.3 globalmem設備驅動 142 6.3.1 頭文件、宏及設備結構體 142 6.3.2 加載與卸載設備驅動 143 6.3.3 讀寫函數 144 6.3.4 seek函數 146 6.3.5 ioctl函數 146 6.3.6 使用文件私有數據 148 6.4 globalmem驅動在用戶空間中的驗證 156 6.5 總結 157 第7章 Linux設備驅動中的并發控制 158 7.1 并發與競態 158 7.2 編譯亂序和執行亂序 160 7.3 中斷屏蔽 165 7.4 原子操作 166 7.4.1 整型原子操作 167 7.4.2 位原子操作 168 7.5 自旋鎖 169 7.5.1 自旋鎖的使用 169 7.5.2 讀寫自旋鎖 173 7.5.3 順序鎖 174 7.5.4 讀-復制-更新 176 7.6 信號量 181 7.7 互斥體 183 7.8 完成量 184 7.9 增加并發控制后的globalmem的設備驅動 185 7.10 總結 188 第8章 Linux設備驅動中的阻塞與非阻塞I/O 189 8.1 阻塞與非阻塞I/O 189 8.1.1 等待隊列 191 8.1.2 支持阻塞操作的globalf?ifo設備驅動 194 8.1.3 在用戶空間驗證globalf?ifo的讀寫 198 8.2 輪詢操作 198 8.2.1 輪詢的概念與作用 198 8.2.2 應用程序中的輪詢編程 199 8.2.3 設備驅動中的輪詢編程 201 8.3 支持輪詢操作的globalf?ifo驅動 202 8.3.1 在globalf?ifo驅動中增加輪詢操作 202 8.3.2 在用戶空間中驗證globalf?ifo設備的輪詢 203 8.4 總結 205 第9章 Linux設備驅動中的異步通知與異步I/O 206 9.1 異步通知的概念與作用 206 9.2 Linux異步通知編程 207 9.2.1 Linux信號 207 9.2.2 信號的接收 208 9.2.3 信號的釋放 210 9.3 支持異步通知的globalf?ifo驅動 212 9.3.1 在globalf?ifo驅動中增加異步通知 212 9.3.2 在用戶空間中驗證globalf?ifo的異步通知 214 9.4 Linux異步I/O 215 9.4.1 AIO概念與GNU C庫AIO 215 9.4.2 Linux內核AIO與libaio 219 9.4.3 AIO與設備驅動 222 9.5 總結 223 第10章 中斷與時鐘 224 10.1 中斷與定時器 224 10.2 Linux中斷處理程序架構 227 10.3 Linux中斷編程 228 10.3.1 申請和釋放中斷 228 10.3.2 使能和屏蔽中斷 230 10.3.3 底半部機制 230 10.3.4 實例:GPIO按鍵的中斷 235 10.4 中斷共享 237 10.5 內核定時器 238 10.5.1 內核定時器編程 238 10.5.2 內核中延遲的工作delayed_work 242 10.5.3 實例:秒字符設備 243 10.6 內核延時 247 10.6.1 短延遲 247 10.6.2 長延遲 248 10.6.3 睡著延遲 248 10.7 總結 250 第11章 內存與I/O訪問 251 11.1 CPU與內存、I/O 251 11.1.1 內存空間與I/O空間 251 11.1.2 內存管理單元 252 11.2 Linux內存管理 256 11.3 內存存取 261 11.3.1 用戶空間內存動態申請 261 11.3.2 內核空間內存動態申請 262 11.4 設備I/O端口和I/O內存的訪問 267 11.4.1 Linux I/O端口和I/O內存訪問接口 267 11.4.2 申請與釋放設備的I/O端口和I/O內存 268 11.4.3 設備I/O端口和I/O內存訪問流程 269 11.4.4 將設備地址映射到用戶空間 270 11.5 I/O內存靜態映射 276 11.6 DMA 277 11.6.1 DMA與Cache一致性 278 11.6.2 Linux下的DMA編程 279 11.7 總結 285 第12章 Linux設備驅動的軟件架構思想 286 12.1 Linux驅動的軟件架構 286 12.2 platform設備驅動 290 12.2.1 platform總線、設備與驅動 290 12.2.2 將globalf?ifo作為platform設備 293 12.2.3 platform設備資源和數據 295 12.3 設備驅動的分層思想 299 12.3.1 設備驅動核心層和例化 299 12.3.2 輸入設備驅動 301 12.3.3 RTC設備驅動 306 12.3.4 Framebuffer設備驅動 309 12.3.5 終端設備驅動 311 12.3.6 misc設備驅動 316 12.3.7 驅動核心層 321 12.4 主機驅動與外設驅動分離的設計思想 321 12.4.1 主機驅動與外設驅動分離 321 12.4.2 Linux SPI主機和設備驅動 322 12.5 總結 330 第13章 Linux塊設備驅動 331 13.1 塊設備的I/O操作特點 331 13.2 Linux塊設備驅動結構 332 13.2.1 block_device_operations結構體 332 13.2.2 gendisk結構體 334 13.2.3 bio、request和request_queue 335 13.2.4 I/O調度器 339 13.3 Linux塊設備驅動的初始化 340 13.4 塊設備的打開與釋放 342 13.5 塊設備驅動的ioctl函數 342 13.6 塊設備驅動的I/O請求處理 343 13.6.1 使用請求隊列 343 13.6.2 不使用請求隊列 347 13.7 實例:vmem_disk驅動 349 13.7.1 vmem_disk的硬件原理 349 13.7.2 vmem_disk驅動模塊的加載與卸載 349 13.7.3 vmem_disk設備驅動的block_device_operations 351 13.7.4 vmem_disk的I/O請求處理 352 13.8 Linux MMC子系統 354 13.9 總結 357 第14章 Linux網絡設備驅動 358 14.1 Linux網絡設備驅動的結構 358 14.1.1 網絡協議接口層 359 14.1.2 網絡設備接口層 363 14.1.3 設備驅動功能層 367 14.2 網絡設備驅動的注冊與注銷 367 14.3 網絡設備的初始化 369 14.4 網絡設備的打開與釋放 370 14.5 數據發送流程 371 14.6 數據接收流程 372 14.7 網絡連接狀態 375 14.8 參數設置和統計數據 377 14.9 DM9000網卡設備驅動實例 380 14.9.1 DM9000網卡硬件描述 380 14.9.2 DM9000網卡驅動設計分析 380 14.10 總結 386 第15章 Linux I2C核心、總線與設備驅動 387 15.1 Linux I2C體系結構 387 15.2 Linux I2C核心 394 15.3 Linux I2C適配器驅動 396 15.3.1 I2C適配器驅動的注冊與注銷 396 15.3.2 I2C總線的通信方法 397 15.4 Linux I2C設備驅動 399 15.4.1 Linux I2C設備驅動的模塊加載與卸載 400 15.4.2 Linux I2C設備驅動的數據傳輸 400 15.4.3 Linux的i2c-dev.c文件分析 400 15.5 Tegra I2C總線驅動實例 405 15.6 AT24xx EEPROM的I2C設備驅動實例 410 15.7 總結 413 第16章 USB主機、設備與Gadget驅動 414 16.1 Linux USB驅動層次 414 16.1.1 主機側與設備側USB驅動 414 16.1.2 設備、配置、接口、端點 415 16.2 USB主機控制器驅動 420 16.2.1 USB主機控制器驅動的整體結構 420 16.2.2 實例:Chipidea USB主機驅動 425 16.3 USB設備驅動 425 16.3.1 USB設備驅動的整體結構 425 16.3.2 USB請求塊 430 16.3.3 探測和斷開函數 435 16.3.4 USB骨架程序 436 16.3.5 實例:USB鍵盤驅動 443 16.4 USB UDC與Gadget驅動 446 16.4.1 UDC和Gadget驅動的關鍵數據結構與API 446 16.4.2 實例:Chipidea USB UDC驅動 451 16.4.3 實例:Loopback Function驅動 453 16.5 USB OTG驅動 456 16.6 總結 458 第17章 I2C、SPI、USB驅動架構類比 459 17.1 I2C、SPI、USB驅動架構 459 17.2 I2C主機和外設眼里的Linux世界 460 第18章 ARM Linux設備樹 461 18.1 ARM設備樹起源 461 18.2 設備樹的組成和結構 462 18.2.1 DTS、DTC和DTB等 462 18.2.2 根節點兼容性 468 18.2.3 設備節點兼容性 470 18.2.4 設備節點及label的命名 475 18.2.5 地址編碼 477 18.2.6 中斷連接 479 18.2.7 GPIO、時鐘、pinmux連接 480 18.3 由設備樹引發的BSP和驅動變更 484 18.4 常用的OF API 490 18.5 總結 493 第19章 Linux電源管理的系統架構和驅動 494 19.1 Linux電源管理的全局架構 494 19.2 CPUFreq驅動 495 19.2.1 SoC的CPUFreq驅動實現 495 19.2.2 CPUFreq的策略 501 19.2.3 CPUFreq的性能測試和調優 501 19.2.4 CPUFreq通知 502 19.3 CPUIdle驅動 504 19.4 PowerTop 508 19.5 Regulator驅動 508 19.6 OPP 511 19.7 PM QoS 515 19.8 CPU熱插拔 518 19.9 掛起到RAM 522 19.10 運行時的PM 528 19.11 總結 534 第20章 Linux芯片級移植及底層驅動 535 20.1 ARM Linux底層驅動的組成和現狀 535 20.2 內核節拍驅動 536 20.3 中斷控制器驅動 541 20.4 SMP多核啟動以及CPU熱插拔驅動 549 20.5 DEBUG_LL和EARLY_PRINTK的設置 556 20.6 GPIO驅動 557 20.7 pinctrl驅動 560 20.8 時鐘驅動 572 20.9 dmaengine驅動 578 20.10 總結 580 第21章 Linux設備驅動的調試 581 21.1 GDB調試器的用法 581 21.1.1 GDB的基本用法 581 21.1.2 DDD圖形界面調試工具 591 21.2 Linux內核調試 594 21.3 內核打印信息——printk() 596 21.4 DEBUG_LL和EARLY_PRINTK 599 21.5 使用“/proc” 600 21.6 Oops 606 21.7 BUG_ON()和WARN_ON() 608 21.8 strace 609 21.9 KGDB 610 21.10 使用仿真器調試內核 612 21.11 應用程序調試 613 21.12 Linux性能監控與調優工具 616 21.13 總結 618
|
序: |
|