首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 图书频道 > 计算机与网络 > 操作系统 >

Linux设备驱动开发入门与编程实践

2010-04-13 
基本信息·出版社:电子工业出版社 ·页码:588 页 ·出版日期:2009年01月 ·ISBN:7121075652/9787121075650 ·条形码:9787121075650 ·版本:第1版 · ...
商家名称 信用等级 购买信息 订购本书
Linux设备驱动开发入门与编程实践 去商家看看
Linux设备驱动开发入门与编程实践 去商家看看

 Linux设备驱动开发入门与编程实践


基本信息·出版社:电子工业出版社
·页码:588 页
·出版日期:2009年01月
·ISBN:7121075652/9787121075650
·条形码:9787121075650
·版本:第1版
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:嵌入式开发专家

内容简介 《Linux设备驱动开发入门与编程实践》从嵌入式系统开发的基础概念讲起,着重介绍了嵌入式Linux驱动开发技术。
全书共分12章。前两章介绍了嵌入式Linux系统开发的基础知识,以及Linux系统开发工具链、嵌入式Linux内核分析与移植技术;第3章介绍了Linux设备驱动程序开发的一般技术和基本过程;第4章到第9章详细剖析了字符设备、PCI设备、音频接口、显示接口、块设备、网络设备的驱动开发技术;第10章到第12章分别介绍了USB设备驱动开发的知识、USB驱动的设备端及主机端的设计,以及OTG驱动程序的开发。
《Linux设备驱动开发入门与编程实践》具有由浅入深、通俗易懂和注重实践等特点,适合于具备一定嵌入式Linux开发经验,需要从事或学习嵌入式Linux驱动程序设计的读者作为嵌入式Linux驱动开发的自学教材;同时也适合已掌握Linux驱动程序设计的一般原理,需要提高嵌入式Linux驱动开发实践能力及对嵌入式Linux驱动开发感兴趣的程序员参考学习。
编辑推荐 全面介绍嵌入式Linux驱动开发技术
丰富的项目实例
详尽的代码+完整的注解
嵌入式驱动开发入门、进阶必读教程
《Linux设备驱动开发入门与编程实践》力求完整、系统地介绍嵌入式Linux驱动开发的相关知识,并以多个项目实例讲解了基于Linux的字符设备、PCI设备、音频接口、显示接口、块设备、网络设备及USB设备的驱动开发技术。全书讲解由浅入深、通俗易懂、注重实践,希望读者通过对《Linux设备驱动开发入门与编程实践》的学习,能够清晰地认识嵌入式Linux驱动程序开发的相关技术,并掌握真正实用的编程思想和方法。《Linux设备驱动开发入门与编程实践》适合于具备一定嵌入式Linux开发经验,需要从事或学习嵌入式Linux驱动程序设计的读者作为嵌入式Linux驱动开发的自学教材:同时也适合已掌握Linux驱动程序设计的一般原理,需要提高嵌入式Linux驱动开发实践能力及对嵌入式Linux驱动开发感兴趣的程序员参考学习。
目录
第1章 嵌入式Linux系统开发概述1
1.1 嵌入式系统概述1
1.1.1 你身边的嵌入式系统1
1.1.2 什么是嵌入式系统4
1.1.3 嵌入式系统的发展7
1.1.4 嵌入式系统市场规模8
1.1.5 嵌入式系统发展趋势和面临的挑战9
1.2 嵌入式操作系统10
1.2.1 嵌入式操作系统的特点10
1.2.2 嵌入式操作系统发展概述11
1.2.3 Linux操作系统特点12
1.2.4 嵌入式Linux系统的特点13
1.2.5 国外嵌入式Linux发展现状16
1.2.6 国内嵌入式Linux发展现状18
1.3 ARM处理器平台介绍20
1.3.1 嵌入式处理器特点与分类20
1.3.2 ARM处理器介绍22
1.3.3 ARM体系结构24
1.4 嵌入式Linux的体系结构分析27
1.4.1 嵌入式系统的体系结构27
1.4.2 硬件抽象层的Linux29
1.5 基本编辑器vi的使用31
1.5.1 进入和退出vi31
1.5.2 vi的基本编辑命令32
1.5.3 vi的高级编辑命令35
1.6 高级编辑器Emacs的使用37
1.6.1 Emacs的启动与退出38
1.6.2 Emacs的基本操作39
1.6.3 Emacs的高级命令41
1.7 编译器GCC的使用44
1.7.1 GCC简介44
1.7.2 GCC的编译过程45
1.7.3 GCC的常用模式46
1.7.4 GCC的常用选项47
1.7.5 GCC的警告功能48
1.8 调试器GDB的使用50
1.8.1 GDB的调试过程50
1.8.2 GDB的基本命令52
1.8.3 GDB的高级命令55
1.9 Make工程管理器59
1.9.1 Make管理器简介59
1.9.2 Makefile的描述规则60
1.9.3 一个简单示例61
1.9.4 Make如何工作63
1.9.5 指定变量64
1.9.6 自动推导规则65
1.9.7 另类风格的Makefile66
1.9.8 清除工作目录过程文件67
1.10 本章小结68

