图书介绍

Linux设备驱动开发技术及应用PDF|Epub|txt|kindle电子书版本网盘下载

Linux设备驱动开发技术及应用
  • (韩)俞永昌著;李红姬,李明吉译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115181220
  • 出版时间:2008
  • 标注页数:674页
  • 文件大小:109MB
  • 文件页数:698页
  • 主题词:Linux操作系统-程序设计

PDF下载


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

下载说明

Linux设备驱动开发技术及应用PDF格式电子书版下载

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

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

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

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

图书目录

第1章实验环境的设置与准备1

1.1系统与Linux运行机制准备2

1.1.1系统准备2

1.1.2 Linux发布版的安装与环境设定2

1.2内核源代码的准备4

1.2.1获取源代码5

1.2.2编译内核5

1.2.3内核设定8

1.3实验设备的准备10

1.3.1打印机接口的准备10

1.3.2实现输入输出的准备物品13

1.4实验环境的检查14

第2章 Linux内核与设备驱动程序17

2.1 Linux操作系统18

2.2 Linux内核18

2.2.1 Linux的历史18

2.2.2 Linux内核的功能19

2.2.3 Linux内核的特点20

2.2.4内核源代码的结构21

2.2.5浏览内核源代码23

2.3设备驱动程序24

2.3.1向内核请求资源处理的方法25

2.3.2模块和设备文件25

2.3.3设备驱动程序的类型27

2.3.4整合型设备驱动程序(2.6内核)28

2.3.5设备驱动程序的层次29

2.3.6设备驱动程序源代码的结构及介绍31

第3章 设备文件和低级文件输入输出35

3.1设备文件和文件输入输出函数36

3.1.1应用程序中控制硬件的方法36

3.1.2设备文件36

3.1.3文件输入输出函数38

3.2低级文件的输入输出函数39

3.2.1打开和关闭文件函数open()和close()39

3.2.2文件的读取和写入函数read()和write()40

3.2.3文件指针处理函数Iseek()41

3.2.4设备控制函数ioctl()42

3.2.5同步处理函数fsync()42

3.3设备文件相关函数42

3.3.1设备文件的生成函数 mknod()42

3.3.2 Error处理函数perror()43

3.4低级文件输入输出函数的应用实例44

3.4.1准备零部件44

3.4.2基本低级文件输入输出函数的使用例子44

3.4.3 loctl()函数的使用例子47

3.5 mknod命令和低级文件输入输出函数50

第4章 简单内核模块的测试55

4.1内核模块编程的第一步56

4.1.1“Hello world”的内核模块(内核版本2.4)56

4.1.2“Hello world”的内核模块(内核版本2.6)57

4.1.3另一种形式的内核版本2.4的模块程序59

4.2 内核模块程序的准备59

4.2.1模块实现原理60

4.2.2内核提供的符号表:/proc/ksyms61

4.2.3模块应用程序61

4.3 内核模块程序的组成63

4.3.1声明头文件63

4.3.2模块初始化函数和删除函数的声明63

4.3.3 2.6内核的权限登记63

4.4 用于模块编译的Makefile64

4.4.1 2.4内核中编译外部模块的Makefile64

4.4.2 2.6内核中编译外部模块的Makefile65

4.5 模块参数的说明66

4.5.1 2.4内核模块变量的实例66

4.5.2 2.6内核模块变量的使用实例68

4.6 内核消息的输出70

4.6.1.printk()函数70

4.6.2管理内核内存的daemon72

4.6.3 dmesg命令72

4.6.4 /proc/kmsg72

4.6.5 printk()函数的注意事项72

4.7内核与模块72

4.7.1创建为模块的原因73

4.7.2内核内部的模块管理73

4.7.3内核模式和内核内存地址空间75

4.7.4单向的符号引用75

4.7.5模块和模块的引用76

第5章 内存的分配和释放77

5.1变量78

5.1.1局部变量和全局变量的选择78

5.1.2防止函数和变量的重复命名78

5.1.3可移植性和数据类型78

5.1.4输入输出内存变量的处理80

5.2动态内存81

5.2.1函数kmalloc()和kfree()82

5.2.2函数vmalloc()和vfree()83

5.2.3函数_get_ree_pages()和free_ pages()84

5.3动态内存实例84

5.3.1实例源代码85

5.3.2运行方法88

