图书介绍

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

Linux设备驱动开发详解
  • 宋宝华编著 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:7115172390
  • 出版时间:2008
  • 标注页数:686页
  • 文件大小:284MB
  • 文件页数:706页
  • 主题词:Linux操作系统

PDF下载


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

下载说明

Linux设备驱动开发详解PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1篇 Linux设备驱动入门第1章 设备驱动概述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.4.4 Linux设备驱动的学习方法8

1.5 设备驱动的Hello World:LED驱动11

1.5.1 无操作系统时的LED驱动11

1.5.2 Linux系统下的LED驱动12

第2章 驱动设计的硬件基础16

2.1 处理器17

2.1.1 通用处理器17

2.1.2 数字信号处理器18

2.2 存储器20

2.3 接口与总线24

2.3.1 串口24

2.3.2 I2C总线25

2.3.3 USB26

2.3.4 以太网接口27

2.3.5 ISA总线28

2.3.6 PCI和cPCI29

2.4 CPLD和FPGA33

2.5 原理图分析35

2.5.1 原理图分析的内容35

2.5.2 原理图的分析方法36

2.6 硬件时序分析37

2.6.1 时序分析的概念37

2.6.2 典型硬件时序38

2.7 仪器仪表使用39

2.7.1 万用表39

2.7.2 示波器39

2.7.3 逻辑分析仪41

2.8 总结42

第3章 Linux内核及内核编程43

3.1 Linux内核的发展与演变44

3.2 Linux 2.6内核的特点45

3.3 Linux内核的组成46

3.3.1 Linux内核源代码目录结构46

3.3.2 Linux内核的组成部分47

3.3.3 Linux内核空间与用户空间49

3.4 Linux内核的编译及加载50

3.4.1 Linux内核的编译50

3.4.2 Kconfig和Makefile57

3.4.3 Linux内核的引导63

3.5 Linux下的C编程65

3.5.1 Linux程序命名习惯65

3.5.2 GNU C与ANSI C66

3.5.3 do{}while(0)70

3.5.4 goto71

3.6 总结71

第2篇 Linux设备驱动核心理论第4章 Linux内核模块74

4.1 Linux内核模块简介75

4.2 Linux内核模块的程序结构76

4.3 模块加载函数77

4.4 模块卸载函数78

4.5 模块参数78

4.6 导出符号80

4.7 模块声明与描述81

4.8 模块的使用计数81

4.9 模块的编译82

4.10 模块与GPL83

4.11 总结84

第5章 Linux文件系统与设备文件系统85

5.1 Linux文件操作86

5.1.1 文件操作的相关系统调用86

5.1.2 C库函数的文件操作88

5.2 Linux文件系统90

5.2.1 Linux文件系统目录结构90

5.2.2 Linux文件系统与设备驱动91

5.3 devfs设备文件系统95

5.4 udev设备文件系统96

5.4.1 udev与devfs的区别96

5.4.2 sysfs文件系统与Linux设备模型96

5.4.3 udev的组成108

5.4.4 udev规则文件109

5.4.5 创建和配置udev111

5.5 总结113

第6章 字符设备驱动114

6.1 Linux字符设备驱动结构115

6.1.1 cdev结构体115

6.1.2 分配和释放设备号116

6.1.3 file_operations结构体116

6.1.4 Linux字符设备驱动的组成118

6.2 globalmem虚拟设备实例描述121

6.3 globalmem设备驱动121

6.3.1 头文件、宏及设备结构体121

6.3.2 加载与卸载设备驱动122

6.3.3 读写函数123

6.3.4 seek()函数124

6.3.5 ioctl()函数125

6.3.6 使用文件私有数据127

6.4 globalmem驱动在用户空间的验证133

6.5 总结134

第7章 Linux设备驱动中的并发控制135

7.1 并发与竞态136

7.2 中断屏蔽137

7.3 原子操作137

7.3.1 整型原子操作138

7.3.2 位原子操作138

7.4 自旋锁139

7.4.1 自旋锁的使用139

7.4.2 读写自旋锁141

7.4.3 顺序锁143

7.4.4 读—拷贝—更新144

7.5 信号量148

7.5.1 信号量的使用148

7.5.2 信号量用于同步150

7.5.3 完成量用于同步150

7.5.4 自旋锁vs信号量151

7.5.5 读写信号量152

7.6 互斥体152

7.7 增加并发控制后的globalmem驱动153

7.8 总结156

第8章 Linux设备驱动中的阻塞与非阻塞I/O157

8.1 阻塞与非阻塞I/O158

8.1.1 等待队列158

8.1.2 支持阻塞操作的globalfifo设备驱动162

8.1.3 在用户空间验证globalfifo的读写167

8.2 轮询操作167

8.2.1 轮询的概念与作用167

8.2.2 应用程序中的轮询编程168

