Linux设备驱动开发详解

Linux设备驱动开发详解
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2008-02
版次: 1
ISBN: 9787115172396
定价: 89.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 686页
字数: 1101千字
正文语种: 简体中文
93人买过
  •   本书是一本介绍Linux设备驱动开发理论、框架与实例的书,本书以Linux2.6版本内核为蓝本,详细介绍自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和I/O映射以及异步通知、阻塞I/O、非阻塞I/O等Linux设备驱动理论;字符设备、块设备、TTY设备、I2C设备、LCD设备、音频设备、USB设备、网络设备、PCI设备等Linux设备驱动的架构和框架中各个复杂数据架构和函数的关系,并讲解了大量Linux驱动开发的大量实例,使读者能够独立开发各类Linux设备驱动。
      本书内容全面,实例丰富,操作性强,语言通俗易懂,适合广大Linux开发人员、嵌入式工程师参考使用。 第1篇Linux设备驱动入门
    第1章设备驱动概述
    1.1设备驱动的作用
    1.2无操作系统时的设备驱动
    1.3有操作系统时的设备驱动
    1.4Linux设备驱动
    1.4.1设备的分类及特点
    1.4.2Linux设备驱动与整个软硬件系统的关系
    1.4.3编写Linux设备驱动的技术基础
    1.4.4Linux设备驱动的学习方法
    1.5设备驱动的HelloWorld:LED驱动
    1.5.1无操作系统时的LED驱动
    1.5.2Linux系统下的LED驱动
    第2章驱动设计的硬件基础
    2.1处理器
    2.1.1通用处理器
    2.1.2数字信号处理器
    2.2存储器
    2.3接口与总线
    2.3.1串口
    2.3.2I2C总线
    2.3.3USB
    2.3.4以太网接口
    2.3.5ISA总线
    2.3.6PCI和cPCI
    2.4CPLD和FPGA
    2.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.1Linux内核的发展与演变
    3.2Linux2.6内核的特点
    3.3Linux内核的组成
    3.3.1Linux内核源代码目录结构
    3.3.2Linux内核的组成部分
    3.3.3Linux内核空间与用户空间
    3.4Linux内核的编译及加载
    3.4.1Linux内核的编译
    3.4.2Kconfig和Makefile
    3.4.3Linux内核的引导
    3.5Linux下的C编程
    3.5.1Linux程序命名习惯
    3.5.2GNUC与ANSIC
    3.5.3do{}while(0)
    3.5.4goto
    3.6总结
    第2篇Linux设备驱动核心理论
    第4章Linux内核模块
    4.1Linux内核模块简介
    4.2Linux内核模块的程序结构
    4.3模块加载函数
    4.4模块卸载函数
    4.5模块参数
    4.6导出符号
    4.7模块声明与描述
    4.8模块的使用计数
    4.9模块的编译
    4.10模块与GPL
    4.11总结
    第5章Linux文件系统与设备文件系统
    5.1Linux文件操作
    5.1.1文件操作的相关系统调用
    5.1.2C库函数的文件操作
    5.2Linux文件系统
    5.2.1Linux文件系统目录结构
    5.2.2Linux文件系统与设备驱动
    5.3devfs设备文件系统
    5.4udev设备文件系统
    5.4.1udev与devfs的区别
    5.4.2sysfs文件系统与Linux设备模型
    5.4.3udev的组成
    5.4.4udev规则文件
    5.4.5创建和配置udev
    5.5总结
    第6章字符设备驱动
    6.1Linux字符设备驱动结构
    6.1.1cdev结构体
    6.1.2分配和释放设备号
    6.1.3file_operations结构体
    6.1.4Linux字符设备驱动的组成
    6.2globalmem虚拟设备实例描述
    6.3globalmem设备驱动
    6.3.1头文件、宏及设备结构体
    6.3.2加载与卸载设备驱动
    6.3.3读写函数
    6.3.4seek()函数
    6.3.5ioctl()函数
    6.3.6使用文件私有数据
    6.4globalmem驱动在用户空间的验证
    6.5总结
    第7章Linux设备驱动中的并发控制
    7.1并发与竞态
    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增加并发控制后的globalmem驱动
    7.8总结
    第8章Linux设备驱动中的阻塞与非阻塞I/O
    8.1阻塞与非阻塞I/O
    8.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/O
    9.1异步通知的概念与作用
    9.2Linux异步通知编程
    9.2.1Linux信号
    9.2.2信号的接收
    9.2.3信号的释放
    9.3支持异步通知的globalfifo驱动
    9.3.1在globalfifo驱动中增加异步通知
    9.3.2在用户空间验证globalfifo的异步通知
    9.4Linux2.6异步I/O
    9.4.1AIO概念与GNUC库函数
    9.4.2使用信号作为AIO的通知
    9.4.3使用回调函数作为AIO的通知
    9.4.4AIO与设备驱动
    9.5总结
    第10章中断与时钟
    10.1中断与定时器
    10.2Linux中断处理程序架构
    10.3Linux中断编程
    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.1CPU与内存和I/O
    11.1.1内存空间与I/O空间
    11.1.2内存管理单元MMU
    11.2Linux内存管理
    11.3内存存取
    11.3.1用户空间内存动态申请
    11.3.2内核空间内存动态申请
    11.3.3虚拟地址与物理地址关系
    11.4设备I/O端口和I/O内存的访问
    11.4.1LinuxI/O端口和I/O内存访问接口
    11.4.2申请与释放设备I/O端口和I/O内存
    11.4.3设备I/O端口和I/O内存访问流程
    11.4.4将设备地址映射到用户空间
    11.5I/O内存静态映射
    11.6DMA
    11.6.1DMA与Cache一致性
    11.6.2Linux下的DMA编程
    11.7总结
    第12章Linux字符设备驱动综合实例
    12.1按键的设备驱动
    12.1.1按键的硬件原理
    12.1.2按键驱动中的数据结构
    12.1.3按键驱动的模块加载和卸载函数
    12.1.4按键设备驱动中断、定时器处理程序
    12.1.5按键设备驱动的打开、释放函数
    12.1.6按键设备驱动读函数
    12.2触摸屏的设备驱动
    12.2.1触摸屏的硬件原理
    12.2.2触摸屏设备驱动中数据结构
    12.2.3触摸屏驱动中的硬件控制
    12.2.4触摸屏驱动模块加载和卸载函数
    12.2.5触摸屏驱动中断、定时器处理程序
    12.2.6触摸屏设备驱动的打开、释放函数
    12.2.7触摸屏设备驱动的读函数
    12.2.8触摸屏设备驱动的轮询与异步通知
    12.2.9Linux输入子系统
    12.3DSPHPI的设备驱动
    12.3.1HPI接口的硬件原理
    12.3.2HPI接口设备驱动中数据结构
    12.3.3HPI接口设备驱动的读写函数
    12.4NVRAM设备驱动
    12.4.1NVRAM设备驱动的数据结构
    12.4.2NVRAM设备驱动的模块加载与卸载函数
    12.4.3NVRAM设备驱动读写函数
    12.4.4NVRAM设备驱动的seek函数
    12.5看门狗设备驱动
    12.5.1看门狗硬件原理
    12.5.2看门狗驱动中的数据结构
    12.5.3看门狗驱动模块的加载和卸载函数
    12.5.4看门狗驱动探测和移除函数
    12.5.5看门狗驱动的挂起和恢复函数
    12.5.6看门狗驱动的打开和释放函数
    12.5.7看门狗驱动写函数
    12.6总结
    第3篇Linux设备驱动实例
    第13章Linux块设备驱动
    13.1块设备的I/O操作特点
    13.2Linux块设备驱动结构
    13.2.1block_device_operations结构体
    13.2.2gendisk结构体
    13.2.3request与bio结构体
    13.2.4块设备驱动注册与注销
    13.3Linux块设备驱动的模块加载与卸载
    13.4块设备的打开与释放
    13.5块设备驱动的ioctl函数
    13.6块设备驱动的I/O请求处理
    13.6.1使用请求队列
    13.6.2不使用请求队列
    13.7实例1:RamDisk驱动
    13.7.1RamDisk的硬件原理
    13.7.2RamDisk驱动模块的加载与卸载
    13.7.3RamDisk设备驱动block_device_operations及成员函数
    13.7.4RamDiskI/O请求处理
    13.8实例2:IDE硬盘设备驱动
    13.8.1IDE硬盘设备原理
    13.8.2IDE硬盘设备驱动的block_device_operations及成员函数
    13.8.3IDE硬盘设备驱动的I/O请求处理
    13.8.4在内核中增加对新系统IDE设备的支持
    13.9总结
    第14章Linux终端设备驱动
    14.1终端设备
    14.2终端设备驱动结构
    14.3终端设备驱动的初始化与释放
    14.3.1模块加载与卸载函数
    14.3.2打开与关闭函数
    14.4数据发送和接收
    14.5tty线路设置
    14.5.1线路设置用户空间接口
    14.5.2tty驱动的set_termios函数
    14.5.3tty驱动的tiocmget和tiocmset函数
    14.5.4tty驱动的ioctl函数
    14.6UART设备驱动
    14.7S3C2410UART的驱动实例
    14.7.1S3C2410串口硬件描述
    14.7.2S3C2410串口驱动的数据结构
    14.7.3S3C2410串口驱动的初始化与释放
    14.7.4S3C2410串口数据收发
    14.7.5S3C2410串口线路设置
    14.8总结
    第15章Linux的I2C核心、总线与设备驱动
    15.1Linux的I2C体系结构
    15.2LinuxI2C核心
    15.3LinuxI2C总线驱动
    15.3.1I2C适配器驱动加载与卸载
    15.3.2I2C总线通信方法
    15.4LinuxI2C设备驱动
    15.4.1LinuxI2C设备驱动的模块加载与卸载
    15.4.2LinuxI2C设备驱动的i2c_driver成员函数
    15.4.3LinuxI2C设备驱动的文件操作接口
    15.4.4Linux的i2c-dev.c文件分析
    15.5S3C2410I2C总线驱动实例
    15.5.1S3C2410I2C控制器硬件描述
    15.5.2S3C2410I2C总线驱动总体分析
    15.5.3S3C2410I2C适配器驱动的模块加载与卸载
    15.5.4S3C2410I2C总线通信方法
    15.6SAA7113H视频AD芯片的I2C设备驱动实例
    15.6.1SAA7113H视频AD芯片硬件描述
    15.6.2SAA7113H视频AD芯片驱动的模块加载与卸载
    15.6.3SAA7113H设备驱动的i2c_driver成员函数
    15.7总结
    第16章Linux网络设备驱动
    16.1Linux网络设备驱动的结构
    16.1.1网络协议接口层
    16.1.2网络设备接口层
    16.1.3设备驱动功能层
    16.1.4网络设备与媒介层
    16.2网络设备驱动的注册与注销
    16.3网络设备的初始化
    16.4网络设备的打开与释放
    16.5数据发送流程
    16.6数据接收流程
    16.7网络连接状态
    16.8参数设置和统计数据
    16.9CS8900网卡设备驱动实例
    16.9.1CS8900网卡硬件描述
    16.9.2CS8900网卡驱动设计分析
    16.9.3CS8900网卡注册、初始化与注销
    16.9.4CS8900网卡发送数据流程
    16.9.5CS8900网卡接收数据流程
    16.10总结
    第17章Linux音频设备驱动
    17.1数字音频设备
    17.2音频设备硬件接口
    17.2.1PCM接口
    17.2.2IIS接口
    17.2.3AC97接口
    17.3LinuxOSS音频设备驱动
    17.3.1OSS驱动的组成
    17.3.2mixer接口
    17.3.3dsp接口
    17.3.4OSS用户空间编程
    17.4LinuxALSA音频设备驱动
    17.4.1ALSA的组成
    17.4.2card和组件管理
    17.4.3PCM设备
    17.4.4控制接口
    17.4.5AC97API接口
    17.4.6ALSA用户空间编程
    17.5S3C2410+UDA1341OSS驱动实例
    17.5.1S3C2410与UDA1341接口硬件描述
    17.5.2注册dsp和mixer接口
    17.5.3mixer接口的I/O控制函数
    17.5.4dsp接口音频数据传输
    17.6SA1100+UDA1341ALSA驱动实例
    17.6.1card注册与注销
    17.6.2PCM设备的实现
    17.6.3控制接口的实现
    17.7PXA255+AC97ALSA驱动实例
    17.8总结
    第18章LCD设备驱动
    18.1LCD硬件原理
    18.2帧缓冲
    18.2.1帧缓冲的概念
    18.2.2显示缓冲区与显示点
    18.2.3Linux帧缓冲相关数据结构与函数
    18.3Linux帧缓冲设备驱动结构
    18.4帧缓冲设备驱动的模块加载与卸载函数
    18.5帧缓冲设备显示缓冲区的申请与释放
    18.6帧缓冲设备的参数设置
    18.6.1定时参数
    18.6.2像素时钟
    18.6.3颜色位域
    18.6.4固定参数
    18.7帧缓冲设备驱动的fb_ops成员函数
    18.8LCD设备驱动的读写、mmap和ioctl函数
    18.9帧缓冲设备的用户空间访问
    18.10Linux图形用户界面
    18.10.1Qt-X11/QtEmbedded/Qtopia
    18.10.2Microwindows/Nano-X
    18.10.3MiniGUI
    18.11实例:S3C2410LCD设备驱动
    18.11.1S3C2410LCD控制器硬件描述
    18.11.2S3C2410LCD驱动的模块加载与卸载函数
    18.11.3S3C2410LCD驱动的探测与移除函数
    18.11.4S3C2410LCD驱动挂起与恢复函数
    18.11.5S3C2410LCD驱动的fb_ops成员函数
    18.12总结
    第19章Flash设备驱动
    19.1LinuxFlash驱动结构
    19.1.1LinuxMTD系统层次
    19.1.2LinuxMTD系统接口
    19.1.3MTD用户空间编程
    19.2NORFlash驱动
    19.3NANDFlash驱动
    19.4NORFlash驱动实例:S3C2410外围的NORFlash驱动
    19.5NANDFlash驱动实例:S3C2410外围的NANDFlash驱动
    19.5.1S3C2410NAND控制器硬件描述
    19.5.2nand_chip初始化和成员函数
    19.5.3NAND设备驱动初始化与释放
    19.6Flash文件系统的建立
    19.6.1Flash转换层
    19.6.2CramFS
    19.6.3JFFS/JFFS2
    19.6.4YAFFS/YAFFS2
    19.7总结
    第20章USB主机与设备驱动
    20.1LinuxUSB驱动层次
    20.1.1主机侧与设备侧USB驱动
    20.1.2设备、配置、接口、端点
    20.2USB主机驱动
    20.2.1USB主机驱动的整体结构
    20.2.2实例:S3C2410USB主机驱动
    20.3USB设备驱动
    20.3.1USB设备驱动整体结构
    20.3.2USB请求块(URB)
    20.3.3探测和断开函数
    20.3.4USB骨架程序
    20.4USB设备驱动实例
    20.4.1USB串口驱动
    20.4.2USB键盘驱动
    20.5总结
    第21章PCI设备驱动
    21.1PCI总线与配置空间
    21.1.1PCI总线的Linux描述
    21.1.2PCI设备的Linux描述
    21.1.3PCI配置空间访问
    21.2PCI设备驱动结构
    21.2.1pci_driver结构体
    21.2.2PCI设备驱动的组成
    21.2.3旧版内核的PCI设备探测
    21.3实例:Intel810主板声卡驱动
    21.4总结
    第4篇Linux设备驱动测试、移植
    第22章Linux设备驱动的调试
    22.1Linux开发环境建设
    22.1.1实验室建设
    22.1.2工具链
    22.1.3串口工具
    22.2GDB调试器用法
    22.2.1GDB基本用法
    22.2.2DDD图形界面调试工具
    22.3Linux内核调试
    22.4内核打印信息-printk()
    22.5使用/proc
    22.6Oops
    22.7监视工具
    22.8内核调试器
    22.8.1kcore
    22.8.2KDB
    22.8.3KGDB
    22.9使用仿真器调试内核
    22.10应用程序调试
    22.11总结
    第23章Linux设备驱动的移植
    23.1编写可移植的设备驱动
    23.1.1可移植的数据类型
    23.1.2结构体对界
    23.1.3LittleEndian与BigEndian
    23.1.4内存页面大小
    23.2巧用同类设备驱动
    23.2.1巧用demo板驱动
    23.2.2巧用类似芯片的驱动程序
    23.2.3借用芯片厂商的范例程序
    23.3从Linux2.4移植设备驱动到Linux2.6
    23.4Linux与其他操作系统之间的驱动移植
    23.5总结
    参考文献
  • 内容简介:
      本书是一本介绍Linux设备驱动开发理论、框架与实例的书,本书以Linux2.6版本内核为蓝本,详细介绍自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和I/O映射以及异步通知、阻塞I/O、非阻塞I/O等Linux设备驱动理论;字符设备、块设备、TTY设备、I2C设备、LCD设备、音频设备、USB设备、网络设备、PCI设备等Linux设备驱动的架构和框架中各个复杂数据架构和函数的关系,并讲解了大量Linux驱动开发的大量实例,使读者能够独立开发各类Linux设备驱动。
      本书内容全面,实例丰富,操作性强,语言通俗易懂,适合广大Linux开发人员、嵌入式工程师参考使用。
  • 目录:
    第1篇Linux设备驱动入门
    第1章设备驱动概述
    1.1设备驱动的作用
    1.2无操作系统时的设备驱动
    1.3有操作系统时的设备驱动
    1.4Linux设备驱动
    1.4.1设备的分类及特点
    1.4.2Linux设备驱动与整个软硬件系统的关系
    1.4.3编写Linux设备驱动的技术基础
    1.4.4Linux设备驱动的学习方法
    1.5设备驱动的HelloWorld:LED驱动
    1.5.1无操作系统时的LED驱动
    1.5.2Linux系统下的LED驱动
    第2章驱动设计的硬件基础
    2.1处理器
    2.1.1通用处理器
    2.1.2数字信号处理器
    2.2存储器
    2.3接口与总线
    2.3.1串口
    2.3.2I2C总线
    2.3.3USB
    2.3.4以太网接口
    2.3.5ISA总线
    2.3.6PCI和cPCI
    2.4CPLD和FPGA
    2.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.1Linux内核的发展与演变
    3.2Linux2.6内核的特点
    3.3Linux内核的组成
    3.3.1Linux内核源代码目录结构
    3.3.2Linux内核的组成部分
    3.3.3Linux内核空间与用户空间
    3.4Linux内核的编译及加载
    3.4.1Linux内核的编译
    3.4.2Kconfig和Makefile
    3.4.3Linux内核的引导
    3.5Linux下的C编程
    3.5.1Linux程序命名习惯
    3.5.2GNUC与ANSIC
    3.5.3do{}while(0)
    3.5.4goto
    3.6总结
    第2篇Linux设备驱动核心理论
    第4章Linux内核模块
    4.1Linux内核模块简介
    4.2Linux内核模块的程序结构
    4.3模块加载函数
    4.4模块卸载函数
    4.5模块参数
    4.6导出符号
    4.7模块声明与描述
    4.8模块的使用计数
    4.9模块的编译
    4.10模块与GPL
    4.11总结
    第5章Linux文件系统与设备文件系统
    5.1Linux文件操作
    5.1.1文件操作的相关系统调用
    5.1.2C库函数的文件操作
    5.2Linux文件系统
    5.2.1Linux文件系统目录结构
    5.2.2Linux文件系统与设备驱动
    5.3devfs设备文件系统
    5.4udev设备文件系统
    5.4.1udev与devfs的区别
    5.4.2sysfs文件系统与Linux设备模型
    5.4.3udev的组成
    5.4.4udev规则文件
    5.4.5创建和配置udev
    5.5总结
    第6章字符设备驱动
    6.1Linux字符设备驱动结构
    6.1.1cdev结构体
    6.1.2分配和释放设备号
    6.1.3file_operations结构体
    6.1.4Linux字符设备驱动的组成
    6.2globalmem虚拟设备实例描述
    6.3globalmem设备驱动
    6.3.1头文件、宏及设备结构体
    6.3.2加载与卸载设备驱动
    6.3.3读写函数
    6.3.4seek()函数
    6.3.5ioctl()函数
    6.3.6使用文件私有数据
    6.4globalmem驱动在用户空间的验证
    6.5总结
    第7章Linux设备驱动中的并发控制
    7.1并发与竞态
    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增加并发控制后的globalmem驱动
    7.8总结
    第8章Linux设备驱动中的阻塞与非阻塞I/O
    8.1阻塞与非阻塞I/O
    8.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/O
    9.1异步通知的概念与作用
    9.2Linux异步通知编程
    9.2.1Linux信号
    9.2.2信号的接收
    9.2.3信号的释放
    9.3支持异步通知的globalfifo驱动
    9.3.1在globalfifo驱动中增加异步通知
    9.3.2在用户空间验证globalfifo的异步通知
    9.4Linux2.6异步I/O
    9.4.1AIO概念与GNUC库函数
    9.4.2使用信号作为AIO的通知
    9.4.3使用回调函数作为AIO的通知
    9.4.4AIO与设备驱动
    9.5总结
    第10章中断与时钟
    10.1中断与定时器
    10.2Linux中断处理程序架构
    10.3Linux中断编程
    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.1CPU与内存和I/O
    11.1.1内存空间与I/O空间
    11.1.2内存管理单元MMU
    11.2Linux内存管理
    11.3内存存取
    11.3.1用户空间内存动态申请
    11.3.2内核空间内存动态申请
    11.3.3虚拟地址与物理地址关系
    11.4设备I/O端口和I/O内存的访问
    11.4.1LinuxI/O端口和I/O内存访问接口
    11.4.2申请与释放设备I/O端口和I/O内存
    11.4.3设备I/O端口和I/O内存访问流程
    11.4.4将设备地址映射到用户空间
    11.5I/O内存静态映射
    11.6DMA
    11.6.1DMA与Cache一致性
    11.6.2Linux下的DMA编程
    11.7总结
    第12章Linux字符设备驱动综合实例
    12.1按键的设备驱动
    12.1.1按键的硬件原理
    12.1.2按键驱动中的数据结构
    12.1.3按键驱动的模块加载和卸载函数
    12.1.4按键设备驱动中断、定时器处理程序
    12.1.5按键设备驱动的打开、释放函数
    12.1.6按键设备驱动读函数
    12.2触摸屏的设备驱动
    12.2.1触摸屏的硬件原理
    12.2.2触摸屏设备驱动中数据结构
    12.2.3触摸屏驱动中的硬件控制
    12.2.4触摸屏驱动模块加载和卸载函数
    12.2.5触摸屏驱动中断、定时器处理程序
    12.2.6触摸屏设备驱动的打开、释放函数
    12.2.7触摸屏设备驱动的读函数
    12.2.8触摸屏设备驱动的轮询与异步通知
    12.2.9Linux输入子系统
    12.3DSPHPI的设备驱动
    12.3.1HPI接口的硬件原理
    12.3.2HPI接口设备驱动中数据结构
    12.3.3HPI接口设备驱动的读写函数
    12.4NVRAM设备驱动
    12.4.1NVRAM设备驱动的数据结构
    12.4.2NVRAM设备驱动的模块加载与卸载函数
    12.4.3NVRAM设备驱动读写函数
    12.4.4NVRAM设备驱动的seek函数
    12.5看门狗设备驱动
    12.5.1看门狗硬件原理
    12.5.2看门狗驱动中的数据结构
    12.5.3看门狗驱动模块的加载和卸载函数
    12.5.4看门狗驱动探测和移除函数
    12.5.5看门狗驱动的挂起和恢复函数
    12.5.6看门狗驱动的打开和释放函数
    12.5.7看门狗驱动写函数
    12.6总结
    第3篇Linux设备驱动实例
    第13章Linux块设备驱动
    13.1块设备的I/O操作特点
    13.2Linux块设备驱动结构
    13.2.1block_device_operations结构体
    13.2.2gendisk结构体
    13.2.3request与bio结构体
    13.2.4块设备驱动注册与注销
    13.3Linux块设备驱动的模块加载与卸载
    13.4块设备的打开与释放
    13.5块设备驱动的ioctl函数
    13.6块设备驱动的I/O请求处理
    13.6.1使用请求队列
    13.6.2不使用请求队列
    13.7实例1:RamDisk驱动
    13.7.1RamDisk的硬件原理
    13.7.2RamDisk驱动模块的加载与卸载
    13.7.3RamDisk设备驱动block_device_operations及成员函数
    13.7.4RamDiskI/O请求处理
    13.8实例2:IDE硬盘设备驱动
    13.8.1IDE硬盘设备原理
    13.8.2IDE硬盘设备驱动的block_device_operations及成员函数
    13.8.3IDE硬盘设备驱动的I/O请求处理
    13.8.4在内核中增加对新系统IDE设备的支持
    13.9总结
    第14章Linux终端设备驱动
    14.1终端设备
    14.2终端设备驱动结构
    14.3终端设备驱动的初始化与释放
    14.3.1模块加载与卸载函数
    14.3.2打开与关闭函数
    14.4数据发送和接收
    14.5tty线路设置
    14.5.1线路设置用户空间接口
    14.5.2tty驱动的set_termios函数
    14.5.3tty驱动的tiocmget和tiocmset函数
    14.5.4tty驱动的ioctl函数
    14.6UART设备驱动
    14.7S3C2410UART的驱动实例
    14.7.1S3C2410串口硬件描述
    14.7.2S3C2410串口驱动的数据结构
    14.7.3S3C2410串口驱动的初始化与释放
    14.7.4S3C2410串口数据收发
    14.7.5S3C2410串口线路设置
    14.8总结
    第15章Linux的I2C核心、总线与设备驱动
    15.1Linux的I2C体系结构
    15.2LinuxI2C核心
    15.3LinuxI2C总线驱动
    15.3.1I2C适配器驱动加载与卸载
    15.3.2I2C总线通信方法
    15.4LinuxI2C设备驱动
    15.4.1LinuxI2C设备驱动的模块加载与卸载
    15.4.2LinuxI2C设备驱动的i2c_driver成员函数
    15.4.3LinuxI2C设备驱动的文件操作接口
    15.4.4Linux的i2c-dev.c文件分析
    15.5S3C2410I2C总线驱动实例
    15.5.1S3C2410I2C控制器硬件描述
    15.5.2S3C2410I2C总线驱动总体分析
    15.5.3S3C2410I2C适配器驱动的模块加载与卸载
    15.5.4S3C2410I2C总线通信方法
    15.6SAA7113H视频AD芯片的I2C设备驱动实例
    15.6.1SAA7113H视频AD芯片硬件描述
    15.6.2SAA7113H视频AD芯片驱动的模块加载与卸载
    15.6.3SAA7113H设备驱动的i2c_driver成员函数
    15.7总结
    第16章Linux网络设备驱动
    16.1Linux网络设备驱动的结构
    16.1.1网络协议接口层
    16.1.2网络设备接口层
    16.1.3设备驱动功能层
    16.1.4网络设备与媒介层
    16.2网络设备驱动的注册与注销
    16.3网络设备的初始化
    16.4网络设备的打开与释放
    16.5数据发送流程
    16.6数据接收流程
    16.7网络连接状态
    16.8参数设置和统计数据
    16.9CS8900网卡设备驱动实例
    16.9.1CS8900网卡硬件描述
    16.9.2CS8900网卡驱动设计分析
    16.9.3CS8900网卡注册、初始化与注销
    16.9.4CS8900网卡发送数据流程
    16.9.5CS8900网卡接收数据流程
    16.10总结
    第17章Linux音频设备驱动
    17.1数字音频设备
    17.2音频设备硬件接口
    17.2.1PCM接口
    17.2.2IIS接口
    17.2.3AC97接口
    17.3LinuxOSS音频设备驱动
    17.3.1OSS驱动的组成
    17.3.2mixer接口
    17.3.3dsp接口
    17.3.4OSS用户空间编程
    17.4LinuxALSA音频设备驱动
    17.4.1ALSA的组成
    17.4.2card和组件管理
    17.4.3PCM设备
    17.4.4控制接口
    17.4.5AC97API接口
    17.4.6ALSA用户空间编程
    17.5S3C2410+UDA1341OSS驱动实例
    17.5.1S3C2410与UDA1341接口硬件描述
    17.5.2注册dsp和mixer接口
    17.5.3mixer接口的I/O控制函数
    17.5.4dsp接口音频数据传输
    17.6SA1100+UDA1341ALSA驱动实例
    17.6.1card注册与注销
    17.6.2PCM设备的实现
    17.6.3控制接口的实现
    17.7PXA255+AC97ALSA驱动实例
    17.8总结
    第18章LCD设备驱动
    18.1LCD硬件原理
    18.2帧缓冲
    18.2.1帧缓冲的概念
    18.2.2显示缓冲区与显示点
    18.2.3Linux帧缓冲相关数据结构与函数
    18.3Linux帧缓冲设备驱动结构
    18.4帧缓冲设备驱动的模块加载与卸载函数
    18.5帧缓冲设备显示缓冲区的申请与释放
    18.6帧缓冲设备的参数设置
    18.6.1定时参数
    18.6.2像素时钟
    18.6.3颜色位域
    18.6.4固定参数
    18.7帧缓冲设备驱动的fb_ops成员函数
    18.8LCD设备驱动的读写、mmap和ioctl函数
    18.9帧缓冲设备的用户空间访问
    18.10Linux图形用户界面
    18.10.1Qt-X11/QtEmbedded/Qtopia
    18.10.2Microwindows/Nano-X
    18.10.3MiniGUI
    18.11实例:S3C2410LCD设备驱动
    18.11.1S3C2410LCD控制器硬件描述
    18.11.2S3C2410LCD驱动的模块加载与卸载函数
    18.11.3S3C2410LCD驱动的探测与移除函数
    18.11.4S3C2410LCD驱动挂起与恢复函数
    18.11.5S3C2410LCD驱动的fb_ops成员函数
    18.12总结
    第19章Flash设备驱动
    19.1LinuxFlash驱动结构
    19.1.1LinuxMTD系统层次
    19.1.2LinuxMTD系统接口
    19.1.3MTD用户空间编程
    19.2NORFlash驱动
    19.3NANDFlash驱动
    19.4NORFlash驱动实例:S3C2410外围的NORFlash驱动
    19.5NANDFlash驱动实例:S3C2410外围的NANDFlash驱动
    19.5.1S3C2410NAND控制器硬件描述
    19.5.2nand_chip初始化和成员函数
    19.5.3NAND设备驱动初始化与释放
    19.6Flash文件系统的建立
    19.6.1Flash转换层
    19.6.2CramFS
    19.6.3JFFS/JFFS2
    19.6.4YAFFS/YAFFS2
    19.7总结
    第20章USB主机与设备驱动
    20.1LinuxUSB驱动层次
    20.1.1主机侧与设备侧USB驱动
    20.1.2设备、配置、接口、端点
    20.2USB主机驱动
    20.2.1USB主机驱动的整体结构
    20.2.2实例:S3C2410USB主机驱动
    20.3USB设备驱动
    20.3.1USB设备驱动整体结构
    20.3.2USB请求块(URB)
    20.3.3探测和断开函数
    20.3.4USB骨架程序
    20.4USB设备驱动实例
    20.4.1USB串口驱动
    20.4.2USB键盘驱动
    20.5总结
    第21章PCI设备驱动
    21.1PCI总线与配置空间
    21.1.1PCI总线的Linux描述
    21.1.2PCI设备的Linux描述
    21.1.3PCI配置空间访问
    21.2PCI设备驱动结构
    21.2.1pci_driver结构体
    21.2.2PCI设备驱动的组成
    21.2.3旧版内核的PCI设备探测
    21.3实例:Intel810主板声卡驱动
    21.4总结
    第4篇Linux设备驱动测试、移植
    第22章Linux设备驱动的调试
    22.1Linux开发环境建设
    22.1.1实验室建设
    22.1.2工具链
    22.1.3串口工具
    22.2GDB调试器用法
    22.2.1GDB基本用法
    22.2.2DDD图形界面调试工具
    22.3Linux内核调试
    22.4内核打印信息-printk()
    22.5使用/proc
    22.6Oops
    22.7监视工具
    22.8内核调试器
    22.8.1kcore
    22.8.2KDB
    22.8.3KGDB
    22.9使用仿真器调试内核
    22.10应用程序调试
    22.11总结
    第23章Linux设备驱动的移植
    23.1编写可移植的设备驱动
    23.1.1可移植的数据类型
    23.1.2结构体对界
    23.1.3LittleEndian与BigEndian
    23.1.4内存页面大小
    23.2巧用同类设备驱动
    23.2.1巧用demo板驱动
    23.2.2巧用类似芯片的驱动程序
    23.2.3借用芯片厂商的范例程序
    23.3从Linux2.4移植设备驱动到Linux2.6
    23.4Linux与其他操作系统之间的驱动移植
    23.5总结
    参考文献
