內(nèi)容簡(jiǎn)介目錄這本經(jīng)典書籍目前已更至第三版,對(duì)于那些希望在Linux操作系統(tǒng)下支持計(jì)算機(jī)外圍設(shè)備、運(yùn)行新硬件,或者僅僅對(duì)Linux內(nèi)核普通編程感興趣的人來說,它是本必讀書籍。《Linux設(shè)備驅(qū)動(dòng)程序》提示了對(duì)如何給大多數(shù)的設(shè)備編寫驅(qū)動(dòng)程序的信息,這些信息迄今通過口頭或者陷晦的源代碼注釋波共享。 本書的作者是Linux社區(qū)的領(lǐng)導(dǎo)者。Jonathan Corbet是個(gè)不定期的內(nèi)核開源項(xiàng)目參與者同時(shí)還是評(píng)價(jià)甚高的LWN.net新聞和信息站點(diǎn)的執(zhí)行編輯。Alessandro Rubini是Linux代碼的一個(gè)開源提供者同時(shí)也是活躍的意大利Linux社區(qū)的中心人物。Greg Kroah-Hartman目前是本書描述的USB、PCI和驅(qū)動(dòng)核心子系統(tǒng)相關(guān)的內(nèi)核代碼維護(hù)者。 本書新版根據(jù)Linux內(nèi)核2.6.10徹底更新。內(nèi)核的這個(gè)版本更加合理化并簡(jiǎn)化了普通工作任務(wù)的幾個(gè)方法,比如即插即用、通過sysfs文件系統(tǒng)和用戶空間交互、標(biāo)準(zhǔn)總線上的多設(shè)備管理。 你不必是一個(gè)內(nèi)核高手就可以理解并享受本書,所需要的只是C以及Unix系統(tǒng)調(diào)用方面的背景知識(shí)。在不需要特殊的硬件設(shè)備就能編譯和運(yùn)行的詳細(xì)示例的指引下,你將學(xué)會(huì)如何人字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)接口編寫驅(qū)動(dòng)程序。PCI、USB和tty(終端)子系統(tǒng)都單列一章。本書為那些對(duì)操作系統(tǒng)的工作機(jī)制好奇的人提供了地址空間、異步事件和I/O等方面的闡述。本書的主題包括: 字符設(shè)備、塊設(shè)備、tty(終端)和網(wǎng)絡(luò)驅(qū)動(dòng)程序 驅(qū)動(dòng)程序調(diào)試 中斷 定時(shí)問題 同步、鎖和對(duì)稱多處香(SMP) 內(nèi)存管理和DMA 驅(qū)動(dòng)模型和sysfs 熱插拔設(shè)備 通用總線,包括SCSI、PCI、USB和IEEE 1394(FireWire)的特殊要求Preface1. An Introduction to Device DriversThe Role of the Device DriverSplitting the KernelClasses of Devices and ModulesSecurity IssuesVersion NumberingLicense TermsJoining the Kernel Development CommunityOverview of the Book2. Building and Running ModulesSetting Up Your Test SystemThe Hello World ModuleKernel Modules Versus ApplicationsCompiling and LoadingThe Kernel Symbol TablePreliminariesInitialization and ShutdownModule ParametersDoing It in User SpaceQuick Reference3. Char DriversThe Design of scullMajor and Minor NumbersSome Important Data StructuresChar Device Registrationopen and releasescull‘s Memory Usageread and writePlaying with the New DevicesQuick Reference4. Debugging TechniquesDebugging Support in the KernelDebugging by PrintingDebugging by QueryingDebugging by WatchingDebugging System FaultsDebuggers and Related Tools5. Concurrency and Race Conditions Pitfalls in scullConcurrency and Its ManagementSemaphores and MutexesCompletionsSpinlocksLocking TrapsAlternatives to LockingQuick Reference6. Advanced Char Driver Operations ioctlBlocking I/Opoll and selectAsynchronous NotificationSeeking a DeviceAccess Control on a Device FileQuick Reference7. Time, Delays, and Deferred Work Measuring Time LapsesKnowing the Current TimeDelaying ExecutionKernel TimersTasldetsWorkqueuesQuick Reference8. Allocating MemoryThe Real Story of kmallocLookaside Cachesget_free_page and Friendsvmalloc and FriendsPer-CPU VariablesObtaining Large BuffersQuick Reference9. Communicating with HardwareI/O Ports and I/O MemoryUsing I/O PortsAn I/O Port ExampleUsing I/O MemoryQuick Reference10. Interrupt HandlingPreparing the Parallel PortInstalling an Interrupt HandlerImplementing a HandlerTop and Bottom HalvesInterrupt SharingInterrupt-Driven I/OQuick Reference11. Data Types in the KernelUse of Standard C TypesAssigning an Explicit Size to Data ItemsInterface-Specific TypesOther Portability IssuesLinked ListsQuick Reference12. PD DriversThe PCI InterfaceA Look Back: ISAPC/104 and PC/104+Other PC BusesSBUSNuBLISExternaI BusesQuick Reference13. USB DriversUSB Device BasicsUSB and SysfsUSBUfbsWriti‘ngaUSBDriverUSB Transfers WithOUt UrbsQuick Reference14.The Linux Device MOdeIKobjects,Ksets,and subsystemsLOW—Level Sy5fs operatiorlSHotplug EveFlt GenerationBuses,Devices,aD-d DriversClassesPutting It A11 TogetherHotplugDealing with FirmwareQuick Refefence15.MemOry Mapping and DMAMemory,Management in LinuxThe mmap Device operationPerforming Direct I/ODirect Memory AccessQuick Reference16.8IOck DriversRegistratiOFtThe Block Device OperationsRequest ProcessingSOITle other DetailsQuick Reference17. Network DriversHow snull Is DesignedConnecting to the KernelThe net_device Structure in DetailOpening and ClosingPacket TransmissionPacket ReceptionThe Interrupt HandlerReceive Interrupt MitigationChanges in Link StateThe Socket BuffersMAC Address ResolutionCustom ioctl CommandsStatistical InformationMulticastA Few Other DetailsQuick Reference18. TTY DriversA Small TTY Drivertty_driver Function PointersTTY Line Settingsioctlsproc and sysfs Handling of TTY DevicesThe tty_driver Structure in DetailThe tty_operations Structure in DetailThe tty_struct Structure in DetailQuick ReferenceBibliographyIndex
作者簡(jiǎn)介
暫缺《LINUX設(shè)備驅(qū)動(dòng)程序:英文版》作者簡(jiǎn)介
圖書目錄
le width="100%"><tr><td> Preface </td></tr></table><table width="100%"><tr><td> 1. An Introduction to Device Drivers </td></tr></table><table width="100%"><tr><td> The Role of the Device Driver </td></tr></table><table width="100%"><tr><td> Splitting the Kernel </td></tr></table><table width="100%"><tr><td> Classes of Devices and Modules </td></tr></table><table width="100%"><tr><td> Security Issues </td></tr></table><table width="100%"><tr><td> Version Numbering </td></tr></table><table width="100%"><tr><td> License Terms </td></tr></table><table width="100%"><tr><td> Joining the Kernel Development Community </td></tr></table><table width="100%"><tr><td> Overview of the Book </td></tr></table><table width="100%"><tr><td> 2. Building and Running Modules </td></tr></table><table width="100%"><tr><td> Setting Up Your Test System </td></tr></table><table width="100%"><tr><td> The Hello World Module </td></tr></table><table width="100%"><tr><td> Kernel Modules Versus Applications </td></tr></table><table width="100%"><tr><td> Compiling and Loading </td></tr></table><table width="100%"><tr><td> The Kernel Symbol Table </td></tr></table><table width="100%"><tr><td> Preliminaries </td></tr></table><table width="100%"><tr><td> Initialization and Shutdown </td></tr></table><table width="100%"><tr><td> Module Parameters </td></tr></table><table width="100%"><tr><td> Doing It in User Space </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 3. Char Driven </td></tr></table><table width="100%"><tr><td> The Design of scull </td></tr></table><table width="100%"><tr><td> Major and Minor Numbers </td></tr></table><table width="100%"><tr><td> Some Important Data Structures </td></tr></table><table width="100%"><tr><td> Char Device Registration </td></tr></table><table width="100%"><tr><td> open and release </td></tr></table><table width="100%"><tr><td> scull's Memory Usage </td></tr></table><table width="100%"><tr><td> read and write </td></tr></table><table width="100%"><tr><td> Playing with the New Devices </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 4. Debugging Techniques </td></tr></table><table width="100%"><tr><td> Debugging Support in the Kernel </td></tr></table><table width="100%"><tr><td> Debugging by Printing </td></tr></table><table width="100%"><tr><td> Debugging by Querying </td></tr></table><table width="100%"><tr><td> Debugging by Watching </td></tr></table><table width="100%"><tr><td> Debugging System Faults </td></tr></table><table width="100%"><tr><td> Debuggers and Related Tools </td></tr></table><table width="100%"><tr><td> 5. Concurrency and Race Conditions </td></tr></table><table width="100%"><tr><td> Pitfalls in scull </td></tr></table><table width="100%"><tr><td> Concurrency and Its Management </td></tr></table><table width="100%"><tr><td> Semaphores and Mutexes </td></tr></table><table width="100%"><tr><td> Completions </td></tr></table><table width="100%"><tr><td> Spinlocks </td></tr></table><table width="100%"><tr><td> Locking Traps </td></tr></table><table width="100%"><tr><td> Alternatives to Locking </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 6. Advanced Char Driver Operations </td></tr></table><table width="100%"><tr><td> ioctl </td></tr></table><table width="100%"><tr><td> Blocking I/O </td></tr></table><table width="100%"><tr><td> poll and select </td></tr></table><table width="100%"><tr><td> Asynchronous Notification </td></tr></table><table width="100%"><tr><td> Seeking a Device </td></tr></table><table width="100%"><tr><td> Access Control on a Device File </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 7. Time, Delays, and Deferred Work </td></tr></table><table width="100%"><tr><td> Measuring Time Lapses </td></tr></table><table width="100%"><tr><td> Knowing the Current Time </td></tr></table><table width="100%"><tr><td> Delaying Execution </td></tr></table><table width="100%"><tr><td> Kernel Timers </td></tr></table><table width="100%"><tr><td> Tasklets </td></tr></table><table width="100%"><tr><td> Workqueues </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 8. Allocating Memory </td></tr></table><table width="100%"><tr><td> The Real Story of kmalloc </td></tr></table><table width="100%"><tr><td> Lookaside Caches </td></tr></table><table width="100%"><tr><td> get_free_page and Friends </td></tr></table><table width="100%"><tr><td> vmalloc and Friends </td></tr></table><table width="100%"><tr><td> Per-CPU Variables </td></tr></table><table width="100%"><tr><td> Obtaining Large Buffers </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 9. Communicating with Hardware </td></tr></table><table width="100%"><tr><td> I/O Ports and I/O Memory </td></tr></table><table width="100%"><tr><td> Using I/O Ports </td></tr></table><table width="100%"><tr><td> An I/O Port Example </td></tr></table><table width="100%"><tr><td> Using I/O Memory </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 10. Interrupt Handling </td></tr></table><table width="100%"><tr><td> Preparing the Parallel Port </td></tr></table><table width="100%"><tr><td> Installing an Interrupt Handler </td></tr></table><table width="100%"><tr><td> Implementing a Handler </td></tr></table><table width="100%"><tr><td> Top and Bottom HaNes </td></tr></table><table width="100%"><tr><td> Interrupt Sharing </td></tr></table><table width="100%"><tr><td> Interrupt-Driven I/O </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 11. Data Types in the Kernel </td></tr></table><table width="100%"><tr><td> Use of Standard C Types </td></tr></table><table width="100%"><tr><td> Assigning an Explicit Size to Data Items </td></tr></table><table width="100%"><tr><td> Interface-Specific Types </td></tr></table><table width="100%"><tr><td> Other Portability Issues </td></tr></table><table width="100%"><tr><td> Linked Lists </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 12. PCI Drivers </td></tr></table><table width="100%"><tr><td> The PCI Interface </td></tr></table><table width="100%"><tr><td> A Look Back: ISA </td></tr></table><table width="100%"><tr><td> PC/104 and PC/104+ </td></tr></table><table width="100%"><tr><td> Other PC Buses </td></tr></table><table width="100%"><tr><td> SBus </td></tr></table><table width="100%"><tr><td> NuBus </td></tr></table><table width="100%"><tr><td> External Buses </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 13. USB Drivers </td></tr></table><table width="100%"><tr><td> USB Device Basics </td></tr></table><table width="100%"><tr><td> USB and Sysfs </td></tr></table><table width="100%"><tr><td> USB Urbs </td></tr></table><table width="100%"><tr><td> Writing a USB Driver </td></tr></table><table width="100%"><tr><td> USB Transfers Without Urbs </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 14. The Linux Device Model </td></tr></table><table width="100%"><tr><td> Kobjects, Ksets, and Subsystems </td></tr></table><table width="100%"><tr><td> Low-Level Sysfs Operations </td></tr></table><table width="100%"><tr><td> Hotplug Event Generation </td></tr></table><table width="100%"><tr><td> Buses, Devices, and Drivers </td></tr></table><table width="100%"><tr><td> Classes </td></tr></table><table width="100%"><tr><td> Putting It All Together </td></tr></table><table width="100%"><tr><td> Hotplug </td></tr></table><table width="100%"><tr><td> Dealing with Firmware </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 15. Memory Mapping and DMA </td></tr></table><table width="100%"><tr><td> Memory Management in Linux </td></tr></table><table width="100%"><tr><td> The mmap Device Operation </td></tr></table><table width="100%"><tr><td> Performing Direct I/0 </td></tr></table><table width="100%"><tr><td> Direct Memory Access </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 16. Block Drivers </td></tr></table><table width="100%"><tr><td> Registration </td></tr></table><table width="100%"><tr><td> The Block Device Operations </td></tr></table><table width="100%"><tr><td> Request Processing </td></tr></table><table width="100%"><tr><td> Some Other Details </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 17. Network Drivers </td></tr></table><table width="100%"><tr><td> How snull Is Designed </td></tr></table><table width="100%"><tr><td> Connecting to the Kernel </td></tr></table><table width="100%"><tr><td> The net_device Structure in Detail </td></tr></table><table width="100%"><tr><td> Opening and Closing </td></tr></table><table width="100%"><tr><td> Packet Transmission </td></tr></table><table width="100%"><tr><td> Packet Reception </td></tr></table><table width="100%"><tr><td> The Interrupt Handler </td></tr></table><table width="100%"><tr><td> Receive Interrupt Mitigation </td></tr></table><table width="100%"><tr><td> Changes in Link State </td></tr></table><table width="100%"><tr><td> The Socket Buffers </td></tr></table><table width="100%"><tr><td> MAC Address Resolution </td></tr></table><table width="100%"><tr><td> Custom ioctl Commands </td></tr></table><table width="100%"><tr><td> Statistical Information </td></tr></table><table width="100%"><tr><td> Multicast </td></tr></table><table width="100%"><tr><td> A Few Other Details </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 18. TTY Drivers </td></tr></table><table width="100%"><tr><td> A Small TTY Driver </td></tr></table><table width="100%"><tr><td> tty_driver Function Pointers </td></tr></table><table width="100%"><tr><td> TTY Line Settings </td></tr></table><table width="100%"><tr><td> ioctls </td></tr></table><table width="100%"><tr><td> proc and sysfs Handling of TTY Devices </td></tr></table><table width="100%"><tr><td> The try_driver Structure in Detail </td></tr></table><table width="100%"><tr><td> The tty_operations Structure in Detail </td></tr></table><table width="100%"><tr><td> The tty_struct Structure in Detail </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> Bibliography </td></tr></table><table width="100%"><tr><td> Index </td></tr></table></font> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr bgcolor="#CC0000"> <td height="1"></td> </tr> <tr> <td height="5"></td> </tr> <tr> <td> ·<a href='javascript:moreup("Catalog.asp?IDD=25526&type=1")'>目錄</a>·<a href='javascript:moreup("Catalog.asp?IDD=25526&type=2")'>內(nèi)容簡(jiǎn)介</a>·<a href='javascript:moreup("Catalog.asp?IDD=25526&type=5")'>作譯者</a>·<a href='javascript:moreup("Catalog.asp?IDD=25526&type=6")'>前言</a> </td> </tr></table></BODY></H