嵌入式Linux系统开发教程
  • 推荐0
  • 收藏3
  • 浏览820

嵌入式Linux系统开发教程

贾燕枫 (作者) 

  • 书  号:978-7-121-29373-3
  • 出版日期:2016-08-02
  • 页  数:333
  • 开  本:16(185*260)
  • 出版状态:上市销售
  • 维护人:孙学瑛
本书结合大量实例,在基于ARM Cortex-A9 四核处理器的硬件教学平台上,全面详细地讲解了ARM
处理器及在其上的嵌入式Linux 系统开发。本书主要内容包括ARM 处理器及常用指令介绍,Linux 编程
环境,交叉开发环境,Boot Loader 介绍U-Boot 启动过程及移植,Linux 内核配置、编译及Qt 移植等。
其中移植相关的内容不仅给出了移植的方法和步骤,还讲解了为什么要这么做。重视实践,实用是本书
的最大特点,同时,本书配合大量的习题,读者能快速地掌握嵌入式Linux 系统开发的要点。
本书可作为大学院校电子、通信、计算机、自动化等专业的“嵌入式Linux 系统开发”课程的教材,
也可作为嵌入式开发人员的参考用书。
国内领先品牌专业嵌入式培训机构一线老师作品,众多学员共同认可。
前 言
随着嵌入式及物联网技术的快速发展,ARM 处理器已经广泛地应用到了工业控制、智能仪表、汽车电子、医疗电子、军工电子、网络设备、消费类电子、智能终端等领域。而较新的ARM Cortex-A9 架构的四核处理器,更是由于其优越的性能被广泛应用在中高端的电子产品市场。比如基于ARM Cortex-A9 的三星Exynos 4412 处理器就被应用在三星GALAXY Note II 智能手机上。
另一方面,Linux 内核由于其高度的稳定性和可裁剪性等特点,被广泛地应用到嵌入式系统中,其中Android 系统就是一个典型的例子。这样,ARM 处理器和Linux 操作系统紧密地联系在一起。所以,基于ARM 和Linux 的嵌入式系统得到了快速的发展。
目前,针对上述两方面完整涵盖的书籍较少,或者就是相对较老的ARM 体系结构及较低版本的Linux 内核。为了能够跟上嵌入式Linux 技术发展的步伐,促进嵌入式技术的推广,华清远见研发中心自主研发了一套基于Exynos 4412 处理器的开发板FS4412,并组织编写了本书。本书注重实践、实用,本着从解决问题的角度出发,既给出了解决问题的方法,又给出了如何逐步解决问题的过程。
本书将ARM 处理器和嵌入式Linux 系统融为一体,形成了一套较完整的嵌入式Linux 系统开发教程。全书共11 章,循序渐进地讲解了嵌入式Linux 系统开发所涉及的核心技术和一些经验、方法。本书主要分四个部分,第一部分(第1 章和第2 章)介绍了嵌入式系统和ARM 处理器的概况;第二部分(第3 章和第4 章)介绍Linux 下的软件开发;第三部分(第5 章)介绍U-Boot 的移植;第四部分(第6~11 章)介绍Linux内核、驱动的移植,根文件系统的制作及Qt 的移植。各章节的主要内容如下。
第1 章对嵌入式系统有一个整体的概述,主要介绍当前比较流行的嵌入式操作系统,并着重介绍嵌入式Linux 系统。
第2 章介绍ARM 处理器的整体情况,主要介绍ARM 处理器的家族系列、常用的指令、寻址方式和常见的基于ARM 的SoC,重点介绍Exynos 4412 处理器及FS4412 开发板。
第3 章讲解常用的Linux 命令、Shell 脚本、正则表达式、Makefile、GNU 工具集和Linux 编程库。
第4 章讲解交叉开发环境,包括交叉编译工具链的安装、串口终端的安装和使用、TFTP 和NFS 服务器的安装和配置、根文件系统挂载、交叉调试和FS4412 开发板的开发环境的搭建实例。
第5 章讲解常见的Bootloader、U-Boot 常用命令、U-Boot 的启动过程及U-Boot 的移植过程。
第6 章讲解Linux 内核的配置及编译,包括Linux 内核源码下载、配置、Makefile、Kconfig、配置选项、编译等内容。
第7 章讲解Linux 内核的移植基础内容,包括内核移植的基本工作、Linux 设备树、Linux 启动过程的详细讲解。
第8 章讲解FS4412 开发板上Linux 内核的移植实例,包括内核的基础移植、网卡驱动移植、SD/eMMC 驱动移植、USB 主机控制器驱动移植和LCD 驱动移植的详细讲解。
第9 章讲解Linux 内核的调试技术,包括常用调试方法的介绍、调试相关的配置选项、内核打印函数分析、系统请求键、proc 和sys 接口、oops 及panic 信息分析、KGDB源码级内核调试等。
第10 章讲解根文件系统的制作和固化,包括根文件系统目录结构、init 系统初始化过程、利用Busybox 制作根文件系统的过程和根文件系统的固化等。
第11 章讲解Qt 的移植,包括Qt 的下载、配置、编译、安装和在根文件系统中的添加,Qt 集成开发环境的安装,在集成开发环境中加入ARM 平台的构建环境,Qt 应用程序的编译和在开发板上的运行测试等。
本书由华清远见成都中心的姜先刚和袁祖刚编写,其中第1~5 章由袁祖刚编写,第6~11 章由姜先刚编写,北京中心的刘洪涛完成本书的统稿及审校工作。本书的内容是华清远见嵌入式培训中心所有老师心血的结晶,是多年教学成果的积累。他们认真阅读了书稿,提出了大量的建议,并纠正了书稿中的很多错误,在此表示感谢。由于作者水平有限,书中不妥之处在所难免,恳请读者批评、指正。对于本书的批评和建议,可以发表到www.farsight.com.cn 技术论坛。
编 者

