《Linux设备驱动开发入门与编程实践》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:商斌编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2009
  • ISBN:9787121075650
  • 页数:588 页
图书介绍:本书着重介绍嵌入式Linux 驱动开发技术。本书从嵌入式系统开发的基础概念讲起,共分12章。前两章依次介绍嵌入式Linux系统开发的基础知识,并介绍了Linux系统开发工具链、嵌入式Linux内核分析与移植技术;第3章介绍Linux设备驱动程序开发的一般技术和基本过程;第4到9章依次详细剖析字符设备、PCI设备、音频接口、显示接口、块设备、网络设备的驱动开发技术;第9到12章分别介绍USB设备驱动开发的一般知识、USB驱动的设备端及主机端设计以及OTG驱动程序的开发。

第1章 嵌入式Linux系统开发概述 1

1.1嵌入式系统概述 1

你身边的嵌入式系统 1

什么是嵌入式系统 4

嵌入式系统的发展 7

嵌入式系统市场规模 8

嵌入式系统发展趋势和面临的挑战 9

1.2嵌入式操作系统 10

嵌入式操作系统的特点 10

嵌入式操作系统发展概述 11

Linux操作系统特点 12

嵌入式Linux系统的特点 13

国外嵌入式Linux发展现状 16

国内嵌入式Linux发展现状 18

1.3 ARM处理器平台介绍 20

嵌入式处理器特点与分类 20

ARM处理器介绍 22

ARM体系结构 24

1.4嵌入式Linux的体系结构分析 27

嵌入式系统的体系结构 27

硬件抽象层的Linux 29

1.5基本编辑器vi的使用 31

进入和退出vi 31

vi的基本编辑命令 32

vi的高级编辑命令 35

1.6高级编辑器Emacs的使用 37

Emacs的启动与退出 38

Emacs的基本操作 39

Emacs的高级命令 41

1.7编译器GCC的使用 44

GCC简介 44

GCC的编译过程 45

GCC的常用模式 46

GCC的常用选项 47

GCC的警告功能 48

1.8调试器GDB的使用 50

GDB的调试过程 50

GDB的基本命令 52

GDB的高级命令 55

1.9 Make工程管理器 59

Make管理器简介 59

Makefile的描述规则 60

一个简单示例 61

Make如何工作 63

指定变量 64

自动推导规则 65

另类风格的Makefile 66

清除工作目录过程文件 67

1.10本章小结 68

第2章 嵌入式Linux内核分析与移植 69

2.1 Linux内核版本 69

日新月异的Linux内核版本 69

Linux 2.4内核特性 71

Linux 2.6内核针对嵌入式系统的改进 72

2.2 Linux操作系统内核结构分析 73

Linux核心源程序的文件组织结构 73

Linux的内核组成 75

Linux内核进程管理工作机制 78

Linux内存管理工作机制 81

Linux虚拟文件系统工作机制 82

进程间通信 83

2.3搭建嵌入式Linux系统开发环境 84

嵌入式平台介绍 85

嵌入式Linux系统的组成及设计步骤 86

嵌入式Linux开发工具链 87

2.4 Linux内核配置基础 89

Linux内核所支持的配置方式 90

make menuconfig配置方法 91

Linux 2.4内核配置文件config.in介绍 92

Linux2.6内核Kconfig文件的用法 93

Kconfig文件配置实例 95

2.5 Linux内核配置选项 96

General setup 96

Loadable modulesupport 99

Processor type andfeatures 100

Networking support 102

Device Drivers 102

2.6 Linux内核编译基础 121

Linux内核编译基本步骤 121

Rules.make文件用法 121

Makefile配置文件的用法 122

配置、编译Linux内核命令说明 124

Linux内核配置编译实例 125

2.7 Linux内核移植 128

Bootloader简介 129

引导程序原理 130

内核移植及代码分析 133

VIVI结构分析 137

VIVI移植实现 140

2.8本章小结 142

第3章 Linux设备驱动程序开发概述 143

3.1 Linux系统设备概述 143

字符设备 143

块设备 144

网络设备 144

Linux设备驱动程序的共性 144

3.2设备驱动程序的概念 145

3.3设备驱动程序与内核的接口 146

3.4内核为驱动程序提供的支持 147

内存分配函数 147

DMA 148

I/O端口 148

打印函数 148

3.5主要数据结构 149

struct device_struct 149

struct file_operations 149

struct inode 150

3.6模块化的概念 152

3.7内存管理问题 153

Linux内核对内存的管理方法 153

kmalloc()和kfree() 153

面向页的分配技术 154

vmalloc()和相关函数 154

3.8中断响应和处理 155

中断处理机制 155

中断处理的数据结构 156

中断处理中的3个重要概念 158

申请和释放中断 159

自动检测中断号 160

