图书介绍

Linux设备驱动开发详解 第2版PDF|Epub|txt|kindle电子书版本网盘下载

Linux设备驱动开发详解 第2版
  • 宋宝华编著 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115236579
  • 出版时间:2010
  • 标注页数:632页
  • 文件大小:235MB
  • 文件页数:653页
  • 主题词:UNIX操作系统-程序设计

PDF下载


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

下载说明

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

热门推荐