Linux 設備驅動開發詳解 : 基於最新的 Linux4.0 內核 Linux设备驱动开发详解:基于最新的Linux4.0内核

宋寶華

  • 出版商: 機械工業
  • 出版日期: 2015-08-01
  • 定價: $534
  • 售價: 8.5$454
  • 語言: 簡體中文
  • 頁數: 618
  • 裝訂: 平裝
  • ISBN: 7111507894
  • ISBN-13: 9787111507895
  • 相關分類: Linux
  • 已絕版

買這商品的人也買了...

相關主題

商品描述

 

<內容簡介>

對於嵌入式工程師來說,進入更高階段後,學習Linux設備驅動開發無疑就是職業生涯的一次「重生」。這是因為Linux設備驅動開發不僅僅涉及操作系統的轉換,開發方式的轉換,更重要的是思維上的轉變。對於Linux這樣一個複雜系統,如何從複雜的代碼中抓住設備驅動開發的關鍵是任何一個Linux設備驅動開發者入門時需要面對的挑戰。除了知識、工具之外,往往還需要思路上的指導。宋寶華編著的《Linux設備驅動開發詳解》不但幫助Linux設備驅動開發的初學者釐清必要的概念,還從具體的實例、設備驅動開發的指導原則循序漸進地引導讀者漸入學習佳境。為了讓讀者能夠達到Linux設備驅動開發的至臻境界,作者更是從軟件工程的角度抽象出設備驅動開發的一般思想。毫無疑問,本書將成為讀者學習Unux設備驅動開發過程中的一座「燈塔」。

 

<章節目錄>

讚譽
推薦序一
推薦序二
前言
第1章  Linux設備驅動概述及開發環境構建
  1.1  設備驅動的作用
  1.2  無操作系統時的設備驅動
  1.3  有操作系統時的設備驅動
  1.4  Linux設備驅動
    1.4.1  設備的分類及特點
    1.4.2  Linux設備驅動與整個軟硬件系統的關係
    1.4.3  Linux設備驅動的重點、難點
  1.5  Linux設備驅動的開發環境構建
    1.5.1  PC上的Linux環境
    1.5.2  QEMU實驗平臺
    1.5.3  源代碼閱讀和編輯
  1.6  設備驅動Hello  World:LED驅動
    1.6.1  無操作系統時的LED驅動
    1.6.2  Linux下的LED驅動
第2章  驅動設計的硬件基礎
  2.1  處理器
    2.1.1  通用處理器
    2.1.2  數字信號處理器
  2.2  存儲器
  2.3  接口與總線
    2.3.1  串口
    2.3.2  I2C
    2.3.3  SPI
    2.3.4  USB
    2.3.5  以太網接口
    2.3.6  PCI和PCIE
    2.3.7  SD和SDIO
  2.4  CPLD和FPGA
  2.5  原理圖分析
  2.6  硬件時序分析
    2.6.1  時序分析的概念
    2.6.2  典型的硬件時序
  2.7  芯片數據手冊閱讀方法
  2.8  儀器儀錶使用
    2.8.1  萬用表
    2.8.2  示波器
    2.8.3  邏輯分析儀
  2.9  總結
第3章  Linux內核及內核編程
  3.1  Linux內核的發展與演變
  3.2  Linux  2.6後的內核特點
  3.3  Linux內核的組成
    3.3.1  Linux內核源代碼的目錄結構
    3.3.2  Linux內核的組成部分
    3.3.3  Linux內核空間與用戶空間

  3.4  Linux內核的編譯及加載
    3.4.1  Linux內核的編譯
    3.4.2  Kconfig和Makefile
    3.4.3  Linux內核的引導
  3.5  Linux下的C編程特點
    3.5.1  Linux編碼風格
    3.5.2  GNU  C與ANSI  C
    3.5.3  do{}while(0)語句
    3.5.4  goto語句
  3.6  工具鏈
  3.7  實驗室建設
  3.8  串口工具
  3.9  總結
第4章  Linux內核模塊
  4.1  Linux內核模塊簡介
  4.2  Linux內核模塊程序結構
  4.3  模塊加載函數
  4.4  模塊卸載函數
  4.5  模塊參數
  4.6  導出符號
  4.7  模塊聲明與描述
  4.8  模塊的使用計數
  4.9  模塊的編譯
  4.10  使用模塊「繞開」GPL
  4.11  總結
第5章  Linux文件系統與設備文件
  5.1  Linux文件操作
    5.1.1  文件操作系統調用
    5.1.2  C庫文件操作
  5.2  Linux文件系統
    5.2.1  Linux文件系統目錄結構
    5.2.2  Linux文件系統與設備驅動
  5.3  devfs
  5.4  udev用戶空間設備管理
    5.4.1  udev與devfs的區別
    5.4.2  sysfs文件系統與Linux設備模型
    5.4.3  udev的組成
    5.4.4  udev規則文件
  5.5  總結