5.4内存池89

5.5内存池的实例90

5.5.1实例源代码90

5.5.2运行方法92

5.6内存的分配与释放函数93

第6章 设备的注册与注销97

6.1设备驱动程序的控制方式98

6.1.1设备驱动程序的类型98

6.1.2字符设备驱动程序的运作99

6.2struct file_operations101

6.2.1 File_operations结构体域(field)102

6.2.2低级输入输出函数和fileoperations结构体的域103

6.3字符设备驱动程序的注册、注销及组成106

6.3.1字符设备驱动程序的组成107

6.3.2不同内核版本对structfile_operations变量的定义108

6.3.3字符设备驱动程序的注册和注销109

6.4字符设备驱动程序的创建实例110

6.4.1实例源代码110

6.4.2执行方法117

6.5设备驱动程序的注册与注销函数119

第7章 设备驱动程序的初始化与终止121

7.1初始化与结束处理122

7.1.1模块初始化和终止123

7.1.2函数open()和函数release( )的初始化和终止处理125

7.1.3整理初始化和终止处理 内容129

7.2模块使用次数的管理129

7.2.1 2.4内核129

7.2.2 2.6内核130

7.3输入输出空间的竞争处理函数131

7.3.1输入输出端口域的竞争处理函数131

7.3.2输入输出内存空间的竞争处理函数133

7.4设备驱动程序的初始化与终止函数集135

第8章 设备驱动程序的读取和写入139

8.1读/写操作的实现140

8.1.1函数Read()141

8.1.2函数Write()144

8.1.3Struct file*filp146

8.2 I/O处理147

8.2.1I/O映射输入输出处理函数147

8.2.2内存映射输入输出函数148

8.3用户进程空间和内核进程空间149

8.4设备驱动程序的读/写实例152

8.4.1实例源代码153

8.4.2实施方法158

8.5设备驱动程序的读/写函数160

第9章 主设备号与次设备号的处理167

9.1主设备号、次设备号及设备的种类168

9.1.1主设备号168

9.1.2次设备号169

9.1.3设备的类型172

9.2基于次设备号的文件处理方式174

9.3基于次设备号的文件处理实例176

9.4预留的主设备号186

9.4.1被字符设备驱动程序预留的主设备号186

9.4.2字符设备驱动程序的预留MISC相关次设备号190

9.4.3块设备驱动程序中预留的主设备号193

9.4.4分配到test或特定platform平台的主设备号和次设备号195

第10章设备控制197

10.1设备的控制198

10.1.1设备控制ioctl()函数的作用198

10.1.2函数ioctl()的一般状态199

10.1.3 ioctl上传送的cmd和相关宏函数200

10.2使用ioctl()函数的输入输出应用实例203

10.2.1实例源代码204

10.2.2实施方法214

10.3设备控制函数216

第11章时间处理与内核定时器217

11.1时间处理218

11.1.1定时器中断(timerinterrupt)218

11.1.2处理较短的延迟时间220

11.1.3处理较长的延迟时间221

11.1.4系统时间的设置221

11.2内核定时器223

11.2.1 struct timer_list变量的初始化224

11.2.2内核定时器的注册225

11.2.3内核定时器的取消226

11.3使用内核定时器控制LED的应用实例226

11.3.1实例源代码226

11.3.2实施方法231

11.4时间处理与内核定时器相关函数232

第12章 中断处理235

12.1中断236

12.1.1什么是中断236

12.1.2 IRQ中断的处理过程237

12.1.3中断服务函数的结构238

12.1.4注册中断服务函数239

12.1.5注销中断服务函数240

12.1.6中断函数和设备驱动程序之间的数据共享241

12.1.7中断服务注册和注销起点243

12.1.8中断的共享244

12.1.9中断的禁止和消除245

12.1.*10 seqlock_t结构体246

12.1.*11中断和随机数的处理248

12.1.*12确认发生中断的次数249

12.2中断发生时的检查实例249

12.2.1实例源代码250

12.2.2操作步骤259

12.3中断处理函数261

第13章 阻塞型输入输出263

13.1进程的运行效率与睡眠264

13.2阻塞型输入输出的实现265

13.2.1阻塞型输入输出265

13.2.2阻塞型模式和进程的处理过程266

13.2.3以阻塞型输入输出模式打开267

