本书详细介绍了Linux操作系统的配置与使用,在嵌入式系统上移植Linux系统,以及Linux系统上应用程序的开发技术。主要内容包括: 嵌入式系统简介、Linux系统安装与配置、Linux系统的使用基础、Linux系统C语言程序设计、开发环境搭建、嵌入式Linux系统移植、Linux并发程序设计、Linux网络程序设计、Linux文件应用程序设计、Linux系统设备驱动模型、驱动程序开发以及图形用户界面程序设计。
阅读本书,要求读者具有C语言程序设计与嵌入式系统基础知识。本书可以作为高等院校计算机类、电子信息科学类及物联网工程等专业的本科生或研究生教材,也可以作为嵌入式工程技术人员学习Linux程序设计的参考书.
小型化、智能化是计算机系统的发展趋势。嵌入式系统由于其在功耗、体积、可靠性等方面的优势,当前在消费电子、工业控制、物联网等方面具有广泛的应用。Linux系统是一个开源的操作系统,用户群越来越大,已成为嵌入式系统的主流软件平台。本书详细介绍了Linux系统以及嵌入式Linux开发环境搭建、系统移植过程,既说明了操作步骤,又进行了适当的原理分析,比较透彻地讲解了嵌入式Linux系统的工作过程。在Linux平台应用编程方面,比较全面介绍了Linux系统密切相关的多任务程序、网络程序及文件操作程序设计等内容。在Linux系统驱动程序设计方面,介绍了Linux系统的设备驱动模型,并介绍了Platform驱动程序、混杂驱动程序及中断驱动程序的编写方法。此外,本书还详细介绍了基于Qt的图形用户界面程序设计方法,Qt类库的架构及主要类的成员说明。全书深入浅出,系统地介绍了嵌入式Linux程序设计技术,适用于相关专业课程教学用书。本书结构清晰,内容丰富,浅显易懂,可操作性强,适合作为高校嵌入式系统开发课程的教材,也可供从事相关领域工作的工程技术人员参考。
前言Foreword
嵌入式系统在功耗、移动性等方面具有传统计算机所不具备的优点,在当前工业控制、物联网以及消费电子等多个领域具有广阔的应用前景,发展潜力巨大。随着嵌入式CPU的性能不断提高,嵌入式系统具有逐渐取代桌面PC的趋势,成为计算机技术发展的新方向。Linux内核支持x86、PowerPC、ARM等主流的CPU架构,移植性能好,内核可以根据需要进行裁减,同时Linux有庞大的用户群,Linux平台应用程序具有统一的开发接口,在系统之间迁移比较容易。基于Linux操作系统平台已成为嵌入式系统开发的主流,越来越多的嵌入式系统开发商在产品中使用Linux系统作为应用平台。随着Linux内核结构以及实时性功能的不断完善,Linux系统在嵌入式领域的应用范围将越来越广。当前,嵌入式Linux程序设计方面的人才缺口巨大。一方面,企业研发嵌入式系统产品需要大量嵌入式软件开发人才;另一方面,由于专业划分及课程本身对知识结构的要求,只有少数高校在相关专业开设了嵌入式Linux程序设计课程,适合高校相关专业课程体系及教学特点的教材也比较缺乏。基于上述背景,本书的编写旨在以C语言程序设计、嵌入式系统程序设计课程为先修课,满足计算机应用、电子信息及物联网工程等专业学时安排的嵌入式Linux程序设计教学的需要。全书共分为11章。第1章绪论介绍Linux的发展过程及版权特点,讲述了Linux操作系统的特点和内核的主要组成部分,嵌入式Linux交叉编译过程以及Linux内核在嵌入式系统应用中的优势、不足及改进途径。第2章嵌入式系统概述介绍了计算机系统功能的演变过程,嵌入式系统在计算机系统分类中所处的位置,嵌入式系统的概念与应用领域、分类及特点,嵌入式系统的组成,ARM体系结构特点及常见的ARM微处理器,ARM的编程模型,常见的嵌入式操作系统以及嵌入式系统的开发过程。第3章Linux系统安装与配置介绍了Linux的内核版本和发行版本、安装过程,Linux系统的启动配置及程序安装方法。第4章Linux系统操作基础介绍了Linux系统的使用和操作,包括文件管理、用户管理以及网络管理等部分。第5章Linux系统C语言程序设计介绍了C语言特点,常用头文件及编译环境变量的配置,C语言程序设计过程,编译器GCC、调试器GDB的用法,工程管理器make的用法,模块化程序设计方法,ARM平台交叉编译环境的搭建以及Linux系统常见的C语言集成开发环境。第6章Linux系统移植介绍了在嵌入式硬件上安装Linux操作系统的过程,分为内核引导程序Bootloader、Linux内核、文件系统等三个部分的移植。第7章Linux并发程序设计介绍了Linux多进程程序设计、进程之间的通信以及多线程程序设计。第8章Linux网络编程介绍了Linux套接字,Linux基于TCP的程序以及Linux基于UDP的程序设计。第9章Linux文件编程介绍了Linux文件的概念,文件的读写操作、文件的加锁访问以及文件的并行访问复用模型等。第10章Linux设备驱动程序设计介绍了设备驱动模型,总线型的设备驱动程序开发、中断设备驱动程序以及混杂型设备驱动程序开发。第11章用户界面程序设计介绍了Qt的安装,Qt应用程序基本结构以及Qt的常用类。本书第4章、第7章、第8章和第9章由张莉莉编写,其余各章由田卫新编写并负责全书统稿。在本书编写过程中,袁军、张富生、鲍灵利、徐昊等提供了帮助,在此表示感谢。由于编者水平有限,书中疏漏之处在所难免,恳请读者批评指正!
作者2016年10月
目录Contents
第1章绪论1
1.1Linux系统简介1
1.1.1早期操作系统的发展1
1.1.2Linux系统的发展过程2
1.1.3Linux的版权2
1.2Linux操作系统特点3
1.2.1Linux系统特性3
1.2.2Linux与其他操作系统的比较5
1.3Linux内核组成7
1.3.1进程管理8
1.3.2内存管理9
1.3.3虚拟文件系统9
1.3.4网络子系统11
1.4Linux在嵌入式系统中的应用12
1.4.1嵌入式Linux系统优势12
1.4.2嵌入式Linux交叉编译过程13
1.4.3嵌入式Linux的不足及改进14
习题16
第2章嵌入式系统概述17
2.1计算机系统发展及分类17
2.1.1计算机的主要应用领域17
2.1.2计算机系统分类20
2.2嵌入式系统简介21
2.2.1嵌入式系统定义21
2.2.2嵌入式系统的分类与特点22
2.2.3嵌入式系统发展历史23◆嵌入式Linux程序设计目录2.2.4嵌入式系统组成24
2.3ARM简介27
2.3.1ARM体系结构特点27
2.3.2ARM系列微处理器28
2.3.3ARM编程模型33
2.4嵌入式操作系统36
2.4.1嵌入式Linux36
2.4.2VxWorks37
2.4.3QNX37
2.4.4Windows CE37
2.4.5Palm OS37
2.5嵌入式系统开发过程38
2.5.1嵌入式系统整体开发过程38
2.5.2嵌入式硬件开发流程41
2.5.3嵌入式软件开发流程43
习题44
第3章Linux系统安装与配置45
3.1Linux系统版本45
3.1.1Linux 内核版本45
3.1.2Linux系统发行版本49
3.2Linux的安装过程51
3.2.1系统最低配置与推荐配置51
3.2.2安装前准备工作51
3.2.3硬盘分区52
3.2.4安装系统52
3.3Linux系统目录结构及基本配置60
3.3.1Linux目录结构60
3.3.2系统启动过程61
3.3.3登录切换64
3.3.4安装程序65
习题67
第4章Linux系统操作基础68
4.1Shell与命令行68
4.1.1Shell概述68
4.1.2Shell命令的分类69
4.1.3Shell命令使用技巧69
4.2文件管理70
4.2.1什么是文件70
4.2.2Linux文件系统70
4.2.3Linux文件系统相关命令71
4.3用户管理82
4.3.1用户类型82
4.3.2用户账号管理83
4.3.3组管理86
4.4网络管理87
4.4.1网络的基本配置87
4.4.2网络状态命令89
4.5进程管理93
4.5.1什么是进程93
4.5.2进程管理命令93
4.5.3进程查看命令95
习题97
第5章Linux系统C语言程序设计98
5.1C语言概述98
5.1.1C语言发展过程98
5.1.2C语言的特点99
5.1.3C语言与Linux系统100
5.2Linux系统C语言程序设计过程102
5.2.1Linux系统C语言程序流程102
5.2.2gcc的编译选项103
5.3GDB调试器用法105
5.3.1gdb使用流程105
5.3.2gdb基本命令109
5.4make工程管理器113
5.4.1makefile基本结构114
5.4.2makefile变量115
5.4.3makefile规则118
5.5模块化程序设计119
5.5.1静态库的实现119
5.5.2动态库的实现121
5.6ARM平台Linux交叉编译环境121
5.6.1源码编译方式122
5.6.2二进制解压安装123
5.7集成开发环境124
5.7.1Qt Creator125
5.7.2KDevelop125
5.7.3Code::Blocks125
5.7.4NetBeans126
5.7.5Eclipse127
习题128
第6章Linux系统移植129
6.1UBoot移植129
6.1.1BootLoader简介129
6.1.2UBoot介绍133
6.1.3UBoot装载过程133
6.1.4OK6410开发板UBoot的移植149
6.2Linux内核移植150
6.2.1计算机处理器架构150
6.2.2Linux内核及源码结构153
6.2.3Linux内核移植155
6.3根文件系统移植163
6.3.1虚拟文件系统164
6.3.2文件系统分类165
6.3.3根文件系统的挂载过程167
6.3.4根文件系统制作170
习题173
第7章Linux并发程序设计174
7.1Linux进程174
7.2进程控制175
7.2.1获取进程ID176
7.2.2创建进程176
7.2.3进程调度179
7.2.4进程终止180
7.2.5等待进程结束181
7.2.6守护进程183
7.3进程之间的通信186
7.3.1管道186
7.3.2信号193
7.3.3消息队列203
7.3.4信号量208
7.3.5共享内存213
7.4线程216
7.4.1创建轻量级进程217
7.4.2POSIX线程218
7.4.3线程属性222
7.4.4线程之间的同步与互斥226
习题237
第8章Linux网络编程238
8.1网络编程的基本知识238
8.2套接字239
8.2.1套接字函数239
8.2.2本地套接字243
8.2.3网络套接字246
8.3TCP程序设计253
8.4UDP程序设计257
8.5套接字属性设置261
习题265
第9章Linux文件编程266
9.1底层文件I/O266
9.1.1文件描述符267
9.1.2底层文件I/O函数267
9.2高级文件操作270
9.2.1文件加锁270
9.2.2多路复用276
9.3标准文件I/O285
9.3.1打开和关闭文件286
9.3.2文件读写288
习题291
第10章Linux设备驱动程序设计292
10.1设备驱动模型简介292
10.1.1底层数据模型292
10.1.2上层设备模型297
10.1.3字符设备驱动模型应用接口302
10.2platform设备驱动程序设计306
10.2.1platform_device注册306
10.2.2platform_driver注册307
10.2.3platform设备驱动框架源码310
10.3设备驱动程序编译及加载313
10.3.1编译Linux设备驱动程序313
10.3.2驱动程序的加载314
10.4设备驱动程序硬件访问317
10.4.1内存与I/O设备317
10.4.2中断320
10.5驱动程序设计实例分析321
10.5.1蜂鸣器驱动程序设计321
10.5.2中断驱动程序333
10.5.3混杂设备驱动程序336
习题339
第11章用户界面程序设计340
11.1Qt简介及安装340
11.1.1Qt简介340
11.1.2Qt安装341
11.2Qt程序设计入门343
11.2.1命令行方式编程343
11.2.2Qt Creator方式345
11.2.3Qt程序的运行机制353
11.3Qt常用类介绍357
11.3.1Qt分组类库357
11.3.2Qt类库介绍359
习题382