第2章 嵌入式Linux内核分析与移植69
2.1 Linux内核版本69
2.1.1 日新月异的Linux内核版本69
2.1.2 Linux 2.4内核特性71
2.1.3 Linux 2.6内核针对嵌入式系统的改进72
2.2 Linux操作系统内核结构分析73
2.2.1 Linux核心源程序的文件组织结构73
2.2.2 Linux的内核组成75
2.2.3 Linux内核进程管理工作机制78
2.2.4 Linux内存管理工作机制81
2.2.5 Linux虚拟文件系统工作机制82
2.2.6 进程间通信83
2.3 搭建嵌入式Linux系统开发环境84
2.3.1 嵌入式平台介绍85
2.3.2 嵌入式Linux系统的组成及设计步骤86
2.3.3 嵌入式Linux开发工具链87
2.4 Linux内核配置基础89
2.4.1 Linux内核所支持的配置方式90
2.4.2 make menuconfig配置方法91
2.4.3 Linux 2.4内核配置文件config.in介绍92
2.4.4 Linux2.6内核Kconfig文件的用法93
2.4.5 Kconfig文件配置实例95
2.5 Linux内核配置选项96
2.5.1 General setup96
2.5.2 Loadable module support99
2.5.3 Processor type and features100
2.5.4 Networking support102
2.5.5 Device Drivers102
2.6 Linux内核编译基础121
2.6.1 Linux内核编译基本步骤121
2.6.2 Rules.make文件用法121
2.6.3 Makefile配置文件的用法122
2.6.4 配置、编译Linux内核命令说明124
2.6.5 Linux内核配置编译实例125
2.7 Linux内核移植128
2.7.1 Bootloader简介129
2.7.2 引导程序原理130
2.7.3 内核移植及代码分析133
2.7.4 VIVI结构分析137
2.7.5 VIVI移植实现140
2.8 本章小结142

第3章 Linux设备驱动程序开发概述143
3.1 Linux系统设备概述143
3.1.1 字符设备143
3.1.2 块设备144
3.1.3 网络设备144
3.1.4 Linux设备驱动程序的共性144
3.2 设备驱动程序的概念145
3.3 设备驱动程序与内核的接口146
3.4 内核为驱动程序提供的支持147
3.4.1 内存分配函数147
3.4.2 DMA148
3.4.3 I/O端口148
3.4.4 打印函数148
3.5 主要数据结构149
3.5.1 struct devicestruct149
3.5.2 struct fileoperations149
3.5.3 struct inode150
3.6 模块化的概念152
3.7 内存管理问题153
3.7.1 Linux内核对内存的管理方法153
3.7.2 kmalloc()和kfree()153
3.7.3 面向页的分配技术154
3.7.4 vmalloc()和相关函数154
3.8 中断响应和处理155
3.8.1 中断处理机制155
3.8.2 中断处理的数据结构156
3.8.3 中断处理中的3个重要概念158
3.8.4 申请和释放中断159
3.8.5 自动检测中断号160
3.8.6 快/慢速中断处理160
3.8.7 实现中断处理程序160
3.8.8 驱动程序下半部的设计163
3.8.9 安装共享的处理程序164
3.9 I/O端口164
3.10 DMA处理165
3.11 时间流166
3.11.1 时钟的申请与释放167
3.11.2 实现延迟167
3.11.3 任务队列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
4.13.1 cdev结构体188
4.13.2 分配和释放设备号190
4.13.3 file_operations结构体190
4.13.4 字符设备驱动模块加载与卸载函数193
4.13.5 字符设备驱动的file_operations结构体中成员194
4.14 globalmem设备驱动196
4.14.1 头文件、宏及设备结构体196
4.14.2 加载与卸载设备驱动197
4.14.3 读写函数198
4.14.4 seek 函数200
4.14.5 globalmem的ioctl()函数201
4.14.6 ioctl()命令202
4.14.7 预定义命令203
4.14.8 使用文件私有数据203
4.14.9 globalmem驱动在用户空间的验证211
4.15 本章小结212