目录

第1 章 嵌入式系统概述 ·············································································· 1
1.1 嵌入式系统 ....................................................................................................... 2
1.2 嵌入式操作系统................................................................................................ 3
1.3 嵌入式Linux 历史 ............................................................................................ 5
1.4 嵌入式Linux 开发环境 .................................................................................... 6
1.5 嵌入式Linux 系统开发要点 ............................................................................ 8
第2 章 ARM处理 ······················································································ 9
2.1 ARM 处理器简介 ........................................................................................... 10
2.1.1 ARM 公司简介 .................................................................................... 11
2.1.2 ARM 处理器体系结构 ........................................................................ 12
2.1.3 Linux 与ARM 处理器 ........................................................................ 17
2.2 ARM 指令集 ................................................................................................... 18
2.2.1 ARM 微处理器的指令集概述 ............................................................ 18
2.2.2 ARM 指令寻址方式 ............................................................................ 19
2.2.3 Thumb 指令 ......................................................................................... 21
2.2.4 Thumb-2 指令 ...................................................................................... 22
2.2.5 ThumbEE 指令 .................................................................................... 22
2.3 典型ARM 处理器简介 .................................................................................. 22
2.3.1 Atmel AT91RM9200 ........................................................................... 22
2.3.2 Samsung S3C2410 ............................................................................... 23
2.3.3 TI OMAP5 系列 ................................................................................... 25
2.3.4 Freescale i.Max6 .................................................................................. 26
2.3.5 Intel Xscale PXA 系列 ......................................................................... 27
2.3.6 Cortex-A 系列的Exynos4412 ............................................................. 29
2.4 华清远见 FS4412 开发板 .............................................................................. 30
2.4.1 华清远见 FS4412 开发板介绍 ........................................................... 30
2.4.2 众多的开发板供应商 .......................................................................... 34
2.5 习题 ................................................................................................................. 34
第3 章 Linux 编程环境 ··············································································· 35
3.1 Linux 常用工具 ............................................................................................... 36
3.1.1 Shell 简介 ............................................................................................. 36
3.1.2 常用的Shell 命令 ................................................................................ 38
3.1.3 编写Shell 脚本 .................................................................................... 46
3.1.4 正则表达式 .......................................................................................... 50
3.1.5 程序编辑器 .......................................................................................... 53
3.2 Makefile ........................................................................................................... 57
3.2.1 GNU make............................................................................................ 57
3.2.2 Makefile 规则语法 .............................................................................. 59
3.2.3 Makefile 文件中变量的使用 ............................................................... 60
3.3 二进制代码工具的使用 .................................................................................. 62
3.3.1 GNU Binutils 工具介绍 ....................................................................... 62
3.3.2 Binutils 工具软件使用 ........................................................................ 63
3.4 GCC 编译器的使用 ........................................................................................ 64
3.4.1 GCC 编译器简介 ................................................................................. 64
3.4.2 GCC 编译选项解析 ............................................................................. 66
3.5 调试器GDB 的使用技巧 ............................................................................... 70
3.5.1 GDB 调试器介绍 ................................................................................ 70
3.5.2 GDB 调试命令 .................................................................................... 71
3.6 Linux 编程库 ................................................................................................... 75
3.6.1 Linux 编程库介绍 ............................................................................... 75
3.6.2 Linux 系统调用 ................................................................................... 76
3.6.3 Linux 线程库 ....................................................................................... 78
3.7 习题 ................................................................................................................. 81
第4 章 交叉开发环境 ················································································ 82
4.1 交叉开发环境介绍 .......................................................................................... 83
4.1.1 交叉开发概念模型 .............................................................................. 83
4.1.2 目标板与主机之间的连接 .................................................................. 84
4.1.3 文件传输 .............................................................................................. 86
4.1.4 网络文件系统 ...................................................................................... 87
4.2 安装交叉编译工具 .......................................................................................... 87
4.2.1 获取交叉开发工具链 .......................................................................... 87
4.2.2 主机安装工具链 .................................................................................. 88
4.3 主机开发环境配置 .......................................................................................... 88
4.3.1 主机环境配置 ...................................................................................... 88
4.3.2 串口控制台工具 .................................................................................. 89
4.3.3 TFTP 服务............................................................................................ 93
4.3.4 NFS 服务 ............................................................................................. 93
4.4 启动目标板 ..................................................................................................... 95
4.4.1 系统引导过程 ...................................................................................... 95
4.4.2 内核解压启动 ...................................................................................... 96
4.4.3 挂接根文件系统 .................................................................................. 98
4.5 应用程序的远程交叉调试 .............................................................................. 99
4.5.1 交叉调试的模型 .................................................................................. 99
4.5.2 交叉调试程序实例 ............................................................................ 100
4.6 实例:FS4412 嵌入式开发环境搭建 .......................................................... 102
4.6.1 开发主机安装 .................................................................................... 102
4.6.2 联调测试 ............................................................................................ 110
4.7 习题 ............................................................................................................... 113
第5 章 Bootloader ·················································································· 114
5.1 Bootloader 简介 ............................................................................................ 115
5.1.1 Bootloader 介绍 ................................................................................. 115
5.1.2 Bootloader 的启动 ............................................................................. 115
5.1.3 Bootloader 的种类 ............................................................................. 118
5.2 U-Boot 简介 .................................................................................................. 120
5.2.1 U-Boot 介绍 ....................................................................................... 120
5.2.2 U-Boot 的常用命令 ........................................................................... 120
5.2.3 U-Boot 的环境变量 ........................................................................... 124
5.2.4 U-Boot 源码结构 ............................................................................... 126
5.3 U-Boot 源码分析 ........................................................................................... 127
5.3.1 配置编译 ............................................................................................ 127
5.3.2 U-Boot 启动过程 ............................................................................... 132
5.3.3 U-Boot 与内核的关系 ....................................................................... 136
5.4 U-Boot 移植实例 ........................................................................................... 138
5.4.1 收集移植相关资源 ............................................................................ 138
5.4.2 选择U-Boot 源码版本 ..................................................................... 139
5.4.3 u-Boot 配置编译 ............................................................................... 139
5.4.4 串口能输出信息 ................................................................................ 140
5.4.5 移植网卡实现Ping 和TFTP 的功能 ............................................... 145
5.5 习题 ............................................................................................................... 151
第6 章 配置编译内核 ·············································································· 153
6.1 Linux 内核特点 ............................................................................................. 154
6.1.1 Linux 内核版本介绍 ......................................................................... 154
6.1.2 Linux 内核特点 ................................................................................. 155
6.2 配置编译内核源码 ........................................................................................ 156
6.2.1 内核源码的下载方法和结构 ............................................................ 157
6.2.2 内核配置系统 .................................................................................... 160
6.2.3 Kbuild Makefiles ................................................................................ 167
6.2.4 内核编译 ............................................................................................ 178
6.2.5 内核编译结果 .................................................................................... 185
6.3 内核配置选项 ............................................................................................... 187
6.3.1 使用配置菜单 .................................................................................... 187
6.3.2 基本配置选项 .................................................................................... 189
6.3.3 驱动程序配置选项 ............................................................................ 191
6.4 习题 ............................................................................................................... 192
第7 章 内核移植基础 ·············································································· 193
7.1 移植内核源码 ............................................................................................... 194
7.1.1 移植的基本工作 ................................................................................ 194
7.1.2 移植后的工作 .................................................................................... 196
7.2 Linux 设备树 ................................................................................................. 197
7.2.1 Linux 设备树的由来 ......................................................................... 197
7.2.2 Linux 设备树的目的 ......................................................................... 197
7.2.3 Linux 设备树的使用 ......................................................................... 199
7.3 Linux 内核启动过程分析 ............................................................................. 206
7.3.1 内核启动流程介绍 ............................................................................ 206
7.3.2 内核启动加载程序 ............................................................................ 209
7.3.3 内核主体程序入口 ............................................................................ 215
7.3.4 Linux 系统初始化 ............................................................................. 218
7.3.5 初始化驱动模型 ................................................................................ 224
7.3.6 挂载根文件系统 ................................................................................ 225
7.4 习题 ............................................................................................................... 227
第8 章 内核移植实例 ·············································································· 229
8.1 基本内核移植 ............................................................................................... 230
8.2 网卡驱动移植 ............................................................................................... 234
8.2.1 网卡原理图分析 ................................................................................ 234
8.2.2 网卡驱动移植 .................................................................................... 235
8.2.3 以NFS 挂载根文件系统 ................................................................... 237
8.3 SD/eMMC 驱动移植 ..................................................................................... 238
8.4 USB 主机控制器驱动移植 ........................................................................... 240
8.5 LCD 驱动移植............................................................................................... 244
8.6 习题 ............................................................................................................... 249
第9 章 内核调试技术 ·············································································· 250
9.1 内核调试方法 ............................................................................................... 251
9.1.1 内核调试介绍 .................................................................................... 251
9.1.2 学会分析内核源程序 ........................................................................ 252
9.1.3 调试方法介绍 .................................................................................... 252
9.2 内核打印函数 ............................................................................................... 255
9.2.1 内核映像解压前的串口输出函数 .................................................... 255
9.2.2 内核映像解压后的串口输出函数 .................................................... 257
9.2.3 printk .................................................................................................. 258
9.3 获取内核信息 ............................................................................................... 263
9.3.1 系统请求键 ........................................................................................ 263
9.3.2 通过/proc 接口 ................................................................................... 264
9.3.3 通过/sys 接口 ..................................................................................... 265
9.4 处理出错信息 ............................................................................................... 268
9.4.1 oops 信息 ........................................................................................... 268
9.4.2 panic ................................................................................................... 269
9.4.3 通过ioctl 方法 ................................................................................... 271
9.5 内核源代码调试............................................................................................ 272
9.6 习题 ............................................................................................................... 275
第10 章 制作Linux 根文件系统 ································································· 276
10.1 根文件系统目录结构 .................................................................................. 277
10.2 init 系统初始化过程 ................................................................................... 280
10.2.1 inittab 文件 ....................................................................................... 281
10.2.2 System V init 启动过程 ................................................................... 284
10.2.3 Busybox init 启动过程分析 ............................................................ 285
10.3 制作根文件系统 .......................................................................................... 287
10.3.1 配置并编译Busybox ....................................................................... 287
10.3.2 添加共享库文件和内核模块 .......................................................... 289
10.3.3 添加其他目录和文件 ...................................................................... 290
10.4 固化根文件系统 .......................................................................................... 293
10.4.1 制作image 格式的initrd 根文件系统镜像 .................................... 293
10.4.2 固化ext2 格式的根文件系统 ......................................................... 295
10.5 习题 ............................................................................................................. 297
第11 章 Qt 移植 ····················································································· 299
11.1 Qt 源码配置、编译及安装 ......................................................................... 300
11.2 在根文件系统中添加Qt ............................................................................. 309
11.3 安装Qt 集成开发环境 ................................................................................ 309
11.4 添加ARM 平台的构建环境 ....................................................................... 313
11.5 编写并运行Qt 测试程序 ............................................................................ 316
11.6 习题 ............................................................................................................. 320
参考文献 ································································································· 322
附录 习题答案 ························································································ 323

