图书介绍
Linux设备驱动开发详解 第2版PDF|Epub|txt|kindle电子书版本网盘下载
![Linux设备驱动开发详解 第2版](https://www.shukui.net/cover/34/30284581.jpg)
- 宋宝华编著 著
- 出版社: 北京:人民邮电出版社
- ISBN:9787115236579
- 出版时间:2010
- 标注页数:632页
- 文件大小:235MB
- 文件页数:653页
- 主题词:UNIX操作系统-程序设计
PDF下载
下载说明
Linux设备驱动开发详解 第2版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1篇 Linux设备驱动入门2
第1章 Linux设备驱动概述及开发环境构建2
1.1 设备驱动的作用3
1.2 无操作系统时的设备驱动3
1.3 有操作系统时的设备驱动5
1.4 Linux设备驱动6
1.4.1 设备的分类及特点6
1.4.2 Linux设备驱动与整个软硬件系统的关系7
1.4.3 Linux设备驱动的重点、难点8
1.5 Linux设备驱动开发环境构建8
1.5.1 PC上的Linux环境8
1.5.2 LDD6410开发板11
1.5.3 工具链安装13
1.5.4 主机端nfs和tftp服务安装14
1.5.5 源代码阅读和编辑14
1.6 设备驱动Hello World:LED驱动15
1.6.1 无操作系统时的LED驱动15
1.6.2 Linux下的LED驱动16
1.7 全书结构19
第2章 驱动设计的硬件基础21
2.1 处理器22
2.1.1 通用处理器22
2.1.2 数字信号处理器23
2.2 存储器25
2.3 接口与总线29
2.3.1 串口29
2.3.2 I2C30
2.3.3 USB31
2.3.4 以太网接口33
2.3.5 ISA34
2.3.6 PCI和cPCI35
2.4 CPLD和FPGA38
2.5 原理图分析41
2.5.1 原理图分析的内容41
2.5.2 原理图的分析方法41
2.6 硬件时序分析43
2.6.1 时序分析的概念43
2.6.2 典型硬件时序44
2.7 芯片手册阅读方法45
2.8 仪器仪表使用48
2.8.1 万用表48
2.8.2 示波器48
2.8.3 逻辑分析仪50
2.9 总结52
第3章 Linux内核及内核编程53
3.1 Linux内核的发展与演变54
3.2 Linux 2.6内核的特点55
3.3 Linux内核的组成56
3.3.1 Linux内核源代码目录结构56
3.3.2 Linux内核的组成部分57
3.3.3 Linux内核空间与用户空间60
3.4 Linux内核的编译及加载60
3.4.1 Linux内核的编译60
3.4.2 Kconfig和Makefile62
3.4.3 Linux内核的引导69
3.5 Linux下的C编程特点71
3.5.1 Linux编码风格71
3.5.2 GNU C与ANSI C73
3.5.3 do{}while(0)77
3.5.4 goto78
3.6 总结79
第2篇 Linux设备驱动核心理论82
第4章 Linux内核模块82
4.1 Linux内核模块简介83
4.2 Linux内核模块程序结构85
4.3 模块加载函数85
4.4 模块卸载函数86
4.5 模块参数87
4.6 导出符号88
4.7 模块声明与描述89
4.8 模块的使用计数89
4.9 模块的编译90
4.10 使用模块绕开GPL91
4.11 总结91
第5章 Linux文件系统与设备文件系统92
5.1 Linux文件操作93
5.1.1 文件操作系统调用93
5.1.2 C库文件操作95
5.2 Linux文件系统97
5.2.1 Linux文件系统目录结构97
5.2.2 Linux文件系统与设备驱动98
5.3 devfs设备文件系统101
5.4 udev设备文件系统102
5.4.1 udev与devfs的区别102
5.4.2 sysfs文件系统与Linux设备模型104
5.4.3 udev的组成110
5.4.4 udev规则文件111
5.4.5 创建和配置mdev113
5.5 LDD6410的SD和NAND文件系统114
5.6 总结116
第6章 字符设备驱动118
6.1 Linux字符设备驱动结构119
6.1.1 cdev结构体119
6.1.2 分配和释放设备号120
6.1.3 file_operations结构体120
6.1.4 Linux字符设备驱动的组成122
6.2 globalmem虚拟设备实例描述124
6.3 globalmem设备驱动125
6.3.1 头文件、宏及设备结构体125
6.3.2 加载与卸载设备驱动126
6.3.3 读写函数127
6.3.4 seek函数128
6.3.5 ioctl函数129
6.3.6 使用文件私有数据130
6.4 globalmem驱动在用户空间的验证136
6.5 总结138
第7章 Linux设备驱动中的并发控制139
7.1 并发与竞态140
7.2 中断屏蔽141
7.3 原子操作142
7.3.1 整型原子操作142
7.3.2 位原子操作142
7.4 自旋锁143
7.4.1 自旋锁的使用143
7.4.2 读写自旋锁145
7.4.3 顺序锁147
7.4.4 读-拷贝-更新148
7.5 信号量152
7.5.1 信号量的使用152
7.5.2 信号量用于同步154
7.5.3 完成量用于同步154
7.5.4 自旋锁vs信号量155
7.5.5 读写信号量155
7.6 互斥体156
7.7 增加并发控制后的globalmem驱动157
7.8 总结160
第8章 Linux设备驱动中的阻塞与非阻塞I/O161
8.1 阻塞与非阻塞I/O162
8.1.1 等待队列162
8.1.2 支持阻塞操作的globalfifo设备驱动166
8.1.3 在用户空间验证globalfifo的读写171
8.2 轮询操作172
8.2.1 轮询的概念与作用172
8.2.2 应用程序中的轮询编程172
8.2.3 设备驱动中的轮询编程172
8.3 支持轮询操作的globalfifo驱动173
8.3.1 在globalfifo驱动中增加轮询操作173
8.3.2 在用户空间验证globalfifo设备的轮询174
8.4 总结175
第9章 Linux设备驱动中的异步通知与异步I/O176
9.1 异步通知的概念与作用177
9.2 Linux异步通知编程177
9.2.1 Linux信号177
9.2.2 信号的接收179
9.2.3 信号的释放180
9.3 支持异步通知的globalfifo驱动182
9.3.1 在globalfifo驱动中增加异步通知182
9.3.2 在用户空间验证globalfifo的异步通知184
9.4 Linux 2.6异步I/O185
9.4.1 AIO概念与GNUC库函数185
9.4.2 使用信号作为AIO的通知188
9.4.3 使用回调函数作为AIO的通知189
9.4.4 AIO与设备驱动190
9.5 总结192
第10章 中断与时钟193
10.1 中断与定时器194
10.2 Linux中断处理程序架构195
10.3 Linux中断编程196
10.3.1 申请和释放中断196
10.3.2 使能和屏蔽中断197
10.3.3 底半部机制197
10.3.4 实例:S3C6410实时钟中断200
10.4 中断共享202
10.5 内核定时器203
10.5.1 内核定时器编程203
10.5.2 内核中延迟的工作delayed_work205
10.5.3 实例:秒字符设备206
10.6 内核延时210
10.6.1 短延迟210
10.6.2 长延迟210
10.6.3 睡着延迟211
10.7 总结212
第11章 内存与I/O访问213
11.1 CPU与内存和I/O214
11.1.1 内存空间与I/O空间214
11.1.2 内存管理单元MMU215
11.2 Linux内存管理218
11.3 内存存取220
11.3.1 用户空间内存动态申请220
11.3.2 内核空间内存动态申请221
11.3.3 虚拟地址与物理地址关系224
11.4 设备I/O端口和I/O内存的访问225
11.4.1 Linux I/O端口和I/O内存访问接口225
11.4.2 申请与释放设备I/O端口和I/O内存226
11.4.3 设备I/O端口和I/O内存访问流程227
11.4.4 将设备地址映射到用户空间228
11.5 I/O内存静态映射233
11.6 DMA236
11.6.1 DMA与Cache一致性236
11.6.2 Linux下的DMA编程237
11.7 总结241
第12章 工程中的Linux设备驱动242
12.1 platform设备驱动243
12.1.1 platform总线、设备与驱动243
12.1.2 将globalfifo作为platform设备244
12.1.3 platform设备资源和数据246
12.2 设备驱动的分层思想248
12.2.1 设备驱动核心层和例化248
12.2.2 输入设备驱动249
12.2.3 RTC设备驱动254
12.3 主机驱动与外设驱动分离思想255
12.3.1 主机、外设驱动分离的意义255
12.3.2 Linux SPI主机和设备驱动256
12.4 设备驱动中的电源管理260
12.5 misc设备驱动262
12.6 基于sysfs的设备驱动263
12.7 Linux设备驱动的固件加载265
12.8 Android设备驱动266
12.9 总结269
第3篇 Linux设备驱动实例272
第13章 Linux块设备驱动272
13.1 块设备的I/O操作特点273
13.2 Linux块设备驱动结构273
13.2.1 block_device_operations结构体273
13.2.2 gendisk结构体274
13.2.3 request与bio结构体276
13.2.4 块设备驱动注册与注销285
13.3 Linux块设备驱动的模块加载与卸载286
13.4 块设备的打开与释放288
13.5 块设备驱动的ioctl函数288
13.6 块设备驱动的I/O请求处理289
13.6.1 使用请求队列289
13.6.2 不使用请求队列291
13.7 实例1:vmem_disk驱动292
13.7.1 vmem_disk的硬件原理292
13.7.2 vmem_disk驱动模块的加载与卸载293
13.7.3 vmem_disk设备驱动block_device_operations及成员函数296
13.7.4 vmem_disk I/O请求处理298
13.8 实例2:IDE硬盘设备驱动300
13.9 总结303
第14章 Linux终端设备驱动304
14.1 终端设备305
14.2 终端设备驱动结构307
14.3 终端设备驱动初始化与释放311
14.3.1 模块加载与卸载函数311
14.3.2 打开与关闭函数312
14.4 数据发送和接收313
14.5 TTY线路设置316
14.5.1 线路设置用户空间接口316
14.5.2 tty驱动set_termios函数317
14.5.3 tty驱动的tiocmget和tiocmset函数318
14.5.4 tty驱动ioctl函数319
14.6 UART设备驱动320
14.7 printk和early_printk console驱动325
14.8 实例:S3C6410串口与console驱动328
14.8.1 S3C6410串口硬件描述328
14.8.2 S3C6410串口UART驱动330
14.8.3 S3C6410串口console驱动331
14.9 总结332
第15章 Linux的I2C核心、总线与设备驱动333
15.1 Linux的I2C体系结构334
15.2 Linux I2C核心339
15.3 Linux I2C总线驱动341
15.3.1 I2C适配器驱动加载与卸载341
15.3.2 I2C总线通信方法342
15.4 Linux I2C设备驱动344
15.4.1 Linux I2C设备驱动的模块加载与卸载344
15.4.2 Linux I2C设备驱动的数据传输344
15.4.3 Linux的i2c-dev.c文件分析345
15.5 S3C6410 I2C总线驱动实例349
15.5.1 S3C6410 I2C控制器硬件描述349
15.5.2 S3C6410 I2C总线驱动总体分析349
15.5.3 S3C6410 I2C适配器驱动的模块加载与卸载350
15.5.4 S3C6410 I2C总线通信方法354
15.6 AT24XX EEPROM的I2C设备驱动实例359
15.7 总结362
第16章 Linux网络设备驱动363
16.1 Linux网络设备驱动的结构364
16.1.1 网络协议接口层364
16.1.2 网络设备接口层366
16.1.3 设备驱动功能层369
16.1.4 网络设备与媒介层369
16.2 网络设备驱动的注册与注销369
16.3 网络设备的初始化371
16.4 网络设备的打开与释放372
16.5 数据发送流程373
16.6 数据接收流程374
16.7 网络连接状态377
16.8 参数设置和统计数据378
16.9 DM9000网卡设备驱动实例381
16.9.1 DM9000网卡硬件描述381
16.9.2 DM9000网卡驱动设计分析383
16.10 总结387
第17章 Linux音频设备驱动388
17.1 数字音频设备389
17.2 音频设备硬件接口390
17.2.1 PCM接口390
17.2.2 IIS接口390
17.2.3 AC'97接口390
17.3 Linux OSS音频设备驱动391
17.3.1 OSS驱动的组成391
17.3.2 mixer接口392
17.3.3 dsp接口393
17.3.4 OSS用户空间编程394
17.4 Linux ALSA音频设备驱动399
17.4.1 ALSA的组成399
17.4.2 card和组件管理400
17.4.3 PCM设备402
17.4.4 控制接口412
17.4.5 AC97 API接口416
17.4.6 ALSA用户空间编程418
17.5 Linux ASoC音频设备驱动423
17.5.1 ASoC驱动的组成423
17.5.2 ASoC Codec驱动423
17.5.3 ASoC平台驱动426
17.5.4 ASoC板驱动429
17.6 S3C6410+WM9714 ASoC驱动实例430
17.7 总结439
第18章 LCD设备驱动440
18.1 LCD硬件原理441
18.2 帧缓冲443
18.2.1 帧缓冲的概念443
18.2.2 显示缓冲区与显示点443
18.2.3 Linux帧缓冲相关数据结构与函数444
18.3 Linux帧缓冲设备驱动结构450
18.4 帧缓冲设备驱动的模块加载与卸载函数450
18.5 帧缓冲设备显示缓冲区的申请与释放452
18.6 帧缓冲设备的参数设置453
18.6.1 定时参数453
18.6.2 像素时钟454
18.6.3 颜色位域454
18.6.4 固定参数455
18.7 帧缓冲设备驱动的fb_ops成员函数455
18.8 LCD设备驱动的读写、mmap和ioctl函数456
18.9 帧缓冲设备的用户空间访问461
18.10 Linux图形用户界面463
18.10.1 Qt-X11/QtEmbedded/Qtopia463
18.10.2 Microwindows/Nano-X468
18.10.3 MiniGUI470
18.10.4 Android472
18.11 实例:S3C6410 LCD设备驱动473
18.12 总结478
第19章 Flash设备驱动479
19.1 Linux Flash驱动结构480
19.1.1 Linux MTD系统层次480
19.1.2 Linux MTD系统接口480
19.1.3 MTD用户空间编程485
19.2 NOR Flash驱动488
19.3 NAND Flash驱动491
19.4 NOR Flash驱动实例:S3C6410外围的NOR Flash驱动496
19.5 NAND Flash驱动实例:S3C6410外围的NAND Flash驱动497
19.5.1 S3C6410 NAND控制器硬件描述497
19.5.2 S3C6410 nand chip初始化与NAND探测498
19.6 Flash文件系统的建立500
19.6.1 Flash转换层500
19.6.2 CramFS501
19.6.3 JFFS/JFFS2501
19.6.4 YAFFS/YAFFS2502
19.6.5 UBI/UBIFS505
19.7 总结506
第20章 USB主机与设备驱动507
20.1 Linux USB驱动层次508
20.1.1 主机侧与设备侧USB驱动508
20.1.2 设备、配置、接口、端点509
20.2 USB主机控制器驱动512
20.2.1 USB主机控制器驱动的整体结构512
20.2.2 实例:S3C6410 USB 1.1主机驱动516
20.3 USB设备驱动518
20.3.1 USB设备驱动整体结构518
20.3.2 USB请求块(URB)523
20.3.3 探测和断开函数527
20.3.4 USB骨架程序528
20.3.5 实例:USB键盘驱动534
20.4 USB UDC与gadget驱动536
20.4.1 UDC和gadget驱动关键数据结构与API536
20.4.2 实例:S3C6410 USB 2.0的UDC驱动540
20.4.3 实例:file storage gadget驱动542
20.5 USB OTG驱动544
20.6 总结545
第21章 PCI设备驱动547
21.1 PCI总线与配置空间548
21.1.1 PCI总线的Linux描述548
21.1.2 PCI设备的Linux描述550
21.1.3 PCI配置空间访问551
21.1.4 PCI DMA相关的API555
21.1.5 PCI设备驱动其他常用API555
21.2 PCI设备驱动结构556
21.2.1 PCI设备驱动的组成556
21.2.2 实例:PCI骨架程序560
21.3 总结562
第4篇 Linux设备驱动调试、移植564
第22章 Linux设备驱动的调试564
22.1 Linux开发环境建设565
22.1.1 实验室建设565
22.1.2 工具链566
22.1.3 串口工具567
22.2 GDB调试器用法570
22.2.1 GDB基本用法570
22.2.2 DDD图形界面调试工具578
22.3 Linux内核调试580
22.4 内核打印信息——printk()581
22.5 使用/proc582
22.6 Oops586
22.7 监视工具588
22.8 内核调试器589
22.8.1 kcore589
22.8.2 KDB592
22.8.3 KGDB594
22.9 使用仿真器调试内核595
22.10 应用程序调试596
22.11 Linux性能监控与调优工具598
22.12 总结601
第23章 Linux设备驱动的移植602
23.1 编写可移植的设备驱动603
23.1.1 可移植的数据类型603
23.1.2 结构体对界604
23.1.3 Little Endian与Big Endian605
23.1.4 内存页面大小605
23.2 巧用同类设备驱动606
23.2.1 巧用demo板驱动606
23.2.2 巧用类似芯片的驱动程序606
23.2.3 借用芯片厂商的范例程序609
23.3 从Linux 2.4移植设备驱动到Linux 2.6610
23.4 Linux与其他操作系统之间的驱动移植618
23.5 Linux内核的移植626
23.6 总结630
参考文献631