1 嵌入式系统的结构
1.1 嵌入式系统的硬件架构
如图 5-1 所示,为嵌入式系统硬件模型结构,此系统主要由微处理器 MPU、外围电路,
以及外设组成,微处理器为 ARM 嵌入式处理芯片,如 ARM7TMDI系列及 ARM9 系列微处
理器,MPU 为整个嵌入式系统硬件的核心,决定了整个系统功能和应用领域。外围电路根
据微处理器不同而略有不同,主要由电源管理模型、时钟模块、闪存 FIASH、随机存储器 R
AM,以及只读存储器 ROM 组成。这些设备是一个微处理器正常工作所必须的设备。外部
设备将根据需要而各不相同,如通用通信接口 USB、RS-232、RJ-45 等,输入输出设备,如
键盘、LCD等。外部设备将根据需要定制。
嵌入式处理系统主要包括嵌入式微处理器、存储设备、模拟电路及电源电路、通信接
口,以及外设电路。
1.2嵌入式系统的软件结构
嵌入式系统与传统的单片机在软件方面最大的不同就是可以移植操作系统,从而使软
件设计层次化,传统的单片机在软件设计时将应用程序与系统、驱动等全部混在一起编译,
系统的可扩展性,可维护性不高,上升到操作系统后,这一切变得很简单可行。
嵌入式操作系统在软件上呈现明显的层次化,从与硬件相关的 BSP 到实时操作系统内
核 RTOS,到上层文件系统、GUI 界面,以及用户层的应用软件。各部分可以清晰地划分开
来,如图 5-2所示。当然,在某些时候这种划分也不完全符合应用要求。需要程序设计人员
根据特定的需要来设计自己的软件。
板级支持包(Board Support Packet)主要用来完成底层硬件相关的信息,如驱动程序,加
载实时操作系统等功能;
实时操作系统层主要就是常见的嵌入式操作系统,设计者根据自己特定的需要来设计
移植自己的操作系统,即添加删除部分组件,添加相应的硬件驱动程序,为上层应用提供系
统调用;
文件系统、GUI,以及系统管理主要应对需要,即如果需要文件系统及图形界面支持才
需要设计,主要是为了应用程序员开发应用程序提供更多更便捷更丰富的 API 接口;
应用软件层即用户设计的针对特定应用的应用软件,在开发该应用软件时,可以用到
底层提供的大量函数。
采用分层结构的软件设计使系统清晰明了,各个部分设计工作分工明确,从而避免整
个系统过分庞大。
2 嵌入式开发的模式及流程
2.1 嵌入式系统开发模式
嵌入式系统开发分为软件开发部分和硬件开发部分。嵌入式系统在开发过程一般都采用如图5-3 所示
的“宿主机/目标板”开发模式,即利用宿主机(PC机)上丰富的软硬件资源及良好的开发环境和调试工具来
开发目标板上的软件,然后通过交叉编译环境生成目标代码和可执行文件,通过串口/USB/以太网等方式下
载到目标板上,利用交叉调试器在监控程序运行,实时分析,最后,将程序下载固化到目标机上,完成整
个开发过程。
在软件设计上,如图 5-4 所示为结合 ARM 硬件环境及 ADS 软件开发环境所设计的嵌
入式系统开发流程图。整个开发过程基本包括以下几个步骤。
(1)源代码编写:编写源 C/C++及汇编程序;
(2)程序编译:通过专用编译器编译程序;
(3)软件仿真调试:在 SDK中仿真软件运行情况;
(4)程序下载:通过 JTAG、USB、UART 方式下载到目标板上;
(5)软硬件测试、调试:通过 JTAG等方式联合调试程序;
(6)下载固化:程序无误,下载到产品上生产。
2.2嵌入式系统开发流程
当前,嵌入式开发已经逐步规范化,在遵循一般工程开发流程的基础上,嵌入式开发有其自身的一些特点,如图 5-5 所示为嵌入式系统开发的一般流程。主要包括系统需求分析
(要求有严格规范的技术要求)、体系结构设计、软硬件及机械系统设计、系统集成、系统测
试,最终得到最终产品。
(1)系统需求分析。确定设计任务和设计目标,并提炼出设计规格说明书,作为正式设
计指导和验收的标准。系统的需求一般分功能性需求和非功能性需求两方面。功能性需求是
系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗、
体积、重量等因素。
(2)体系结构设计。描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和
执行装置的功能划分,以及系统的软件、硬件选型等。一个好的体系结构是设计成功与否的
关键。
(3)硬件/软件协同设计。基于体系结构,对系统的软件、硬件进行详细设计。为了缩短
产品开发周期,设计往往是并行的。嵌入式系统设计的工作大部分都集中在软件设计上,采
用面向对象技术、软件组件技术、模块化设计是现代软件工程经常采用的方法。
(4)系统集成。把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单
元设计过程中的错误。
(5)系统测试。对设计好的系统进行测试,看其是否满足规格说明书中给定的功能要求。
嵌入式系统开发模式最大特点是软件、硬件综合开发。这是因为嵌入式产品是软硬件
的结合体,软件针对硬件开发、固化、不可修改。
如果在一个嵌入式系统中使用 Linux 技术开发, 根据应用需求的不同有不同的配置开发
方法,但是,一般情况下都需要经过如下的过程。
(1)建立开发环境,操作系统一般使用 Redhat Linux,选择定制安装或全部安装,通过
网络下载相应的 GCC 交叉编译器进行安装(比如,arm-1inux-gcc、arnl-uclibc-gcc),或者安
装产品厂家提供的相关交叉编译器;
(2)配置开发主机,配置 MINICOM,一般的参数为波特率 115200 Baud/s,数据位 8 位,
停止位为 1,9,无奇偶校验,软件硬件流控设为无。在 Windows 下的超级终端的配置也是
这样。 MINICOM 软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工
具。配置网络主要是配置 NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境
设置过程。
(3)建立引导装载程序 BOOTLOADER,从网络上下载一些公开源代码的 BOOTLOADE
R,如 U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT 等,根据具体芯片进
行移植修改。有些芯片没有内置引导装载程序,比如,三星的 ARV17、ARM9 系列芯片,
这样就需要编写开发板上 FLASH 的烧写程序,读者可以在网上下载相应的烧写程序,也有
Linux 下的公开源代码的 J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具
体电路进行源代码修改。这是让系统可以正常运行的第一步。如果用户购买了厂家的仿真器
比较容易烧写 FLASH,虽然无法了解其中的核心技术,但对于需要迅速开发自己的应用的
人来说可以极大提高开发速度。
(4)下载已经移植好的 Linux 操作系统,如 MCLiunx、ARM-Linux、PPC-Linux 等,如
果有专门针对所使用的 CPU 移植好的 Linux 操作系统那是再好不过,下载后再添加特定硬
件的驱动程序,然后进行调试修改,对于带 MMU 的 CPU 可以使用模块方式调试驱动,而
对于 MCLiunx 这样的系统只能编译内核进行调试。
(5)建立根文件系统,可以从 http://www.busy.box.NET 下载使用 BUSYBOX 软件进行功
能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。由于默认
的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放
位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统
的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为
只读,需要使用 mkcramfs genromfs 等工具产生烧写映像文件。
(6)建立应用程序的 FLASH 磁盘分区,一般使用 JFFS2 或 YAFFS 文件系统,这需要在
内核中提供这些文件系统的驱动,有的系统使用一个线性 FLASH(NOR 型)512KB~32MB,
有的系统使用非线性 FLASH(NAND 型)8MB~512MB,有的两个同时使用,需要根据应用
规划 FLASH 的分区方案。
(7)开发应用程序,可以放入根文件系统中,也可以放入 YAFFS、JFFS2 文件系统中,
有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于μC/OS-II
的方式。
(8)烧写内核、根文件系统和应用程序,发布产品。
嵌入式开发流程
最新推荐文章于 2024-01-28 22:45:53 发布