读者评论

电子书版本

  • Epub

相关图书

亿级流量系统架构设计与实战

李琛轩 (作者)

本书涵盖了亿级用户应用后台通用的技术和系统架构设计思路,在内容结构上分为三大篇:架构知识篇(第1~3章),作为全书的基础知识篇,首先介绍后台的关键组件构成以及机...

 

算法笔记(第2版)

刁瑞 谢妍 (作者)

ChatGPT掀起了现象级的风暴,赶超ChatGPT潮流,算法突破是关键。 本书介绍了若干常见算法,涉及排序、哈希、动态规划与近似算法、高斯消去法、图论与线性...

 

看漫画学Python:有趣、有料、好玩、好用(全彩修订版)

关东升 赵大羽 (作者)

ython是一门既简单又强大的编程语言,被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。Python也越来越重要,成为国家计算机等...

 

Linux从入门到精通

张启玉 (作者)

本书以CentOS 7.8为演示系统,以阿里云为演示服务器,从Linux常用命令入手,从一毕业就要入职公司的上手要求出发,重实战、轻原理,目的就是要带领读者从一...

 

看漫画学Python 2:有趣、有料、好玩、好用(全彩进阶版)

关东升 ,赵大羽 (作者)

本书是《看漫画学Python》的进阶版本,继续秉承有趣、有料、好玩、好用的理念,并继续采用《看漫画学Python》一书中3个不同的漫画人物角色,通过这3个角色之...

 

趣玩Python:自动化办公真简单(双色+视频版)

本书以数据收集→数据清洗→数据分析→数据可视化→根据数据可视化结果(即图表)做决策为脉络,介绍Python在实际工作场景中的应用,侧重于用Python解决工作中...