13.2.4等待队列和head_t结构体268

13.2.5进程的睡眠(sleep)和唤醒(wake up)269

13.3中断发生时的检查实例270

13.3.1实例源代码270

13.3.2实施方法279

13.4 wait_event_interruptible宏280

13.5阻塞型输入输出函数282

第14章 输入输入的复用285

14.1输入输出的复用286

14.1.1函数select()286

14.1.2函数poll()288

14.2输入输出复用的实现293

14.3打印机端口应用实例295

14.4输入输出复用函数308

第15章 任务队列和工作队列311

15.1任务队列和工作队列的必要性312

15.1.1需要持续监视特定输入输出时312

15.1.2中断处理程序难于及时处理时313

15.1.3需要处理中断服务程序不能胜任的其他工作时313

15.1.4当设备驱动程序需要与内核结构关联时313

15.2任务队列313

15.3工作队列316

15.3.1调度工作队列317

15.3.2设备驱动程序自身的工作队列320

15.4任务队列实例323

15.4.1实例源代码323

15.4.2运行方法327

15.5工作队列实例329

15.5.1实例源代码329

15.5.2执行方法333

15.6使用工作队列控制LED的应用实例334

15.7使用工作队列防止键盘输入的chattering现象338

15.8任务队列函数343

15.9工作队列函数344

第16章 Bottomhalf349

16.1 Tophalf和Bottomhalf350

16.2任务队列和mark_bh()函数352

16.3任务队列处理过程的修改(2.4→2.6)353

16.4中断发生时的检查实例353

16.5中断函数357

第17章proc文件系统359

17.1系统信息的确认360

17.2 proc文件系统362

17.3 proc文件系统的运行机制363

17.4虚拟机实例365

17.4.1实例源代码365

17.4.2实施方法373

17.5 proc文件系统相关函数374

第18章 内存映射379

18.1物理地址和虚拟地址380

18.1.1物理地址380

18.1.2虚拟地址和MMU380

18.1.3 Linux内核管理383

18.2地址变换函数384

18.2.1物理地址空间映射内核地址空间384

18.2.2输入输出物理地址和虚拟地址之间的转换函数385

18.3进程的内存映射386

18.3.1应用程序中调用的函vmmap()387

18.3.2设备驱动程序的mmap388

18.3.3 nopage映射方式392

18.4有关mmap()函数参数值传传递的实例396

18.4.1实例源代码396

18.4.2实施方法400

18.5 VIDEO输入输出的内存mmap实现实例401

18.5.1实例源代码402

18.5.2实施方法407

18.6使用nopage实现mmap的实例408

18.6.1实例源代码408

18.6.2实施方法414

18.7内存映射相关函数415

19.1模块间引用与 EXPORT_ SYMBOL宏420

19.2不同版本中内核符号表的注 册方法421

19.2.1 2.4内核的情况421

19.2.2 2.6内核的情况421

19.3模块间符号引用的实例*420422

19.3.1实例源代码422

19.3.2实施方法426

20.1单进程环境下的设备驱动程序430

20.2多进程环境下的处理431

20.2.1多进程中的数据处理431

20.2.2进程重入432

20.3非抢占式内核环境下的设备驱动程序434

20.4抢占式内核环境下的设备驱动程序434

20.4.1抢占式内核的输入输动处理435

20.4.2抢占式内核的重入处理436

21.1.4内核源代码中合成设备驱动程序的位置442

21.1.5内核编译选项文件的修改442

21.1.6内核源代码中Makefile的修改443

21.1需要考虑的事项438

21.1.1头文件和模块编译区分常数438

21.1.2设备驱动程序的初始化处理439

21.1.3内核命令处理440

21.2内核编译选项文件443

21.2.1.config文件443

21.2.2 include/linux/autoconf.h444

21.2.3 2.4内核编译选项文件的语法规则444

21.2.4 2.6内核编译选项文件的语法规则449

21.3 Makefile文件的语法规则454

21.3.1 2.4内核455

21.3.2 2.6内核456

21.4将设备驱动程序包含到内核的应用实例456

21.4.1实例1457

21.4.2实例2461

22.1 Linux与块设备驱动程序466

22.1.1硬盘和设备文件466

22.1.2辅助记忆装置和设备文件466

22.1.3 mount和文件系统467

22.1.4块设备驱动程序468

