图书介绍

Linux设备驱动开发详解 基于最新的Linux 4.0内核PDF|Epub|txt|kindle电子书版本网盘下载

Linux设备驱动开发详解 基于最新的Linux 4.0内核
  • 宋宝华编著 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111507895
  • 出版时间:2015
  • 标注页数:620页
  • 文件大小:195MB
  • 文件页数:638页
  • 主题词:Linux操作系统-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

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

热门推荐