8.2.3 设备驱动中的轮询编程168

8.3 支持轮询操作的globalfifo驱动169

8.3.1 在globalfifo驱动中增加轮询操作169

8.3.2 在用户空间验证globalfifo设备的轮询170

8.4 总结171

第9章 Linux设备驱动中的异步通知与异步I/O172

9.1 异步通知的概念与作用173

9.2 Linux异步通知编程173

9.2.1 Linux信号173

9.2.2 信号的接收175

9.2.3 信号的释放176

9.3 支持异步通知的globalfifo驱动178

9.3.1 在globalfifo驱动中增加异步通知178

9.3.2 在用户空间验证globalfifo的异步通知180

9.4 Linux 2.6异步I/O181

9.4.1 AIO概念与GNU C库函数181

9.4.2 使用信号作为AIO的通知184

9.4.3 使用回调函数作为A1O的通知185

9.4.4 AIO与设备驱动186

9.5 总结188

第10章 中断与时钟189

10.1 中断与定时器190

10.2 Linux中断处理程序架构191

10.3 Linux中断编程192

10.3.1 申请和释放中断192

10.3.2 使能和屏蔽中断193

10.3.3 底半部机制193

10.3.4 实例:S3C2410实时钟中断196

10.4 中断共享197

10.5 内核定时器199

10.5.1 内核定时器编程199

10.5.2 实例:秒字符设备201

10.6 内核延时205

10.6.1 短延迟205

10.6.2 长延迟205

10.6.3 睡着延迟206

10.7 总结207

第11章 内存与I/O访问208

11.1 CPU与内存和I/O209

11.1.1 内存空间与I/O空间209

11.1.2 内存管理单元MMU210

11.2 Linux内存管理213

11.3 内存存取215

11.3.1 用户空间内存动态申请215

11.3.2 内核空间内存动态申请215

11.3.3 虚拟地址与物理地址关系218

11.4 设备I/O端口和I/O内存的访问219

11.4.1 Linux I/O端口和I/O内存访问接口219

11.4.2 申请与释放设备I/O端口和I/O内存221

11.4.3 设备I/O端口和I/O内存访问流程221

11.4.4 将设备地址映射到用户空间222

11.5 I/O内存静态映射227

11.6 DMA230

11.6.1 DMA与Cache一致性230

11.6.2 Linux下的DMA编程231

11.7 总结240

第12章 Linux字符设备驱动综合实例241

12.1 按键的设备驱动242

12.1.1 按键的硬件原理242

12.1.2 按键驱动中的数据结构243

12.1.3 按键驱动的模块加载和卸载函数244

12.1.4 按键设备驱动中断、定时器处理程序245

12.1.5 按键设备驱动的打开、释放函数247

12.1.6 按键设备驱动读函数247

12.2 触摸屏的设备驱动248

12.2.1 触摸屏的硬件原理248

12.2.2 触摸屏设备驱动中数据结构250

12.2.3 触摸屏驱动中的硬件控制251

12.2.4 触摸屏驱动模块加载和卸载函数252

12.2.5 触摸屏驱动中断、定时器处理程序252

12.2.6 触摸屏设备驱动的打开、释放函数255

12.2.7 触摸屏设备驱动的读函数255

12.2.8 触摸屏设备驱动的轮询与异步通知256

12.2.9 Linux输入子系统257

12.3 DSP HPI的设备驱动258

12.3.1 HPI接口的硬件原理258

12.3.2 HPI接口设备驱动中数据结构259

12.3.3 HPI接口设备驱动的读写函数260

12.4 NVRAM设备驱动261

12.4.1 NVRAM设备驱动的数据结构261

12.4.2 NVRAM设备驱动的模块加载与卸载函数262

12.4.3 NVRAM设备驱动读写函数262

12.4.4 NVRAM设备驱动的seek函数263

12.5 看门狗设备驱动264

12.5.1 看门狗硬件原理264

12.5.2 看门狗驱动中的数据结构265

12.5.3 看门狗驱动模块的加载和卸载函数268

12.5.4 看门狗驱动探测和移除函数269

12.5.5 看门狗驱动的挂起和恢复函数271

12.5.6 看门狗驱动的打开和释放函数272

12.5.7 看门狗驱动写函数274

12.6 总结274

第3篇 Linux设备驱动实例第13章 Linux块设备驱动276

13.1 块设备的I/O操作特点277

13.2 Linux块设备驱动结构277

13.2.1 block_device_operations结构体277

13.2.2 gendisk结构体278

13.2.3 request与bio结构体280

13.2.4 块设备驱动注册与注销288

13.3 Linux块设备驱动的模块加载与卸载288

13.4 块设备的打开与释放291

13.5 块设备驱动的ioctl函数291

13.6 块设备驱动的I/O请求处理292