第5章 基于DSP的PCI图像采集卡驱动程序213
5.1 PCI总线介绍213
5.1.1 PCI总线概述213
5.1.2 PCI局部总线概述214
5.1.3 PCI局部总线的特点215
5.1.4 PCI总线信号216
5.1.5 PCI总线命令218
5.1.6 PCI总线配置空间218
5.1.7 PCI总线配置过程221
5.1.8 PCI总线的传输控制222
5.2 DSP图像卡的PCI接口设计223
5.2.1 系统结构介绍223
5.2.2 PCI2040的基本特点224
5.2.3 PCI2040芯片的功能单元224
5.2.4 PCI2040配置流程225
5.2.5 PCI总线与DSP的接口实现226
5.2.6 串行E2PROM的初始化227
5.3 DSP图像卡驱动程序实例分析228
5.3.1 主要的数据结构228
5.3.2 驱动程序流程229
5.3.3 初始化设备模块230
5.3.4 打开设备模块232
5.3.5 数据读写和控制信息模块233
5.3.6 中断处理模块233
5.3.7 释放设备模块234
5.3.8 卸载设备模块234
5.4 本章小结235

第6章 音频接口设计与Linux驱动程序237
6.1 嵌入式音频系统简介237
6.1.1 S3C2410微处理器简介237
6.1.2 S3C2410微处理器的结构框图及其特性238
6.1.3 系统设计概述239
6.1.4 系统时钟电路242
6.1.5 S3C2410存储控制器介绍242
6.1.6 SDRAM电路243
6.1.7 Flash缓冲电路设计245
6.1.8 NOR Flash电路246
6.1.9 NAND Flash接口电路247
6.1.10 IIS数字音频电路247
6.1.11 串口电路249
6.1.12 JTAG接口电路249
6.1.13 LCD和触摸屏接口电路250
6.2 UDA1341TS芯片设备驱动程序设计251
6.2.1 UDA1341TS芯片介绍251
6.2.2 驱动程序中file_operations数据结构252
6.2.3 驱动程序的加载和卸载253
6.3 SOUND驱动的实现255
6.3.1 SOUND设备的打开和释放255
6.3.2 定义SOUND设备的读写函数258
6.3.3 SOUND设备的控制操作处理262
6.3.4 SOUND设备驱动程序的其他部分267
6.3.5 Mixer驱动的实现268
6.4 本章小结270

第7章 显示设备接口设计与Linux驱动程序271
7.1 嵌入式显示系统简介271
7.2 显示驱动的基础与原理272
7.2.1 时序信号272
7.2.2 TFT LCD的驱动技术272
7.2.3 TFT LCD驱动电路273
7.2.4 像素值的属性274
7.2.5 像素深度、像素值与颜色的映射关系274
7.2.6 像素值与显示内存的映射关系276
7.2.7 调色板的原理276
7.2.8 调色板的作用277
7.2.9 彩色LCD显示驱动的原理277
7.3 软、硬件平台简介280
7.3.1 硬件开发平台280
7.3.2 软件平台281
7.3.3 软件开发环境281
7.4 基于PXA 255的显示功能的硬件实现281
7.4.1 PXA 255处理器介绍282
7.4.2 PXA 255的LCD控制器的特点282
7.4.3 LCD控制器的使用284
7.4.4 LCD控制寄存器配置285
7.4.5 设定DMA通道288
7.4.6 Sony彩屏的特性289
7.4.7 LCD与处理器的硬件连接方案291
7.5 显示驱动开发介绍292
7.5.1 显示驱动与字符设备的关系292
7.5.2 显示驱动的发展292
7.5.3 当前显示驱动的不足294
7.6 基于PXA 255的显示驱动的实现294
7.6.1 显示驱动的系统分析295
7.6.2 驱动上层文件的功能295
7.6.3 驱动底层文件的功能296
7.6.4 驱动程序底层文件实现的基础298
7.7 基于PXA 255的显示功能的软件方案302
7.7.1 上层文件的实现303
7.7.2 底层文件的实现方案304
7.7.3 驱动底层文件的实现304
7.7.4 针对XScale架构中其余处理器的移植311
7.8 本章小结312

