新闻资讯
看你所看,想你所想

Linux驱动开发入门与实战

Linux驱动开发入门与实战

Linux驱动开发入门与实战

《Linux驱动开发入门与实战》本书由浅入深,全面、系统地介绍了Linux驱动开发技术,提供了大量实例供读者实战演练。另外,作者在实例讲解中详细分析了各种重要的理论知识,让读者能够举一反三。

基本介绍

  • 书名:Linux驱动开发入门与实战
  • 作者:郑强
  • ISBN:9787302239215
  • 页数:441
  • 出版社:清华大学出版社
  • 出版时间:2011 年1月
  • 开本:16
  • 丛书名:Linux典藏大系

内容简介

本书由浅入深,全面、系统地介绍了linux驱动开发技术,提供了大量实例供读者实战演练。另外,作者在实例讲解中详细分析了各种重要的理论知识,让读者能够举一反三。
本书共分3篇。第1篇介绍了linux驱动开发概述、嵌入式处理器和开发板、构建嵌入式驱动程式开发环境、构建嵌入式linux作业系统、第一个驱动程式、简单的字元设备驱动程式等内容;第2篇介绍了设备驱动中的并发控制、阻塞和同步机制、中断与时钟机制、记忆体访问等内容;第3篇介绍了设备驱动模型、rtc实时时钟驱动程式、看门狗驱动程式、iic设备驱动程式、lcd设备驱动程式、触控萤幕设备驱动程式、输入子系统驱动程式、块设备驱动程式、usb设备驱动程式等内容。
作者专门为本书重点内容录製了教学视频,以提高读者的学习效率。另外,本书还赠送了大量的linux拓展学习视频。这些视频和本书原始码需要读者自行下载,下载地址见封面提示。
本书重点突出,涉及面广,实用性强,从基本知识到核心原理,再到实例开发,几乎涉及linux驱动开发的所有重要知识。本书适合所有想学习linux驱动开发的入门人员阅读,也适合作为驱动工程师的参考书,对于linux驱动开发的专业开发人员也有很高的参考价值。

目录