13.6.1 使用请求队列292

13.6.2 不使用请求队列295

13.7 实例1:RamDisk驱动296

13.7.1 RamDisk的硬件原理296

13.7.2 RamDisk驱动模块的加载与卸载296

13.7.3 RamDisk设备驱动block device operations及成员函数299

13.7.4 RamDisk I/O请求处理300

13.8 实例2:IDE硬盘设备驱动300

13.8.1 IDE硬盘设备原理300

13.8.2 IDE硬盘设备驱动的block_device_operations及成员函数303

13.8.3 IDE硬盘设备驱动的I/O请求处理304

13.8.4 在内核中增加对新系统IDE设备的支持310

13.9 总结313

第14章 Linux终端设备驱动314

14.1 终端设备315

14.2 终端设备驱动结构316

14.3 终端设备驱动的初始化与释放321

14.3.1 模块加载与卸载函数321

14.3.2 打开与关闭函数322

14.4 数据发送和接收323

14.5 tty线路设置326

14.5.1 线路设置用户空间接口326

14.5.2 tty驱动的set_termios函数327

14.5.3 tty驱动的tiocmget和tiocmset函数328

14.5.4 tty驱动的ioctl函数329

14.6 UART设备驱动330

14.7 S3C2410 UART的驱动实例335

14.7.1 S3C2410串口硬件描述335

14.7.2 S3C2410串口驱动的数据结构338

14.7.3 S3C2410串口驱动的初始化与释放341

14.7.4 S3C2410串口数据收发344

14.7.5 S3C2410串口线路设置350

14.8 总结352

第15章 Linux的I2C核心、总线与设备驱动353

15.1 Linux的I2C体系结构354

15.2 Linux I2C核心359

15.3 Linux I2C总线驱动361

15.3.1 I2C适配器驱动加载与卸载361

15.3.2 I2C总线通信方法361

15.4 Linux I2C设备驱动363

15.4.1 Linux I2C设备驱动的模块加载与卸载364

15.4.2 Linux I2C设备驱动的i2c driver成员函数364

15.4.3 Linux I2C设备驱动的文件操作接口367

15.4.4 Linux的i2c-dev.c文件分析368

15.5 S3C2410 I2C总线驱动实例374

15.5.1 S3C2410 I2C控制器硬件描述374

15.5.2 S3C2410 I2C总线驱动总体分析374

15.5.3 S3C2410 I2C适配器驱动的模块加载与卸载375

15.5.4 S3C2410 I2C总线通信方法378

15.6 SAA7113H视频AD芯片的I2C设备驱动实例383

15.6.1 SAA7113H视频AD芯片硬件描述383

15.6.2 SAA7113H视频AD芯片驱动的模块加载与卸载384

15.6.3 SAA7113H设备驱动的i2c driver成员函数384

15.7 总结386

第16章 Linux网络设备驱动387

16.1 Linux网络设备驱动的结构388

16.1.1 网络协议接口层388

16.1.2 网络设备接口层392

16.1.3 设备驱动功能层395

16.1.4 网络设备与媒介层395

16.2 网络设备驱动的注册与注销395

16.3 网络设备的初始化397

16.4 网络设备的打开与释放398

16.5 数据发送流程399

16.6 数据接收流程400

16.7 网络连接状态402

16.8 参数设置和统计数据404

16.9 CS8900网卡设备驱动实例407

16.9.1 CS8900网卡硬件描述407

16.9.2 CS8900网卡驱动设计分析409

16.9.3 CS8900网卡注册、初始化与注销410

16.9.4 CS8900网卡发送数据流程415

16.9.5 CS8900网卡接收数据流程416

16.10 总结418

第17章 Linux音频设备驱动419

17.1 数字音频设备420

17.2 音频设备硬件接口421

17.2.1 PCM接口421

17.2.2 IIS接口421

17.2.3 AC97接口421

17.3 Linux OSS音频设备驱动422

17.3.1 OSS驱动的组成422

17.3.2 mixer接口423

17.3.3 dsp接口424

17.3.4 OSS用户空间编程425

17.4 Linux ALSA音频设备驱动431

17.4.1 ALSA的组成431

17.4.2 card和组件管理432

17.4.3 PCM设备434

17.4.4 控制接口444

17.4.5 AC97 API接口449

17.4.6 ALSA用户空间编程451

17.5 S3C2410+UDA1341 OSS驱动实例456

17.5.1 S3C2410与UDA1341接口硬件描述456

17.5.2 注册dsp和mixer接口459

17.5.3 mixer接口的I/O控制函数460

17.5.4 dsp接口音频数据传输462

17.6 SA1100+UDA1341 ALSA驱动实例465

17.6.1 card注册与注销465

17.6.2 PCM设备的实现467

17.6.3 控制接口的实现472

