图书介绍
Linux设备驱动开发详解 基于最新的Linux 4.0内核PDF|Epub|txt|kindle电子书版本网盘下载
- 宋宝华编著 著
- 出版社: 北京:机械工业出版社
- ISBN:9787111507895
- 出版时间:2015
- 标注页数:620页
- 文件大小:195MB
- 文件页数:638页
- 主题词:Linux操作系统-程序设计
PDF下载
下载说明
Linux设备驱动开发详解 基于最新的Linux 4.0内核PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 Linux设备驱动概述及开发环境构建1
1.1 设备驱动的作用1
1.2 无操作系统时的设备驱动2
1.3 有操作系统时的设备驱动4
1.4 Linux设备驱动5
1.4.1 设备的分类及特点5
1.4.2 Linux设备驱动与整个软硬件系统的关系6
1.4.3 Linux设备驱动的重点、难点7
1.5 Linux设备驱动的开发环境构建8
1.5.1 PC上的Linux环境8
1.5.2 QEMU实验平台11
1.5.3 源代码阅读和编辑13
1.6 设备驱动Hello World: LED驱动15
1.6.1 无操作系统时的LED驱动15
1.6.2 Linux下的LED驱动15
第2章 驱动设计的硬件基础20
2.1 处理器20
2.1.1 通用处理器20
2.1.2 数字信号处理器22
2.2 存储器24
2.3 接口与总线28
2.3.1 串口28
2.3.2 I2C29
2.3.3 SPI30
2.3.4 USB31
2.3.5 以太网接口33
2.3.6 PCI和PCI-E34
2.3.7 SD和SDIO36
2.4 CPLD和FPGA37
2.5 原理图分析40
2.6 硬件时序分析42
2.6.1 时序分析的概念42
2.6.2 典型的硬件时序43
2.7 芯片数据手册阅读方法44
2.8 仪器仪表使用47
2.8.1 万用表47
2.8.2 示波器47
2.8.3 逻辑分析仪49
2.9 总结51
第3章 Linux内核及内核编程52
3.1 Linux内核的发展与演变52
3.2 Linux 2.6后的内核特点56
3.3 Linux内核的组成59
3.3.1 Linux内核源代码的目录结构59
3.3.2 Linux内核的组成部分60
3.3.3 Linux内核空间与用户空间64
3.4 Linux内核的编译及加载64
3.4.1 Linux内核的编译64
3.4.2 Kconfig和Makefile66
3.4.3 Linux内核的引导74
3.5 Linux下的C编程特点75
3.5.1 Linux编码风格75
3.5.2 GNU C与ANSI C78
3.5.3 do{}while(0)语句83
3.5.4 goto语句85
3.6 工具链85
3.7 实验室建设88
3.8 串口工具89
3.9 总结91
第4章 Linux内核模块92
4.1 Linux内核模块简介92
4.2 Linux内核模块程序结构95
4.3 模块加载函数95
4.4 模块卸载函数97
4.5 模块参数97
4.6 导出符号99
4.7 模块声明与描述100
4.8 模块的使用计数100
4.9 模块的编译101
4.10 使用模块“绕开”GPL102
4.11 总结103
第5章 Linux文件系统与设备文件104
5.1 Linux文件操作104
5.1.1 文件操作系统调用104
5.1.2 C库文件操作108
5.2 Linux文件系统109
5.2.1 Linux文件系统目录结构109
5.2.2 Linux文件系统与设备驱动110
5.3 devfs114
5.4 udev用户空间设备管理116
5.4.1 udev与devfs的区别116
5.4.2 sysfs文件系统与Linux设备模型119
5.4.3 udev的组成128
5.4.4 udev规则文件129
5.5 总结133
第6章 字符设备驱动134
6.1 Linux字符设备驱动结构134
6.1.1 cdev结构体134
6.1.2 分配和释放设备号136
6.1.3 file_operations结构体136
6.1.4 Linux字符设备驱动的组成138
6.2 globalmem虚拟设备实例描述142
6.3 globalmem设备驱动142
6.3.1 头文件、宏及设备结构体142
6.3.2 加载与卸载设备驱动143
6.3.3 读写函数144
6.3.4 seek函数146
6.3.5 ioctl函数146
6.3.6 使用文件私有数据148
6.4 globalmem驱动在用户空间中的验证156
6.5 总结157
第7章 Linux设备驱动中的并发控制158
7.1 并发与竞态158
7.2 编译乱序和执行乱序160
7.3 中断屏蔽165
7.4 原子操作166
7.4.1 整型原子操作167
7.4.2 位原子操作168
7.5 自旋锁169
7.5.1 自旋锁的使用169
7.5.2 读写自旋锁173
7.5.3 顺序锁174
7.5.4 读-复制-更新176
7.6 信号量181
7.7 互斥体183
7.8 完成量184
7.9 增加并发控制后的globalmem的设备驱动185
7.10 总结188
第8章 Linux设备驱动中的阻塞与非阻塞I/O189
8.1 阻塞与非阻塞I/O189
8.1.1 等待队列191
8.1.2 支持阻塞操作的globalfifo设备驱动194
8.1.3 在用户空间验证globalfifo的读写198
8.2 轮询操作198
8.2.1 轮询的概念与作用198
8.2.2 应用程序中的轮询编程199
8.2.3 设备驱动中的轮询编程201
8.3 支持轮询操作的globalfifo驱动202
8.3.1 在globalfifo驱动中增加轮询操作202
8.3.2 在用户空间中验证globalfifo设备的轮询203
8.4 总结205
第9章 Linux设备驱动中的异步通知与异步I/O206
9.1 异步通知的概念与作用206
9.2 Linux异步通知编程207
9.2.1 Linux信号207
9.2.2 信号的接收208
9.2.3 信号的释放210
9.3 支持异步通知的globalfifo驱动212
9.3.1 在globalfifo驱动中增加异步通知212
9.3.2 在用户空间中验证globalfifo的异步通知214
9.4 Linux异步I/O215
9.4.1 AIO概念与GNU C库AIO215
9.4.2 Linux内核AIO与libaio219
9.4.3 AIO与设备驱动222
9.5 总结223
第10章 中断与时钟224
10.1 中断与定时器224
10.2 Linux中断处理程序架构227
10.3 Linux中断编程228
10.3.1 申请和释放中断228
10.3.2 使能和屏蔽中断230
10.3.3 底半部机制230
10.3.4 实例:GPIO按键的中断235
10.4 中断共享237
10.5 内核定时器238
10.5.1 内核定时器编程238
10.5.2 内核中延迟的工作delayed_work242
10.5.3 实例:秒字符设备243
10.6 内核延时247
10.6.1 短延迟247
10.6.2 长延迟248
10.6.3 睡着延迟248
10.7 总结250
第11章 内存与I/O访问251
11.1 CPU与内存、I/O251
11.1.1 内存空间与I/O空间251
11.1.2 内存管理单元252
11.2 Linux内存管理256
11.3 内存存取261
11.3.1 用户空间内存动态申请261
11.3.2 内核空间内存动态申请262
11.4 设备I/O端口和I/O内存的访问267
11.4.1 Linux I/O端口和I/O内存访问接口267
11.4.2 申请与释放设备的I/O端口和I/O内存268
11.4.3 设备I/O端口和I/O内存访问流程269
11.4.4 将设备地址映射到用户空间270
11.5 I/O内存静态映射276
11.6 DMA277
11.6.1 DMA与Cache一致性278
11.6.2 Linux下的DMA编程279
11.7 总结285
第12章 Linux设备驱动的软件架构思想286
12.1 Linux驱动的软件架构286
12.2 platform设备驱动290
12.2.1 platform总线、设备与驱动290
12.2.2 将globalfifo作为platform设备293
12.2.3 platform设备资源和数据295
12.3 设备驱动的分层思想299
12.3.1 设备驱动核心层和例化299
12.3.2 输入设备驱动301
12.3.3 RTC设备驱动306
12.3.4 Framebuffer设备驱动309
12.3.5 终端设备驱动311
12.3.6 misc设备驱动316
12.3.7 驱动核心层321
12.4 主机驱动与外设驱动分离的设计思想321
12.4.1 主机驱动与外设驱动分离321
12.4.2 Linux SPI主机和设备驱动322
12.5 总结330
第13章 Linux块设备驱动331
13.1 块设备的I/O操作特点331
13.2 Linux块设备驱动结构332
13.2.1 block_device_operations结构体332
13.2.2 gendisk结构体334
13.2.3 bio、request和request_queue335
13.2.4 I/O调度器339
13.3 Linux块设备驱动的初始化340
13.4 块设备的打开与释放342
13.5 块设备驱动的ioctl函数342
13.6 块设备驱动的I/O请求处理343
13.6.1 使用请求队列343
13.6.2 不使用请求队列347
13.7 实例:vmem_disk驱动349
13.7.1 vmem_disk的硬件原理349
13.7.2 vmem_disk驱动模块的加载与卸载349
13.7.3 vmem_disk设备驱动的block_device_operations351
13.7.4 vmem_disk的I/O请求处理352
13.8 Linux MMC子系统354
13.9 总结357
第14章 Linux网络设备驱动358
14.1 Linux网络设备驱动的结构358
14.1.1 网络协议接口层359
14.1.2 网络设备接口层363
14.1.3 设备驱动功能层367
14.2 网络设备驱动的注册与注销367
14.3 网络设备的初始化369
14.4 网络设备的打开与释放370
14.5 数据发送流程371
14.6 数据接收流程372
14.7 网络连接状态375
14.8 参数设置和统计数据377
14.9 DM9000网卡设备驱动实例380
14.9.1 DM9000网卡硬件描述380
14.9.2 DM9000网卡驱动设计分析380
14.10 总结386
第15章 Linux I2C核心、总线与设备驱动387
15.1 Linux I2C体系结构387
15.2 Linux I2C核心394
15.3 Linux I2C适配器驱动396
15.3.1 I2C适配器驱动的注册与注销396
15.3.2 I2C总线的通信方法397
15.4 Linux I2C设备驱动399
15.4.1 Linux I2C设备驱动的模块加载与卸载400
15.4.2 Linux I2C设备驱动的数据传输400
15.4.3 Linux的i2c-dev.c文件分析400
15.5 Tegra I2C总线驱动实例405
15.6 AT24xx EEPROM的I2C设备驱动实例410
15.7 总结413
第16章 USB主机、设备与Gadget驱动414
16.1 Linux USB驱动层次414
16.1.1 主机侧与设备侧USB驱动414
16.1.2 设备、配置、接口、端点415
16.2 USB主机控制器驱动420
16.2.1 USB主机控制器驱动的整体结构420
16.2.2 实例:Chipidea USB主机驱动425
16.3 USB设备驱动425
16.3.1 USB设备驱动的整体结构425
16.3.2 USB请求块430
16.3.3 探测和断开函数435
16.3.4 USB骨架程序436
16.3.5 实例:USB键盘驱动443
16.4 USB UDC与Gadget驱动446
16.4.1 UDC和Gadget驱动的关键数据结构与API446
16.4.2 实例:Chipidea USB UDC驱动451
16.4.3 实例:Loopback Function驱动453
16.5 USB OTG驱动456
16.6 总结458
第17章 I2C、 SPI、 USB驱动架构类比459
17.1 I2C、 SPI、 USB驱动架构459
17.2 I2C主机和外设眼里的Linux世界460
第18章 ARM Linux设备树461
18.1 ARM设备树起源461
18.2 设备树的组成和结构462
18.2.1 DTS、DTC和DTB等462
18.2.2 根节点兼容性468
18.2.3 设备节点兼容性470
18.2.4 设备节点及label的命名475
18.2.5 地址编码477
18.2.6 中断连接479
18.2.7 GPIO、时钟、pinmux连接480
18.3 由设备树引发的BSP和驱动变更484
18.4 常用的OF API490
18.5 总结493
第19章 Linux电源管理的系统架构和驱动494
19.1 Linux电源管理的全局架构494
19.2 CPUFreq驱动495
19.2.1 SoC的CPUFreq驱动实现495
19.2.2 CPUFreq的策略501
19.2.3 CPUFreq的性能测试和调优501
19.2.4 CPUFreq通知502
19.3 CPUIdle驱动504
19.4 PowerTop508
19.5 Regulator驱动508
19.6 OPP511
19.7 PM QoS515
19.8 CPU热插拔518
19.9 挂起到RAM522
19.10 运行时的PM528
19.11 总结534
第20章 Linux芯片级移植及底层驱动535
20.1 ARM_Linux底层驱动的组成和现状535
20.2 内核节拍驱动536
20.3 中断控制器驱动541
20.4 SMP多核启动以及CPU热插拔驱动549
20.5 DEBUG_LL和EARLY_PRINTK的设置556
20.6 GPIO驱动557
20.7 pinctrl驱动560
20.8 时钟驱动572
20.9 dmaengine驱动578
20.10 总结580
第21章 Linux设备驱动的调试581
21.1 GDB调试器的用法581
21.1.1 GDB的基本用法581
21.1.2 DDD图形界面调试工具591
21.2 Linux内核调试594
21.3 内核打印信息——printk()596
21.4 DEBUG_LL和EARLY_PRINTK599
21.5 使用“/proc”600
21.6 Oops606
21.7 BUG_ON()和WARN_ON()608
21.8 strace609
21.9 KGDB610
21.10 使用仿真器调试内核612
21.11 应用程序调试613
21.12 Linux性能监控与调优工具616
21.13 总结618