第8章 ARM Linux块设备驱动程序开发313
8.1 块设备驱动程序开发概述313
8.1.1 块设备特点313
8.1.2 块设备基于缓冲区的数据交换314
8.1.3 块设备读写请求315
8.1.4 块设备驱动程序模型318
8.1.5 基于内存的块设备驱动程序318
8.2 Linux块设备驱动结构319
8.2.1 block_device_operations结构体319
8.2.2 gendisk结构体321
8.2.3 request与bio结构体322
8.3 块设备驱动主要函数331
8.3.1 块设备驱动程序的注册与注销331
8.3.2 Linux块设备驱动模块加载与卸载332
8.3.3 块设备的打开与释放334
8.3.4 块设备驱动的ioctl函数335
8.3.5 块设备驱动I/O请求处理336
8.4 RAMDISK驱动开发实例340
8.4.1 RAMDISK的硬件原理340
8.4.2 RAMDISK驱动模块加载与卸载341
8.4.3 RAMDISK设备驱动block_device_operations及成员函数343
8.5 IDE硬盘设备驱动开发实例345
8.5.1 IDE硬盘设备原理345
8.5.2 IDE硬盘设备驱动block_device_operations及成员函数348
8.5.3 IDE硬盘设备驱动I/O请求处理359
8.5.4 在内核中增加对新系统IDE设备的支持368
8.6 本章小结371

第9章 嵌入式Linux网络设备驱动程序开发373
9.1 嵌入式以太网基础知识373
9.1.1 以太网技术及其嵌入式应用373
9.1.2 嵌入式系统中主要处理的网络协议375
9.1.3 ARP(Address ResolutionProtocol)地址解析协议376
9.1.4 IP(Internet Protocol)网际协议376
9.1.5 TCP(Transfer ControlProtocol)传输控制协议377
9.1.6 UDP(User DatagramProtocol)用户数据包协议378
9.2 基于CS8900A芯片的设备驱动设计378
9.2.1 CS8900A芯片结构379
9.2.2 CS8900A芯片特性380
9.2.3 CS8900A芯片工作原理380
9.2.4 CS8900A芯片工作模式380
9.2.5 网络设备驱动程序基本结构383
9.3 基于Linux的网络设备驱动开发常用的数据结构385
9.3.1 数据结构struct net_device385
9.3.2 数据结构struct sk_buff393
9.4 网络驱动程序的实现模式及系统调用方法397
9.4.1 网络驱动程序的实现模式与模块化397
9.4.2 内存获取与释放399
9.4.3 链路状态改变系统调用400
9.4.4 与网络层交互数据包的函数400
9.5 网络驱动程序的基本方法401
9.5.1 网络驱动程序的结构401
9.5.2 初始化(Initialize)401
9.5.3 打开(open)417
9.5.4 关闭(close)425
9.5.5 发送(hard_start_xmit)426
9.5.6 接收(reception)429
9.5.7 中断处理(interrupt)434
9.5.8 硬件帧头(hard_header)438
9.5.9 地址解析(XARP)439
9.5.10 参数设置和统计数据439
9.5.11 多播(set_multicast_list)443
9.6 本章小结446