查看详情
相关图书 / 更多
Linux设备驱动开发详解
LiteOS轻量级物联网操作系统实战 微课视频版
魏杰
Linux设备驱动开发详解
Linux综合实训案例教程
陈智斌;梁鹏;肖政宏
Linux设备驱动开发详解
Linux操作系统项目化教程
周秀丽;张徐超;周密
Linux设备驱动开发详解
Linux操作系统
刘睿;包大宏;兰晓天;李吉桃;王仕杰;吴晓清;张宏洲;杨云江
Linux设备驱动开发详解
Linux C语言程序设计(微课视频版)
张同光;田文强;荆春棋;田乔梅;陈明
Linux设备驱动开发详解
Linux虚拟化——原理、方法和实战(KVM+Docker+OpenStack)
吴光科;李建尧;柯宇霖
Linux设备驱动开发详解
Linux源码趣读
闪客
Linux设备驱动开发详解
Linux自动化运维实战(Linux开发书系)
吴光科;彭威城;文·S
Linux设备驱动开发详解
Linux云计算——Kubernetes实战
吴光科;程浩;刑亚飞
Linux设备驱动开发详解
Linux运维从入门到精通
明日科技
Linux设备驱动开发详解
Linux操作系统项目化教程(第2版)
洪伟 主编;丁传炜 谢鹏 副主编
Linux设备驱动开发详解
Linux企业高性能架构实战
吴光科;曹森;赵瑞丰
您可能感兴趣 / 更多