下载 > 资源分类 > 课程资源 > 嵌入式 > Linux设备驱动程序第三版

Linux设备驱动程序第三版

2013-06-13 上传大小:4.19MB
目录 1. 第一章 设备驱动简介(见 [标题编号.]) 1.1. 驱动程序的角色(见 [标题编号.]) 1.2. 划分内核(见 [标题编号.]) 1.2.1. 可加载模块(见 [标题编号.]) 1.3. 设备和模块的分类(见 [标题编号.]) 1.4. 安全问题(见 [标题编号.]) 1.5. 版本编号(见 [标题编号.]) 1.6. 版权条款(见 [标题编号.]) 1.7. 加入内核开发社团(见 [标题编号.]) 1.8. 本书的内容(见 [标题编号.]) 2. 建立和运行模块(见 [标题编号.]) 2.1. 设置你的测试系统(见 [标题编号.]) 2.2. Hello World 模块(见 [标题编号.]) 2.3. 内核模块相比于应用程序(见 [标题编号.]) 2.3.1. 用户空间和内核空间(见 [标题编号.]) 2.3.2. 内核的并发(见 [标题编号.]) 2.3.3. 当前进程(见 [标题编号.]) 2.3.4. 几个别的细节(见 [标题编号.]) 2.4. 编译和加载(见 [标题编号.]) 2.4.1. 编译模块(见 [标题编号.]) 2.4.2. 加载和卸载模块(见 [标题编号.]) 2.4.3. 版本依赖(见 [标题编号.]) 2.4.4. 平台依赖性(见 [标题编号.]) 2.5. 内核符号表(见 [标题编号.]) 2.6. 预备知识(见 [标题编号.]) 2.7. 初始化和关停(见 [标题编号.]) 2.7.1. 清理函数(见 [标题编号.]) 2.7.2. 初始化中的错误处理(见 [标题编号.]) 2.7.3. 模块加载竞争(见 [标题编号.]) 2.8. 模块参数(见 [标题编号.]) 2.9. 在用户空间做(见 [标题编号.]) 2.10. 快速参考(见 [标题编号.]) 3. 字符驱动(见 [标题编号.]) 3.1. scull 的设计(见 [标题编号.]) 3.2. 主次编号(见 [标题编号.]) 3.2.1. 设备编号的内部表示(见 [标题编号.]) 3.2.2. 分配和释放设备编号(见 [标题编号.]) 3.2.3. 主编号的动态分配(见 [标题编号.]) 3.3. 一些重要数据结构(见 [标题编号.]) 3.3.1. 文件操作(见 [标题编号.]) 3.3.2. 文件结构(见 [标题编号.]) 3.3.3. inode 结构(见 [标题编号.]) 3.4. 字符设备注册(见 [标题编号.]) 3.4.1. scull 中的设备注册(见 [标题编号.]) 3.4.2. 老方法(见 [标题编号.]) 3.5. open 和 release(见 [标题编号.]) 3.5.1. open 方法(见 [标题编号.]) 3.5.2. release 方法(见 [标题编号.]) 3.6. scull 的内存使用(见 [标题编号.]) 3.7. 读和写(见 [标题编号.]) 3.7.1. read 方法(见 [标题编号.]) 3.7.2. write 方法(见 [标题编号.]) 3.7.3. readv 和 writev(见 [标题编号.]) 3.8. 使用新设备(见 [标题编号.]) 3.9. 快速参考(见 [标题编号.]) 4. 调试技术(见 [标题编号.]) 4.1. 内核中的调试支持(见 [标题编号.]) 4.2. 用打印调试(见 [标题编号.]) 4.2.1. printk(见 [标题编号.]) 4.2.2. 重定向控制台消息(见 [标题编号.]) 4.2.3. 消息是如何记录的(见 [标题编号.]) 4.2.4. 打开和关闭消息(见 [标题编号.]) 4.2.5. 速率限制(见 [标题编号.]) 4.2.6. 打印设备编号(见 [标题编号.]) 4.3. 用查询来调试(见 [标题编号.]) 4.3.1. 使用 /proc 文件系统(见 [标题编号.]) 4.3.2. ioctl 方法(见 [标题编号.]) 4.4. 使用观察来调试(见 [标题编号.]) 4.5. 调试系统故障(见 [标题编号.]) 4.5.1. oops 消息(见 [标题编号.]) 4.5.2. 系统挂起(见 [标题编号.]) 4.6. 调试器和相关工具(见 [标题编号.]) 4.6.1. 使用 gdb(见 [标题编号.]) 4.6.2. kdb 内核调试器(见 [标题编号.]) 4.6.3. kgdb 补丁(见 [标题编号.]) 4.6.4. 用户模式 Linux 移植(见 [标题编号.]) 4.6.5. Linux 追踪工具(见 [标题编号.]) 4.6.6. 动态探针(见 [标题编号.]) 5. 并发和竞争情况(见 [标题编号.]) 5.1. scull 中的缺陷(见 [标题编号.]) 5.2. 并发和它的管理(见 [标题编号.]) 5.3. 旗标和互斥体(见 [标题编号.]) 5.3.1. Linux 旗标实现(见 [标题编号.]) 5.3.2. 在 scull 中使用旗标(见 [标题编号.]) 5.3.3. 读者/写者旗标(见 [标题编号.]) 5.4. Completions 机制(见 [标题编号.]) 5.5. 自旋锁(见 [标题编号.]) 5.5.1. 自旋锁 API 简介(见 [标题编号.]) 5.5.2. 自旋锁和原子上下文(见 [标题编号.]) 5.5.3. 自旋锁函数(见 [标题编号.]) 5.5.4. 读者/写者自旋锁(见 [标题编号.]) 5.6. 锁陷阱(见 [标题编号.]) 5.6.1. 模糊的规则(见 [标题编号.]) 5.6.2. 加锁顺序规则(见 [标题编号.]) 5.6.3. 细 -粗- 粒度加锁(见 [标题编号.]) 5.7. 加锁的各种选择(见 [标题编号.]) 5.7.1. 不加锁算法(见 [标题编号.]) 5.7.2. 原子变量(见 [标题编号.]) 5.7.3. 位操作(见 [标题编号.]) 5.7.4. seqlock 锁(见 [标题编号.]) 5.7.5. 读取-拷贝-更新(见 [标题编号.]) 5.8. 快速参考(见 [标题编号.]) 6. 高级字符驱动操作(见 [标题编号.]) 6.1. ioctl 接口(见 [标题编号.]) 6.1.1. 选择 ioctl 命令(见 [标题编号.]) 6.1.2. 返回值(见 [标题编号.]) 6.1.3. 预定义的命令(见 [标题编号.]) 6.1.4. 使用 ioctl 参数(见 [标题编号.]) 6.1.5. 兼容性和受限操作(见 [标题编号.]) 6.1.6. ioctl 命令的实现(见 [标题编号.]) 6.1.7. 不用 ioctl 的设备控制(见 [标题编号.]) 6.2. 阻塞 I/O(见 [标题编号.]) 6.2.1. 睡眠的介绍(见 [标题编号.]) 6.2.2. 简单睡眠(见 [标题编号.]) 6.2.3. 阻塞和非阻塞操作 (见 [标题编号.]) 6.2.4. 一个阻塞 I/O 的例子(见 [标题编号.]) 6.2.5. 高级睡眠(见 [标题编号.]) 6.2.6. 测试 scullpipe 驱动(见 [标题编号.]) 6.3. poll 和 select(见 [标题编号.]) 6.3.1. 与 read 和 write 的交互(见 [标题编号.]) 6.3.2. 底层的数据结构(见 [标题编号.]) 6.4. 异步通知(见 [标题编号.]) 6.4.1. 驱动的观点(见 [标题编号.]) 6.5. 移位一个设备(见 [标题编号.]) 6.5.1. llseek 实现(见 [标题编号.]) 6.6. 在一个设备文件上的存取控制(见 [标题编号.]) 6.6.1. 单 open 设备(见 [标题编号.]) 6.6.2. 一次对一个用户限制存取(见 [标题编号.]) 6.6.3. 阻塞 open 作为对 EBUSY 的替代(见 [标题编号.]) 6.6.4. 在 open 时复制设备(见 [标题编号.]) 6.7. 快速参考(见 [标题编号.]) 7. 时间, 延时, 和延后工作(见 [标题编号.]) 7.1. 测量时间流失(见 [标题编号.]) 7.1.1. 使用 jiffies 计数器(见 [标题编号.]) 7.1.2. 处理器特定的寄存器(见 [标题编号.]) 7.2. 获知当前时间(见 [标题编号.]) 7.3. 延后执行(见 [标题编号.]) 7.3.1. 长延时(见 [标题编号.]) 7.3.2. 短延时(见 [标题编号.]) 7.4. 内核定时器(见 [标题编号.]) 7.4.1. 定时器 API(见 [标题编号.]) 7.4.2. 内核定时器的实现(见 [标题编号.]) 7.5. Tasklets 机制(见 [标题编号.]) 7.6. 工作队列(见 [标题编号.]) 7.6.1. 共享队列(见 [标题编号.]) 7.7. 快速参考(见 [标题编号.]) 7.7.1. 时间管理(见 [标题编号.]) 7.7.2. 延迟(见 [标题编号.]) 7.7.3. 内核定时器(见 [标题编号.]) 7.7.4. Tasklets 机制(见 [标题编号.]) 7.7.5. 工作队列(见 [标题编号.]) 8. 分配内存(见 [标题编号.]) 8.1. kmalloc 的真实故事(见 [标题编号.]) 8.1.1. flags 参数(见 [标题编号.]) 8.1.2. size 参数(见 [标题编号.]) 8.2. 后备缓存(见 [标题编号.]) 8.2.1. 一个基于 Slab 缓存的 scull: scullc(见 [标题编号.]) 8.2.2. 内存池(见 [标题编号.]) 8.3. get_free_page 和其友(见 [标题编号.]) 8.3.1. 一个使用整页的 scull: scullp(见 [标题编号.]) 8.3.2. alloc_pages 接口(见 [标题编号.]) 8.3.3. vmalloc 和 其友(见 [标题编号.]) 8.3.4. 一个使用虚拟地址的 scull : scullv(见 [标题编 8.4. 每-CPU 的变量(见 [标题编号.]) 8.5. 获得大量缓冲(见 [标题编号.]) 8.5.1. 在启动时获得专用的缓冲(见 [标题编号.]) 8.6. 快速参考(见 [标题编号.]) 9. 与硬件通讯(见 [标题编号.]) 9.1. I/O 端口和 I/O 内存(见 [标题编号.]) 9.1.1. I/O 寄存器和常规内存(见 [标题编号.]) 9.2. 使用 I/O 端口(见 [标题编号.]) 9.2.1. I/O 端口分配(见 [标题编号.]) 9.2.2. 操作 I/O 端口(见 [标题编号.]) 9.2.3. 从用户空间的 I/O 存取(见 [标题编号.]) 9.2.4. 字串操作(见 [标题编号.]) 9.2.5. 暂停 I/O(见 [标题编号.]) 9.2.6. 平台依赖性(见 [标题编号.]) 9.3. 一个 I/O 端口例子(见 [标题编号.]) 9.3.1. 并口纵览(见 [标题编号.]) 9.3.2. 一个例子驱动(见 [标题编号.]) 9.4. 使用 I/O 内存(见 [标题编号.]) 9.4.1. I/O 内存分配和映射(见 [标题编号.]) 9.4.2. 存取 I/O 内存(见 [标题编号.]) 9.4.3. 作为 I/O 内存的端口(见 [标题编号.]) 9.4.4. 重用 short 为 I/O 内存(见 [标题编号.]) 9.4.5. 在 1 MB 之下的 ISA 内存(见 [标题编号.]) 9.4.6. isa_readb 和其友(见 [标题编号.]) 9.5. 快速参考(见 [标题编号.]) 10. 中断处理(见 [标题编号.]) 10.1. 准备并口(见 [标题编号.]) 10.2. 安装一个中断处理(见 [标题编号.]) 10.2.1. /proc 接口(见 [标题编号.]) 10.2.2. 自动检测 IRQ 号(见 [标题编号.]) 10.2.3. 快速和慢速处理(见 [标题编号.]) 10.2.4. 实现一个处理(见 [标题编号.]) 10.2.5. 处理者的参数和返回值(见 [标题编号.]) 10.2.6. 使能和禁止中断(见 [标题编号.]) 10.3. 前和后半部(见 [标题编号.]) 10.3.1. Tasklet 实现(见 [标题编号.]) 10.3.2. 工作队列(见 [标题编号.]) 10.4. 中断共享(见 [标题编号.]) 10.4.1. 安装一个共享的处理者(见 [标题编号.]) 10.4.2. 运行处理者(见 [标题编号.]) 10.4.3. /proc 接口和共享中断(见 [标题编号.]) 10.5. 中断驱动 I/O(见 [标题编号.]) 10.5.1. 一个写缓存例子(见 [标题编号.]) 10.6. 快速参考(见 [标题编号.]) 11. 内核中的数据类型(见 [标题编号.]) 11.1. 标准 C 类型的使用(见 [标题编号.]) 11.2. 安排一个明确大小给数据项(见 [标题编号.]) 11.3. 接口特定的类型(见 [标题编号.]) 11.4. 其他移植性问题(见 [标题编号.]) 11.4.1. 时间间隔(见 [标题编号.]) 11.4.2. 页大小(见 [标题编号.]) 11.4.3. 字节序(见 [标题编号.]) 11.4.4. 数据对齐(见 [标题编号.]) 11.4.5. 指针和错误值(见 [标题编号.]) 11.5. 链表(见 [标题编号.]) 11.6. 快速参考(见 [标题编号.]) 12. PCI 驱动(见 [标题编号.]) 12.1. PCI 接口(见 [标题编号.]) 12.1.1. PCI 寻址(见 [标题编号.]) 12.1.2. 启动时间(见 [标题编号.]) 12.1.3. 配置寄存器和初始化(见 [标题编号.]) 12.1.4. MODULEDEVICETABLE 宏(见 [标题编号.]) 12.1.5. 注册一个 PCI 驱动(见 [标题编号.]) 12.1.6. 老式 PCI 探测(见 [标题编号.]) 12.1.7. 使能 PCI 设备(见 [标题编号.]) 12.1.8. 存取配置空间(见 [标题编号.]) 12.1.9. 存取 I/O 和内存空间(见 [标题编号.]) 12.1.10. PCI 中断(见 [标题编号.]) 12.1.11. 硬件抽象(见 [标题编号.]) 12.2. 回顾: ISA(见 [标题编号.]) 12.2.1. 硬件资源(见 [标题编号.]) 12.2.2. ISA 编程(见 [标题编号.]) 12.2.3. 即插即用规范(见 [标题编号.]) 12.3. PC/104 和 PC/104+(见 [标题编号.]) 12.4. 其他的 PC 总线(见 [标题编号.]) 12.4.1. MCA 总线(见 [标题编号.]) 12.4.2. EISA 总线(见 [标题编号.]) 12.4.3. VLB 总线(见 [标题编号.]) 12.5. SBus(见 [标题编号.]) 12.6. NuBus 总线(见 [标题编号.]) 12.7. 外部总线(见 [标题编号.]) 12.8. 快速参考(见 [标题编号.]) 13. USB 驱动(见 [标题编号.]) 13.1. USB 设备基础知识(见 [标题编号.]) 13.1.1. 端点(见 [标题编号.]) 13.1.2. 接口(见 [标题编号.]) 13.1.3. 配置(见 [标题编号.]) 13.2. USB 和 sysfs(见 [标题编号.]) 13.3. USB 的 Urbs(见 [标题编号.]) 13.3.1. 结构 struct urb(见 [标题编号.]) 13.3.2. 创建和销毁 urb(见 [标题编号.]) 13.3.3. 提交 urb(见 [标题编号.]) 13.3.4. 完成 urb: 完成回调处理者(见 [标题编号.]) 13.3.5. 取消 urb(见 [标题编号.]) 13.4. 编写一个 USB 驱动(见 [标题编号.]) 13.4.1. 驱动支持什么设备(见 [标题编号.]) 13.4.2. 注册一个 USB 驱动(见 [标题编号.]) 13.4.3. 提交和控制一个 urb(见 [标题编号.]) 13.5. 无 urb 的 USB 传送(见 [标题编号.]) 13.5.1. usb_bulk_msg 接口(见 [标题编号.]) 13.5.2. usb_control_msg 接口(见 [标题编号.]) 13.5.3. 使用 USB 数据函数(见 [标题编号.]) 13.6. 快速参考(见 [标题编号.]) 14. Linux 设备模型(见 [标题编号.]) 14.1. Kobjects, Ksets 和 Subsystems (见 [标题编号.]) 14.1.1. Kobject 基础(见 [标题编号.]) 14.1.2. kobject 层次, kset, 和子系统(见 [标题编号.]) 14.2. 低级 sysfs 操作(见 [标题编号.]) 14.2.1. 缺省属性(见 [标题编号.]) 14.2.2. 非缺省属性(见 [标题编号.]) 14.2.3. 二进制属性(见 [标题编号.]) 14.2.4. 符号连接(见 [标题编号.]) 14.3. 热插拔事件产生(见 [标题编号.]) 14.3.1. 热插拔操作(见 [标题编号.]) 14.4. 总线, 设备, 和驱动(见 [标题编号.]) 14.4.1. 总线(见 [标题编号.]) 14.4.2. 设备(见 [标题编号.]) 14.4.3. 设备驱动(见 [标题编号.]) 14.5. 类(见 [标题编号.]) 14.5.1. class_simple 接口(见 [标题编号.]) 14.5.2. 完整的类接口(见 [标题编号.]) 14.6. 集成起来(见 [标题编号.]) 14.6.1. 添加一个设备(见 [标题编号.]) 14.6.2. 去除一个设备(见 [标题编号.]) 14.6.3. 添加一个驱动(见 [标题编号.]) 14.6.4. 去除一个驱动(见 [标题编号.]) 14.7. 热插拔(见 [标题编号.]) 14.7.1. 动态设备(见 [标题编号.]) 14.7.2. /sbin/hotplug 工具(见 [标题编号.]) 14.7.3. 使用 /sbin/hotplug (见 [标题编号.]) 14.8. 处理固件(见 [标题编号.]) 14.8.1. 内核固件接口(见 [标题编号.]) 14.8.2. 它如何工作(见 [标题编号.]) 14.9. 快速参考(见 [标题编号.]) 14.9.1. Kobjects结构(见 [标题编号.]) 14.9.2. sysfs 操作(见 [标题编号.]) 14.9.3. 总线, 设备, 和驱动(见 [标题编号.]) 14.9.4. 类(见 [标题编号.]) 14.9.5. 固件(见 [标题编号.]) 15. 内存映射和 DMA (见 [标题编号.]) 15.1. Linux 中的内存管理(见 [标题编号.]) 15.1.1. 地址类型(见 [标题编号.]) 15.1.2. 物理地址和页(见 [标题编号.]) 15.1.3. 高和低内存(见 [标题编号.]) 15.1.4. 内存映射和 struct page(见 [标题编号.]) 15.1.5. 页表(见 [标题编号.]) 15.1.6. 虚拟内存区(见 [标题编号.]) 15.1.7. 进程内存映射(见 [标题编号.]) 15.2. mmap 设备操作(见 [标题编号.]) 15.2.1. 使用 remap_pfn_range(见 [标题编号.]) 15.2.2. 一个简单的实现(见 [标题编号.]) 15.2.3. 添加 VMA 的操作(见 [标题编号.]) 15.2.4. 使用 nopage 映射内存(见 [标题编号.]) 15.2.5. 重新映射特定 I/O 区(见 [标题编号.]) 15.2.6. 重新映射 RAM(见 [标题编号.]) 15.2.7. 重映射内核虚拟地址(见 [标题编号.]) 15.3. 进行直接 I/O(见 [标题编号.]) 15.3.1. 异步 I/O(见 [标题编号.]) 15.4. 直接内存存取(见 [标题编号.]) 15.4.1. 一个 DMA 数据传输的概况(见 [标题编号.]) 15.4.2. 分配 DMA 缓冲(见 [标题编号.]) 15.4.3. 总线地址(见 [标题编号.]) 15.4.4. 通用 DMA 层(见 [标题编号.]) 15.4.5. ISA 设备的 DMA(见 [标题编号.]) 15.5. 快速参考(见 [标题编号.]) 15.5.1. 介绍性材料(见 [标题编号.]) 15.5.2. 实现 mmap(见 [标题编号.]) 15.5.3. 实现直接 I/O(见 [标题编号.]) 15.5.4. 直接内存存取(见 [标题编号.]) 16. 块驱动(见 [标题编号.]) 16.1. 注册(见 [标题编号.]) 16.1.1. 块驱动注册(见 [标题编号.]) 16.1.2. 磁盘注册(见 [标题编号.]) 16.1.3. 在 sbull 中的初始化(见 [标题编号.]) 16.1.4. 注意扇区大小(见 [标题编号.]) 16.2. 块设备操作(见 [标题编号.]) 16.2.1. open 和 release 方法(见 [标题编号.]) 16.2.2. 支持可移出的介质(见 [标题编号.]) 16.2.3. ioctl 方法(见 [标题编号.]) 16.3. 请求处理(见 [标题编号.]) 16.3.1. 对请求方法的介绍(见 [标题编号.]) 16.3.2. 一个简单的请求方法(见 [标题编号.]) 16.3.3. 请求队列(见 [标题编号.]) 16.3.4. 请求的分析(见 [标题编号.]) 16.3.5. 请求完成函数(见 [标题编号.]) 16.4. 一些其他的细节(见 [标题编号.]) 16.4.1. 命令预准备(见 [标题编号.]) 16.4.2. 被标识的命令排队(见 [标题编号.]) 16.5. 快速参考(见 [标题编号.]) 17. 网络驱动(见 [标题编号.]) 17.1. snull 是如何设计的(见 [标题编号.]) 17.1.1. 分配 IP 号(见 [标题编号.]) 17.1.2. 报文的物理传送(见 [标题编号.]) 17.2. 连接到内核(见 [标题编号.]) 17.2.1. 设备注册(见 [标题编号.]) 17.2.2. 初始化每一个设备(见 [标题编号.]) 17.2.3. 模块卸载(见 [标题编号.]) 17.3. net_device 结构的详情(见 [标题编号.]) 17.3.1. 全局信息(见 [标题编号.]) 17.3.2. 硬件信息(见 [标题编号.]) 17.3.3. 接口信息(见 [标题编号.]) 17.3.4. 设备方法(见 [标题编号.]) 17.3.5. 公用成员(见 [标题编号.]) 17.4. 打开与关闭(见 [标题编号.]) 17.5. 报文传送(见 [标题编号.]) 17.5.1. 控制发送并发(见 [标题编号.]) 17.5.2. 传送超时(见 [标题编号.]) 17.5.3. 发散/汇聚 I/O(见 [标题编号.]) 17.6. 报文接收(见 [标题编号.]) 17.7. 中断处理(见 [标题编号.]) 17.8. 接收中断缓解(见 [标题编号.]) 17.9. 连接状态的改变(见 [标题编号.]) 17.10. Socket 缓存(见 [标题编号.]) 17.10.1. 重要成员变量(见 [标题编号.]) 17.10.2. 作用于 socket 缓存的函数(见 [标题编号.]) 17.11. MAC 地址解析(见 [标题编号.]) 17.11.1. 以太网使用 ARP(见 [标题编号.]) 17.11.2. 不考虑 ARP(见 [标题编号.]) 17.11.3. 非以太网头部(见 [标题编号.]) 17.12. 定制 ioctl 命令(见 [标题编号.]) 17.13. 统计信息(见 [标题编号.]) 17.14. 多播(见 [标题编号.]) 17.14.1. 多播的内核支持(见 [标题编号.]) 17.14.2. 典型实现(见 [标题编号.]) 17.15. 几个其他细节(见 [标题编号.]) 17.15.1. 独立于媒介的接口支持(见 [标题编号.]) 17.15.2. ethtool 支持(见 [标题编号.]) 17.15.3. netpoll(见 [标题编号.]) 17.16. 快速参考(见 [标题编号.]) 18. TTY 驱动(见 [标题编号.]) 18.1. 一个小 TTY 驱动(见 [标题编号.]) 18.1.1. 结构 struct termios(见 [标题编号.]) 18.2. tty_driver 函数指针(见 [标题编号.]) 18.2.1. open 和 close(见 [标题编号.]) 18.2.2. 数据流(见 [标题编号.]) 18.2.3. 其他缓冲函数(见 [标题编号.]) 18.2.4. 无 read 函数?(见 [标题编号.]) 18.3. TTY 线路设置(见 [标题编号.]) 18.3.1. set_termios 函数(见 [标题编号.]) 18.3.2. tiocmget 和 tiocmset(见 [标题编号.]) 18.4. ioctls 函数(见 [标题编号.]) 18.5. TTY 设备的 proc 和 sysfs 处理(见 [标题编号.]) 18.6. tty_driver 结构的细节(见 [标题编号.]) 18.7. tty_operaions 结构的细节(见 [标题编号.]) 18.8. tty_struct 结构的细节(见 [标题编号.]) 18.9. 快速参考(见 [标题编号.])...展开收缩
嵌到我的页面
综合评分:5(1位用户评分)
直接下载 开通vip会员 免积分下载

热门专辑

评论共有1条

name
whvc__2014-05-17 14:55:00
很祥细,也很精练。

评论资源

您不能发表评论,可能是以下原因:

登录后才能评论

待评论资源
 

VIP会员动态

关闭
img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

CSDN vip年卡 4000万程序员的必选现在开通,立省540元
下载
img

Linux设备驱动程序第三版

会员到期时间:剩余下载个数:
VIP下载

积分不足!

资源所需积分 当前拥有积分
您可以选择
开通VIP年卡
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省540元
或者
购买C币兑换积分
img
资源所需积分 当前拥有积分
VIP年卡全年1200个资源免积分下载促销价60元,开通立省540元
下载
下载

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

若举报审核通过,可奖励20下载分

  • 举报人:
  • 被举报人:
  • 举报的资源分:
  • *类型:
  • *详细原因: