《嵌入式Linux系统开发教程(第2版)/高等学校计算机应用规划教材》系统论述了在Linux环境下开发嵌入式系统的设计思想、设计方法及开发流程,通过实例与设计项目,帮助读者尽快掌握嵌入式系统的基本概念,提高嵌入式设计技能。《嵌入式Linux系统开发教程(第2版)/高等学校计算机应用规划教材》共12章,内容包括嵌入式基础知识、Linux概述、ARM体系架构、嵌入式编程、交叉工具链、Bootloader、定制内核、文件系统、驱动程序开发基础、嵌入式图形设计等。《嵌入式Linux系统开发教程(第2版)/高等学校计算机应用规划教材》的最后给出了一个综合实例,帮助读者理解嵌入式Linux的开发方法和技巧。
《嵌入式Linux系统开发教程(第2版)/高等学校计算机应用规划教材》可作为高校计算机、通信、电子专业相关课程的教材,也可供广大嵌入式开发人员参考。
读者对象:
《嵌入式Linux系统开发教程(第2版)/高等学校计算机应用规划教材》可作为高等学校计算机、通信、电子等专业嵌入式设计课
程的教材,也可供嵌入式开发技术人员参考。
《嵌入式Linux系统开发教程(第2版)/高等学校计算机应用规划教材》特色:
·以通俗易懂的语言详细介绍嵌入式Linux系统开发的基础知识、开发方法和相关技巧,避免冗长的理论介绍,便于读者理解。
·书中配有大量典型的嵌入式系统开发实例,具有很强的针对性,读者可通过这些实例,深入理解嵌入式Linux系统的开发方法。
·对于程序中的关键部分,都给予特别说明,点明要点和应注意的地方,使读者深刻理解程序的设计思想。
·章前给出重点内容,章后给出了丰富的练习题,以加深读者对知识点的理解和掌握,并能做到举一反三。
嵌入式Linux系统由于具有开源、网络功能强大、内核稳定、高效等特性,在产品开发周期、产品的功能可扩充性、开发时的人力投入等方面都具有显著的优势,因此广泛应用于高、中、低端智能电子设备中。而它与ARM的结合,更是一种主流的解决方案。嵌入式Linux+ARM已经广泛应用于机顶盒、智能手机、平板电脑、MPC(多媒体个人计算机)、网络设备、工业控制等领域,并且具有良好的市场前景。
嵌入式系统是以应用为中心,以计算机技术为基础,采用可裁剪软硬件,适用于对功能、可靠性、成本、体积、功耗等要求严格的专用计算机系统。
在新兴的嵌入式系统产品中,常见的有MP3、智能手机、平板电脑、数字播放器、GPS、机顶盒、嵌入式服务器、家庭游戏网关、VoIP、PDA、数字视讯录像机及瘦客户机等。嵌入式系统是未来生活的一个基础平台,将会大大影响人们的生活方式。
本书将系统地讲解嵌入式Linux开发流程中的各个步骤,详细解析各个流程中的疑点、难点。本书分3个部分,共12章。各部分内容如下:
第一部分为基础知识篇,主要讲解嵌入式系统与Linux相关的基础知识,其中第1章为嵌入式系统基础,主要讲解嵌入式相关的概念、历史、应用及前景;第2章为Linux概论,主要是与Linux基础相关的知识,如Linux桌面系统、Linux常用软件的使用及Linux常见命令等;第3章为ARM体系架构,主要介绍ARM架构的相关知识,如ARM指令集、ARM处理器基本原理等;第4章为嵌入式编程,将简要介绍嵌入式汇编语言及C语言的编程基础。
第二部分为开发入门篇,主要介绍嵌入式开发的基本方法,这部分是本书的重点,也是嵌入式Linux学习的难点,读者要认真学习。这部分共5章,其中第5章介绍了嵌入式开发的软硬件环境,如工具的驱动程序安装、Ubuntu的安装、DNW的使用、NFS的配置和使用,以及Telnet、ftp等的配置使用;第6章主要讲解交叉编译环境的概念以及工具链的编译、获取;第7章介绍了Bootloader及典型引导程序的制作,如Vivi;第8章讲解内核的定制;第9章介绍了嵌入式Linux文件系统,这部分内容较多,希望读者重点掌握。
第三部分是提高篇,主要包括第10章驱动程序的开发;第11章嵌入式Linux的图形设计;第12章将给出一个开发实例,使读者能系统地了解嵌入式Linux的开发过程。
本书内容丰富,实例典型,有很强的针对性。书中各章不仅详细介绍了实例的具体操作步骤,而且还配有一定数量的练习题供读者学习使用。读者只需按照书中介绍的步骤一步步地实际操作,就能完全掌握本书的内容。
尽管本书只讨论如何在嵌入式系统中使用Linux,但是对想要在嵌入式系统中使用BSD(伯克利软件发行中心)的开发者来说也会有一些帮助,但本书所作的许多说明都必须依据BSD与Linux间的差异重新诠释。
本书可作为高等学校计算机、通信、电子等专业嵌入式设计课程的教材,也可供嵌入式开发技术人员参考。
本书PPT教学课件可以通过http://www.tupwk.com.cn/downpage下载。
本书由贺丹丹编著,此外,马建红、许小荣、张泽、刘荣、张璐、王统、王东、周艳丽、刘波、苏静等也参与了本书的编写,在此,同样致以诚挚的谢意!
由于时间仓促及作者水平所限,本书难免有纰漏和不妥之处,敬请广大读者批评指正。
编 者
2013年12月
第1章 嵌入式系统基础
1.1 嵌入式系统
1.1.1 嵌入式系统的概念
1.1.2 嵌入式系统的组成
1.1.3 嵌入式系统的发展
1.1.4 嵌入式系统的应用前景
1.2 嵌入式处理器
1.2.1 嵌入式微控制器(EMCU)
1.2.2 嵌入式微处理器(EMPU)
1.2.3 嵌入式数字信号处理器(EDSP)
1.2.4 嵌入式片上系统(ESOC)
1.3 嵌入式操作系统
1.3.1 Linux
1.3.2 VxWorks
1.3.3 WinCE
1.3.4 μC/OS-II
1.3.5 eCOS
1.3.6 Android
1.3.7 iOS
1.3.8 WP和Windows RT
1.4 嵌入式系统设计
1.4.1 嵌入式系统开发流程
1.4.2 嵌入式系统开发方法
思考与练习
第2章 Linux基础
2.1 Linux简介
2.1.1 Linux的历史
2.1.2 Linux特点
2.1.3 Linux与Windows
2.1.4 Linux的主要组成部分
2.1.5 Linux的种类和特性
2.2 图形操作界面
2.2.1 Linux与图形界面
2.2.2 KDE
2.2.3 GNOME
2.2.4 GNOME与KDE发展趋势
2.3 Linux的基本命令行操作
2.3.1 目录操作
2.3.2 文件操作
2.3.3 压缩、解压与打包
2.3.4 磁盘管理
2.3.5 用户系统
2.3.6 网络管理
2.4 Linux内核
思考与练习
第3章 ARM体系架构
3.1 ARM微处理器简介
3.1.1 ARM微处理器的发展
3.1.2 ARM微处理器的特点和应用
3.2 ARM微处理器系列
3.2.1 Classic(传统)系列
3.2.2 Cortex-M系列
3.2.3 Cortex-R系列
3.2.4 Cortex-A系列
3.2.5 Cortex-A50系列
3.3 ARM编程模型
3.3.1 ARM硬件架构
3.3.2 ARM微处理器模式
3.3.3 ARM寄存器
3.3.4 异常处理
3.3.5 ARM的存储器组织
3.4 ARM指令系统
3.4.1 ARM指令格式
3.4.2 ARM指令的寻址方式
3.4.3 ARM最常用指令和条件后缀
3.5 ARM微处理器的应用选型
思考与练习
第4章 嵌入式编程
4.1 ARM汇编语言程序设计
4.1.1 ARM汇编语言中的程序结构
4.1.2 ARM汇编语言的语句格式
4.1.3 基于Linux下GCC的汇编语言程序结构
4.1.4 基于Windows下ADS的汇编语言程序结构
4.1.5 ARM汇编器所支持的伪指令
4.2 ARM汇编与C语言编程
4.2.1 基本的ATPCS规则
4.2.2 C语言中内嵌汇编代码
4.2.3 从汇编程序中访问C程序变量
4.2.4 在汇编代码中调用C函数
4.2.5 在C语言代码中调用汇编函数
4.3 基于Linux的C语言编程
4.3.1 C语言编程概述
4.3.2 Linux下的C开发工具
4.3.3 vim编辑器
4.3.4 gedit编辑器
4.3.5 编译器gcc
4.3.6 调试器gdb
4.3.7 项目管理器make
思考与练习
第5章 软硬件开发环境
5.1 硬件环境
5.1.1 主机硬件环境
5.1.2 目标板硬件环境
5.2 Windows软件环境
5.2.1 超级终端的设置
5.2.2 DNW的设置
5.2.3 设置GIVEIO驱动
5.3 Linux软件环境
5.3.1 Linux系统的VMware安装
5.3.2 Windows与Ubuntu双系统安装
5.3.3 Linux网络服务配置
5.3.4 配置NFS服务
5.3.5 配置FTP服务
5.4 刻录镜像文件
5.4.1 刻录工具
5.4.2 使用方法
思考与练习
第6章 交叉编译工具
6.1 工具链软件
6.1.1 工具链组成
6.1.2 构建工具链
6.2 分步构建交叉编译链
6.2.1 准备工具
6.2.2 基本过程
6.2.3 详细步骤
6.3 用Crosstool工具构建交叉工具链
6.3.1 准备工具
6.3.2 基本过程
6.3.3 详细步骤
6.4 使用现成的交叉工具
思考与练习
第7章 Bootloader详解及移植
7.1 嵌入式Bootloader简介
7.1.1 Bootloader功能
7.1.2 基于Bootloader软件架构
7.1.3 Bootloader的操作模式
7.1.4 Bootloader的依赖性
7.1.5 Bootloader的启动方式
7.1.6 Bootloader启动流程
7.1.7 各种Bootloader
7.2 Vivi
7.2.1 Vivi简介
7.2.2 Vivi体系架构
7.2.3 Vivi的运行过程分析
7.2.4 Vivi的配置与编译
7.2.5 Vivi命令
7.3 Bootloader程序的调试和刻录
思考与练习
第8章 定制内核移植
8.1 Linux内核源码组织
8.2 内核基本配置
8.2.1 内核配置系统
8.2.2 Makefile
8.2.3 具体的配置操作
8.2.4 添加自己的代码
8.3 内核定制
8.3.1 获取源码
8.3.2 移植过程
8.4 内核裁剪
8.4.1 取消虚拟内存的支持
8.4.2 取消多余的调度器
8.4.3 取消对旧版本二进制执行文件的支持
8.4.4 取消不必要的设备的支持
8.4.5 取消不需要的文件系统的支持
思考与练习
第9章 嵌入式Linux文件系统
9.1 嵌入式Linux的文件系统
9.1.1 文件系统结构
9.1.2 文件系统特性
9.1.3 系统存储设备及其管理机制
9.1.4 基于Flash闪存的文件系统
9.1.5 基于RAM的文件系统
9.1.6 网络文件系统
9.2 根文件系统及其定制
9.2.1 根文件系统架构
9.2.2 定制工具Busybox
9.2.3 库文件构建
9.2.4 设备文件的构建
9.2.5 根文件系统初始化
9.3 文件系统的制作
9.3.1 根文件系统的制作
9.3.2 NFS文件系统的制作
9.3.3 Cramfs文件系统的制作
9.3.4 Yaffs文件系统的制作
9.3.5 Ramdisk文件系统的制作
思考与练习
第10章 嵌入式Linux驱动程序开发基础
10.1 嵌入式Linux驱动程序概述
10.1.1 Linux驱动程序工作原理
10.1.2 Linux驱动程序功能
10.2 设备驱动程序的基础知识
10.2.1 Linux的设备管理机制
10.2.2 驱动层次结构
10.2.3 设备驱动程序与外界的接口
10.2.4 设备驱动程序的特点
10.2.5 驱动程序开发流程
10.3 模块编程
10.3.1 模块与内核
10.3.2 建立模块文件
10.3.3 编写makefile
10.3.4 模块加载
10.3.5 模块的其他信息
10.3.6 模块参数
10.4 字符设备驱动程序
10.4.1 相关的数据结构
10.4.2 字符设备驱动程序开发流程
10.4.3 字符设备驱动程序扩展操作
10.5 网络设备驱动程序
10.5.1 基本概念
10.5.2 网络数据包处理流程
思考与练习
第11章 嵌入式Linux图形设计
11.1 嵌入式GUI
11.1.1 嵌入式GUI简介
11.1.2 嵌入式GUI需求
11.1.3 嵌入式GUI组成
11.1.4 Qt/Embedded
11.1.5 MiniGUI
11.1.6 MicroWindows
11.1.7 OpenGUI
11.1.8 Tiny-X
11.1.9 各种GUI比较
11.2 Qt/Embedded开发入门
11.2.1 Qt/Embedded简介
11.2.2 Qt/Embedded架构
11.2.3 Qt的开发环境
11.2.4 Qt的支撑工具及组件
11.2.5 Qt/Embedded对象模型
11.2.6 信号与插槽机制
11.2.7 Qt/Embedded常用的类
11.3 安装Qt/Embedded
11.3.1 配置
11.3.2 编译
11.3.3 测试
11.4 Qt设计实例——密码验证程序
11.4.1 快速安装QDevelop和Qt Designer
11.4.2 界面设计
11.4.3 信号与槽
11.4.4 添加代码
11.4.5 编译
11.4.6 程序测试
11.4.7 移植
思考与练习
第12章 嵌入式视频监视系统开发实例
12.1 系统设计背景
12.2 系统总体设计
12.2.1 系统总体设计思路
12.2.2 系统的设计要求及特点
12.2.3 系统总体架构设计
12.3 系统详细设计
12.3.1 系统的硬件设计与调试
12.3.2 系统的软件设计与调试
12.3.3 USB数据输入驱动程序移植
12.3.4 USB摄像头数据输入驱动程序测试
12.3.5 嵌入式网络视频服务器的设计
12.3.6 Video4Linux程序设计
12.4 系统测试
12.4.1 准备工作
12.4.2 测试方法
12.4.3 测试结果