下载APP 编程狮,随时随地学编程
返回 首页

Linux 设备驱动 (第三版)

开始阅读
目录
Linux设备驱动第三版

第 1 章 设备驱动简介

1.1. 驱动程序的角色
1.2. 划分内核
1.3. 设备和模块的分类
1.4. 安全问题
1.5. 版本编号
1.6. 版权条款
1.7. 加入内核开发社团
1.8. 本书的内容

第 2 章 建立和运行模块

2.1. 设置你的测试系统
2.2. Hello World 模块
2.3. 内核模块相比于应用程序
2.4. 编译和加载
2.5. 内核符号表
2.6. 预备知识
2.7. 初始化和关停
2.8. 模块参数
2.9. 在用户空间做
2.10. 快速参考

第 3 章 字符驱动

3.1. scull 的设计
3.2. 主次编号
3.3. 一些重要数据结构
3.4. 字符设备注册
3.5. open 和 release
3.6. scull 的内存使用
3.7. 读和写
3.8. 使用新设备
3.9. 快速参考

第 4 章 调试技术

4.1. 内核中的调试支持
4.2. 用打印调试
4.3. 用查询来调试
4.4. 使用观察来调试
4.5. 调试系统故障
4.6. 调试器和相关工具

第 5 章 并发和竞争情况

5.1. scull 中的缺陷
5.2. 并发和它的管理
5.3. 旗标和互斥体
5.4. Completions 机制
5.5. 自旋锁
5.6. 锁陷阱
5.7. 加锁的各种选择
5.8. 快速参考

第 6 章 高级字符驱动操作

6.1. ioctl 接口
6.2. 阻塞 I/O
6.3. poll 和 select
6.4. 异步通知
6.5. 移位一个设备
6.6. 在一个设备文件上的存取控制
6.7. 快速参考

第 7 章 时间, 延时, 和延后工作

7.1. 测量时间流失
7.2. 获知当前时间
7.3. 延后执行
7.4. 内核定时器
7.5. Tasklets 机制
7.6. 工作队列
7.7. 快速参考

第 8 章 分配内存

8.1. kmalloc 的真实故事
8.2. 后备缓存
8.3. get_free_page 和其友
8.4. 每-CPU 的变量
8.5. 获得大量缓冲
8.6. 快速参考

第 9 章 与硬件通讯

9.1. I/O 端口和 I/O 内存
9.2. 使用 I/O 端口
9.3. 一个 I/O 端口例子
9.4. 使用 I/O 内存
9.5. 快速参考

第 10 章 中断处理

10.1. 准备并口
10.2. 安装一个中断处理
10.3. 前和后半部
10.4. 中断共享
10.5. 中断驱动 I/O
10.6. 快速参考

第 12 章 PCI 驱动

12.1. PCI 接口
12.2. 回顾: ISA
12.3. PC/104 和 PC/104+
12.4. 其他的 PC 总线
12.5. SBus
12.6. NuBus 总线
12.7. 外部总线
12.8. 快速参考

第 11 章 内核中的数据类型

11.1. 标准 C 类型的使用
11.2. 安排一个明确大小给数据项
11.3. 接口特定的类型
11.4. 其他移植性问题
11.5. 链表
11.6. 快速参考

第 13 章 USB 驱动

13.1. USB 设备基础知识
13.2. USB 和 sysfs
13.3. USB 的 Urbs
13.4. 编写一个 USB 驱动
13.5. 无 urb 的 USB 传送
13.6. 快速参考

第 14 章 Linux 设备模型

14.1. Kobjects, Ksets 和 Subsystems
14.2. 低级 sysfs 操作
14.3. 热插拔事件产生
14.4. 总线, 设备, 和驱动
14.5. 类
14.6. 集成起来
14.7. 热插拔
14.8. 处理固件
14.9. 快速参考

第 15 章 内存映射和 DMA

15.1. Linux 中的内存管理
15.2. mmap 设备操作
15.3. 进行直接 I/O
15.4. 直接内存存取
15.5. 快速参考

第 16 章 块驱动

16.1. 注册
16.2. 块设备操作
16.3. 请求处理
16.4. 一些其他的细节
16.5. 快速参考

第 17 章 网络驱动

17.1. snull 是如何设计的
17.2. 连接到内核
17.3. net_device 结构的详情
17.4. 打开与关闭
17.5. 报文传送
17.6. 报文接收
17.7. 中断处理
17.8. 接收中断缓解
17.9. 连接状态的改变
17.10. Socket 缓存
17.11. MAC 地址解析
17.12. 定制 ioctl 命令
17.13. 统计信息
17.14. 多播
17.15. 几个其他细节
17.16. 快速参考

第 18 章 TTY 驱动

18.1. 一个小 TTY 驱动
18.2. tty_driver 函数指针
18.3. TTY 线路设置
18.4. ioctls 函数
18.5. TTY 设备的 proc 和 sysfs 处理
18.6. tty_driver 结构的细节
18.7. tty_operaions 结构的细节
18.8. tty_struct 结构的细节
18.9. 快速参考

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }