出版時間:2008-2 出版社:人民郵電 作者:宋寶華 頁數(shù):686
Tag標簽:無
內容概要
本書是一本介紹Linux設備驅動開發(fā)理論、框架與實例的書,本書以Linux 2.6版本內核為藍本,詳細介紹自旋鎖、信號量、完成量、中斷頂/底半部、定時器、內存和I/O映射以及異步通知、阻塞I/O、非阻塞I/O等Linux設備驅動理論;字符設備、塊設備、TTY設備、I2C設備、LCD設備、音頻設備、USB設備、網絡設備、PCI設備等Linux設備驅動的架構和框架中各個復雜數(shù)據架構和函數(shù)的關系,并講解了大量Linux驅動開發(fā)的大量實例,使讀者能夠獨立開發(fā)各類Linux設備驅動?! ”緯鴥热萑妫瑢嵗S富,操作性強,語言通俗易懂,適合廣大Linux開發(fā)人員、嵌入式工程師參考使用。
書籍目錄
第1篇 Linux設備驅動入門第1章 設備驅動概述1.1 設備驅動的作用1.2 無操作系統(tǒng)時的設備驅動1.3 有操作系統(tǒng)時的設備驅動1.4 Linux設備驅動1.4.1 設備的分類及特點1.4.2 Linux設備驅動與整個軟硬件系統(tǒng)的關系1.4.3 編寫Linux設備驅動的技術基礎1.4.4 Linux設備驅動的學習方法1.5 設備驅動的HelloWorld:LED驅動1.5.1 無操作系統(tǒng)時的LED驅動1.5.2 Linux系統(tǒng)下的LED驅動第2章 驅動設計的硬件基礎2.1 處理器2.1.1 通用處理器2.1.2 數(shù)字信號處理器2.2 存儲器2.3 接口與總線2.3.1 串口2.3.2 I2C總線2.3.3 USB2.3.4 以太網接口2.3.5 ISA總線2.3.6 PCI和cPCI2.4 CPLD和FPGA2.5 原理圖分析2.5.1 原理圖分析的內容2.5.2 原理圖的分析方法2.6 硬件時序分析2.6.1 時序分析的概念2.6.2 典型硬件時序2.7 儀器儀表使用2.7.1 萬用表2.7.2 示波器2.7.3 邏輯分析儀2.8 總結第3章 Linux內核及內核編程3.1 Linux內核的發(fā)展與演變3.2 Linux2.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和Makefile3.4.3 Linux內核的引導3.5 Linux下的C編程3.5.1 Linux程序命名習慣3.5.2 GNUC與ANSIC3.5.3 do{}while(0)3.5.4 goto3.6 總結第2篇 Linux設備驅動核心理論第4章 Linux內核模塊4.1 Linux內核模塊簡介4.2 Linux內核模塊的程序結構4.3 模塊加載函數(shù)4.4 模塊卸載函數(shù)4.5 模塊參數(shù)4.6 導出符號4.7 模塊聲明與描述4.8 模塊的使用計數(shù)4.9 模塊的編譯4.10 模塊與GPL4.11 總結第5章 Linux文件系統(tǒng)與設備文件系統(tǒng)5.1 Linux文件操作5.1.1 文件操作的相關系統(tǒng)調用5.1.2 C庫函數(shù)的文件操作5.2 Linux文件系統(tǒng)5.2.1 Linux文件系統(tǒng)目錄結構5.2.2 Linux文件系統(tǒng)與設備驅動5.3 devfs設備文件系統(tǒng)5.4 udev設備文件系統(tǒng)5.4.1 udev與devfs的區(qū)別5.4.2 sysfs文件系統(tǒng)與Linux設備模型5.4.3 udev的組成5.4.4 udev規(guī)則文件5.4.5 創(chuàng)建和配置udev5.5 總結第6章 字符設備驅動6.1 Linux字符設備驅動結構6.1.1 cdev結構體6.1.2 分配和釋放設備號6.1.3 file_operations結構體6.1.4 Linux字符設備驅動的組成6.2 globalmem虛擬設備實例描述6.3 globalmem設備驅動6.3.1 頭文件、宏及設備結構體6.3.2 加載與卸載設備驅動6.3.3 讀寫函數(shù)6.3.4 seek()函數(shù)6.3.5 ioctl()函數(shù)6.3.6 使用文件私有數(shù)據6.4 globalmem驅動在用戶空間的驗證6.5 總結第7章 Linux設備驅動中的并發(fā)控制7.1 并發(fā)與競態(tài)7.2 中斷屏蔽7.3 原子操作7.3.1 整型原子操作7.3.2 位原子操作7.4 自旋鎖7.4.1 自旋鎖的使用7.4.2 讀寫自旋鎖7.4.3 順序鎖7.4.4 讀-拷貝-更新7.5 信號量7.5.1 信號量的使用7.5.2 信號量用于同步7.5.3 完成量用于同步7.5.4 自旋鎖vs信號量7.5.5 讀寫信號量7.6 互斥體7.7 增加并發(fā)控制后的globalmem驅動7.8 總結第8章 Linux設備驅動中的阻塞與非阻塞I/O8.1 阻塞與非阻塞I/O8.1.1 等待隊列8.1.2 支持阻塞操作的globalfifo設備驅動8.1.3 在用戶空間驗證globalfifo的讀寫8.2 輪詢操作8.2.1 輪詢的概念與作用8.2.2 應用程序中的輪詢編程8.2.3 設備驅動中的輪詢編程8.3 支持輪詢操作的globalfifo驅動8.3.1 在globalfifo驅動中增加輪詢操作8.3.2 在用戶空間驗證globalfifo設備的輪詢8.4 總結第9章 Linux設備驅動中的異步通知與異步I/O9.1 異步通知的概念與作用9.2 Linux異步通知編程9.2.1 Linux信號9.2.2 信號的接收9.2.3 信號的釋放9.3 支持異步通知的globalfifo驅動9.3.1 在globalfifo驅動中增加異步通知9.3.2 在用戶空間驗證globalfifo的異步通知9.4 Linux2.6異步I/O9.4.1 AIO概念與GNUC庫函數(shù)9.4.2 使用信號作為AIO的通知9.4.3 使用回調函數(shù)作為AIO的通知9.4.4 AIO與設備驅動9.5 總結第10章 中斷與時鐘10.1 中斷與定時器10.2 Linux中斷處理程序架構10.3 Linux中斷編程10.3.1 申請和釋放中斷10.3.2 使能和屏蔽中斷10.3.3 底半部機制10.3.4 實例:S3C2410實時鐘中斷10.4 中斷共享10.5 內核定時器10.5.1 內核定時器編程10.5.2 實例:秒字符設備10.6 內核延時10.6.1 短延遲10.6.2 長延遲10.6.3 睡著延遲10.7 總結第11章 內存與I/O訪問11.1 CPU與內存和I/O11.1.1 內存空間與I/O空間11.1.2 內存管理單元MMU11.2 Linux內存管理11.3 內存存取11.3.1 用戶空間內存動態(tài)申請11.3.2 內核空間內存動態(tài)申請11.3.3 虛擬地址與物理地址關系11.4 設備I/O端口和I/O內存的訪問11.4.1 LinuxI/O端口和I/O內存訪問接口11.4.2 申請與釋放設備I/O端口和I/O內存11.4.3 設備I/O端口和I/O內存訪問流程11.4.4 將設備地址映射到用戶空間11.5 I/O內存靜態(tài)映射11.6 DMA11.6.1 DMA與Cache一致性11.6.2 Linux下的DMA編程11.7 總結第12章 Linux字符設備驅動綜合實例12.1 按鍵的設備驅動12.1.1 按鍵的硬件原理12.1.2 按鍵驅動中的數(shù)據結構12.1.3 按鍵驅動的模塊加載和卸載函數(shù)12.1.4 按鍵設備驅動中斷、定時器處理程序12.1.5 按鍵設備驅動的打開、釋放函數(shù)12.1.6 按鍵設備驅動讀函數(shù)12.2 觸摸屏的設備驅動12.2.1 觸摸屏的硬件原理12.2.2 觸摸屏設備驅動中數(shù)據結構12.2.3 觸摸屏驅動中的硬件控制12.2.4 觸摸屏驅動模塊加載和卸載函數(shù)12.2.5 觸摸屏驅動中斷、定時器處理程序12.2.6 觸摸屏設備驅動的打開、釋放函數(shù)12.2.7 觸摸屏設備驅動的讀函數(shù)12.2.8 觸摸屏設備驅動的輪詢與異步通知12.2.9 Linux輸入子系統(tǒng)12.3 DSPHPI的設備驅動12.3.1 HPI接口的硬件原理12.3.2 HPI接口設備驅動中數(shù)據結構12.3.3 HPI接口設備驅動的讀寫函數(shù)12.4 NVRAM設備驅動12.4.1 NVRAM設備驅動的數(shù)據結構12.4.2 NVRAM設備驅動的模塊加載與卸載函數(shù)12.4.3 NVRAM設備驅動讀寫函數(shù)12.4.4 NVRAM設備驅動的seek函數(shù)12.5 看門狗設備驅動12.5.1 看門狗硬件原理12.5.2 看門狗驅動中的數(shù)據結構12.5.3 看門狗驅動模塊的加載和卸載函數(shù)12.5.4 看門狗驅動探測和移除函數(shù)12.5.5 看門狗驅動的掛起和恢復函數(shù)12.5.6 看門狗驅動的打開和釋放函數(shù)12.5.7 看門狗驅動寫函數(shù)12.6 總結第3篇 Linux設備驅動實例第13章 Linux塊設備驅動13.1 塊設備的I/O操作特點13.2 Linux塊設備驅動結構13.2.1 block_device_operations結構體13.2.2 gendisk結構體13.2.3 request與bio結構體13.2.4 塊設備驅動注冊與注銷13.3 Linux塊設備驅動的模塊加載與卸載13.4 塊設備的打開與釋放13.5 塊設備驅動的ioctl函數(shù)13.6 塊設備驅動的I/O請求處理13.6.1 使用請求隊列13.6.2 不使用請求隊列13.7 實例1:RamDisk驅動13.7.1 RamDisk的硬件原理13.7.2 RamDisk驅動模塊的加載與卸載13.7.3 RamDisk設備驅動block_device_operations及成員函數(shù)13.7.4 RamDiskI/O請求處理13.8 實例2:IDE硬盤設備驅動13.8.1 IDE硬盤設備原理13.8.2 IDE硬盤設備驅動的block_device_operations及成員函數(shù)13.8.3 IDE硬盤設備驅動的I/O請求處理13.8.4 在內核中增加對新系統(tǒng)IDE設備的支持13.9 總結第14章 Linux終端設備驅動14.1 終端設備14.2 終端設備驅動結構14.3 終端設備驅動的初始化與釋放14.3.1 模塊加載與卸載函數(shù)14.3.2 打開與關閉函數(shù)14.4 數(shù)據發(fā)送和接收14.5 tty線路設置14.5.1 線路設置用戶空間接口14.5.2 tty驅動的set_termios函數(shù)14.5.3 tty驅動的tiocmget和tiocmset函數(shù)14.5.4 tty驅動的ioctl函數(shù)14.6 UART設備驅動14.7 S3C2410UART的驅動實例14.7.1 S3C2410串口硬件描述14.7.2 S3C2410串口驅動的數(shù)據結構14.7.3 S3C2410串口驅動的初始化與釋放14.7.4 S3C2410串口數(shù)據收發(fā)14.7.5 S3C2410串口線路設置14.8 總結第15章 Linux的I2C核心、總線與設備驅動15.1 Linux的I2C體系結構15.2 LinuxI2C核心15.3 LinuxI2C總線驅動15.3.1 I2C適配器驅動加載與卸載15.3.2 I2C總線通信方法15.4 LinuxI2C設備驅動15.4.1 LinuxI2C設備驅動的模塊加載與卸載15.4.2 LinuxI2C設備驅動的i2c_driver成員函數(shù)15.4.3 LinuxI2C設備驅動的文件操作接口15.4.4 Linux的i2c-dev.c文件分析15.5 S3C2410I2C總線驅動實例15.5.1 S3C2410I2C控制器硬件描述15.5.2 S3C2410I2C總線驅動總體分析15.5.3 S3C2410I2C適配器驅動的模塊加載與卸載15.5.4 S3C2410I2C總線通信方法15.6 SAA7113H視頻AD芯片的I2C設備驅動實例15.6.1 SAA7113H視頻AD芯片硬件描述15.6.2 SAA7113H視頻AD芯片驅動的模塊加載與卸載15.6.3 SAA7113H設備驅動的i2c_driver成員函數(shù)15.7 總結第16章 Linux網絡設備驅動16.1 Linux網絡設備驅動的結構16.1.1 網絡協(xié)議接口層16.1.2 網絡設備接口層16.1.3 設備驅動功能層16.1.4 網絡設備與媒介層16.2 網絡設備驅動的注冊與注銷16.3 網絡設備的初始化16.4 網絡設備的打開與釋放16.5 數(shù)據發(fā)送流程16.6 數(shù)據接收流程16.7 網絡連接狀態(tài)16.8 參數(shù)設置和統(tǒng)計數(shù)據16.9 CS8900網卡設備驅動實例16.9.1 CS8900網卡硬件描述16.9.2 CS8900網卡驅動設計分析16.9.3 CS8900網卡注冊、初始化與注銷16.9.4 CS8900網卡發(fā)送數(shù)據流程16.9.5 CS8900網卡接收數(shù)據流程16.10 總結第17章 Linux音頻設備驅動17.1 數(shù)字音頻設備17.2 音頻設備硬件接口17.2.1 PCM接口17.2.2 IIS接口17.2.3 AC97接口17.3 LinuxOSS音頻設備驅動17.3.1 OSS驅動的組成17.3.2 mixer接口17.3.3 dsp接口17.3.4 OSS用戶空間編程17.4 LinuxALSA音頻設備驅動17.4.1 ALSA的組成17.4.2 card和組件管理17.4.3 PCM設備17.4.4 控制接口17.4.5 AC97API接口17.4.6 ALSA用戶空間編程17.5 S3C2410+UDA1341OSS驅動實例17.5.1 S3C2410與UDA1341接口硬件描述17.5.2 注冊dsp和mixer接口17.5.3 mixer接口的I/O控制函數(shù)17.5.4 dsp接口音頻數(shù)據傳輸17.6 SA1100+UDA1341ALSA驅動實例17.6.1 card注冊與注銷17.6.2 PCM設備的實現(xiàn)17.6.3 控制接口的實現(xiàn)17.7 PXA255+AC97ALSA驅動實例17.8 總結第18章 LCD設備驅動18.1 LCD硬件原理18.2 幀緩沖18.2.1 幀緩沖的概念18.2.2 顯示緩沖區(qū)與顯示點18.2.3 Linux幀緩沖相關數(shù)據結構與函數(shù)18.3 Linux幀緩沖設備驅動結構18.4 幀緩沖設備驅動的模塊加載與卸載函數(shù)18.5 幀緩沖設備顯示緩沖區(qū)的申請與釋放18.6 幀緩沖設備的參數(shù)設置18.6.1 定時參數(shù)18.6.2 像素時鐘18.6.3 顏色位域18.6.4 固定參數(shù)18.7 幀緩沖設備驅動的fb_ops成員函數(shù)18.8 LCD設備驅動的讀寫、mmap和ioctl函數(shù)18.9 幀緩沖設備的用戶空間訪問18.10 Linux圖形用戶界面18.10.1 Qt-X11/QtEmbedded/Qtopia18.10.2 Microwindows/Nano-X18.10.3 MiniGUI18.11 實例:S3C2410LCD設備驅動18.11.1 S3C2410LCD控制器硬件描述18.11.2 S3C2410LCD驅動的模塊加載與卸載函數(shù)18.11.3 S3C2410LCD驅動的探測與移除函數(shù)18.11.4 S3C2410LCD驅動掛起與恢復函數(shù)18.11.5 S3C2410LCD驅動的fb_ops成員函數(shù)18.12 總結第19章 Flash設備驅動19.1 LinuxFlash驅動結構19.1.1 LinuxMTD系統(tǒng)層次19.1.2 LinuxMTD系統(tǒng)接口19.1.3 MTD用戶空間編程19.2 NORFlash驅動19.3 NANDFlash驅動19.4 NORFlash驅動實例:S3C2410外圍的NORFlash驅動19.5 NANDFlash驅動實例:S3C2410外圍的NANDFlash驅動19.5.1 S3C2410NAND控制器硬件描述19.5.2 nand_chip初始化和成員函數(shù)19.5.3 NAND設備驅動初始化與釋放19.6 Flash文件系統(tǒng)的建立19.6.1 Flash轉換層19.6.2 CramFS19.6.3 JFFS/JFFS219.6.4 YAFFS/YAFFS219.7 總結第20章 USB主機與設備驅動20.1 LinuxUSB驅動層次20.1.1 主機側與設備側USB驅動20.1.2 設備、配置、接口、端點20.2 USB主機驅動20.2.1 USB主機驅動的整體結構20.2.2 實例:S3C2410USB主機驅動20.3 USB設備驅動20.3.1 USB設備驅動整體結構20.3.2 USB請求塊(URB)20.3.3 探測和斷開函數(shù)20.3.4 USB骨架程序20.4 USB設備驅動實例20.4.1 USB串口驅動20.4.2 USB鍵盤驅動20.5 總結第21章 PCI設備驅動21.1 PCI總線與配置空間21.1.1 PCI總線的Linux描述21.1.2 PCI設備的Linux描述21.1.3 PCI配置空間訪問21.2 PCI設備驅動結構21.2.1 pci_driver結構體21.2.2 PCI設備驅動的組成21.2.3 舊版內核的PCI設備探測21.3 實例:Intel810主板聲卡驅動21.4 總結第4篇 Linux設備驅動測試、移植第22章 Linux設備驅動的調試22.1 Linux開發(fā)環(huán)境建設22.1.1 實驗室建設22.1.2 工具鏈22.1.3 串口工具22.2 GDB調試器用法22.2.1 GDB基本用法22.2.2 DDD圖形界面調試工具22.3 Linux內核調試22.4 內核打印信息-printk()22.5 使用/proc22.6 Oops22.7 監(jiān)視工具22.8 內核調試器22.8.1 kcore22.8.2 KDB22.8.3 KGDB22.9 使用仿真器調試內核22.10 應用程序調試22.11 總結第23章 Linux設備驅動的移植23.1 編寫可移植的設備驅動23.1.1 可移植的數(shù)據類型23.1.2 結構體對界23.1.3 LittleEndian與BigEndian23.1.4 內存頁面大小23.2 巧用同類設備驅動23.2.1 巧用demo板驅動23.2.2 巧用類似芯片的驅動程序23.2.3 借用芯片廠商的范例程序23.3 從Linux2.4移植設備驅動到Linux2.623.4 Linux與其他操作系統(tǒng)之間的驅動移植23.5 總結參考文獻
編輯推薦
業(yè)界權威機構和專家強力推薦,多年培訓、研發(fā)經驗的總結?! ≡O備驅動程序是嵌入式操作系統(tǒng)的重要模塊,也是難點之一,Linux設備驅動程序更以復雜和繁多而著名,本書的作者集多年授課和開發(fā)的經驗,以簡潔的語言和豐富的實例講述了這一技術,深入淺出,值得一讀?! ”本溈颂┸浖夹g有限公司(BMR)董事長/電子產品世界雜志編委 何小慶 本書有個非常突出的特點——實用,全書以大量實例來引導讀者編寫以及移植Linux設備驅動,這些實例是作者多年Linux設備驅動開發(fā)從業(yè)經驗的總結,讀者一定會從中受益?! ≈袊浖袠I(yè)協(xié)會嵌入式系統(tǒng)分會秘書長郭淳學 在Linux系統(tǒng)廣泛應用、嵌入式系統(tǒng)飛速發(fā)展的今天,Linux沒備驅動正在、發(fā)揮著越來越大的作用,這本書是學習Linux設備驅動很好的選擇。 信息產業(yè)部軟件與集成電路促進中心(CSIP)教育培訓部主任杜廣斌
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載