第1篇 linux驱动开发基础
第1章 linux驱动开发概述 2
1.1 linux设备驱动的基本概念 2
1.1.1 设备驱动程式概述 2
1.1.2 设备驱动程式的作用 2
1.1.3 设备驱动的分类 3
1.2 linux作业系统与驱动的关係 4
1.3 linux驱动程式开发 4
1.3.1 用户态和核心态 5
1.3.2 模组机制 5
1.3.3 编写设备驱动程式需要了解的知识 6
1.4 编写设备驱动程式的注意事项 6
1.4.1 应用程式开发与驱动程式开发的差异 6
1.4.2 gun c开发驱动程式 7
1.4.3 不能使用c库开发驱动程式 7
1.4.4 没有记忆体保护机制 7
1.4.5 小核心栈 8
1.4.6 重视可移植性 8
1.5 linux驱动的发展趋势 9
1.5.1 linux驱动的发展 9
.1.5.2 驱动的套用 9
1.5.3 相关学习资源 9
1.6 小结 10
第2章 嵌入式处理器和开发板简介 11
2.1 处理器的选择 11
2.1.1 处理器简述 11
2.1.2 处理器的种类 11
2.2 arm处理器 13
2.2.1 arm处理器简介 14
2.2.2 arm处理器系列 14
2.2.3 arm处理器的套用 16
2.2.4 arm处理器的选型 16
2.2.5 arm处理器选型举例 19
2.3 s3c2440开发板 20
2.3.1 s3c2440开发板简介 20
2.3.2 s3c2440开发板的特性 20
2.4 小结 22
第3章 构建嵌入式驱动程式开发环境 23
3.1 虚拟机和linux安装 23
3.1.1 在windows上安装虚拟机 23
3.1.2 在虚拟机上安装linux 27
3.1.3 设定已分享资料夹 28
3.2 代码阅读工具source insight 29
3.2.1 source insight简介 30
3.2.2 阅读原始码 30
3.3 小结 33
第4章 构建嵌入式linux作业系统 34
4.1 linux作业系统的介绍 34
4.1.1 linux作业系统 34
4.1.2 linux作业系统的优点 35
4.2 linux核心子系统 36
4.2.1 进程管理 36
4.2.2 记忆体管理 37
4.2.3 档案系统 37
4.2.4 设备管理 37
4.2.5 网路功能 38
4.3 linux原始码结构分析 38
4.3.1 arch目录 38
4.3.2 drivers目录 39
4.3.3 fs目录 39
4.3.4 其他目录 40
4.4 核心配置选项 41
4.4.1 配置编译过程 41
4.4.2 常规配置 42
4.4.3 模组配置 44
4.4.4 块设备层配置 44
4.4.5 cpu类型和特性配置 45
4.4.6 电源管理配置 47
4.4.7 汇流排配置 49
4.4.8 网路配置 50
4.4.9 设备驱动配置 53
4.4.10 档案系统配置 60
4.5 嵌入式档案系统基础知识 62
4.5.1 嵌入式档案系统 62
4.5.2 嵌入式系统的存储介质 63
4.5.3 jffs档案系统 64
4.5.4 yaffs档案系统 64
4.6 构建根档案系统 64
4.6.1 根档案系统概述 65
4.6.2 linux根档案系统目录结构 65
4.6.3 busybox构建根档案系统 66
4.7 小结 71
第5章 构建第一个驱动程式 72
5.1 开发环境配置之核心升级 72
5.1.1 为什幺升级核心 72
5.1.2 核心升级 73
5.1.3 make menconfig的注意事项 75
5.2 hello world驱动程式 77
5.2.1 驱动模组的组成 77
5.2.2 hello world模组 78
5.2.3 编译hello world模组 79
5.2.4 模组的操作 81
5.2.5 hello world模组载入后档案系统的变化 82
5.3 模组参数和模组之间通信 83
5.3.1 模组参数 83
5.3.2 模组的档案格式elf 83
5.3.3 模组之间的通信 84
5.3.4 模组之间的通信实例 85
5.4 将模组加入核心 88
5.4.1 向核心添加模组 88
5.4.2 kconfig 88
5.4.3 kconfig的语法 89
5.4.4 套用实例:在核心中新增加add_sub模组 92
5.4.5 对add_sub模组进行配置 94
5.5 小结 95
第6章 简单的字元设备驱动程式 96
6.1 字元设备驱动程式框架 96
6.1.1 字元设备和块设备 96
6.1.2 主设备号和次设备号 97
6.1.3 申请和释放设备号 98
6.2 初识cdev结构 99
6.2.1 cdev结构体 99
6.2.2 file_operations结构体 101
6.2.3 cdev和file_operations结构体的关係 102
6.2.4 inode结构体 103
6.3 字元设备驱动的组成 103
6.3.1 字元设备载入和卸载函式 103
6.3.2 file_operations结构体和其成员函式 104
6.3.3 驱动程式与应用程式的数据交换 105
6.3.4 字元设备驱动程式组成小结 106
6.4 virtualdisk字元设备驱动 106
6.4.1 virtualdisk的头档案、宏和设备结构体 106
6.4.2 载入和卸载驱动程式 107
6.4.3 cdev的初始化和注册 108
6.4.4 打开和释放函式 109
6.4.5 读写函式 110
6.4.6 seek()函式 111
6.4.7 ioctl()函式 113
6.5 小结 113
第2篇 linux驱动开发核心技术
第7章 设备驱动中的并发控制 116
7.1 并发与竞争 116
7.2 原子变数操作 116
7.2.1 原子变数操作 116
7.2.2 原子整型操作 117
7.2.3 原子位操作 119
7.3 自旋锁 120
7.3.1 自旋锁概述 120
7.3.2 自旋锁的使用 120
7.3.3 自旋锁的使用注意事项 122
7.4 信号量 122
7.4.1 信号量概述 122
7.4.2 信号量的实现 123
7.4.3 信号量的使用 123
7.4.4 自旋锁与信号量的对比 125
7.5 完成量 126
7.5.1 完成量概述 126
7.5.2 完成量的实现 126
7.5.3 完成量的使用 127
7.6 小结 128
第8章 设备驱动中的阻塞和同步机制 129
8.1 阻塞和非阻塞 129
8.2 等待伫列 130
8.2.1 等待伫列概述 130
8.2.3 等待伫列的实现 130
8.2.3 等待伫列的使用 131
8.3 同步机制实验 132
8.3.1 同步机制设计 132
8.3.2 实验验证 136
8.4 小结 137
第9章 中断与时钟机制 138
9.1 中断简述 138
9.1.1 中断的概念 138
9.1.2 中断的巨观分类 139
9.1.3 中断产生的位置分类 140
9.1.4 同步和异步中断 140
9.1.5 中断小结 140
9.2 中断的实现过程 141
9.2.1 中断信号线(irq) 141
9.2.2 中断控制器 141
9.2.3 中断处理过程 142
9.2.4 中断的安装与释放 142
9.3 按键中断实例 144
9.3.1 按键设备原理图 144
9.3.2 有暂存器设备和无暂存器设备 144
9.3.3 按键设备相关连线埠暂存器 145
9.4 按键中断实例程式分析 147
9.4.1 按键驱动程式组成 147
9.4.2 初始化函式s3c2440_buttons_init() 147
9.4.3 中断处理函式isr_button() 148
9.4.4 退出函式s3c2440_buttons_exit() 149
9.5 时钟机制 150
9.5.1 时间度量 150
9.5.2 时间延时 150
9.6 小结 151
第10章 内外存访问 152
10.1 记忆体分配 152
10.1.1 kmalloc()函式 152
10.1.2 vmalloc()函式 153
10.1.3 后备高速快取 155
10.2 页面分配 156
10.2.1 记忆体分配 156
10.2.2 物理地址和虚拟地址之间的转换 159
10.3 设备i/o连线埠的访问 160
10.3.1 linux i/o连线埠读写函式 160
10.3.2 i/o记忆体读写 160
10.3.3 使用i/o连线埠 164
10.4 小结 166
第3篇 linux驱动开发实用实战
第11章 设备驱动模型 168
11.1 设备驱动模型概述 168
11.1.1 设备驱动模型的功能 168
11.1.2 sysfs档案系统 169
11.1.3 sysfs档案系统的目录结构 170
11.2 设备驱动模型的核心数据结构 171
11.2.1 kobject结构体 171
11.2.2 设备属性kobj_type 175
11.3 注册kobject到sysfs中的实例 179
11.3.1 设备驱动模型结构 179
11.3.2 kset集合 180
11.3.3 kset与kobject的关係 181
11.3.4 kset相关的操作函式 182
11.3.5 注册kobject到sysfs中的实例 183
11.3.6 实例测试 187
11.4 设备驱动模型的三大组件 188
11.4.1 汇流排 188
11.4.2 汇流排属性和汇流排方法 192
11.4.3 设备 194
11.4.4 驱动 196
11.5 小结 198
第12章 rtc实时时钟驱动 199
12.1 rtc实时时钟硬体原理 199
12.1.1 rtc实时时钟 199
12.1.2 rtc实时时钟的功能 199
12.1.2 rtc实时时钟的工作原理 201
12.2 rtc实时时钟架构 205
12.2.1 载入卸载函式 205
12.2.2 rtc实时时钟的平台驱动 206
12.2.3 rtc驱动探测函式 207
12.2.4 rtc实时时钟的使能函式s3c_rtc_enable() 210
12.2.5 rtc实时时钟设定频率函式s3c_rtc_setfreq() 211
12.2.6 rtc设备注册函式 rtc_device_register() 212
12.3 rtc档案系统接口 214
12.3.1 档案系统接口rtc_class_ops 214
12.3.2 rtc实时时钟打开函式s3c_rtc_open() 215
12.3.3 rtc实时时钟关闭函式s3c_rtc_release() 216
12.3.4 rtc实时时钟获得时间函式s3c_rtc_gettime() 216
12.3.5 rtc实时时钟设定时间函式s3c_rtc_settime() 218
12.3.6 rtc驱动探测函式s3c_rtc_getalarm() 219
12.3.7 rtc实时时钟设定报警时间函式s3c_rtc_setalarm() 220
12.3.8 rtc设定脉冲中断使能函式s3c_rtc_setpie() 222
12.3.9 rtc时钟脉冲中断判断函式s3c_rtc_proc() 222
12.4 小结 223
第13章 看门狗驱动程式 224
13.1 看门狗硬体原理 224
13.1.1 看门狗 224
13.1.2 看门狗工作原理 224
13.2 平台设备模型 226
13.2.1 平台设备模型 226
13.2.2 平台设备 227
13.2.3 平台设备驱动 229
13.2.4 平台设备驱动的注册和注销 230
13.2.5 混杂设备 231
13.2.6 混杂设备的注册和注销 232
13.3 看门狗设备驱动程式分析 232
13.3.1 看门狗驱动程式的一些变数定义 232
13.3.2 看门狗模组的载入和卸载函式 233
13.3.3 看门狗驱动程式探测函式 234
13.3.4 设定看门狗复位时间函式s3c2410wdt_set_heartbeat() 235
13.3.5 看门狗的开始函式s3c2410wdt_start()和停止函式
s3c2410wdt_ stop() 237
13.3.6 看门狗驱动程式移除函式s3c2410wdt_remove() 238
13.3.7 平台设备驱动s3c2410wdt_driver中的其他重要函式 238
13.3.8 混杂设备的file_operations中的函式 239
13.3.9 看门狗中断处理函式s3c2410wdt_irq() 242
13.4 小结 243
第14章 iic设备驱动程式 244
14.1 iic设备的汇流排及其协定 244
14.1.1 iic汇流排的特点 244
14.1.2 iic汇流排的信号类型 245
14.1.3 iic汇流排的数据传输 245
14.2 iic设备的硬体原理 246
14.3 iic设备驱动程式的层次结构 247
14.3.1 iic设备驱动的概述 248
14.3.2 iic设备层 248
14.3.3 i2c_driver和i2c_client的关係 251
14.3.4 iic汇流排层 251
14.3.5 iic设备层和汇流排层的关係 253
14.3.6 写iic设备驱动的步骤 253
14.4 iic子系统的初始化 254
14.4.1 iic子系统初始化函式i2c_init() 254
14.4.2 iic子系统退出函式i2c_exit () 254
14.5 适配器驱动程式 255
14.5.1 s3c2440对应的适配器结构体 255
14.5.2 iic适配器载入函式i2c_add_adapter() 257
14.5.3 idr机制 257
14.5.4 适配器卸载函式i2c_del_adapter() 260
14.5.5 iic汇流排通信方法s3c24xx_i2c_algorithm结构体 260
14.5.6 适配器的传输函式s3c24xx_i2c_doxfer() 262
14.5.7 适配器的中断处理函式s3c24xx_i2c_irq() 265
14.5.8 位元组传输函式i2s_s3c_irq_nextbyte() 267
14.5.9 适配器传输停止函式s3c24xx_i2c_stop() 269
14.5.10 中断处理函式的一些辅助函式 270
14.6 iic设备层驱动程式 270
14.6.1 iic设备驱动模组载入和卸载 271
14.6.2 探测函式s3c24xx_i2c_probe() 272
14.6.3 移除函式s3c24xx_i2c_remove() 274
14.6.4 控制器初始化函式s3c24xx_i2c_init() 275
14.6.5 设定控制器数据传送频率函式s3c24xx_i2c_clockrate() 276
14.7 小结 278
第15章 lcd设备驱动程式 279
15.1 framebuffer概述 279
15.1.1 framebuffer的概念 279
15.1.2 framebuffer与应用程式的互动 280
15.1.3 framebuffer显示原理 280
15.1.4 lcd显示原理 281
15.2 framebuffer的结构分析 281
15.2.1 framebuffer架构和其关係 281
15.2.2 framebuffer驱动程式的实现 282
15.2.3 framebuffer架构及其关係 283
15.3 lcd驱动程式分析 288
15.3.1 lcd模组的载入和卸载函式 288
15.3.2 lcd驱动程式的平台数据 290
15.3.3 lcd模组的探测函式 291
15.3.4 移除函式 295
15.4 小结 296
第16章 触控萤幕设备驱动程式 297
16.1 触控萤幕设备工作原理 297
16.1.1 触控萤幕设备概述 297
16.1.2 触控萤幕设备的类型 297
16.1.3 电阻式触控萤幕 298
16.2 触控萤幕设备硬体结构 298
16.2.1 s3c2440触控萤幕接口概述 298
16.2.2 s3c2440触控萤幕接口的工作模式 299
16.2.3 s3c2440触控萤幕设备暂存器 300
16.3 触控萤幕设备驱动程式分析 303
16.3.1 触控萤幕设备驱动程式组成 303
16.3.2 s3c2440触控萤幕驱动模组的载入和卸载函式 304
16.3.3 s3c2440触控萤幕驱动模组的探测函式 305
16.3.4 触控萤幕设备配置 308
16.3.5 触控萤幕设备中断处理函式 309
16.3.6 s3c2440触控萤幕驱动模组的remove()函式 314
16.4 测试触控萤幕驱动程式 314
16.5 小结 316
第17章 输入子系统设计 317
17.1 input子系统入门 317
17.1.1 简单的实例 317
17.1.2 注册函式input_register_device() 319
17.1.3 向子系统报告事件 323
17.2 handler注册分析 328
17.2.1 输入子系统的组成 328
17.2.2 input_handler结构体 328
17.2.3 注册input_handler 329
17.2.4 input_handle结构体 330
17.2.5 注册input_handle 331
17.3 input子系统 332
17.3.1 子系统初始化函式input_init() 333
17.3.2 档案打开函式input_open_file() 333
17.4 evdev输入事件驱动分析 335
17.4.1 evdev的初始化 335
17.4.2 evdev设备的打开 337
17.5 小结 340
第18章 块设备驱动程式 341
18.1 块设备简介 341
18.1.1 块设备总体概述 341
18.1.2 块设备的结构 342
18.2 块设备驱动程式的架构 344
18.2.1 块设备载入过程 344
18.2.2 块设备卸载过程 345
18.3 通用块层 346
18.3.1 通用块层 346
18.3.2 alloc_disk()函式对应的gendisk结构体 346
18.3.3 块设备的注册和注销 349
18.3.4 请求伫列 349
18.3.5 设定gendisk属性中的block_device_operations结构体 350
18.4 不使用请求伫列的块设备驱动 351
18.4.1 不使用请求伫列的块设备驱动程式的组成 352
18.4.2 宏定义和全局变数 352
18.4.3 载入函式 353
18.4.4 卸载函式 355
18.4.5 自定义请求处理函式 355
18.4.6 驱动的测试 356
18.5 i/o调度器 359
18.5.1 数据从记忆体到磁碟的过程 359
18.5.2 块i/o请求(bio) 360
18.5.3 请求结构(request) 363
18.5.4 请求伫列(request_queue) 364
18.5.5 请求伫列、请求结构、bio等之间的关係 365
18.5.6 四种调度算法 365
18.6 自定义i/o调度器 367
18.6.1 virtual_blkdev块设备的缺陷 367
18.6.2 指定noop调度器 368
18.6.3 virtual_blkdev的改进实例 368
18.6.4 编译和测试 369
18.7 脱离i/o调度器 370
18.7.1 请求伫列中的bio处理函式 370
18.7.2 通用块层函式调用关係 371
18.7.3 对virtual_blkdev块设备的改进 373
18.7.4 编译和测试 376
18.8 块设备的物理结构 377
18.8.1 为virtual_blkdev块设备添加分区 377
18.8.2 对新的virtual_blkdev代码的分析 378
18.8.3 编译和测试 379
18.8.4 分区数的计算 381
18.8.5 设定virtual_blkdev的结构 382
18.8.6 编译和测试 384
18.9 小结 387
第19章 usb设备驱动程式 389
19.1 usb概述 389
19.1.1 usb概念 389
19.1.2 usb的特点 390
19.1.3 usb汇流排拓扑结构 391
19.1.4 usb驱动总体架构 391
19.2 usb设备驱动模型 395
19.2.1 usb驱动初探 395
19.2.2 usb设备驱动模型 397
19.2.3 usb驱动结构usb_driver 399
19.3 usb设备驱动程式 404
19.3.1 usb设备驱动载入和卸载函式 404
19.3.2 探测函式probe()的参数usb_interface 405
19.3.3 usb协定中的设备 406
19.3.4 端点的传输方式 412
19.3.5 设定 413
19.3.6 探测函式storage_probe() 415
19.4 获得usb设备信息 418
19.4.1 设备关联函式associate_dev() 418
19.4.2 获得设备信息函式get_device_info() 419
19.4.3 得到传输协定get_transport()函式 420
19.4.4 获得协定信息函式get_protocol() 421
19.4.5 获得管道信息函式get_pipes() 422
19.5 资源的初始化 425
19.5.1 storage_probe()函式调用过程 425
19.5.2 资源获取函式usb_stor_acquire_resources() 426
19.5.3 usb请求块(urb) 427
19.6 控制子执行绪 430
19.6.1 控制执行绪 431
19.6.2 扫描执行绪usb_stor_scan_thread() 433
19.6.3 获得lun函式usb_stor_bulk_max_lun() 434
19.7 小结 441

相关推荐

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com