分类: 嵌入式
2010-11-30 20:02:07
嵌入式系统开发概述
1、裸机开发:对于功能简单仅包括应用程序的嵌入式系统一般不使用操作系统,仅有应用程序和设备驱动程序
2、带操作系统的开发:1)、当设计较复杂的程序时,可能就需要一个操作系统(OS)来管理控制内存、多任务、周边资源等2)、本阶段我们将分别介绍裸机下与操作系统下的开发,并且把嵌入式Linux操作系统的嵌入式开发作为重点
3、嵌入式系统开发流程
一、 (无操作系统)
1) 硬件开发(PCB、原理图)
2) 启动代码(硬件初始化)
3) 设备驱动(裸机下驱动)
4) 应用程序(单任务)
二、 (有操作系统)
1)、硬件开发
2)、启动加载程 (bootloader)
3)、操作系统内核(kernel)
4)、根文件系统 (root)
5)、设备驱动 (driver)
6)、应用程序 (进程、线程、GUI、网络、数据库等)
4、通常基于linux系统的嵌入式开发步骤如下:
1)、开发目标硬件系统:
如选择微处理器、Flash及其它外设等
2)、建立交叉开发环境:
安装交叉编译工具链、配置串口通信工具、配置网络通信工具等
3)、开发Bootloader: 移植Bootloader,如vivi
4)、移植linux内核: 如linux2.4.18内核移植
5)、开发根文件系统: 如CRAMFS文件系统的制作
6)、开发相关硬件的驱动程序:如LCD、网卡、GPIO等
7)、开发上层的应用程序:如网络、QT GUI开发
5、交叉编译链介绍
1)、本地编译:
在当前平台编译,编译得到的程序也在本地执行,这时所使用的编译器称为本地编译器
2)、交叉编译:
在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在X86平台上编译出能运行于ARM平台上的程序,这时所使用的编译器称为交叉编译器
3)、在编译Linux内核和应用程序之前,由于一般嵌入式开发系统存储大小有限,通常都要在性能优越的PC机上建立一个用于目标机的交叉编译工具链,用该交叉编译工具链在PC上编译出目标机上要运行的程序
4)、交叉编译工具链主要由binutils、gcc、glibc 3个部分组成
5)、编译交叉编译工具链是一个非常复杂的过程,但一般网上有已经编译好的工具链可以下载
常用的交叉编译器版本如下:
2.95.3、3.3.2、3.4.1、4.3.2等
6、启动Bootloader介绍
1)、对于PC机,其开机后的初始化处理器配置、硬件初始化等操作是由BIOS(Basic Input/Output System)完成的,但对于嵌入式系统来说,出于经济性、价格方面考虑一般不配置BIOS,因此我们必须自行编写完成这些工作的程序
2)、这就是所需要的引导启动程序,在嵌入式中称为BootLoader程序(在裸机下称作启动代码)
3)、BootLoader是系统加电后、操作系统内核或用户应用程序运行之前,首先必须运行的一段程序代码
4)、通过这段程序,为最终调用操作系统内核、运行用户应用程序准备好正确的环境
5)、系统启动代码完成基本软硬件环境初始化后,对于有操作系统的情况下,启动操作系统、启动内存管理、任务调度、加载驱动程序等,最后执行应用程序或等待用户命令
6)、对于没有操作系统的系统直接执行应用程序或等待用户命令
7、Linux内核介绍
Linux内核是linux操作系统的核心部分,它实现了操作系统的五大功能模块:
进程管理
内存管理
文件系统
设备控制
网络
8、Linux根文件系统介绍
根文件系统是linux/UNIX系统启动的一个重要组成部分,也是操作系统正常工作的必要组成部分,在启动内核后需要挂载根文件系统
一般重要的文件、命令、应用程序等都保存在根文件系统中,操作系统起来后可以直接使用
根文件系统的实现多种多样
基于ram的ramdisk
基于flash的cramfs、yaffs2
基于网络的nfs
9、Linux驱动介绍
驱动程序从字面上可以理解为一类程序,这类程序的目的一般是驱动硬件正常工作,所以通常说的驱动都是针对特定的硬件来编写的
例如:lcd、flash、ad、网络等正常工作都需要相应的驱动程序来支持
驱动程序既可以工作在有操作系统的环境下,也可以工作在无操作系统的环境中
在做一些简单的硬件控制时,由于功能比较单一,不需要操作系统来管理,所以针对这种情况的驱动程序也相对简单,因为它只完成特定硬件的功能而不需考虑其它的并发任务等情况
如果要实现的任务相对较多,较复杂,需要操作系统对它进行管理,在这种情况下,编写驱动的程序就要考虑其他任务的并发、任务的优先级以及中断的处理等问题
所以在带操作系统的环境下编写驱动程序相对较复杂,但这也是最常用到的类型
从嵌入式应用程序开发人员角度看,linux驱动程序为应用程序提供了访问硬件设备的应用编程接口(API),它主要提供以下功能:
应用程序通过驱动程序安全有效的访问硬件设备
驱动程序作为嵌入式系统的中间一层软件,他隐藏了低层的细节,从而提高了软件的可移植性和可复用性
10、Linux应用程序开发操作界面
现代操作系统一般都提供图形化的操作界面,这种界面一般由视窗、图标、菜单、对话框以及其它一些可视特征组成,它允许终端用户方便地利用鼠标和键盘来操作电脑
GUI系统发展非常迅速,其桌面主要分支有:
苹果的视窗系统
微软的Windows桌面系统
UNIX的上的X Window系统
在类UNIX系统中,X Window系统占据统治地位,各种流行的桌面环境和开发包实际上都是在X Window的基础上开发的,
例如前面我们介绍过的桌面系统上的Gnome、KDE
嵌入式系统中由于硬件条件的限制,X Window系统不太适合
目前常见的面向嵌入式Linux的GUI系统主要有
Qtopia Core
MicroWindows(Nabo-X Windows)
国内的MiniGUI等
是一个专门为嵌入式系统设计图形用户界面的工具包。Qt是挪威Trolltech软件公司的产品,它是桌面系统图形用户界面开发包,Qtopia Core就是Qt的嵌入式版本
MiniGUI
是一种面向嵌入式系统的图形用户界面支持
系统,是国内做的较好的自由软件之一.其主
要特点有:
跨操作系统支持
多汉字输入法支持
轻型、占用资源少
高性能、高可靠性
可配置性
MicroWindows
(2005年更名为Nano-X Window)是一个基于客户/服务器体系结构的GUI系统
其主要特色是提供了类似X Window的客户/服务器体系结构并提供了相对完善的图形功能
MicroWindows作为X Window的替代品,可以使用更少的存储空间(100KB-600KB)和RAM提供与X Window相似的功能