新書推薦:
《
母亲的选择:看不见的移民保姆与女性工作
》
售價:HK$
74.8
《
城邦政治与灵魂政治——柏拉图《理想国》中的政治哲学研究
》
售價:HK$
129.8
《
3分钟漫画墨菲定律:十万个为什么科普百科思维方式心理学 胜天半子人定胜天做事与成事的权衡博弈之道
》
售價:HK$
54.8
《
1911:危亡警告与救亡呼吁
》
售價:HK$
76.8
《
旷野人生:吉姆·罗杰斯的全球投资探险
》
售價:HK$
75.9
《
笼中王国 : 18世纪法国的珍禽异兽与社会文化
》
售價:HK$
74.8
《
思考的框架3:风靡华尔街的思维训练法
》
售價:HK$
64.9
《
被记忆的西周史(中山大学中珠学术译丛)
》
售價:HK$
151.8
|
內容簡介: |
本书涉及嵌入式Linux系统设备驱动开发的各个环节。全书共21章,内容包括:Linux系统基本操作,嵌入式Linux开发环境的搭建,Linux设备驱动的概念,Linux内核模块编程,字符设备驱动(含LED驱动)的开发及完善,内核同步机制,中断驱动,内核工作队列,内核定时器,平台设备、LCD设备、Linux触摸屏和温度传感器的驱动,以及Linux内核各子系统(clock子系统、输入子系统、IIC子系统、SPI子系统和MTD子系统)的介绍。本书由深圳信盈达嵌入式学院的嵌入式开发工程师编写,并配备了相关的实验和完整的驱动程序代码及测试应用程序代码。
|
目錄:
|
第1章 Linux基础知识1
1.1 Linux历史介绍1
1.2 Linux 常用命令1
1.2.1 文件管理命令1
1.2.2 磁盘相关命令(fdisk)9
1.2.3 文档编辑命令10
1.2.4 文件传输命令11
1.2.5 磁盘维护命令12
1.2.6 系统设置命令12
1.2.7 备份压缩命令13
1.3 Linux环境编程入门14
1.3.1 GCC介绍14
1.3.2 GNU Make 基本语法15
1.3.3 Makefile 通用模块20
1.4 Linux内核版本21
1.5 Linux内核开发者社区22
1.6 shell 编程入门22
1.6.1 shell里的流程控制26
1.6.2 Here Documents31
1.6.3 shell里的函数32
1.6.4 命令行参数33
1.6.5 shell脚本示例33
1.6.6 脚本调试34
1.7 vim编辑器35
1.7.1 模式35
1.7.2 常用命令36
1.7.3 配置文件38
第2章 嵌入式Linux驱动开发环境搭建40
2.1 引言40
2.2 交叉编译器42
2.2.1 交叉编译器概念42
2.2.2 交叉编译器获取42
2.2.3 交叉编译器安装42
2.2.4 交叉编译器使用43
2.3 嵌入式开发串口终端44
2.3.1 串口终端用途介绍44
2.3.2 Windows下超级终端介绍45
2.3.3 Linux下Minicom 串口终端介绍46
2.4 嵌入式开发相关下载工具50
2.4.1 Windows下TFTP下载软件50
2.4.2 Linux下TFTP服务50
2.4.3 Linux 下NFS服务器51
2.5 启动加载程序的使用和移植52
2.5.1 u-boot常用命令52
2.5.2 u-boot常用环境变量介绍53
2.5.3 u-boot移植到mini2440方法53
2.6 为mini2440编译内核56
2.7 根文件系统制作56
2.7.1 根文件系统的作用56
2.7.2 根文件系统的制作步骤57
2.8 J-Link仿真器使用59
2.8.1 J-Link功能简介59
2.8.2 J-Link功能配置及使用范例60
第3章 Linux设备驱动简介63
3.1 Linux设备驱动概述63
3.2 Linux内核结构63
3.2.1 Linux内核空间划分63
3.2.2 Linux用户空间64
3.2.3 Linux内核空间64
3.2.4 用户态和内核态64
3.2.5 进程上下文和中断上下文64
3.3 Linux设备驱动特点65
3.3.1 设备分类65
3.3.2 设备号65
3.3.3 模块和设备驱动关系66
3.4 内核模块的主要相关命令66
3.5 内核驱动信息打印—printk67
第4章 Linux内核模块编程71
4.1 认识Linux模块71
4.1.1 一个最简单的Linux内核模块71
4.1.2 Linux内核模块程序结构74
4.1.3 helloworld.c模块Makefile 文件编写76
4.1.4 helloworld模块编译76
4.2 模块编程形式2:多模块——模块间有依赖关系76
4.2.1 模块符号导出76
4.2.2 多模块C代码编程示例77
4.2.3 多模块Makefile编译编程示例78
4.2.4 编译和测试模块78
4.2.5 多模块编程总结79
4.3 模块编程形式3:模块传递参数79
4.3.1 模块传递参数关键宏定义79
4.3.2 module_param 介绍79
4.3.3 模块传递参数示例C代码81
4.3.4 模块传递参数示例Makefile82
4.3.5 编译和测试模块传递参数功能82
4.3.6 模块传递参数功能总结83
4.4 模块编程形式4:多个C文件编译为一个模块84
4.4.1 多个C文件模块示例C代码84
4.4.2 多个C文件模块示例Makefile代码85
4.4.3 编译和测试模块85
4.4.4 多个C文件模块编程总结86
第5章 字符设备驱动开发87
5.1 Linux设备驱动特点87
5.1.1 Linux系统3大类设备特点87
5.1.2 Linux内核框架88
5.1.3 字符设备的几种编程模型89
5.2 字符设备相关重要结构89
5.2.1 struct file_operaions结构89
5.2.2 struct inode结构92
5.2.3 struct file结构96
5.3 杂项设备驱动模板97
5.3.1 杂项设备注册和注销98
5.3.2 杂项设备驱动测试99
5.3.3 杂项设备驱动模型示例101
5.4 早期标准字符设备驱动模板105
5.4.1 早期标准字符设备驱动注册和注销105
5.4.2 早期标准字符设备驱动模型示例106
5.4.3 早期标准字符设备驱动模型测试109
5.5 Linux 2.6标准字符设备驱动模型112
5.5.1 Linux 2.6标准字符设备驱动核心结构:struct cdev112
5.5.2 Linux 2.6标准字符设备驱动设备号112
5.5.3 Linux 2.6标准字符设备驱动相关API函数113
5.5.4 Linux 2.6标准字符设备驱动编写流程115
5.5.5 Linux 2.6标准字符设备驱动模型示例115
5.5.6 Linux 2.6标准字符设备驱动程序测试120
5.6 字符设备驱动模型小结122
5.7 早期字符设备驱动自动生成设备节点文件123
5.7.1 mdev的介绍及使用方法123
5.7.2 相关数据结构、函数介绍124
5.7.3 自动创建设备文件范例126
5.7.4 自动创建设备文件小结133
第6章 字符设备LED驱动135
6.1 LED硬件原理图135
6.2 LED点灯原理分析135
6.3 字符设备驱动open接口136
6.3.1 open接口参数136
6.3.2 open 接口函数框架136
6.4 release接口函数137
6.4.1 release 接口函数的作用137
6.4.2 release接口函数框架137
6.5 字符设备驱动write接口137
6.5.1 write接口参数说明137
6.5.2 与write接口代码相关的常用API138
6.5.3 write 接口函数框架138
6.6 字符设备驱动read接口139
6.6.1 read接口参数139
6.6.2 与read接口代码相关的常用API139
6.6.3 read 接口函数框架139
6.7 llseek接口实现140
6.7.1 llseek接口参数140
6.7.2 llsek接口函数框架140
6.7.3 重写能与llseek配套的write函数框架141
6.7.4 重写能与llseek配套的read函数框架142
6.8 LED驱动程序示例143
6.8.1 LED驱动程序要使用到的核心函数143
6.8.2 LED驱动程序示例143
6.9 ioctl控制接口154
6.9.1 用户空间ioctl系统调用154
6.9.2 内核空间驱动ioctl的方法154
6.9.3 ioctl接口函数框架示例156
6.9.4 LED驱动添加标准ioctl接口控制LED的范例158
第7章 内核同步机制172
7.1 引言172
7.2 原子操作172
7.2.1 原子操作概念172
7.2.2 原子操作相关API173
7.2.3 简单原子操作使用例子176
7.3 信号量181
7.3.1 信号量概念181
7.3.2 信号量相关API181
7.3.3 简单信号量使用例子183
7.4 读写信号量(rw_semaphore)188
7.4.1 读写信号量概念188
7.4.2 读写信号量相关API189
7.5 自旋锁191
7.5.1 自旋锁概念192
7.5.2 自旋锁相关API192
7.5.3 自旋锁使用方法小结197
第8章 LED驱动完善—添加同步机制代码199
8.1 信号量实现LED设备独占199
8.1.1 添加互斥量代码实现独占功能示例199
8.1.2 应用程序测试信号量独占功能205
8.2 原子操作实现LED设备独占206
8.2.1 原子操作代码实现独占功能示例206
8.2.2 测试应用程序:原子操作独占功能213
8.3 自旋锁实现LED设备并发控制214
8.3.1 SMP并发分析214
8.3.2 自旋锁代码实现设备并发控制功能示例215
8.3.3 应用程序测试自旋锁并发控制功能221
8.4 等待队列222
8.4.1 为什么要使用等待队列222
8.4.2 等待队列头数据结构222
8.4.3 等待队列的睡眠过程222
8.4.4 等待队列的唤醒过程225
8.4.5 等待队列API227
8.5 各种同步机制的比较231
|
|