快/慢速中断处理 160

实现中断处理程序 160

驱动程序下半部的设计 163

安装共享的处理程序 164

3.9 I/O端口 164

3.10 DMA处理 165

3.11时间流 166

时钟的申请与释放 167

实现延迟 167

任务队列 168

3.12编写、编译和调试 169

3.13本章小结 172

第4章 Linux字符设备驱动程序开发 173

4.1 Linux字符设备驱动程序结构 173

4.2字符设备驱动的相似点 173

4.3主设备号和次设备号 174

4.4字符设备驱动程序的组成 175

4.5字符驱动程序模型 175

4.6可靠性机制 176

4.7文件操作 176

4.8字符设备驱动程序中用到的主要数据结构 177

4.9字符设备的注册和注销 181

4.10使用内存和读写I/O端口 182

4.11字符设备驱动程序中用到的主要函数 183

4.12 chardevxxx设备的驱动程序设计 186

4.13 Linux 2.6内核下的字符设备驱动介绍 188

cdev结构体 188

分配和释放设备号 190

file_operations结构体 190

字符设备驱动模块加载与卸载函数 193

字符设备驱动的file_operations结构体中成员 194

4.14 globalmem设备驱动 196

头文件、宏及设备结构体 196

加载与卸载设备驱动 197

读写函数 198

seek函数 200

globalmem的ioctl()函数 201

ioctl()命令 202

预定义命令 203

使用文件私有数据 203

globalmem驱动在用户空间的验证 211

4.15 本章小结 212

第5章 基于DSP的PCI图像采集卡驱动程序 213

5.1 PCI总线介绍 213

PCI总线概述 213

PCI局部总线概述 214

PCI局部总线的特点 215

PCI总线信号 216

PCI总线命令 218

PCI总线配置空间 218

PCI总线配置过程 221

PCI总线的传输控制 222

5.2 DSP图像卡的PCI接口设计 223

系统结构介绍 223

PCI2040的基本特点 224

PCI2040芯片的功能单元 224

PCI2040配置流程 225

PCI总线与DSP的接口实现 226

串行E2PROM的初始化 227

5.3 DSP图像卡驱动程序实例分析 228

主要的数据结构 228

驱动程序流程 229

初始化设备模块 230

打开设备模块 232

数据读写和控制信息模块 233

中断处理模块 233

释放设备模块 234

卸载设备模块 234

5.4本章小结 235

第6章 音频接口设计与Linux驱动程序 237

6.1嵌入式音频系统简介 237

S3C2410微处理器简介 237

S3C2410微处理器的结构框图及其特性 238

系统设计概述 239

系统时钟电路 242

S3C2410存储控制器介绍 242

SDRAM电路 243

Flash缓冲电路设计 245

NOR Flash电路 246

NAND Flash接口电路 247

IIS数字音频电路 247

串口电路 249

JTAG接口电路 249

LCD和触摸屏接口电路 250

6.2 UDA 1341 TS芯片设备驱动程序设计 251

UDA 1341 TS芯片介绍 251

驱动程序中file_operations数据结构 252

驱动程序的加载和卸载 253

6.3 SOUND驱动的实现 255

SOUND设备的打开和释放 255

定义SOUND设备的读写函数 258

SOUND设备的控制操作处理 262

SOUND设备驱动程序的其他部分 267

Mixer驱动的实现 268

6.4本章小结 270

第7章 显示设备接口设计与Linux驱动程序 271

7.1嵌入式显示系统简介 271

7.2显示驱动的基础与原理 272

时序信号 272

TFT LCD的驱动技术 272

TFT LCD驱动电路 273

像素值的属性 274

像素深度、像素值与颜色的映射关系 274

像素值与显示内存的映射关系 276

调色板的原理 276

调色板的作用 277

彩色LCD显示驱动的原理 277

7.3软、硬件平台简介 280

硬件开发平台 280

软件平台 281

软件开发环境 281

7.4基于PXA 255的显示功能的硬件实现 281

PXA 255处理器介绍 282

PXA 255的LCD控制器的特点 282

LCD控制器的使用 284

LCD控制寄存器配置 285

设定DMA通道 288

Sony彩屏的特性 289

LCD与处理器的硬件连接方案 291

7.5显示驱动开发介绍 292

显示驱动与字符设备的关系 292

显示驱动的发展 292

当前显示驱动的不足 294

7.6基于PXA 255的显示驱动的实现 294

显示驱动的系统分析 295

驱动上层文件的功能 295

驱动底层文件的功能 296

驱动程序底层文件实现的基础 298

7.7基于PXA 255的显示功能的软件方案 302

上层文件的实现 303

底层文件的实现方案 304

驱动底层文件的实现 304

针对XScale架构中其余处理器的移植 311

