编辑推荐
《Linux驱动程序开发实例》深入讲解了Linux设备驱动程序开发,内容包括Linux驱动程序基础、内核移植、I2C驱动程序、LCD驱动程序、网络驱动程序、USB驱动程序、输入子系统驱动程序、块设备驱动程序等。《Linux驱动程序开发实例》提供了丰富的实例代码和详细的注释,并附赠代码光盘一张。
基于ARM体系结构
全面剖析Linux驱动程序开发的精髓
涵盖多种硬件接口驱动程序
附赠内核代码与实例源代码
内容简介
《Linux驱动程序开发实例》专门介绍Linux设备驱动程序开发,涵盖了Linux驱动程序基础、内核移植、I2C驱动程序、LCD驱动程序、网络驱动程序、USB驱动程序、输入子系统驱动程序、块设备驱动程序等内容。《Linux驱动程序开发实例》以实例为主线,是为Linux设备驱动程序开发人员量身打造的精品学习图书和实战指南。《Linux驱动程序开发实例》提供了丰富的实例代码和详细的注释,并附赠完整代码光盘一张。
《Linux驱动程序开发实例》主要面向各层次的嵌入式Linux开发工程师,也可以作为各类嵌入式系统培训机构的培训教材和高校计算机课程的教辅书籍。
内页插图
目录
出版说明
前言
第1章 Linux设备驱动程序模型1
1.1 设备驱动程序基础1
1.1.1 驱动程序的概念1
1.1.2 驱动程序的加载方式2
1.1.3 编写可加载模块3
1.1.4 带参数的可加载模块5
1.1.5 设备驱动程序的分类6
1.2 字符设备驱动程序原理7
1.2.1 file_operations结构7
1.2.2 使用register_chrdev注册字符设备9
1.2.3 使用cdev_add注册字符设备11
1.2.4 字符设备的读写13
1.2.5 ioctl接口14
1.2.6 seek接口16
1.2.7 poll接口18
1.2.8 异步通知22
1.3 proc文件系统24
1.3.1 proc文件系统概述24
1.3.2 seq_file机制25
1.3.3 使用proc文件系统27
1.4 块设备驱动程序32
1.4.1 Linux块设备驱动程序原理32
1.4.2 简单的块设备驱动程序实例35
1.5 网络设备驱动程序39
1.5.1 网络设备的特殊性39
1.5.2 sk_buff结构40
1.5.3 Linux网络设备驱动程序架构42
1.5.4 虚拟网络设备驱动程序实例46
1.6 Linux 2.6设备管理机制50
1.6.1 kobject和kset50
1.6.2 sysfs文件系统51
1.6.3 设备模型层次52
1.6.4 platform的概念54
第2章 Linux内核同步机制58
2.1 锁机制58
2.1.1 自旋锁58
2.1.2 读写锁60
2.1.3 RCU61
2.2 互斥64
2.2.1 原子操作64
2.2.2 信号量65
2.2.3 读写信号量67
2.3 等待队列68
2.3.1 等待队列原理68
2.3.2 阻塞式I/O实例68
2.3.3 完成事件70
2.4 关闭中断71
第3章 内存管理与链表72
3.1 物理地址和虚拟地址72
3.2 内存分配与释放72
3.3 IO端口到虚拟地址的映射73
3.3.1 静态映射73
3.3.2 动态映射75
3.4 内核空间到用户空间的映射76
3.4.1 内核空间到用户空间的地址映射原理76
3.4.2 mmap地址映射实例78
3.5 内核链表80
3.5.1 Linux内核中的链表80
3.5.2 内核链表实例81
第4章 延迟处理83
4.1 内核线程83
4.2 软中断机制85
4.2.1 软中断原理85
4.2.2 tasklet87
4.3 工作队列89
4.3.1 工作队列原理89
4.3.2 工作队列实例91
4.4 内核时间92
4.4.1 Linux中的时间概念92
4.4.2 Linux中的延迟93
4.4.3 内核定时器93
第5章 简单设备驱动程序96
5.1 寄存器访问96
5.1.1 S3C6410地址映射96
5.1.2 S3C6410看门狗驱动程序实例98
5.1.3 S3C6410蜂鸣器驱动程序实例102
5.2 电平控制107
5.2.1 S3C6410 LED驱动程序实例107
5.2.2 扫描型S3C6410按键驱动程序实例109
5.3 时序产生112
5.3.1 时序图原理112
5.3.2 AT24C02芯片原理112
5.3.3 AT24C02驱动程序开发实例115
5.4 硬中断处理123
5.4.1 硬中断处理原理123
5.4.2 中断型S3C6410按键驱动程序实例127
5.5 Linux I/O端口控制132
5.5.1 Linux I/O端口读写132
5.5.2 在应用层访问Linux I/O端口133
5.5.3 /dev/port设备134
第6章 深入Linux内核135
6.1 嵌入式Linux系统构成135
6.2 Linux内核导读136
6.2.1 Linux内核组成136
6.2.2 Linux的代码结构137
6.2.3 内核Makefile138
6.2.4 S3C6410硬件初始化139
6.3 Linux文件系统141
6.3.1 虚拟文件系统141
6.3.2 根文件系统143
6.3.3 文件系统加载143
6.3.4 ext3文件系统145
6.4 Flash文件系统145
6.4.1 MTD设备145
6.4.2 MTD字符设备148
6.4.3 MTD块设备150
6.4.4 cramfs文件系统153
6.4.5 JFFS2文件系统153
6.4.6 YAFFS文件系统155
6.4.7 文件系统总结156
6.5 Linux内核移植156
6.5.1 体系配置156
6.5.2 添加yaffs2157
6.5.3 Nand flash驱动程序移植157
6.5.4 配置启动参数159
6.5.5 移植RTC驱动程序160
6.6 根文件系统制作162
6.6.1 Busybox162
6.6.2 shell基础165
6.6.3 根文件系统构建实例166
6.7 udev模型167
6.7.1 udev模型原理167
6.7.2 mdev的使用167
第7章 I2C总线驱动程序169
7.1 Linux的I2C驱动程序架构169
7.1.1 I2C适配器169
7.1.2 I2C算法170
7.1.3 I2C驱动程序结构170
7.1.4 I2C从设备171
7.1.5 i2c-dev设备层171
7.2 Linux I2C驱动程序开发174
7.2.1 S3C2410X的I2C控制器174
7.2.2 S3C2410X的I2C驱动程序分析175
7.3 S3C2410的I2C访问实例182
7.4 I2C客户端驱动程序185
第8章 TTY与串口驱动程序190
8.1 TTY概念190
8.2 Linux TTY驱动程序体系190
8.2.1 TTY驱动程序调用关系190
8.2.2 TTY驱动程序原理191
8.3 线路规程194
8.4 串口驱动程序与TTY196
8.4.1 串口设备驱动程序原理196
8.4.2 S3C6410的串口驱动程序实例199
8.5 TTY应用层202
第9章 网络设备驱动程序205
9.1 DM9000网卡驱动程序开发205
9.1.1 DM9000原理205
9.1.2 DM9000X驱动程序分析207
9.1.3 DM9000网口驱动程序移植215
9.2 NFS根文件系统搭建219
9.2.1 主机配置219
9.2.2 NFS根文件系统搭建实例220
9.3 netlink Socket224
9.3.1 netlink机制224
9.3.2 netlink应用层编程228
9.3.3 netlink驱动程序实例229
第10章 framebuffer驱动程序232
10.1 Linux framebuffer驱动程序原理232
10.1.1 framebuffer核心数据结构232
10.1.2 framebuffer操作接口234
10.1.3 framebuffer驱动程序的文件接口236
10.1.4 framebuffer驱动程序框架236
10.2 S3C6410 显示控制器238
10.3 S3C6410 LCD驱动程序实例243
10.4 framebuffer应用层250
10.5 Qt4界面系统移植251
第11章 输入子系统驱动程序253
11.1 Linux输入子系统概述253
11.1.1 input_dev结构253
11.1.2 输入事件255
11.2 input_handler256
11.2.1 Input Handler层256
11.2.2 常用的Input Handler259
11.3 输入设备应用层261
11.4 键盘输入设备驱动程序实例262
11.5 event接口267
11.6 触摸屏驱动程序实例270
11.6.1 S3C6410触摸屏控制器270
11.6.2 S3C6410触摸屏驱动程序设计273
11.7 触摸屏校准282
11.7.1 触摸屏校准原理282
11.7.2 利用TSLIB库校准触摸屏282
第12章 USB驱动程序284
12.1 USB体系概述284
12.1.1 USB系统组成284
12.1.2 USB主机284
12.1.3 USB设备逻辑层次285
12.2 Linux USB驱动程序体系287
12.2.1 USB总体结构287
12.2.2 USB设备驱动程序287
12.2.3 主机控制器驱动程序288
12.2.4 USB请求块urb289
12.2.5 USB请求块的填充291
12.3 S3C6410 USB主机控制器驱动程序292
12.3.1 USB主机控制器驱动程序分析292
12.3.2 S3C6410 USB驱动程序加载294
12.4 USB键盘设备驱动程序分析296
12.5 USB Gadget驱动程序301
12.5.1 Linux USB Gadget驱动程序301
12.5.2 Linux USB Gadget驱动程序实例302
第13章 音频设备驱动程序303
13.1 ALSA音频体系303
13.2 ALSA驱动层API304
13.2.1 声卡和设备管理304
13.2.2 PCM API304
13.2.3 控制与混音API305
13.2.4 AC97 API306
13.2.5 SOC层驱动307
13.3 ALSA驱动程序实例308
13.3.1 S3C6410的AC97控制单元308
13.3.2 S3C6410声卡电路原理309
13.3.3 S3C6410的数字音频接口310
13.3.4 wm9713的数字音频接口313
13.4 ALSA音频编程接口316
13.4.1 ALSA PCM接口实例316
13.4.2 ALSA MIDI接口实例320
13.4.3 ALSA mixer接口实例321
13.4.4 ALSA timer接口实例322
第14章 video4linux2视频驱动程序327
14.1 video4linux2驱动程序架构327
14.1.1 video4linux2驱动程序的注册327
14.1.2 v4l2_fops接口331
14.1.3 常用的结构332
14.1.4 video4linux2的ioctl函数333
14.2 S3C6410摄像头驱动程序分析333
14.2.1 电路原理333
14.2.2 驱动程序分析334
14.3 video4linux2应用层实例339
第15章 SD卡驱动程序346
15.1 Linux SD卡驱动程序体系346
15.1.1 SD卡电路原理346
15.1.2 MMC卡驱动程序架构347
15.1.3 MMC卡驱动程序相关结构347
15.1.4 MMC卡块设备驱动程序350
15.1.5 SD卡主机控制器接口驱动程序356
15.2 S3C6410 SD卡控制器驱动程序分析360
15.2.1 电路原理360
15.2.2 S3C6410 SDHCI驱动程序原理360
15.2.3 SD卡的加载实例364
参考文献366
精彩书摘
在Linux操作系统中,设备驱动程序对各种设备提供了一致的访问接口,用户程序可以像对普通文件一样对设备文件进行打开和读写操作。Linux包含如下3类设备驱动程序:
(1)字符设备
Linux下的字符设备是指发送和接收数据以字符的形式进行的设备。字符设备接口支持面向字符的I/O操作,不经过系统的快速缓存,所以它们负责管理自己的缓冲区结构。字符设备接口只支持顺序存取的有限长度的I/O操作,典型的字符设备包括串行接口、LED灯、键盘等设备。
(2)块设备
块设备是以块的方式进行I/0操作的设备。块设备利用一块系统内存作缓冲区,如果用户进程对设备的请求能满足用户的要求,就返回请求的数据,否则调用请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待响应。块设备支持随机存取功能,几乎可以支持任意位置和任意长度的I/O请求。典型的块设备包括硬盘、CF卡、SD卡等存储设备。
(3)网络设备
Linux操作系统中的网络设备是一类特殊的设备。Linux的网络子系统主要基于BSDUNIX的socket机制,在网络子系统和驱动程序之间定义有专门的数据结构(skbuff)进行数据的传递。Linux操作系统支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多种网络协议的支持。
Linux系统为每个设备分配了一个主设备号与次设备号,主设备号唯一地标识了设备类型,次设备号标识具体设备的实例。由同一个设备驱动程序控制的所有设备具有相同的主设备号,从设备号则被用来区分具有相同主设备号的不同设备。
前言/序言
Linux驱动程序开发实例(附CD光盘1张) 电子书 下载 mobi epub pdf txt