1.嵌入式系统的简介
1.嵌入式系统的简介
1.1 课程规划与学习方法
嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一,但同时也是最难以掌
握的学科之一,很多踌躇满志的同学最终没能成为一名合格的嵌入式工程师,很大原因是
没有掌握科学,有效的学习方法,所以本章主要将从学习人群、待学知识点、学习顺序等
几个方面来阐述一套科学的嵌入式系统学习方法。
1.1.1 学习人群
从事嵌入式开发的工程师主要有两类。
l 电子工程、通信工程等偏硬件专业出身的人,他们主要从事硬件设计,也开发一些与
硬件关系密切的底层软件,如BootLoader、Board Support Package(像PC的BIOS
一样,往下驱动硬件,往上支持操作系统),硬件驱动程序等。他们的优势是对硬件
原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件系统往往力不从
心(例如嵌入式操作系统原理和复杂应用软件等)。
l 另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。
如果这部分人对硬件原理有较好的掌握,也可以从事BSP 和硬件驱动程序开发工作
1.1.2 待学知识点
嵌入式系统具有知识点多,要求的知识点广等特点,因此在开始学习之前,首先应该
明确应该学一些什么知识点,本小节将以嵌入式Linux为例,阐述其知识点。嵌入式Linux
的知识可以分为5大板块,如图1-1 所示。
以上5 大知识板块的知识点又可以具体细化为:
ARM 处理器工作模式
ARM 系统寄存器
ARM 寻址方式
ARM 汇编指令集
ARM 环境C 语言编程
ARM 中断与异常
ADS 集成开发环境
裸机程序开发(串口、LCD、时钟、LED、按键……)
2.Linux系统管理
Linux定制安装
Linux基本命令
samba、nfs、tftp、wireshark等工具使用
Shell编程
3.Linux系统管理
GCC、GDB、Makefile
文件、时间编程
多进程、多线程程序设计
进程间通讯
网络编程
QT图形化应用程序开发
Android 图形化应用程序开发
4.Linux系统管理
Linux内核配置与裁剪
Linux内核模块开发
根文件系统制作
进程子系统
内存子系统
Proc 文件系统
系统调用
内核定时器
内核异常分析
5.Linux系统管理
字符设备驱动程序
总线、设备、驱动模型
硬件访问技术
中断处理
Input 设备驱动
Platform驱动程序
PCI、USB 驱动程序
网卡驱动程序
触摸屏驱动程序
串口驱动程序
1.1.3 学习顺序
面对上一节所列出的众多知识点,采用什么样的顺序来学习至关重要,学习顺序得当,
事半功倍,学习顺序不当,则有可能导致学习者半途放弃,正确的学习顺序如图1-4 所示。
图1-2 嵌入式 Linux学习顺序
1.1.4 理论与实践
嵌入式属于应用型学科,强调理论与实践相结合,强调通过大量的实验与项目来加深
对知识的理解与掌握。因此在嵌入式学习的过程中,除了需要一套系统的理论知识学习大
纲外,更需要一套与之配套的实验大纲。
1.1.5 学习误区
很多同学在嵌入式学习的道路上最终放弃,很多时候是因为步入了嵌入式学习的误区,这
里我们列出了几项常见的误区:
误区 1:今天学学这,明天学学那,学习跟着感觉走。
正解:学习一定要按计划,由简入深,系统进行。
误区 2. 资料买了一大堆,自己都不知道看那本。
正解:初学阶段,资料做到少而精,坚持看。
误区 3. 只看资料与视频,就是不动手做。
正解:多做实验多思考,必修实验必须做。
1.1.6 学习方法总结
图1-3 嵌入式 Linux学习方法总结
对于初学的同学,如果不能自己制定知识点大纲和实验大纲,可以参考国嵌的嵌入式
课程大纲与实验大纲,制定完这两个大纲后,严格按照这两个大纲系统性学习。
1.2 嵌入式系统概述
1.2.1 什么是嵌入式系统
嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、对功能、可靠
性、成本、体积、功耗有严格要求的专用计算机系统。
它一般由以下几部分组成,如图1-4 所示:
1. 嵌入式微处理器
2. 外围硬件设备
3. 嵌入式操作系统
4. 特定的应用程序
图1-4 嵌入式系统构成
1.嵌入式微处理器:Omap 双核ARM 处理器
2.外围硬件设备:LCD、键盘、Wifi 无线网卡等
3.嵌入式操作系统:嵌入式Linux系统
4.特定的应用程序:Google earth 等
1.2.2 嵌入式系统特点
嵌入式系统与通用PC 系统相比,具有如下特点:
●专用性强。由于嵌入式系统通常是面向某个特定应用的,所以嵌入式系统的硬件和软
件,尤其是软件,都是为特定用户群来设计的,它通常都具有某种专用性的特点。
●实时性好。目前,嵌入式系统广泛应用于生产过程控制、数据采集、传输通信等场合,
主要用来对宿主对象进行控制,所以都对嵌入式系统有或多或少的实时性要求。例如,对
嵌入在武器装各中的嵌入式系统、在火箭中的嵌入式系统、一些工业控制装置中的控制系
统等应用中的实时性要求就极高。也正因为这种要求,在硬件上嵌人式系统极少使用存取
速度慢的磁盘等存储器,在软件上更是加以精心设计,从而可使嵌入式系统快速地响应外
部事件。当然,随着嵌入式系统应用的扩展,有些系统对实时性要求也并不是很高,例如
近年来发展速度比较快的手持式计算机、掌上电脑等。但总体来说,实时性是对嵌入式系统的普遍要求,是设计者和用户重点考虑的一个重要指标。
●可裁剪性好。从嵌人式系统专用性的特点来看,作为嵌入式系统的供应者,理应提供
各式各样的硬件和软件以各选用。但是,这样做势必会提高产品的成本。为了既不提高成
本,又满足专用性的需要,嵌入式系统的供应者必须采取相应措施使产品在通用和专用之
间进行某种平衡。目前的做法是,把嵌人式系统硬件和操作系统设计成可裁剪的,以便使
嵌入式系统开发入员根据实际应用需要来量体裁衣,去除冗余,从而使系统在满足应用要
求的前提下达到最精简的配置。
●可靠性高。由于有些嵌入式系统所承担的计算任务涉及产品质量、人身设各安全、国
家机密等重大事务,加之有些嵌入式系统的宿主对象要工作在无人值守的场合,例如危险
性高的工业环境中、内嵌有嵌入式系统的仪器仪表中、在人际罕至的气象检测系统中以及
为侦察敌方行动的小型智能装置中等。所以与普通系统相比较,对嵌入式系统可靠性的要
求极高。
●功耗低。有很多嵌入式系统的宿主对象都是一些小型应用系统,例如移动电话、PDA、
MP3、飞机、舰船、数码相机等,这些设各不可能配各容量较大的电源,因此低功耗一直
是嵌入式系统最求的目标。当然也是为了降低系统的功耗,嵌入式系统中的软件一般不存
储于磁盘等载体中,而都固化在存储器芯片或单片系统的存储器之中。
1.3 嵌入式系统工程师角色描述
图 1-6 显示的是采用嵌入式Linux 作为操作系统的嵌入式产品,针对这样的产品,其
开发流程如图1-7。
1.3.1 嵌入式应用工程师工作内容与所需知识点
从图1-7 可以知道,嵌入式应用工程师主要从事与产品相关的嵌入式Linux 应用程序
开发,需要具备的技能主要有:
C/C++语言
嵌入式 Linux环境搭建
嵌入式 Linux调试技术
Linux文件编程技术
Linux多线程编程技术
Linux多进程编程技术
Linux进程间通讯技术
Linux网络编程技术
对于从事图形化应用程序的嵌入式工程师来说,还需具备下面两项的一项:
QT编程技术
Android 应用程序开发技术
1.3.2 嵌入式系统工程师工作内容与所需知识点
从图1-7 可以知道,嵌入式系统工程师主要嵌入式系统的移植,驱动程序开发等偏底层的
工作,需要具备的技能主要有:
至少精通一种嵌入式CPU,如ARM
至少精通一种Bootloader,如U-Boot
Linux字符设备驱动程序开发技术
Linux网卡驱动程序开发技能
串口驱动程序开发技术
USB 驱动程序开发技术
LCD 驱动程序开发技术
了解Linux进程管理子系统
了解Linux内存管理子系统
了解Linux内核启动流程