第6章  字符設備驅動
  6.1  Linux字符設備驅動結構
    6.1.1  cdev結構體
    6.1.2  分配和釋放設備號
    6.1.3  f?ile_operations結構體
    6.1.4  Linux字符設備驅動的組成
  6.2  globalmem虛擬設備實例描述
  6.3  globalmem設備驅動
    6.3.1  頭文件、宏及設備結構體
    6.3.2  加載與卸載設備驅動
    6.3.3  讀寫函數

    6.3.4  seek函數
    6.3.5  ioctl函數
    6.3.6  使用文件私有數據
  6.4  globalmem驅動在用戶空間中的驗證
  6.5  總結
第7章  Linux設備驅動中的併發控制
  7.1  併發與競態
  7.2  編譯亂序和執行亂序
  7.3  中斷屏蔽
  7.4  原子操作
    7.4.1  整型原子操作
    7.4.2  位原子操作
  7.5  自旋鎖
    7.5.1  自旋鎖的使用
    7.5.2  讀寫自旋鎖
    7.5.3  順序鎖
    7.5.4  讀複製更新
  7.6  信號量
  7.7  互斥體
  7.8  完成量
  7.9  增加併發控制後的globalmem的設備驅動
  7.10  總結
第8章  Linux設備驅動中的阻塞與非阻塞I/O
  8.1  阻塞與非阻塞I/O
    8.1.1  等待隊列
    8.1.2  支持阻塞操作的globalf?ifo設備驅動
    8.1.3  在用戶空間驗證globalf?ifo的讀寫
  8.2  輪詢操作
    8.2.1  輪詢的概念與作用
    8.2.2  應用程序中的輪詢編程
    8.2.3  設備驅動中的輪詢編程
  8.3  支持輪詢操作的globalf?ifo驅動
    8.3.1  在globalf?ifo驅動中增加輪詢操作
    8.3.2  在用戶空間中驗證globalf?ifo設備的輪詢
  8.4  總結
第9章  Linux設備驅動中的異步通知與異步I/O
  9.1  異步通知的概念與作用
  9.2  Linux異步通知編程
    9.2.1  Linux信號
    9.2.2  信號的接收
    9.2.3  信號的釋放
  9.3  支持異步通知的globalf?ifo驅動
    9.3.1  在globalf?ifo驅動中增加異步通知
    9.3.2  在用戶空間中驗證globalf?ifo的異步通知
  9.4  Linux異步I/O
    9.4.1  AIO概念與GNU  C庫AIO
    9.4.2  Linux內核AIO與libaio
    9.4.3  AIO與設備驅動
  9.5  總結
第10章  中斷與時鐘

  10.1  中斷與定時器
  10.2  Linux中斷處理程序架構
  10.3  Linux中斷編程
    10.3.1  申請和釋放中斷
    10.3.2  使能和屏蔽中斷
    10.3.3  底半部機制
    10.3.4  實例:GPIO按鍵的中斷
  10.4  中斷共享
  10.5  內核定時器
    10.5.1  內核定時器編程
    10.5.2  內核中延遲的工作delayed_work
    10.5.3  實例:秒字符設備
  10.6  內核延時
    10.6.1  短延遲
    10.6.2  長延遲
    10.6.3  睡著延遲
  10.7  總結
第11章  內存與I/O訪問
  11.1  CPU與內存、I/O
    11.1.1  內存空間與I/O空間
    11.1.2  內存管理單元
  11.2  Linux內存管理
  11.3  內存存取
    11.3.1  用戶空間內存動態申請
    11.3.2  內核空間內存動態申請
  11.4  設備I/O埠和I/O內存的訪問
    11.4.1  Linux  I/O埠和I/O內存訪問接口
    11.4.2  申請與釋放設備的I/O埠和I/O內存
    11.4.3  設備I/O埠和I/O內存訪問流程
    11.4.4  將設備地址映射到用戶空間
  11.5  I/O內存靜態映射
  11.6  DMA
    11.6.1  DMA與Cache一致性
    11.6.2  Linux下的DMA編程
  11.7  總結
第12章  Linux設備驅動的軟件架構思想
  12.1  Linux驅動的軟件架構
  12.2  platform設備驅動
    12.2.1  platform總線、設備與驅動
    12.2.2  將globalf?ifo作為platform設備
    12.2.3  platform設備資源和數據
  12.3  設備驅動的分層思想
    12.3.1  設備驅動核心層和例化
    12.3.2  輸入設備驅動
    12.3.3  RTC設備驅動
    12.3.4  Framebuffer設備驅動
    12.3.5  終端設備驅動
    12.3.6  misc設備驅動
    12.3.7  驅動核心層
  12.4  主機驅動與外設驅動分離的設計思想

    12.4.1  主機驅動與外設驅動分離
    12.4.2  Linux  SPI主機和設備驅動
  12.5  總結
