《深入理解FreeBSD设备驱动程序开发》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(加)约瑟夫(Joseph,K·)
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2013
  • ISBN:9787111411574
  • 页数:316 页
图书介绍:本书共分17章。第1章综述设备驱动程序编程的基本概念和术语等。第2章描述FreeBSD的内核内存管理例程。第3章介绍在用户空间下如何控制设备驱动程序并与之通信。第4章讨论与多线程编程和并发执行有关的问题和解决方案。第5章描述延迟代码执行和异步代码执行等机制并解释了这些机制的深层原因。第6章介绍虚拟空调制解调器的实际应用。第7章介绍FreeBSD用作管理系统中硬件设备的底层基本结构。第8章讨论FreeBSD的中断处理。第9章全面介绍并口打印机驱动程序。第10章涉及端口映射输入输出和内存映射输入输出。第11章分析智能平台管理接口驱动程序。第12章讲解如何在FreeBSD中使用直接内存访问机制。第13章介绍如何管理存储设备,其中包括磁盘驱动器、闪存等。第14章概述通用存取方法,借助CAM可以管理主机总线适配器(HBA)。第15章介绍如何管理USB设备。第16章描述网络驱动程序所使用的数据结构,以及对消息驱动中断机制的介绍。第17章详细介绍em(4)的包接收与传输组件。

第1章 构建并运行模块 1

1.1 设备驱动程序的类型 1

1.2 可加载内核模块 2

1.2.1 模块事件处理程序 2

1.2.2 DECLARE_MO-DULE宏 3

1.3 Hello,world! 5

1.4 编译与加载 6

1.5 字符设备驱动程序 7

1.5.1 d_foo函数 8

1.5.2 字符设备开关表 8

1.5.3 make_dev函数和des-troy_dev函数 9

1.6 实例:内存字符设备驱动程序 10

1.6.1 echo_write函数 13

1.6.2 echo_read函数 14

1.6.3 echo_modevent函数 14

1.6.4 DEV_MODULE宏 15

1.6.5 试运行 16

1.7 块设备驱动程序消失了 16

1.8 本章小结 17

第2章 分配内存 18

2.1 内存管理例程 18

2.2 malloc_type结构 19

2.2.1 MALLOC_DE-FINE宏 20

2.2.2 MALLOC_DE-CLARE宏 20

2.3 让一切配合起来 21

2.4 连续物理内存管理例程 23

2.5 一个简单的例子 24

2.6 本章小结 26

第3章 设备通信与控制 27

3.1 ioctl接口 27

3.2 定义ioctl命令 29

3.3 实现ioctl 30

3.3.1 echo_write函数 34

3.3.2 echo_set_buffer_size函数 35

3.3.3 echo_ioctl函数 36

3.3.4 echo_modevent函数 37

3.3.5 试运行 38

3.4 调用ioctl 38

3.5 sysctl 41

3.6 实现sysctl(第1部分) 41

3.7 sysctl上下文管理例程 45

3.8 创建动态的sysctl 45

3.8.1 SYSCTL_STATICC_CHILDREN宏 48

3.8.2 SYSCTL_CHILD-REN宏 48

3.9 实现sysctl(第2部分) 48

3.9.1 sysctl_set_buffer_size函数 52

3.9.2 试运行 53

3.10 本章小结 53

第4章 线程同步 54

4.1 一个简单的同步问题 54

4.2 一个更复杂的同步问题 55

4.2.1 race_new函数 59

4.2.2 race_find函数 59

4.2.3 race_destroy函数 60

4.2.4 race_ioctl函数 60

4.2.5 race_modevent函数 61

4.2.6 问题的根源 62

4.3 防止竞态条件 66

4.4 互斥锁 67

4.4.1 自旋互斥锁 67

4.4.2 休眠互斥锁 67

4.5 互斥锁管理例程 68

4.6 实现互斥锁 70

4.6.1 race_modevent函数 73

4.6.2 试运行 74

4.7 共享/独占锁 75

4.8 共享/独占锁管理例程 75

4.9 实现共享/独占锁 77

4.10 读者/写者锁 81

4.11 读者/写者锁管理例程 81

4.12 条件变量 83

4.13 条件变量管理例程 83

4.14 一般性原则 85

4.14.1 避免在独占锁上递归 85

4.14.2 避免长时间占用独占锁 85

4.15 本章小结 85

第5章 延迟执行 86

5.1 主动上下文切换/休眠 86