第10章 嵌入式Linux USB驱动程序设计基础449
10.1 USB总线协议背景知识449
10.1.1 USB协议的产生449
10.1.2 USB的特点450
10.1.3 USB的广泛应用451
10.1.4 USB在嵌入式设备中的应用453
10.1.5 计算机常用外部总线比较454
10.2 USB总线技术介绍455
10.2.1 USB系统拓扑结构456
10.2.2 USB总线逻辑结构457
10.2.3 USB总线特性介绍458
10.2.4 USB总线电气机械特性459
10.2.5 USB的即插即用特性460
10.2.6 鲁棒性的实现464
10.2.7 USB电源管理466
10.2.8 总线通道467
10.2.9 传输协议468
10.2.10 传输类型473
10.2.11 设备框架479
10.2.12 USB主机协议482
10.3 Linux USB子系统结构484
10.3.1 文件系统485
10.3.2 Linux中USB子系统的软件结构及实现489
10.3.3 Linux USB内核的主要数据结构490
10.3.4 USB内核函数接口分析497
10.4 本章小结516

第11章 USB接口系统软件设计517
11.1 USB系统软件设计概述517
11.1.1 主机端设备驱动程序517
11.1.2 主机控制器驱动程序517
11.1.3 设备端驱动程序518
11.1.4 数据管道和数据块结构518
11.2 USB设备端软件的开发519
11.2.1 USB设备通用模块的软件开发519
11.2.2 USB设备协议模块的软件开发520
11.2.3 控制端点处理程序521
11.2.4 协议层程序524
11.3 USB主机端软件开发525
11.3.1 Linux内核对USB规范的支持525
11.3.2 USB时序527
11.3.3 主机控制器驱动程序设计527
11.3.4 主机控制器的初始化和管理539
11.3.5 传输执行和资源调度541
11.3.6 主机控制器的中断处理545
11.3.7 虚拟根集线器546
11.3.8 主机控制器驱动程序的任务551
11.3.9 URB在驱动软件中运作551
11.3.10 主机端设备驱动程序552
11.4 本章小结556

第12章 OTG驱动功能模块的设计与实现557
12.1 OTG概述557
12.1.1 OTG特性简介557
12.1.2 A设备事件558
12.1.3 B设备事件559
12.1.4 状态机560
12.1.5 SRP562
12.1.6 HNP563
12.2 设备模块的设计与实现563
12.2.1 USB设备的状态563
12.2.2 OTG驱动功能模块的设计565
12.2.3 ISP1761结构565
12.2.4 HAL的设计和实现567
12.2.5 HCD的设计和实现569
12.2.6 USBD接口模块570
12.2.7 ISP1761读写操作模块578
12.2.8 HCD初始化模块579
12.2.9 中断管理模块580
12.2.10 根集线器模块580
12.2.11 数据传输模块580
12.2.12 设备模块的设计和实现581
12.2.13 OTG FSM的设计和实现583
12.3 本章小结588
……
序言 在数字信息技术和网络技术高速发展的后PC时代,嵌入式系统因其体积小、可靠性高、功能强、灵活方便等诸多优点,已渗透到工业、农业、教育、国防、科研及日常生活等各个领域,对各行各业的技术改造、产品更新换代、加速自动化进程、提高生产率等方面起到了极其重要的推动作用。同时,嵌入式Linux操作系统以其开放源代码、易于开发、功能强大、稳定、成本低等优势迅速跻身于主流嵌入式开发平台。
设备驱动程序是进入Linux内核世界的大门,对整个系统的运行起着至关重要的作用。对嵌入式Linux设备驱动的研究,有助于深入理解嵌入式Linux内核代码。设备驱动程序在Linux内核中扮演着特殊的角色,它们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐藏了设备的工作细节。Linux所支持的每一款硬件,一定要有配套的驱动程序,否则它就无法在Linux系统下发挥功能。也就是说,没有设备驱动程序,就不会有功能完整的运行系统。硬件必须有配套的驱动程序才能正常工作,由于嵌入式设备的种类繁多等特点决定了不同的嵌入式产品在开发时都必须设计自己的设备驱动程序,使得设备驱动程序的开发在整个嵌入式系统开发工作中占有举足轻重的地位。
而免费开源的Linux在嵌入式领域的发展为我国发展自己的嵌入式操作系统,扭转软件市场的被动局面,提供了难得的机遇,也为振兴国内软件行业找到了最佳的突破口,使我国有机会迎头赶上国际的先进水平。因此嵌入式Linux设备驱动程序的开发和研究具有重要的社会和商业价值。
文摘 插图:

热点排行