17.7 PXA255+AC97 ALSA驱动实例474

17.8 总结476

第18章 LCD设备驱动477

18.1 LCD硬件原理478

18.2 帧缓冲480

18.2.1 帧缓冲的概念480

18.2.2 显示缓冲区与显示点480

18.2.3 Linux帧缓冲相关数据结构与函数481

18.3 Linux帧缓冲设备驱动结构487

18.4 帧缓冲设备驱动的模块加载与卸载函数487

18.5 帧缓冲设备显示缓冲区的申请与释放489

18.6 帧缓冲设备的参数设置490

18.6.1 定时参数490

18.6.2 像素时钟491

18.6.3 颜色位域491

18.6.4 固定参数491

18.7 帧缓冲设备驱动的fb_ops成员函数491

18.8 LCD设备驱动的读写、mmap和ioctl函数493

18.9 帧缓冲设备的用户空间访问499

18.10 Linux图形用户界面504

18.10.1 Qt-X11/QtEmbedded/Qtopia504

18.10.2 Microwindows/Nano-X508

18.10.3 MiniGUI511

18.11 实例:S3C2410 LCD设备驱动514

18.11.1 S3C2410 LCD控制器硬件描述514

18.11.2 S3C2410 LCD驱动的模块加载与卸载函数517

18.11.3 S3C2410 LCD驱动的探测与移除函数520

18.11.4 S3C2410 LCD驱动挂起与恢复函数524

18.11.5 S3C2410 LCD驱动的fb_ops成员函数525

18.12 总结528

第19章 Flash设备驱动529

19.1 Linux Flash驱动结构530

19.1.1 Linux MTD系统层次530

19.1.2 Linux MTD系统接口530

19.1.3 MTD用户空间编程534

19.2 NOR Flash驱动538

19.3 NAND Flash驱动541

19.4 NOR Flash驱动实例:S3C2410外围的NOR Flash驱动546

19.5 NAND Flash驱动实例:S3C2410外围的NAND Flash驱动549

19.5.1 S3C2410 NAND控制器硬件描述549

19.5.2 nand_chip初始化和成员函数549

19.5.3 NAND设备驱动初始化与释放553

19.6 Flash文件系统的建立556

19.6.1 Flash转换层556

19.6.2 CramFS557

19.6.3 JFFS/JFFS2558

19.6.4 YAFFS/YAFFS2559

19.7 总结561

第20章 USB主机与设备驱动562

20.1 Linux USB驱动层次563

20.1.1 主机侧与设备侧USB驱动563

20.1.2 设备、配置、接口、端点564

20.2 USB主机驱动568

20.2.1 USB主机驱动的整体结构568

20.2.2 实例:S3C2410 USB主机驱动571

20.3 USB设备驱动572

20.3.1 USB设备驱动整体结构572

20.3.2 USB请求块(URB)577

20.3.3 探测和断开函数582

20.3.4 USB骨架程序582

20.4 USB设备驱动实例589

20.4.1 USB串口驱动589

20.4.2 USB键盘驱动594

20.5 总结598

第21章 PCI设备驱动599

21.1 PCI总线与配置空间600

21.1.1 PCI总线的Linux描述600

21.1.2 PCI设备的Linux描述602

21.1.3 PCI配置空间访问603

21.2 PCI设备驱动结构607

21.2.1 pci_driver结构体607

21.2.2 PCI设备驱动的组成612

21.2.3 旧版内核的PCI设备探测615

21.3 实例:Intel 810主板声卡驱动617

21.4 总结623

第4篇 Linux设备驱动测试、移植第22章 Linux设备驱动的调试626

22.1 Linux开发环境建设627

22.1.1 实验室建设627

22.1.2 工具链628

22.1.3 串口工具629

22.2 GDB调试器用法632

22.2.1 GDB基本用法632

22.2.2 DDD图形界面调试工具640

22.3 Linux内核调试642

22.4 内核打印信息——printk()643

22.5 使用/proc644

22.6 Oops649

22.7 监视工具650

22.8 内核调试器652

22.8.1 kcore652

22.8.2 KDB654

22.8.3 KGDB656

22.9 使用仿真器调试内核657

22.10 应用程序调试658

22.11 总结659

第23章 Linux设备驱动的移植660

23.1 编写可移植的设备驱动661

23.1.1 可移植的数据类型661

23.1.2 结构体对界662

23.1.3 Little Endian与BigEndian663

23.1.4 内存页面大小664

23.2 巧用同类设备驱动664

23.2.1 巧用demo板驱动664

23.2.2 巧用类似芯片的驱动程序665

23.2.3 借用芯片厂商的范例程序668

23.3 从Linux 2.4移植设备驱动到Linux 2.6668

23.4 Linux与其他操作系统之间的驱动移植676

23.5 总结684

参考文献685

热门推荐