第13章  Linux塊設備驅動
  13.1  塊設備的I/O操作特點
  13.2  Linux塊設備驅動結構
    13.2.1  block_device_operations結構體
    13.2.2  gendisk結構體
    13.2.3  bio、request和request_queue
    13.2.4  I/O調度器
  13.3  Linux塊設備驅動的初始化
  13.4  塊設備的打開與釋放
  13.5  塊設備驅動的ioctl函數
  13.6  塊設備驅動的I/O請求處理
    13.6.1  使用請求隊列
    13.6.2  不使用請求隊列
  13.7  實例:vmem_disk驅動
    13.7.1  vmem_disk的硬件原理
    13.7.2  vmem_disk驅動模塊的加載與卸載
    13.7.3  vmem_disk設備驅動的block_device_operations
    13.7.4  vmem_disk的I/O請求處理
  13.8  Linux  MMC子系統
  13.9  總結
第14章  Linux網絡設備驅動
  14.1  Linux網絡設備驅動的結構
    14.1.1  網絡協議接口層
    14.1.2  網絡設備接口層
    14.1.3  設備驅動功能層
  14.2  網絡設備驅動的註冊與註銷
  14.3  網絡設備的初始化
  14.4  網絡設備的打開與釋放
  14.5  數據發送流程
  14.6  數據接收流程
  14.7  網絡連接狀態
  14.8  參數設置和統計數據
  14.9  DM9000網卡設備驅動實例
    14.9.1  DM9000網卡硬件描述
    14.9.2  DM9000網卡驅動設計分析
  14.10  總結
第15章  Linux  I2C核心、總線與設備驅動
  15.1  Linux  I2C體系結構
  15.2  Linux  I2C核心
  15.3  Linux  I2C適配器驅動
    15.3.1  I2C適配器驅動的註冊與註銷
    15.3.2  I2C總線的通信方法
  15.4  Linux  I2C設備驅動
    15.4.1  Linux  I2C設備驅動的模塊加載與卸載
    15.4.2  Linux  I2C設備驅動的數據傳輸
    15.4.3  Linux的i2cdev.c文件分析
  15.5  Tegra  I2C總線驅動實例

  15.6  AT24xx  EEPROM的I2C設備驅動實例
  15.7  總結
第16章  USB主機、設備與Gadget驅動
  16.1  Linux  USB驅動層次
    16.1.1  主機側與設備側USB驅動
    16.1.2  設備、配置、接口、端點
  16.2  USB主機控制器驅動
    16.2.1  USB主機控制器驅動的整體結構
    16.2.2  實例:Chipidea  USB主機驅動
  16.3  USB設備驅動
    16.3.1  USB設備驅動的整體結構
    16.3.2  USB請求塊
    16.3.3  探測和斷開函數
    16.3.4  USB骨架程序
    16.3.5  實例:USB鍵盤驅動
  16.4  USB  UDC與Gadget驅動
    16.4.1  UDC和Gadget驅動的關鍵數據結構與API
    16.4.2  實例:Chipidea  USB  UDC驅動
    16.4.3  實例:Loopback  Function驅動
  16.5  USB  OTG驅動
  16.6  總結
第17章  I2C、SPI、USB驅動架構類比
  17.1  I2C、SPI、USB驅動架構
  17.2  I2C主機和外設眼裡的Linux世界
第18章  ARM  Linux設備樹
  18.1  ARM設備樹起源
  18.2  設備樹的組成和結構
    18.2.1  DTS、DTC和DTB等
    18.2.2  根節點兼容性
    18.2.3  設備節點兼容性
    18.2.4  設備節點及label的命名
    18.2.5  地址編碼
    18.2.6  中斷連接
    18.2.7  GPIO、時鐘、pinmux連接
  18.3  由設備樹引發的BSP和驅動變更
  18.4  常用的OF  API
  18.5  總結
第19章  Linux電源管理的系統架構和驅動
  19.1  Linux電源管理的全局架構
  19.2  CPUFreq驅動
    19.2.1  SoC的CPUFreq驅動實現
    19.2.2  CPUFreq的策略
    19.2.3  CPUFreq的性能測試和調優
    19.2.4  CPUFreq通知
  19.3  CPUIdle驅動
  19.4  PowerTop
  19.5  Regulator驅動
  19.6  OPP
  19.7  PM  QoS
  19.8  CPU熱插拔

  19.9  掛起到RAM
  19.10  運行時的PM
  19.11  總結
第20章  Linux芯片級移植及底層驅動
  20.1  ARM  Linux底層驅動的組成和現狀
  20.2  內核節拍驅動
  20.3  中斷控制器驅動
  20.4  SMP多核啟動以及CPU熱插拔驅動
  20.5  DEBUG_LL和EARLY_PRINTK的設置
  20.6  GPIO驅動
  20.7  pinctrl驅動
  20.8  時鐘驅動
  20.9  dmaengine驅動
  20.10  總結
第21章  Linux設備驅動的調試
  21.1  GDB調試器的用法
    21.1.1  GDB的基本用法
    21.1.2  DDD圖形界面調試工具
  21.2  Linux內核調試
  21.3  內核打印信息--printk()
  21.4  DEBUG_LL和EARLY_PRINTK
  21.5  使用「/proc」
  21.6  Oops
  21.7  BUG_ON()和WARN_ON()
  21.8  strace
  21.9  KGDB
  21.10  使用模擬器調試內核
  21.11  應用程序調試
  21.12  Linux性能監控與調優工具
  21.13  總結