深入理解FreeBSD设备驱动程序开发
译者序
序言
前言
致谢
第1章构建并运行模块
1.1 设备驱动程序的类型
1.2 可加载内核模块
1.2.1 模块事件处理程序
1.2.2 DECLARE_MO-DULE宏
1.3 Hello, world!
查看完整
序言
前言
致谢
第1章构建并运行模块
1.1 设备驱动程序的类型
1.2 可加载内核模块
1.2.1 模块事件处理程序
1.2.2 DECLARE_MO-DULE宏
1.3 Hello, world!
查看完整
Joseph Kong,资深FreeBSD设备驱动编程专家,具有20多年的计算机硬件、软件和驱动程序的设计与开发经验。对信息安全、操作系统理论、逆向工程和安全漏洞评估等技术也有非常深入的研究。此外,他还是一位知名的技术作家和技术顾问,著有《Designing BSD Rootkits》一书,担任过多本与设备驱动程序开发相关图书的技术审稿人,在权威计算机杂志上发表了多篇与设备驱动程序开发相关的文章,深受读者喜爱。
《深入理解FreeBSD设备驱动程序开发》内容全面,它不仅详细讲解了开发企业级iOS应用所需掌握的各项核心技术,以及各种工具和框架的用法,而且还系统讲解了企业级iOS应用开发的流程和方法;实战性强,不仅为各个知识点精心设计了能辅助读者理解的小案例,而且还有能指导读者进行完整实践的大案例,具备极强的可操作性。除此之外,本书还包含大量的开发技巧和最佳实践。
本书是FreeBSD设备驱动开发领域的经典著作,由具有20余年从业经验的资深FreeBSD设备驱动编程专家撰写,FreeBSD内核开发专家鼎力推荐!本书从宏观上讲解了FreeBSD设备驱动程序的框架结构,从微观上讲解了FreeBSD与驱动程序相关的各个接口和模块的作用及工作原理,而且还从源码实现的角度分析了设备驱动程序的内核机制。本书面向的读者是驱动开发程序员,更注重实践而非理论,通过真实的驱动开发案例为编写健壮高效的…
查看完整
本书是FreeBSD设备驱动开发领域的经典著作,由具有20余年从业经验的资深FreeBSD设备驱动编程专家撰写,FreeBSD内核开发专家鼎力推荐!本书从宏观上讲解了FreeBSD设备驱动程序的框架结构,从微观上讲解了FreeBSD与驱动程序相关的各个接口和模块的作用及工作原理,而且还从源码实现的角度分析了设备驱动程序的内核机制。本书面向的读者是驱动开发程序员,更注重实践而非理论,通过真实的驱动开发案例为编写健壮高效的…
查看完整
译者序
序言
前言
致谢
第1章构建并运行模块
1.1 设备驱动程序的类型
1.2 可加载内核模块
1.2.1 模块事件处理程序
1.2.2 DECLARE_MO-DULE宏
1.3 Hello, world!
1.4 编译与加载
1.5 字符设备驱动程序
1.5.1 d_foo函数
1.5.2 字符设备开关表
1.5.3 make_dev函数和des-troy_dev函数
1.6 实例:内存字符设备驱动程序
1.6.1 echo_write函数
1.6.2 echo_read函数
1.6.3 echo_modevent函数
1.6.4 DEV_MODULE宏
1.6.5 试运行
1.7 块设备驱动程序消失了
1.8 本章小结
第2章分配内存
2.1 内存管理例程
2.2 malloc_type结构
2.2.1 MALLOC_DE-FINE宏
2.2.2 MALLOC_DE-CLARE宏
2.3 让一切配合起来
2.4 连续物理内存管理例程
2.5 一个简单的例子
2.6 本章小结
第3章设备通信与控制
3.1 ioctl接口
3.2 定义ioctl命令
3.3 实现ioctl
3.3.1 echo_write函数
3.3.2 echo_set_buffer_size函数
3.3.3 echo_ioctl函数
3.3.4 echo_modevent函数
3.3.5 试运行
3.4 调用ioctl
3.5 sysctl
3.6 实现sysctl(第1部分)
3.7 sysctl上下文管理例程
3.8 创建动态的sysctl
3.8.1 SYSCTL_STATIC_CHILDREN宏
3.8.2 SYSCTL_CHILDREN宏
3.9 实现sysctl(第2部分)
3.9.1 sysctl_set_buffer_size函数
3.9.2 试运行
3.10 本章小结
第4章线程同步
4.1 一个简单的同步问题
4.2 一个更复杂的同步问题
4.2.1 race_new函数
4.2.2 race_find函数
4.2.3 race_destroy函数
4.2.4 race_ioctl函数
4.2.5 race_modevent函数
4.2.6 问题的根源
4.3 防止竞态条件
4.4 互斥锁
4.4.1 自旋互斥锁
4.4.2 休眠互斥锁
4.5 互斥锁管理例程
4.6 实现互斥锁
4.6.1 race_modevent函数
4.6.2 试运行
4.7 共享\/独占锁
4.8 共享\/独占锁管理例程
4.9 实现共享\/独占锁
4.10 读者\/写者锁
4.11 读者\/写者锁管理例程
4.12 条件变量
4.13 条件变量管理例程
4.14 一般性原则
4.14.1 避免在独占锁上递归
4.14.2 避免长时间占用独占锁
4.15 本章小结
第5章延迟执行
5.1 主动上下文切换\/休眠
5.2 实现休眠与条件变量
5.2.1 sleep_modevent函数
5.2.2 load函数
5.2.3 sleep_thread函数
5.2.4 sysctl_debug_sleep_test函数
5.2.5 unload函数
5.2.6 试运行
5.3 内核事件处理器
5.4 callout
5.5 callout和竞态条件
5.6 任务队列
5.6.1 全局任务队列
5.6.2 任务队列管理例程
5.7 本章小结
第6章案例研究:虚拟空调制解调器
6.1 前期基础
6.2 代码分析
6.2.1 nmdm_modevent函数
6.2.2 nmdm_clone函数
6.2.3 nmdm_alloc函数
6.2.4 nmdm_outwakeup函数
6.2.5 nmdm_task_tty函数
6.2.6 nmdm_inwakeup函数
6.2.7 nmdm_modem函数
6.2.8 nmdm_param函数
6.2.9 nmdm_timeout函数
6.2.10 bits_per_char函数
6.2.11 试运行
6.3 本章小结
第7章Newbus和资源分配
7.1 自动配置与Newbus驱动程序
7.1.1 device_foo函数
7.1.2 设备方法表
7.1.3 DRIVER_MO-DULE宏
7.2 驱动程序示例
7.2.1 foo_pci_probe函数
7.2.2 foo_pci_attach函数
7.2.3 d_foo函数
7.2.4 foo_pci_detach函数
7.2.5 试运行
7.3 硬件资源管理
7.4 本章小结
第8章中断处理
8.1 注册中断处理程序
8.2 FreeBSD中的中断处理程序
8.3 实现中断处理程序
8.3.1 pint_identify函数
8.3.2 pint_probe函数
8.3.3 pint_attach函数
8.3.4 pint_detach函数
8.3.5 pint_open函数
8.3.6 pint_close函数
8.3.7 pint_write函数
8.3.8 pint_read函数
8.3.9 pint_intr函数
8.3.10 试运行
8.4 生成并口中断
8.5 本章小结
第9章案例研究:并口打印机驱动程序
9.1 代码分析
9.1.1 lpt_identify函数
9.1.2 lpt_probe函数
9.1.3 lpt_detect函数
9.1.4 lpt_port_test函数
9.1.5 lpt_attach函数
9.1.6 lpt_detach函数
9.1.7 lpt_open函数
9.1.8 lpt_read函数
9.1.9 lpt_write函数
9.1.10 lpt_intr函数
9.1.11 lpt_timeout函数
9.1.12 lpt_push_bytes函数
9.1.13 lpt_close函数
9.1.14 lpt_ioctl函数
9.1.15 lpt_request_ppbus函数
9.1.16 lpt_release_ppbus函数
9.2 本章小结
第10章管理与使用资源
10.1 输入输出端口与输入输出内存
10.1.1 从输入输出端口和输入输出内存读取数据
10.1.2 向输入输出端口和输入输出内存写入数据
10.1.3 流操作
10.2 内存栅栏
10.3 让一切配合起来
10.3.1 led_identify函数
10.3.2 led_probe函数
10.3.3 led_attach函数
10.3.4 led_detach函数
10.3.5 led_open函数
10.3.6 led_close函数
10.3.7 led_read函数
10.3.8 led_write函数
10.4 本章小结
第11章案例研究:智能平台管理接口驱动
11.1 代码分析
11.1.1 ipmi_pci_probe函数
11.1.2 ipmi_pci_match函数
11.1.3 ipmi_pci_attach函数
11.1.4 ipmi2_pci_probe函数
11.1.5 ipmi2_pci_attach函数
11.2 本章小结
第12章直接内存访问
12.1 实现DMA
12.1.1 初始化DMA数据传输
12.1.2 取消DMA
12.2 创建DMA标签
12.3 销毁DMA标签
12.4 DMA映射管理例程(第1部分)
12.5 将(DMA)缓冲区载入DMA映射
12.5.1 bus_dma_segment结构
12.5.2 bus_dmamap_load函数
12.5.3 bus_dmamap_load_mbuf函数
12.5.4 bus_dmamap_load_mbuf_sg函数
12.5.5 bus_dmamap_load_uio函数
12.5.6 bus_dmamap_unload函数
12.6 DMA映射管理例程(第2部分)
12.7 一个简单的例子
12.8 同步DMA缓冲区
12.9 本章小结
第13章存储驱动
13.1 disk结构
13.1.1 描述性字段
13.1.2 存储设备方法字段
13.1.3 必需的媒体特性字段
13.1.4 可选的媒体特性字段
13.1.5 驱动程序私有数据字段
13.2 disk结构管理例程
13.3 块输入输出结构
13.4 块输入输出队列
13.5 让一切配合起来
13.5.1 at45d_attach函数
13.5.2 at45d_delayed_attach函数
13.5.3 at45d_get_info函数
13.5.4 at45d_wait_for_device_ready函数
13.5.5 at45d_get_status函数
13.5.6 at45d_strategy函数
13.5.7 at45d_task函数
13.6 块输入输出完成例程
13.7 本章小结
第14章通用存取方法
14.1 CAM是如何工作的
14.2 一个(略为)简单的例子
14.2.1 mfip_attach函数
14.2.2 mfip_detach函数
14.2.3 mfip_action函数
14.2.4 mfip_poll函数
14.2.5 mfip_start函数
14.2.6 mfip_done函数
14.3 SIM注册例程
14.3.1 cam_simq_alloc函数
14.3.2 cam_sim_alloc函数
14.3.3 xpt_bus_register函数
14.4 动作例程
14.4.1 XPT_PATH_INQ常量
14.4.2 XPT_RESET_BUS常量
14.4.3 XPT_GET_TRAN_SETTINGS常量
14.4.4 XPT_SET_TRAN_SETTINGS常量
14.4.5 XPT_SCSI_IO常量
14.4.6 XPT_RESET_DEV常量
14.5 本章小结
第15章USB驱动
15.1 关于USB设备
15.2 关于USB设备的更多信息
15.3 USB配置结构
15.3.1 必需的字段
15.3.2 可选的字段
15.3.3 USB传送标志
15.4 USB传输(针对FreeBSD)
15.5 USB配置结构管理例程
15.6 USB方法结构
15.7 让一切配合起来
15.7.1 ulpt_probe函数
15.7.2 ulpt_attach函数
15.7.3 ulpt_detach函数
15.7.4 ulpt_open函数
15.7.5 ulpt_reset函数
15.7.6 unlpt_open函数
15.7.7 ulpt_close函数
15.7.8 ulpt_ioctl函数
15.7.9 ulpt_watchdog函数
15.7.10 ulpt_start_read函数
15.7.11 ulpt_stop_read函数
15.7.12 ulpt_start_write函数
15.7.13 ulpt_stop_write函数
15.7.14 ulpt_write_callback函数
15.7.15 ulpt_read_callback函数
15.7.16 ulpt_status_callback函数
15.8 本章小结
第16章网络驱动程序I:数据结构
16.1 网络接口结构
16.2 网络接口结构管理例程
16.2.1 ether_ifattach函数
16.2.2 ether_ifdetach函数
16.3 网络接口媒体结构
16.4 网络接口媒体结构管理例程
16.5 Hello, world
16.6 mbuf结构
16.7 消息驱动中断
16.8 实现MSI
16.9 MSI管理例程
16.10 本章小结
第17章网络驱动程序II:包的接收与传输
17.1 数据包接收
17.1.1 em_rxeof函数
17.1.2 em_handle_rx函数
17.2 数据包发送
17.2.1 em_start_locked函数
17.2.2 em_txeof函数
17.3 后数据包发送
17.4 本章小结
参考文献
^ 收 起
序言
前言
致谢
第1章构建并运行模块
1.1 设备驱动程序的类型
1.2 可加载内核模块
1.2.1 模块事件处理程序
1.2.2 DECLARE_MO-DULE宏
1.3 Hello, world!
1.4 编译与加载
1.5 字符设备驱动程序
1.5.1 d_foo函数
1.5.2 字符设备开关表
1.5.3 make_dev函数和des-troy_dev函数
1.6 实例:内存字符设备驱动程序
1.6.1 echo_write函数
1.6.2 echo_read函数
1.6.3 echo_modevent函数
1.6.4 DEV_MODULE宏
1.6.5 试运行
1.7 块设备驱动程序消失了
1.8 本章小结
第2章分配内存
2.1 内存管理例程
2.2 malloc_type结构
2.2.1 MALLOC_DE-FINE宏
2.2.2 MALLOC_DE-CLARE宏
2.3 让一切配合起来
2.4 连续物理内存管理例程
2.5 一个简单的例子
2.6 本章小结
第3章设备通信与控制
3.1 ioctl接口
3.2 定义ioctl命令
3.3 实现ioctl
3.3.1 echo_write函数
3.3.2 echo_set_buffer_size函数
3.3.3 echo_ioctl函数
3.3.4 echo_modevent函数
3.3.5 试运行
3.4 调用ioctl
3.5 sysctl
3.6 实现sysctl(第1部分)
3.7 sysctl上下文管理例程
3.8 创建动态的sysctl
3.8.1 SYSCTL_STATIC_CHILDREN宏
3.8.2 SYSCTL_CHILDREN宏
3.9 实现sysctl(第2部分)
3.9.1 sysctl_set_buffer_size函数
3.9.2 试运行
3.10 本章小结
第4章线程同步
4.1 一个简单的同步问题
4.2 一个更复杂的同步问题
4.2.1 race_new函数
4.2.2 race_find函数
4.2.3 race_destroy函数
4.2.4 race_ioctl函数
4.2.5 race_modevent函数
4.2.6 问题的根源
4.3 防止竞态条件
4.4 互斥锁
4.4.1 自旋互斥锁
4.4.2 休眠互斥锁
4.5 互斥锁管理例程
4.6 实现互斥锁
4.6.1 race_modevent函数
4.6.2 试运行
4.7 共享\/独占锁
4.8 共享\/独占锁管理例程
4.9 实现共享\/独占锁
4.10 读者\/写者锁
4.11 读者\/写者锁管理例程
4.12 条件变量
4.13 条件变量管理例程
4.14 一般性原则
4.14.1 避免在独占锁上递归
4.14.2 避免长时间占用独占锁
4.15 本章小结
第5章延迟执行
5.1 主动上下文切换\/休眠
5.2 实现休眠与条件变量
5.2.1 sleep_modevent函数
5.2.2 load函数
5.2.3 sleep_thread函数
5.2.4 sysctl_debug_sleep_test函数
5.2.5 unload函数
5.2.6 试运行
5.3 内核事件处理器
5.4 callout
5.5 callout和竞态条件
5.6 任务队列
5.6.1 全局任务队列
5.6.2 任务队列管理例程
5.7 本章小结
第6章案例研究:虚拟空调制解调器
6.1 前期基础
6.2 代码分析
6.2.1 nmdm_modevent函数
6.2.2 nmdm_clone函数
6.2.3 nmdm_alloc函数
6.2.4 nmdm_outwakeup函数
6.2.5 nmdm_task_tty函数
6.2.6 nmdm_inwakeup函数
6.2.7 nmdm_modem函数
6.2.8 nmdm_param函数
6.2.9 nmdm_timeout函数
6.2.10 bits_per_char函数
6.2.11 试运行
6.3 本章小结
第7章Newbus和资源分配
7.1 自动配置与Newbus驱动程序
7.1.1 device_foo函数
7.1.2 设备方法表
7.1.3 DRIVER_MO-DULE宏
7.2 驱动程序示例
7.2.1 foo_pci_probe函数
7.2.2 foo_pci_attach函数
7.2.3 d_foo函数
7.2.4 foo_pci_detach函数
7.2.5 试运行
7.3 硬件资源管理
7.4 本章小结
第8章中断处理
8.1 注册中断处理程序
8.2 FreeBSD中的中断处理程序
8.3 实现中断处理程序
8.3.1 pint_identify函数
8.3.2 pint_probe函数
8.3.3 pint_attach函数
8.3.4 pint_detach函数
8.3.5 pint_open函数
8.3.6 pint_close函数
8.3.7 pint_write函数
8.3.8 pint_read函数
8.3.9 pint_intr函数
8.3.10 试运行
8.4 生成并口中断
8.5 本章小结
第9章案例研究:并口打印机驱动程序
9.1 代码分析
9.1.1 lpt_identify函数
9.1.2 lpt_probe函数
9.1.3 lpt_detect函数
9.1.4 lpt_port_test函数
9.1.5 lpt_attach函数
9.1.6 lpt_detach函数
9.1.7 lpt_open函数
9.1.8 lpt_read函数
9.1.9 lpt_write函数
9.1.10 lpt_intr函数
9.1.11 lpt_timeout函数
9.1.12 lpt_push_bytes函数
9.1.13 lpt_close函数
9.1.14 lpt_ioctl函数
9.1.15 lpt_request_ppbus函数
9.1.16 lpt_release_ppbus函数
9.2 本章小结
第10章管理与使用资源
10.1 输入输出端口与输入输出内存
10.1.1 从输入输出端口和输入输出内存读取数据
10.1.2 向输入输出端口和输入输出内存写入数据
10.1.3 流操作
10.2 内存栅栏
10.3 让一切配合起来
10.3.1 led_identify函数
10.3.2 led_probe函数
10.3.3 led_attach函数
10.3.4 led_detach函数
10.3.5 led_open函数
10.3.6 led_close函数
10.3.7 led_read函数
10.3.8 led_write函数
10.4 本章小结
第11章案例研究:智能平台管理接口驱动
11.1 代码分析
11.1.1 ipmi_pci_probe函数
11.1.2 ipmi_pci_match函数
11.1.3 ipmi_pci_attach函数
11.1.4 ipmi2_pci_probe函数
11.1.5 ipmi2_pci_attach函数
11.2 本章小结
第12章直接内存访问
12.1 实现DMA
12.1.1 初始化DMA数据传输
12.1.2 取消DMA
12.2 创建DMA标签
12.3 销毁DMA标签
12.4 DMA映射管理例程(第1部分)
12.5 将(DMA)缓冲区载入DMA映射
12.5.1 bus_dma_segment结构
12.5.2 bus_dmamap_load函数
12.5.3 bus_dmamap_load_mbuf函数
12.5.4 bus_dmamap_load_mbuf_sg函数
12.5.5 bus_dmamap_load_uio函数
12.5.6 bus_dmamap_unload函数
12.6 DMA映射管理例程(第2部分)
12.7 一个简单的例子
12.8 同步DMA缓冲区
12.9 本章小结
第13章存储驱动
13.1 disk结构
13.1.1 描述性字段
13.1.2 存储设备方法字段
13.1.3 必需的媒体特性字段
13.1.4 可选的媒体特性字段
13.1.5 驱动程序私有数据字段
13.2 disk结构管理例程
13.3 块输入输出结构
13.4 块输入输出队列
13.5 让一切配合起来
13.5.1 at45d_attach函数
13.5.2 at45d_delayed_attach函数
13.5.3 at45d_get_info函数
13.5.4 at45d_wait_for_device_ready函数
13.5.5 at45d_get_status函数
13.5.6 at45d_strategy函数
13.5.7 at45d_task函数
13.6 块输入输出完成例程
13.7 本章小结
第14章通用存取方法
14.1 CAM是如何工作的
14.2 一个(略为)简单的例子
14.2.1 mfip_attach函数
14.2.2 mfip_detach函数
14.2.3 mfip_action函数
14.2.4 mfip_poll函数
14.2.5 mfip_start函数
14.2.6 mfip_done函数
14.3 SIM注册例程
14.3.1 cam_simq_alloc函数
14.3.2 cam_sim_alloc函数
14.3.3 xpt_bus_register函数
14.4 动作例程
14.4.1 XPT_PATH_INQ常量
14.4.2 XPT_RESET_BUS常量
14.4.3 XPT_GET_TRAN_SETTINGS常量
14.4.4 XPT_SET_TRAN_SETTINGS常量
14.4.5 XPT_SCSI_IO常量
14.4.6 XPT_RESET_DEV常量
14.5 本章小结
第15章USB驱动
15.1 关于USB设备
15.2 关于USB设备的更多信息
15.3 USB配置结构
15.3.1 必需的字段
15.3.2 可选的字段
15.3.3 USB传送标志
15.4 USB传输(针对FreeBSD)
15.5 USB配置结构管理例程
15.6 USB方法结构
15.7 让一切配合起来
15.7.1 ulpt_probe函数
15.7.2 ulpt_attach函数
15.7.3 ulpt_detach函数
15.7.4 ulpt_open函数
15.7.5 ulpt_reset函数
15.7.6 unlpt_open函数
15.7.7 ulpt_close函数
15.7.8 ulpt_ioctl函数
15.7.9 ulpt_watchdog函数
15.7.10 ulpt_start_read函数
15.7.11 ulpt_stop_read函数
15.7.12 ulpt_start_write函数
15.7.13 ulpt_stop_write函数
15.7.14 ulpt_write_callback函数
15.7.15 ulpt_read_callback函数
15.7.16 ulpt_status_callback函数
15.8 本章小结
第16章网络驱动程序I:数据结构
16.1 网络接口结构
16.2 网络接口结构管理例程
16.2.1 ether_ifattach函数
16.2.2 ether_ifdetach函数
16.3 网络接口媒体结构
16.4 网络接口媒体结构管理例程
16.5 Hello, world
16.6 mbuf结构
16.7 消息驱动中断
16.8 实现MSI
16.9 MSI管理例程
16.10 本章小结
第17章网络驱动程序II:包的接收与传输
17.1 数据包接收
17.1.1 em_rxeof函数
17.1.2 em_handle_rx函数
17.2 数据包发送
17.2.1 em_start_locked函数
17.2.2 em_txeof函数
17.3 后数据包发送
17.4 本章小结
参考文献
^ 收 起
Joseph Kong,资深FreeBSD设备驱动编程专家,具有20多年的计算机硬件、软件和驱动程序的设计与开发经验。对信息安全、操作系统理论、逆向工程和安全漏洞评估等技术也有非常深入的研究。此外,他还是一位知名的技术作家和技术顾问,著有《Designing BSD Rootkits》一书,担任过多本与设备驱动程序开发相关图书的技术审稿人,在权威计算机杂志上发表了多篇与设备驱动程序开发相关的文章,深受读者喜爱。
《深入理解FreeBSD设备驱动程序开发》内容全面,它不仅详细讲解了开发企业级iOS应用所需掌握的各项核心技术,以及各种工具和框架的用法,而且还系统讲解了企业级iOS应用开发的流程和方法;实战性强,不仅为各个知识点精心设计了能辅助读者理解的小案例,而且还有能指导读者进行完整实践的大案例,具备极强的可操作性。除此之外,本书还包含大量的开发技巧和最佳实践。
本书是FreeBSD设备驱动开发领域的经典著作,由具有20余年从业经验的资深FreeBSD设备驱动编程专家撰写,FreeBSD内核开发专家鼎力推荐!本书从宏观上讲解了FreeBSD设备驱动程序的框架结构,从微观上讲解了FreeBSD与驱动程序相关的各个接口和模块的作用及工作原理,而且还从源码实现的角度分析了设备驱动程序的内核机制。本书面向的读者是驱动开发程序员,更注重实践而非理论,通过真实的驱动开发案例为编写健壮高效的驱动程序提供优秀指导。
《深入理解FreeBSD设备驱动程序开发》共17章:第1章介绍了设备驱动程序的类型、可加载内核模块的编译与加载;第2章介绍了内核的分配与管理;第3章讲解了在用户空间下如何控制设备驱动程序并与之通信;第4章讨论了与多线程编程和并发执行有关的问题和解决方案;第5章解析了延迟代码执行和异步代码执行等机制并解释了这些机制的深层原因;第6章介绍了虚拟空调制解调器的实际应用;第7章讲解了FreeBSD用作管理系统中硬件设备的底层基本结构;第8章讨论FreeBSD的中断处理;第9章全面讲解了并口打印机的驱动程序;第10章讲解了端口映射和内存映射的输入输出;第11章分析了智能平台管理接口驱动程序;第12章讲解了如何在FreeBSD中使用直接内存访问机制;第13章介绍了如何管理存储设备,其中包括磁盘驱动器、闪存等;第14章概述通用存取方法;第15章讲解了如何管理USB设备;第16章描述了网络驱动程序所使用的数据结构,以及对消息驱动中断机制的介绍;第17章详细介绍了em(4)的包接收与传输组件。
^ 收 起
本书是FreeBSD设备驱动开发领域的经典著作,由具有20余年从业经验的资深FreeBSD设备驱动编程专家撰写,FreeBSD内核开发专家鼎力推荐!本书从宏观上讲解了FreeBSD设备驱动程序的框架结构,从微观上讲解了FreeBSD与驱动程序相关的各个接口和模块的作用及工作原理,而且还从源码实现的角度分析了设备驱动程序的内核机制。本书面向的读者是驱动开发程序员,更注重实践而非理论,通过真实的驱动开发案例为编写健壮高效的驱动程序提供优秀指导。
《深入理解FreeBSD设备驱动程序开发》共17章:第1章介绍了设备驱动程序的类型、可加载内核模块的编译与加载;第2章介绍了内核的分配与管理;第3章讲解了在用户空间下如何控制设备驱动程序并与之通信;第4章讨论了与多线程编程和并发执行有关的问题和解决方案;第5章解析了延迟代码执行和异步代码执行等机制并解释了这些机制的深层原因;第6章介绍了虚拟空调制解调器的实际应用;第7章讲解了FreeBSD用作管理系统中硬件设备的底层基本结构;第8章讨论FreeBSD的中断处理;第9章全面讲解了并口打印机的驱动程序;第10章讲解了端口映射和内存映射的输入输出;第11章分析了智能平台管理接口驱动程序;第12章讲解了如何在FreeBSD中使用直接内存访问机制;第13章介绍了如何管理存储设备,其中包括磁盘驱动器、闪存等;第14章概述通用存取方法;第15章讲解了如何管理USB设备;第16章描述了网络驱动程序所使用的数据结构,以及对消息驱动中断机制的介绍;第17章详细介绍了em(4)的包接收与传输组件。
^ 收 起
比价列表