5.2 实现休眠与条件变量 88

5.2.1 sleep_modevent函数 92

5.2.2 load函数 92

5.2.3 sleep_thread函数 93

5.2.4 sysctl_debug sleep_test函数 94

5.2.5 unload函数 95

5.2.6 试运行 96

5.3 内核事件处理器 96

5.4 callout 98

5.5 callout和竞态条件 100

5.6 任务队列 101

5.6.1 全局任务队列 101

5.6.2 任务队列管理例程 102

5.7 本章小结 103

第6章 案例研究:虚拟空调制解调器 104

6.1 前期基础 104

6.2 代码分析 105

6.2.1 nmdm_modevent函数 107

6.2.2 nmdm_clone函数 108

6.2.3 nmdm_alloc函数 110

6.2.4 nmdm_outwakeup函数 111

6.2.5 nmdm_task_tty函数 112

6.2.6 nmdm_inwakeup函数 113

6.2.7 nmdm_modem函数 114

6.2.8 nmdm_param函数 115

6.2.9 nmdm_timeout函数 116

6.2.10 bits_per_char函数 117

6.2.11 试运行 118

6.3 本章小结 118

第7章 Newbus和资源分配 119

7.1 自动配置与Newbus驱动程序 119

7.1.1 device_foo函数 119

7.1.2 设备方法表 121

7.1.3 DRIVER_MO-DULE宏 121

7.2 驱动程序示例 122

7.2.1 foo_pci_probe函数 125

7.2.2 foo_pci_attach函数 126

7.2.3 d_foo函数 127

7.2.4 foo_pci_detach函数 127

7.2.5 试运行 128

7.3 硬件资源管理 128

7.4 本章小结 130

第8章 中断处理 131

8.1 注册中断处理程序 131

8.2 FreeBSD中的中断处理程序 132

8.3 实现中断处理程序 133

8.3.1 pint_identify函数 138

8.3.2 pint_probe函数 138

8.3.3 pint_attach函数 139

8.3.4 pint_detach函数 140

8.3.5 pint_open函数 140

8.3.6 pint_close函数 142

8.3.7 pint_write函数 142

8.3.8 pint_read函数 143

8.3.9 pint_intr函数 144

8.3.10 试运行 144

8.4 生成并口中断 145

8.5 本章小结 146

第9章 案例研究:并口打印机驱动程序 147

9.1 代码分析 147

9.1.1 lpt_identify函数 152

9.1.2 lpt_probe函数 152

9.1.3 lpt_detect函数 152

9.1.4 lpt_port_test函数 153

9.1.5 lpt_attach函数 154

9.1.6 lpt_detach函数 156

9.1.7 lpt_open函数 157

9.1.8 lpt_read函数 159

9.1.9 lpt_write函数 161

9.1.10 lpt_intr函数 163

9.1.11 lpt_timeout函数 164

9.1.12 lpt_push_bytes函数 165

9.1.13 lpt_close函数 166

9.1.14 lpt_ioctl函数 167

9.1.15 lpt_request_ppbus函数 169

9.1.16 lpt_release_ppbus函数 169

9.2 本章小结 170

第10章 管理与使用资源 171

10.1 输入输出端口与输入输出内存 171

10.1.1 从输入输出端口和输入输出内存读取数据 171

10.1.2 向输入输出端口和输入输出内存写入数据 173

10.1.3 流操作 175

10.2 内存栅栏 178

10.3 让一切配合起来 179

10.3.1 led_identify函数 183

10.3.2 led_probe函数 184

10.3.3 led_attach函数 184

10.3.4 led_detach函数 185

10.3.5 led_open函数 186

10.3.6 led_close函数 186

10.3.7 led_read函数 187

10.3.8 led_write函数 188

10.4 本章小结 188

第11章 案例研究:智能平台管理接口驱动 189

11.1 代码分析 189

11.1.1 ipmi_pci_probe函数 191

11.1.2 ipmi_pci_match函数 192

11.1.3 ipmi_pci_attach函数 192

11.1.4 ipmi2_pci_probe函数 195

11.1 ipmi2_pci_attach函数 195

11.2 本章小结 197

第12章 直接内存访问 198

12.1 实现DMA 198

12.1.1 初始化DMA数据传输 200

12.1.2 取消DMA 201

12.2 创建DMA标签 201

12.3 销毁DMA标签 203

12.4 DMA映射管理例程(第1部分) 204

