这不是一本单纯的关于Linux设备驱动程序门的书。它是给有一定的Linux设备驱动程序编写经验并且对众多Linux底层设备驱动内幕机制感兴趣的读者量身定制的。与市面上已经出版的Linux相关方面的图书的不同之处在于,本书并不着重于全面描述Linux内核,也不只是简单地告诉你如何去写一个Linux下的设备驱动程序。它是从设备驱动程序的视角出发,深到Linux内核去剖析那些和驱动程序实现机制密切相关的技术内幕。比如让你理解为什么在这个地方驱动程序应该使用work
售 价:¥
纸质售价:¥58.80购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
书名页
内容简介
版权页
推荐序
前 言
第1章 内核模块
1.1 内核模块的文件格式
1.2 EXPORT_SYMBOL的内核实现
1.3 模块的加载过程
1.3.1 sys_init_module(第一部分)
1.3.2 struct module
1.3.3 load_module
1.3.4 sys_init_module(第二部分)
1.3.5 模块的卸载
1.4 本章小结
第2章 字符设备驱动程序
2.1 应用程序与设备驱动程序互动实例
2.2 struct file_operations
2.3 字符设备的内核抽象
2.4 设备号的构成与分配
2.4.1 设备号的构成
2.4.2 设备号的分配与管理
2.5 字符设备的注册
2.6 设备文件节点的生成
2.7 字符设备文件的打开操作
2.8 本章小结
第3章 分配内存
3.1 物理内存的管理
3.1.1 内存节点node
3.1.2 内存区域zone
3.1.3 内存页
3.2 页面分配器(page allocator)
3.2.1 gfp_mask
3.2.2 alloc_pages
3.2.3 __get_free_pages
3.2.4 get_zeroed_page
3.2.5 __get_dma_pages
3.3 slab分配器(slab allocator)
3.3.1 管理slab的数据结构
3.3.2 kmalloc与kzalloc
3.3.3 kmem_cache_create与kmem_cache_alloc
3.4 内存池(mempool)
3.5 虚拟内存的管理
3.5.1 内核虚拟地址空间构成
3.5.2 vmalloc与vfree
3.5.3 ioremap
3.6 per-CPU变量
3.6.1 静态per-CPU变量的声明与定义
3.6.2 静态per-CPU变量的链接脚本
3.6.3 setup_per_cpu_areas函数
3.6.4 使用per-CPU变量
3.7 本章小结
第4章 互斥与同步
4.1 并发的来源
4.2 local_irq_enable与local_irq_disable
4.3 自旋锁
4.3.1 spin_lock
4.3.2 spin_lock的变体
4.3.3 单处理器上的spin_lock函数
4.3.4 读取者与写入者自旋锁rwlock
4.4 信号量(semaphore)
4.4.1 信号量的定义与初始化
4.4.2 DOWN操作
4.4.3 UP操作
4.4.4 读取者与写入者信号量rwsem
4.5 互斥锁mutex
4.5.1 互斥锁的定义与初始化
4.5.2 互斥锁的DOWN操作
4.5.3 互斥锁的UP操作
4.6 顺序锁seqlock
4.7 RCU
4.7.1 读取者的RCU临界区
4.7.2 写入者的RCU操作
4.7.3 RCU使用的特点
4.8 原子变量与位操作
4.9 等待队列
4.9.1 等待队列头wait_queue_head_t
4.9.2 等待队列的节点
4.9.3 等待队列的应用
4.10 完成接口completion
4.11 本章小结
第5章 中断处理
5.1 中断的硬件框架
5.2 PIC与软件中断号
5.3 通用的中断处理函数
5.4 do_IRQ函数
5.5 struct irq_chip
5.6 struct irqaction
5.7 irq_set_handler
5.8 handle_irq_event
5.9 request_irq
5.10 中断处理的irq_thread机制
5.11 free_irq
5.12 SOFTIRQ
5.13 irq的自动探测
5.14 中断处理例程
5.15 中断共享
5.16 本章小结
第6章 延迟操作
6.1 tasklet
6.1.1 tasklet机制初始化
6.1.2 提交一个tasklet
6.1.3 tasklet_action
6.1.4 tasklet的其他操作
6.2 工作队列work queue
6.2.1 数据结构
6.2.2 create_singlethread_workqueue和create_workqueue
6.2.3 工人线程worker_thread
6.2.4 destroy_workqueue
6.2.5 提交工作节点queue_work
6.2.6 内核创建的工作队列
6.3 本章小结
第7章 设备文件的高级操作
7.1 ioctl文件操作
7.1.1 ioctl的系统调用
7.1.2 ioctl的命令编码
7.1.3 copy_from_user和copy_to_user
7.2 字符设备的I/O模型
7.3 同步阻塞型I/O
7.3.1 wait_event_interruptible
7.3.2 wake_up_interruptible
7.4 同步非阻塞型I/O
7.5 异步阻塞型I/O
7.6 异步非阻塞型I/O
7.7 驱动程序的fsync例程
7.8 fasync例程
7.9 llseek例程
7.10 访问权能
7.11 本章小结
第8章 时间管理
8.1 jiffies
8.1.1 时间比较
8.1.2 时间转换
8.2 延时操作
8.2.1 长延时
8.2.2 短延时
8.3 内核定时器
8.3.1 init_timer
8.3.2 add_timer
8.3.3 del_timer和del_timer_sync
8.4 本章小结
第9章 Linux设备驱动模型
9.1 sysfs文件系统
9.2 kobject和kset
9.2.1 kobject
9.2.2 kobject的类型属性
9.2.3 kset
9.2.4 热插拔中的uevent和call_usermodehelper
9.2.5 实例源码
9.3 总线、设备与驱动
9.3.1 总线及其注册
9.3.2 总线的属性
9.3.3 设备与驱动的绑定
9.3.4 设备
9.3.5 驱动
9.4 class
9.5 本章小结
第10章 内存映射与DMA
10.1 设备缓存与设备内存
10.2 mmap
10.2.1 struct vm_area_struct
10.2.2 用户空间虚拟地址布局
10.2.3 mmap系统调用过程
10.2.4 驱动程序中mmap方法的实现
10.2.5 mmap使用范例
10.2.6 munmap
10.3 DMA
10.3.1 内核中的DMA层
10.3.2 物理地址与总线地址
10.3.3 dma_set_mask
10.3.4 DMA映射
10.3.5 回弹缓冲区(bounce buffer)
10.3.6 DMA池
10.4 本章小结
第11章 块设备驱动程序
11.1 块子系统初始化
11.2 ramdisk源码实例
11.2.1 make_request版本的RAM DISK源码
11.2.2 request版本的RAM DISK源码
11.2.3 ramdisk的使用
11.3 块设备号的注册与管理
11.4 block_device
11.5 struct gendisk
11.6 struct hd_struct
11.7 用alloc_disk分配gendisk对象
11.8 向系统添加一个块设备add_disk
11.9 block_device_operations
11.10 块设备文件的打开
11.11 blk_init_queue
11.12 blk_queue_make_request
11.13 向队列提交请求
11.14 块设备的请求处理函数
11.15 bio结构
11.16 本章小结
第12章 网络设备驱动程序
12.1 net_device
12.2 网络设备的注册
12.3 设备方法
12.3.1 设备初始化
12.3.2 设备接口的打开与停止
12.3.3 数据包的发送
12.3.4 网络数据包发送过程中的流控机制
12.3.5 传输超时(watchdog timeout)
12.3.6 数据包的接收
12.4 套接字缓冲区
12.5 中断处理
12.6 NAPI
12.7 本章小结
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