7.8本章小结 312

第8章 ARM Linux块设备驱动程序开发 313

8.1块设备驱动程序开发概述 313

块设备特点 313

块设备基于缓冲区的数据交换 314

块设备读写请求 315

块设备驱动程序模型 318

基于内存的块设备驱动程序 318

8.2 Linux块设备驱动结构 319

block_device_operations结构体 319

gendisk结构体 321

request与bio结构体 322

8.3块设备驱动主要函数 331

块设备驱动程序的注册与注销 331

Linux块设备驱动模块加载与卸载 332

块设备的打开与释放 334

块设备驱动的ioctl函数 335

块设备驱动I/O请求处理 336

8.4 RAMDISK驱动开发实例 340

RAMDISK的硬件原理 340

RAMDISK驱动模块加载与卸载 341

RAMDISK设备驱动block_device_operations及成员函数 343

8.5 IDE硬盘设备驱动开发实例 345

IDE硬盘设备原理 345

IDE硬盘设备驱动block_device_operations及成员函数 348

IDE硬盘设备驱动I/O请求处理 359

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

8.6本章小结 371

第9章 嵌入式Linux网络设备驱动程序开发 373

9.1嵌入式以太网基础知识 373

以太网技术及其嵌入式应用 373

嵌入式系统中主要处理的网络协议 375

ARP(Address ResolutionProtocol)地址解析协议 376

IP(Internet Protocol)网际协议 376

TCP(Transfer ControlProtocol)传输控制协议 377

UDP(User DatagramProtocol)用户数据包协议 378

9.2基于CS8900A芯片的设备驱动设计 378

CS8900A芯片结构 379

CS8900A芯片特性 380

CS8900A芯片工作原理 380

CS8900A芯片工作模式 380

网络设备驱动程序基本结构 383

9.3基于Linux的网络设备驱动开发常用的数据结构 385

数据结构struct net_device 385

数据结构struct sk_buff 393

9.4网络驱动程序的实现模式及系统调用方法 397

网络驱动程序的实现模式与模块化 397

内存获取与释放 399

链路状态改变系统调用 400

与网络层交互数据包的函数 400

9.5网络驱动程序的基本方法 401

网络驱动程序的结构 401

初始化(Initialize) 401

打开(open) 417

关闭(close) 425

发送(hard_start_xmit) 426

接收(reception) 429

中断处理(interrupt) 434

硬件帧头(hard_header) 438

地址解析(XARP) 439

参数设置和统计数据 439

多播(set_multicast_list) 443

9.6本章小结 446

第10章 嵌入式Linux USB驱动程序设计基础 449

10.1 USB总线协议背景知识 449

USB协议的产生 449

USB的特点 450

USB的广泛应用 451

USB在嵌入式设备中的应用 453

计算机常用外部总线比较 454

10.2 USB总线技术介绍 455

USB系统拓扑结构 456

USB总线逻辑结构 457

USB总线特性介绍 458

USB总线电气机械特性 459

USB的即插即用特性 460

鲁棒性的实现 464

USB电源管理 466

总线通道 467

传输协议 468

传输类型 473

设备框架 479

USB主机协议 482

10.3 Linux USB子系统结构 484

文件系统 485

Linux中USB子系统的软件结构及实现 489

Linux USB内核的主要数据结构 490

USB内核函数接口分析 497

10.4本章小结 516

第11章 USB接口系统软件设计 517

11.1 USB系统软件设计概述 517

主机端设备驱动程序 517

主机控制器驱动程序 517

设备端驱动程序 518

数据管道和数据块结构 518

11.2 USB设备端软件的开发 519

USB设备通用模块的软件开发 519

USB设备协议模块的软件开发 520

控制端点处理程序 521

协议层程序 524

11.3 USB主机端软件开发 525

Linux内核对USB规范的支持 525

USB时序 527

主机控制器驱动程序设计 527

主机控制器的初始化和管理 539

传输执行和资源调度 541

主机控制器的中断处理 545

虚拟根集线器 546

主机控制器驱动程序的任务 551

URB在驱动软件中运作 551

主机端设备驱动程序 552

11.4本章小结 556

第12章 OTG驱动功能模块的设计与实现 557

12.1 OTG概述 557

OTG特性简介 557

A设备事件 558

B设备事件 559

状态机 560

SRP 562

HNP 563

12.2设备模块的设计与实现 563

USB设备的状态 563

OTG驱动功能模块的设计 565

ISP1761结构 565

HAL的设计和实现 567

HCD的设计和实现 569

USBD接口模块 570

ISP1761读写操作模块 578

HCD初始化模块 579

中断管理模块 580

根集线器模块 580

数据传输模块 580

设备模块的设计和实现 581

OTG FSM的设计和实现 583

12.3本章小结 588