22.2硬盘的特点468

22.2.1硬盘的结构468

22.2.2硬盘的数据处理方式469

22.3块设备驱动程序与请求队列470

22.4不同版本中块设备驱动程序的处理472

22.5 2.4内核中的块设备处理474

22.5.1定义块设备的特性474

22.5.2定义主设备号和从设备号及设备名475

22.5.3定义与linux/blk.h相关的宏476

22.5.4注册块设备驱动程序并处理file_ operation结构体477

22.5.5请求队列相关处理及函数480

22.5.6处理块设备特性相关的内核全局变量484

22.5.7分区处理相关的gendisk结构体变量的定义和注册484

22.5.8增加块设备并检索分区487

22.5.9注销块设备驱动程序487

22.6使用make_request方式创建RAM Disk的实例(2.4版)488

22.6.1实例源代码488

22.6.2实施方法493

22.7利用request方式创建虚拟硬盘的实例(2.4版)494

22.7.1实例源代码495

22.7.2实施方法506

22.8 2.6内核版的块设备驱动程序508

22.8.1块设备驱动程序的注册和注销508

22.8.2定义块设备驱动程序的结构体509

22.8.3 struct block_device_operations509

22.8.4请求队列相关的处理及函数510

22.8.5 gendisk结构体的生成及注册514

22.8.6设置块设备的容量517

22.8.7注销块设备驱动程序517

22.9利用make_request方式创建RAM Disk的实例(2.6版)517

22.9.1实例源代码518

22.9.2实施方法523

22.10使用request方式创建虚拟硬盘的实例(2.6版)524

22.10.1实例源代码525

22.10.2实施方法533

22.11块设备相关函数(2.4版)535

22.12块设备相关函数(2.6版)537

第23章 网络设备驱动程序541

23.1 Linux系统网络设备驱动程序542

23.1.1 Linux网络542

23.1.2网络设备驱动程序的运行546

23.2网络设备驱动程序的注册与注销547

23.2.1使用提供函数注册的网络设备驱动程序548

23.2.2注册新型网络设备驱动程序551

23.3基本的初始化及注册过程553

23.3.1初始化调用处理和Space.c553

23.3.2 PC I设备的硬件检索和初始化556

23.3.3模块变量io和irq557

23.4 net_ device结构体的说明558

23.5网络设备驱动程序的打开和关闭564

23.5.1网络设备的控制565

23.5.2网络界面的激活565

23.5.3网络界面的非激活566

23.6发送和接收567

23.6.1 struct sk buff568

23.6.2发送处理570

23.6.3超出传送时间的处理573

23.6.4中断(interrupt )处理574

23.6.5接收处理578

23.7统计处理585

23.8网络设备驱动程序的控制587

23.9多播处理588

23.10网络设备驱动程序相关函数589

第24章 设备文件系统591

24.1 devfs文件系统592

24.1.1激活devfs文件592

24.1.2 2.6内核devfs文件系统支持函数594

24.2设备文件的创建实例596

24.2.1实例源代码596

24.2.2实施方法598

24.3 devfs相关函数600

25.1 sysfs文件系统604

25.1.1什么是sysfs文件系统604

25.1.2 kobject结构体和sysfs文件系统604

25.2 sysfs文件系统的应用606

25.2.1 sysfs文件系统中显示文件607

25.2.2从sysfs文件系统获得文件对象609

第26章 移植系统的移植、信号和帮助615

26.1向移植系统移植616

26.2 ARM的DIO设备驱动程序实例618

26.2.1回路说明619

26.2.2设备驱动程序的设计619

26.2.3测试用应用程序的设计620

26.2.4测试用应用程序的设计620

26.3信号和SIGIO635

26.4 SIGIO信号处理实例638

26.4.1实例源代码639

26.4.2实施方法643

26.5 call_usermodehelper的应用实例644

26.5.1实例源代码644

26.5.2实施方法646

26.6 modprobe和模块加载请求的处理646

第27章 DMAG与PCI设备649

27.1 DMA650

27.1.1什么是DMA650

27.1.2 Linux中的DMA处理651

27.1.3 DMA和MMAP655

27.2 PCI656

27.2.1 PnP和设备环境设置空间657

27.2.2 PCI设备的设备驱动程序665

27.2.3总线主控DMA671

热门推荐