嵌入式系统的开发流程
以带有操作系统的32位微处理器为核心的嵌入式系统为例:
操作系统一般使用Redhat Linux,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(比如,arm-linux-gcc),或者安装产品厂家提供的相关交叉编译器;
配置串口通讯工具,一般的参数为波特率115200 Baud/s,数据位8位,停止位为1,无奇偶校验,数据流控制设为无。在Windows下的超级终端的配置也是这样。该软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
从网络上下载一些公开源代码的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如,三星的ARM系列芯片,这样就需要编写开发板上FLASH的烧写程序,可以在网上下载相应的烧写程序,也有Linux下的公开源代码的J-FLASH程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果用户购买了厂家的仿真器比较容易烧写FLASH,虽然无法了解其中的核心技术,但对于需要迅速开发自己的应用的人来说可以极大提高开发速度。
如果有专门针对所使用的CPU移植好的Linux操作系统那是再好不过,下载后再添加特定硬件的驱动程序,然后进行调试修改。
在最基本的根文件系统基础上,根据自己的应用需要添加其他的程序。由于默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本。
可以放入根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,调试通过后,烧写入目标芯片,完成设计。
2 嵌入式系统的学习基础和方法
1.软件方面的知识:
嵌入式是软硬件结合的技术,搞嵌入式系统的人应对ARM处理器工作原理和接口技术有一定的了解,包括汇编指令系统。不了解处理器原理,就没办法写出驱动程序。在嵌入式开发的一些关键部分,如Bootloader等,除C语言程序外,还有一部分汇编程序。
从事嵌入式系统的人至少须掌握一个嵌入式操作系统,目前主要包括:
(1)传统的经典RTOS:最主要的是Vxworks操作系统,以及其Tornado开发平台。Vxworks出现早,实时性很强,并且内核可极微,可靠性较高。特别在通信设备等实时性要求较高的系统中,有比较广泛的应用。
(2)嵌入式Linux操作系统:嵌入式Linux广泛应用的原因当然是免费、开源、支持软件多、支持者多,成本也低。
(3)Windows CE嵌入式操作系统:Windows CE是微软的操作系统,也有很大的市场份额,特别是在PDA、手机等界面要求较高或者要求快速开发的场合。
2.硬件方面的知识:
模拟电路、数字电路、计算机组成原理、微处理器结构、单片机等硬件课程是从事嵌入式开发所要掌握的。
嵌入式本身就是从单片机发展过来的,如今很多单片机都已经带操作系统,嵌入式开发领域,驱动人才缺乏。写驱动必须掌握操作系统的内部工作原理,包括相关的硬件知识,即所谓的软硬通吃,所以这方面的人才是一将难求。
目前状况,硬件方面,不仅有各大公司的微处理器芯片,还有用于学习和研发的各种配套开发包。目前低层系统和硬件平台经过若干年的研究,已经相对比较成熟,实现各种功能的芯片应有尽有。而且巨大的市场需求给我们提供了学习研发的资金和技术力量。
从软件方面讲,也有相当部分的成熟软件系统。同时由于是研究热点,所以我们可以在网上找到各种各样的免费资源,从各大厂商的开发文档,到各种驱动,程序源代码,甚至很多厂商还提供微处理器的样片。这对于我们从事这方面的研发,无疑是个资源宝库。对于软件设计来说,不管是上手还是进一步开发,都相对来说比较容易。这就使得很多生手能够比较快的进入研究状态,利于发挥大家的积极创造性。一些被大家广为认可的学习方法如下:
C语言开发经验
条件:Linux、Windows均可。
方法:主要是掌握ANSI C编程(不包括qt图形可视化开发)
网络、操作系统、体系结构
条件:Linux,各种书,算法、例程。
方法:通过C编程实现简单的网络等知识的算法和过程。
嵌入式系统概念
条件:各个嵌入式网站,讨论组,书籍
方法:多交流,勤思考。
嵌入式开发实践
条件:嵌入式系统开发工具的demo版,包括编译器,仿真器。
方法:一个是基于ARM的嵌入式系统开发,另一个是linux下的应用软件开发。第一个是针对硬件开发而言的,而第二个则是针对软件开发而言的。
硬件开发
条件:各种嵌入式芯片、存储器等电路器件,protel99等电路设计软件,电路板制作。
方法:这时候该有开发条件了,最起码是51系列,这个比较方便。