內容簡介
《Linux設備驅動開發入門與編程實踐》具有由淺入深、通俗易懂和注重實踐等特點,適合於具備一定嵌入式Linux開發經驗,需要從事或學習嵌入式Linux驅動程式設計的讀者作為嵌入式Linux驅動開發的自學教材;同時也適合已掌握Linux驅動程式設計的一般原理,需要提高嵌入式Linux驅動開發實踐能力及對嵌入式Linux驅動開發感興趣的程式設計師參考學習。
編輯推薦
全面介紹嵌入式Linux驅動開發技術
豐富的項目實例
詳盡的代碼+完整的註解
嵌入式驅動開發入門、進階必讀教程
《Linux設備驅動開發入門與編程實踐》力求完整、系統地介紹嵌入式Linux驅動開發的相關知識,並以多個項目實例講解了基於Linux的字元設備、PCI設備、音頻接口、顯示接口、塊設備、網路設備及USB設備的驅動開發技術。全書講解由淺入深、通俗易懂、注重實踐,希望讀者通過對《Linux設備驅動開發入門與編程實踐》的學習,能夠清晰地認識嵌入式Linux驅動程式開發的相關技術,並掌握真正實用的編程思想和方法。《Linux設備驅動開發入門與編程實踐》適合於具備一定嵌入式Linux開發經驗,需要從事或學習嵌入式Linux驅動程式設計的讀者作為嵌入式Linux驅動開發的自學教材:同時也適合已掌握Linux驅動程式設計的一般原理,需要提高嵌入式Linux驅動開發實踐能力及對嵌入式Linux驅動開發感興趣的程式設計師參考學習。
目錄
第1章嵌入式Linux系統開發概述
1.1嵌入式系統概述
1.1.1你身邊的嵌入式系統
1.1.2什麼是嵌入式系統
1.1.3嵌入式系統的發展
1.1.4嵌入式系統市場規模
1.1.5嵌入式系統發展趨勢和面臨的挑戰
1.2嵌入式作業系統
1.2.1嵌入式作業系統的特點
1.2.2嵌入式作業系統發展概述
1.2.3Linux作業系統特點
1.2.4嵌入式Linux系統的特點
1.2.5國外嵌入式Linux發展現狀
1.2.6國內嵌入式Linux發展現狀
1.3ARM處理器平台介紹
1.3.1嵌入式處理器特點與分類
1.3.2ARM處理器介紹
1.3.3ARM體系結構
1.4嵌入式Linux的體系結構分析
1.4.1嵌入式系統的體系結構
1.4.2硬體抽象層的Linux
1.5基本編輯器vi的使用
1.5.1進入和退出vi
1.5.2vi的基本編輯命令
1.5.3vi的高級編輯命令
1.6高級編輯器Emacs的使用
1.6.1Emacs的啟動與退出
1.6.2Emacs的基本操作
1.6.3Emacs的高級命令
1.7編譯器GCC的使用
1.7.1GCC簡介
1.7.2GCC的編譯過程
1.7.3GCC的常用模式
7.4GCC的常用選項
1.7.5GCC的警告功能
1.8調試器GDB的使用
1.8.1GDB的調試過程
1.8.2GDB的基本命令
1.8.3GDB的高級命令
1.9Make工程管理器
1.9.1Make管理器簡介
1.9.2Makefile的描述規則
1.9.3一個簡單示例
1.9.4Make如何工作
1.9.5指定變數
1.9.6自動推導規則
1.9.7另類風格的Makefile
1.9.8清除工作目錄過程檔案
1.10本章小結
第2章嵌入式Linux核心分析與移植
2.1Linux核心版本
2.1.1日新月異的Linux核心版本
2.1.2Linux2.4核心特性
2.1.3Linux2.6核心針對嵌入式系統的改進
2.2Linux作業系統核心結構分析
2.2.1Linux核心源程式的檔案組織結構
2.2.2Linux的核心組成
2.2.3Linux核心進程管理工作機制
2.2.4Linux記憶體管理工作機制
2.2.5Linux虛擬檔案系統工作機制
2.2.6進程間通信
2.3搭建嵌入式Linux系統開發環境
2.3.1嵌入式平台介紹
2.3.2嵌入式Linux系統的組成及設計步驟
2.3.3嵌入式Linux開發工具鏈
2.4Linux核心配置基礎
2.4.1Linux核心所支持的配置方式
2.4.2makemenuconfig配置方法
2.4.3Linux2.4核心配置檔案config .in介紹
2.4.4Linux2.6核心Kconfig檔案的用法
2.4.5Kconfig檔案配置實例
2.5Linux核心配置選項
2.5.1Generalsetup
2.5.2Loadablemodulesupport
2.5.3Processortypeandfeatures
2.5.4Networkingsupport
2.5.5DeviceDrivers
2.6Linux核心編譯基礎
2.6.1Linux核心編譯基本步驟
2.6.2Rules.make檔案用法
2.6.3Makefile配置檔案的用法
2.6.4配置、編譯Linux核心命令說明
2.6.5Linux核心配置編譯實例
2.7Linux核心移植
2.7.1Bootloader簡介
2.7.2引導程式原理
2.7.3核心移植及代碼分析
2.7.4VIVI結構分析
2.7.5VIVI移植實現
2.8本章小結
第3章LINUX設備驅動程式開發概述
3.1Linux系統設備概述
3.1.1字元設備
3.1.2塊設備
3.1.3網路設備
3.1.4Linux設備驅動程式的共性
3.2設備驅動程式的概念
3.3設備驅動程式與核心的接口
3.4核心為驅動程式提供的支持
3.4.1記憶體分配函式
3.4.2DMA
3.4.3I/O連線埠
3.4.4打印函數
3.5主要數據結構
3.5.1structdevicestruct
3.5.2structfileoperations
3.5.3structinode
3.6模組化的概念
3.7記憶體管理問題
3.7.1Linux核心對記憶體的管理方法
3.7.2kmalloc()和kfree()
3.7.3面向頁的分配技術
3.7.4vmalloc()和相關函式
3.8中斷回響和處理
3.8.1中斷處理機制
3.8.2中斷處理的數據結構
3.8.3中斷處理中的3個重要概念
3.8.4申請和釋放中斷
3.8.5自動檢測中斷號
3.8.6快/慢速中斷處理
3.8.7實現中斷處理程式
3.8.8驅動程式下半部的設計
3.8.9安裝共享的處理程式
3.9I/O連線埠
3.10DMA處理
3.11時間流
3.11.1時鐘的申請與釋放
3.11.2實現延遲
3.11.3任務佇列
3.12編寫、編譯和調試
3.13本章小結
第4章Linux字元設備驅動程式開發
4.1Linux字元設備驅動程式結構
4.2字元設備驅動的相似點
4.3主設備號和次設備號
4.4字元設備驅動程式的組成
4.5字元驅動程式模型
4.6可靠性機制
4.7檔案操作
4.8字元設備驅動程式中用到的主要數據結構
4.9字元設備的註冊和註銷
4.10使用記憶體和讀寫I/O連線埠
4.11字元設備驅動程式中用到的主要函式
4.12chardevxxx設備的驅動程式設計
4.13Linux2.6核心下的字元設備驅動介紹
4.13.1cdev結構體
4.13.2分配和釋放設備號
4.13.3file_operations結構體
4.13.4字元設備驅動模組載入與卸載函式
4.13.5字元設備驅動的file_operations結構體中成員
4.14globalmem設備驅動
4.14.1頭檔案、宏及設備結構體
4.14.2載入與卸載設備驅動
4.14.3讀寫函式
4.14.4seek函式
4.14.5globalmem的ioctl()函式
4.14.6ioctl()命令
4.14.7預定義命令
4.14.8使用檔案私有數據
4.14.9globalmem驅動在用戶空間的驗證
4.15本章小結
第5章基於DSP的PCI圖像採集卡驅動程式
5.1PCI匯流排介紹
5.1.1PCI匯流排概述
5.1.2PCI局部匯流排概述
5.1.3PCI局部匯流排的特點
5.1.4PCI匯流排信號
5.1.5PCI匯流排命令
5.1.6PCI匯流排配置空間
5.1.7PCI匯流排配置過程
5.1.8PCI匯流排的傳輸控制
5.2DSP圖像卡的PCI接口設計
5.2.1系統結構介紹
5.2.2PCI2040的基本特點
5.2.3PCI2040晶片的功能單元
5.2.4PCI2040配置流程
5.2.5PCI匯流排與DSP的接口實現
5.2.6串列E2PROM的初始化
5.3DSP圖像卡驅動程式實例分析
5.3.1主要的數據結構
5.3.2驅動程式流程
5.3.3初始化設備模組
5.3.4打開設備模組
5.3.5數據讀寫和控制信息模組
5.3.6中斷處理模組
5.3.7釋放設備模組
5.3.8卸載設備模組
5.4本章小結
第6章音頻接口設計與Linux驅動程式
6.1嵌入式音頻系統簡介
6.1.1S3C2410微處理器簡介
6.1.2S3C2410微處理器的結構框圖及其特性
6.1.3系統設計概述
6.1.4系統時鐘電路
6.1.5S3C2410存儲控制器介紹
6.1.6SDRAM電路
6.1.7Flash緩衝電路設計
6.1.8NORFlash電路
6.1.9NANDFlash接口電路
6.1.10IIS數字音頻電路
6.1.11串口電路
6.1.12JTAG接口電路
6.1.13LCD和觸控螢幕接口電路
6.2UDA1341TS晶片設備驅動程式設計
6.2.1UDA1341TS晶片介紹
6.2.2驅動程式中file_operations數據結構
6.2.3驅動程式的載入和卸載
6.3SOUND驅動的實現
6.3.1SOUND設備的打開和釋放
6.3.2定義SOUND設備的讀寫函式
6.3.3SOUND設備的控制操作處理
6.3.4SOUND設備驅動程式的其他部分
6.3.5Mixer驅動的實現
6.4本章小結
第7章顯示設備接口設計與Linux驅動程式
7.1嵌入式顯示系統簡介
7.2顯示驅動的基礎與原理
7.2.1時序信號
7.2.2TFTLCD的驅動技術
7.2.3TFTLCD驅動電路
7.2.4像素值的屬性
7.2.5像素深度、像素值與顏色的映射關係
7.2.6像素值與顯示記憶體的映射關係
7.2.7調色板的原理
7.2.8調色板的作用
7.2.9彩色LCD顯示驅動的原理
7.3軟、硬體平台簡介
7.3.1硬體開發平台
7.3.2軟體平台
7.3.3軟體開發環境
7.4基於PXA255的顯示功能的硬體實現
7.4.1PXA255處理器介紹
7.4.2PXA255的LCD控制器的特點
7.4.3LCD控制器的使用
7.4.4LCD控制暫存器配置
7.4.5設定DMA通道
7.4.6Sony彩屏的特性
7.4.7LCD與處理器的硬體連線方案
7.5顯示驅動開發介紹
7.5.1顯示驅動與字元設備的關係
7.5.2顯示驅動的發展
7.5.3當前顯示驅動的不足
7.6基於PXA255的顯示驅動的實現
7.6.1顯示驅動的系統分析
7.6.2驅動上層檔案的功能
7.6.3驅動底層檔案的功能
7.6.4驅動程式底層檔案實現的基礎
7.7基於PXA255的顯示功能的軟體方案
7.7.1上層檔案的實現
7.7.2底層檔案的實現方案
7.7.3驅動底層檔案的實現
7.7.4針對XScale架構中其餘處理器的移植
7.8本章小結
第8章ARMLinux塊設備驅動程式開發
8.1塊設備驅動程式開發概述
8.1.1塊設備特點
8.1.2塊設備基於緩衝區的數據交換
8.1.3塊設備讀寫請求
8.1.4塊設備驅動程式模型
8.1.5基於記憶體的塊設備驅動程式
8.2Linux塊設備驅動結構
8.2.1block_device_operations結構體
8.2.2gendisk結構體
8.2.3request與bio結構體
8.3塊設備驅動主要函式
8.3.1塊設備驅動程式的註冊與註銷
8.3.2Linux塊設備驅動模組載入與卸載
8.3.3塊設備的打開與釋放
8.3.4塊設備驅動的ioctl函式
8.3.5塊設備驅動I/O請求處理
8.4RAMDISK驅動開發實例
8.4.1RAMDISK的硬體原理
8.4.2RAMDISK驅動模組載入與卸載
8.4.3RAMDISK設備驅動block_device_operations及成員函式
8.5IDE硬碟設備驅動開發實例
8.5.1IDE硬碟設備原理
8.5.2IDE硬碟設備驅動block_device_operations及成員函式
8.5.3IDE硬碟設備驅動I/O請求處理
8.5.4在核心中增加對新系統IDE設備的支持
8.6本章小結
第9章嵌入式Linux網路設備驅動程式開發
9.1嵌入式乙太網基礎知識
9.1.1乙太網技術及其嵌入式套用
9.1.2嵌入式系統中主要處理的網路協定
9.1.3ARP(AddressResolutionProtocol)地址解析協定
9.1.4IP(InternetProtocol)網際協定
9.1.5TCP(TransferControlProtocol)傳輸控制協定
9.1.6UDP(UserDatagramProtocol)用戶數據包協定
9.2基於CS8900A晶片的設備驅動設計
9.2.1CS8900A晶片結構
9.2.2CS8900A晶片特性
9.2.3CS8900A晶片工作原理
9.2.4CS8900A晶片工作模式
9.2.5網路設備驅動程式基本結構
9.3基於Linux的網路設備驅動開發常用的數據結構
9.3.1數據結構structnet_device
9.3.2數據結構structsk_buff393
9.4網路驅動程式的實現模式及系統調用方法
9.4.1網路驅動程式的實現模式與模組化
9.4.2記憶體獲取與釋放
9.4.3鏈路狀態改變系統調用
9.4.4與網路層互動數據包的函式
9.5網路驅動程式的基本方法
9.5.1網路驅動程式的結構
9.5.2初始化(Initialize)
9.5.3打開(open)
9.5.4關閉(close)
9.5.5傳送(hard_start_xmit)
9.5.6接收(reception)
9.5.7中斷處理(interrupt)
9.5.8硬體幀頭(hard_header)
9.5.9地址解析(XARP)
9.5.10參數設定和統計數據
9.5.11多播(set_multicast_list)
9.6本章小結
第10章嵌入式LinuxUSB驅動程式設計基礎
10.1USB匯流排協定背景知識
10.1.1USB協定的產生
10.1.2USB的特點
10.1.3USB的廣泛套用
10.1.4USB在嵌入式設備中的套用
10.1.5計算機常用外部匯流排比較
10.2USB匯流排技術介紹
10.2.1USB系統拓撲結構
10.2.2USB匯流排邏輯結構
10.2.3USB匯流排特性介紹
10.2.4USB匯流排電氣機械特性
10.2.5USB的即插即用特性
10.2.6魯棒性的實現
10.2.7USB電源管理
10.2.8匯流排通道
10.2.9傳輸協定
10.2.10傳輸類型
10.2.11設備框架
10.2.12USB主機協定
10.3LinuxUSB子系統結構
10.3.1檔案系統
10.3.2Linux中USB子系統的軟體結構及實現
10.3.3LinuxUSB核心的主要數據結構
10.3.4USB核心函式接口分析
10.4本章小結
第11章USB接口系統軟體設計
11.1USB系統軟體設計概述
11.1.1主機端設備驅動程式
11.1.2主機控制器驅動程式
11.1.3設備端驅動程式
11.1.4數據管道和數據塊結構
11.2USB設備端軟體的開發
11.2.1USB設備通用模組的軟體開發
11.2.2USB設備協定模組的軟體開發
11.2.3控制端點處理程式
11.2.4協定層程式
11.3USB主機端軟體開發
11.3.1Linux核心對USB規範的支持
11.3.2USB時序
11.3.3主機控制器驅動程式設計
11.3.4主機控制器的初始化和管理
11.3.5傳輸執行和資源調度
11.3.6主機控制器的中斷處理
11.3.7虛擬根集線器
11.3.8主機控制器驅動程式的任務
11.3.9URB在驅動軟體中運作
11.3.10主機端設備驅動程式
11.4本章小結
第12章OTG驅動功能模組的設計與實現
12.1OTG概述
12.1.1OTG特性簡介
12.1.2A設備事件
12.1.3B設備事件
12.1.4狀態機
12.1.5SRP
12.1.6HNP
12.2設備模組的設計與實現
12.2.1USB設備的狀態
12.2.2OTG驅動功能模組的設計
12.2.3ISP1761結構
12.2.4HAL的設計和實現
12.2.5HCD的設計和實現
12.2.6USBD接口模組
12.2.7ISP1761讀寫操作模組
12.2.8HCD初始化模組
12.2.9中斷管理模組
12.2.10根集線器模組
12.2.11數據傳輸模組
12.2.12設備模組的設計和實現
12.2.13OTGFSM的設計和實現
12.3本章小結