12.5 将(DMA)缓冲区载入DMA映射 204

12.5.1 bus_dma_segment结构 205

12.5.2 bus_dmamap_load函数 205

12.5.3 bus_dmamap_load_mbuf函数 206

12.5.4 bus_dmamap_load_mbuf_sg函数 207

12.5.5 bus_dmamap_load_uio函数 207

12.5.6 bus_dmamap_unload函数 207

12.6 DMA映射管理例程(第2部分) 207

12.7 一个简单的例子 208

12.8 同步DMA缓冲区 210

12.9 本章小结 210

第13章 存储驱动 211

13.1 disk结构 211

13.1.1 描述性字段 212

13.1.2 存储设备方法字段 212

13.1.3 必需的媒体特性字段 213

13.1.4 可选的媒体特性字段 213

13.1.5 驱动程序私有数据字段 213

13.2 disk结构管理例程 214

13.3 块输入输出结构 214

13.4 块输入输出队列 216

13.5 让一切配合起来 217

13.5.1 at45d_attach函数 222

13.5.2 at45d_delayed_attach函数 223

13.5.3 at45d_get_info函数 224

13.5.4 at45d_wait_for_device_ready函数 224

13.5.5 at45d_get_status函数 225

13.5.6 at45d_strategy函数 225

13.5.7 at45d_task函数 226

13.6 块输入输出完成例程 228

13.7 本章小结 228

第14章 通用存取方法 229

14.1 CAM是如何工作的 230

14.2 一个(略为)简单的例子 231

14.2.1 mfip_attach函数 239

14.2.2 mfip_detach函数 240

14.2.3 mfip_action函数 240

14.2.4 mfip_poll函数 243

14.2.5 mfip_start函数 243

14.2.6 mfip_done函数 245

14.3 SIM注册例程 246

14.3.1 cam_simq_alloc函数 247

14.3.2 cam_sim_alloc函数 247

14.3.3 xpt_bus_register函数 248

14.4 动作例程 248

14.4.1 XPT_PATH_INQ常量 248

14.4.2 XPT_RESET_BUS常量 250

14.4.3 XPT_GET_TRAN_SETTINGS常量 251

14.4.4 XPT_SET_TRAN_SETTINGS常量 254

14.4.5 XPT_SCSI_IO常量 255

14.4.6 XPT_RESET_DEV常量 260

14.5 本章小结 261

第15章 USB驱动 262

15.1 关于USB设备 262

15.2 关于USB设备的更多信息 263

15.3 USB配置结构 264

15.3.1 必需的字段 265

15.3.2 可选的字段 265

15.3.3 USB传送标志 266

15.4 USB传输(针对FreeBSD) 267

15.5 USB配置结构管理例程 269

15.6 USB方法结构 270

15.7 让一切配合起来 271

15.7.1 ulpt_probe函数 276

15.7.2 ulpt_attach函数 276

15.7.3 ulpt_detach函数 278

15.7.4 ulpt_open函数 279

15.7.5 ulpt_reset函数 279

15.7.6 unlpt_open函数 280

15.7.7 ulpt_close函数 281

15.7.8 ulpt_ioctl函数 282

15.7.9 ulpt_watchdog函数 282

15.7.10 ulpt_start_read函数 282

15.7.11 ulpt_stop_read函数 283

15.7.12 ulpt_start_write函数 283

15.7.13 ulpt_stop_write函数 284

15.7.14 ulpt_write_callback函数 284

15.7.15 ulpt_read_callback函数 285

15.7.16 ulpt_status_callback函数 287

15.8 本章小结 288

第16章 网络驱动程序Ⅰ:数据结构 289

16.1 网络接口结构 289

16.2 网络接口结构管理例程 292

16.2.1 ether_ifattach函数 293

16.2.2 ether_ifdetach函数 294

16.3 网络接口媒体结构 295

16.4 网络接口媒体结构管理例程 295

16.5 Hello,world 297

16.6 mbuf结构 300

16.7 消息驱动中断 300

16.8 实现MSI 301

16.9 MSI管理例程 303

16.10 本章小结 304

第17章 网络驱动程序Ⅱ:包的接收与传输 305

17.1 数据包接收 305

17.1.1 em_rxeof函数 305

17.1.2 em_handle_rx函数 309

17.2 数据包发送 310

17.2.1 em_start_locked函数 310

17.2.2 em_txeof函数 311

17.3 后数据包发送 314

17.4 本章小结 315

参考文献 316