1嵌入式系统第6讲嵌入式软件开发基础主要内容嵌入式操作系统嵌入式linux软件开发环境搭建嵌入式linux软件开发基础•嵌入式操作系统及其特点•常见的嵌入式操作系统•嵌入式系统软件开发流程•宿主机linux系统安装、配置•交叉编译环境•Vi编辑器•GCC•make•gdb6.1嵌入式操作系统6.1.1嵌入式操作系统嵌入式操作系统(EmbeddedOperationSystem,EOS)负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动,是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前在嵌入式领域广泛使用的操作系统有:嵌入式Linux、WindowsEmbedded、VxWorks等,以及应用在智能手机和平板电脑的Android、iOS等。概述系统内核小应用于嵌入式系统,系统资源(ROM、FLASH等)相对有限,所以内核较之传统的操作系统要小得多。比如Enea公司的OSE分布式系统,内核只有5K。专用性强嵌入式系统软件系统和硬件的结合紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全两个概念。系统精简嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。特点6.1.1嵌入式操作系统高实时性高实时性的系统软件(OS)是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。多任务的操作系统嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。嵌入式系统的应用程序可以没有操作系统直接在芯片上运行;但是为了合理地调度多任务、利用系统资源、系统函数以及和专用库函数接口,用户必须自行选配RTOS(Real-TimeOperatingSystem)开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。需要开发工具和环境由于其本身不具备自主开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。特点6.1.1嵌入式操作系统6.1.2常见嵌入式操作系统简介常见嵌入式操作系统-linux系统200余种uc/osVxworks嵌入式LinuxWindowsCESymbianPalmOSSymbianHOPENOSAndroidMeego以linux为基础开放源码,版权免费变种丰富:uclinux,应用领域有信息家电、PDA、机顶盒、DigitalTelephone、AnsweringMachine、ScreenPhone、数据网络、EthernetSwitches、Router、Bridge、Hub、Remoteaccessservers、ATM、Framerelay、远程通信、医疗电子、交通运输计算机外设、工业控制、航空航天领域等嵌入式linux系统6.1.2常见嵌入式操作系统简介精简的内核,性能高、稳定,多任务。适用于不同的CPU,支持多种体系结构,如X86、ARM、MIPS、ALPHA、SPARC等。能够提供完善的嵌入式GUI以及嵌入式X-Windows。提供嵌入式浏览器、邮件程序、MP3播放器、MPEG播放器、记事本等应用程序。提供完整的开发工具和SDK,同时提供PC上的开发版本。用户可定制,可提供图形化的定制和配置工具。常用嵌入式芯片的驱动集,支持大量的周边硬件设备,驱动丰富。针对嵌入式的存储方案,提供实时版本和完善的嵌入式解决方案。完善的中文支持,强大的技术支持,完整的文档。开放源码,丰富的软件资源,广泛的软件开发者的支持,价格低廉,结构灵活,适用面广。嵌入式linux系统特点6.1.2常见嵌入式操作系统简介美国WindRiver,1983年设计开发的一种嵌入式实时操作系统(RTOS),良好的持续发展能力、高性能的内核以及友好的用户开发环境应用领域:通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中。在美国的F-16、FA-18战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。Vxworks6.1.2常见嵌入式操作系统简介可靠性高;高实时性:系统开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,它们造成的延迟很短;优先级抢占(PreemptivePriorityScheduling)和轮转调度(Round-RobinScheduling)机制,也充分保证了的实时性;可裁减性:VxWorks由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。Vxworks系统特点6.1.2常见嵌入式操作系统简介windowsCEWindowsEmbeddedCompact(即WindowsCE)是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统。6.1.2常见嵌入式操作系统简介使用了对象存储(objectstore)技术,包括文件系统、注册表及数据库。它还具有很多高性能、高效率的操作系统特性,包括按需换页、共享存储、交叉处理同步、支持大容量堆(heap)等。拥有良好的通信能力。广泛支持各种通信硬件,亦支持直接的局域连接以及拨号连接,并提供与PC、内部网以及Internet的连接,还提供与Windows9x/NT的最佳集成和通信。支持嵌套中断。允许更高优先级别的中断首先得到响应,而不是等待低级别的ISR完成。这使得该操作系统具有嵌入式操作系统所要求的实时性。更好的线程响应能力。对高级别IST(中断服务线程)的响应时间上限的要求更加严格,在线程响应能力方面的改进,帮助开发人员掌握线程转换的具体时间,并通过增强的监控能力和对硬件的控制能力帮助他们创建新的嵌入式应用程序。256个优先级别。可以使开发人员在控制嵌入式系统的时序安排方面有更大的灵活性。WindowsCE的API是Win32API的一个子集,支持近1500个Win32API。有了这些API,足可以编写任何复杂的应用程序。当然,在WindowsCE系统中,所提供的API也可以随具体应用的需求而定。WINDOWSCE系统特点嵌入式系统与传统的单片机在软件方面最大的不同就是可以移植操作系统;嵌入式操作系统在软件上呈现明显的层次化,从与硬件相关的BSP到实时操作系统内核RTOS,到上层文件系统、GUI界面,以及用户层的应用软件。各部分可以清晰地划分开来,如下图所示。6.3嵌入式软件开发流程板级支持包(BoardSupportPacket)主要用来完成底层硬件相关的信息,如驱动程序,加载实时操作系统等功能;实时操作系统层主要就是常见的嵌入式操作系统,设计者根据自己特定的需要来设计移植自己的操作系统,即添加删除部分组件,添加相应的硬件驱动程序,为上层应用提供系统调用;6.1.3嵌入式软件开发流程宿主机/目标机开发模式整个开发流程包括以下步骤(1)源代码编写:编写源C/C++及汇编程序;(2)程序编译:通过专用编译器编译程序;(3)软件仿真调试:在SDK中仿真软件运行情况;(4)程序下载:通过JTAG、USB、UART方式下载到目标板上;(5)软硬件测试、调试:通过JTAG等方式联合调试程序;(6)下载固化:程序无误,下载到产品上生产。建立开发环境,操作系统一般使用RedhatLinux,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(比如,arm-1inux-gcc、arnl-uclibc-gcc),或者安装产品厂家提供的相关交叉编译器;配置开发主机,配置MINICOM,作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络主要是配置NFS网络文件系统,简化嵌入式网络调试环境.建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如,三星的ARV17、ARM9系列芯片,这样就需要编写开发板上FLASH的烧写程序,读者可以在网上下载相应的烧写程序,也有Linux下的公开源代码的J-FLASH程序。6.1.3嵌入式软件开发流程开发流程下载已经移植好的Linux操作系统,如MCLiunx、ARM-Linux、PPC-Linux等,如果有专门针对所使用的CPU移植好的Linux操作系统那是再好不过,下载后再添加特定硬件的驱动程序,然后进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,而对于MCLiunx这样的系统只能编译内核进行调试。建立根文件系统,可以从http://软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。由于默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfsgenromfs等工具产生烧写映像文件。6.1.3嵌入式软件开发流程开发流程6.1.3嵌入式软件开发流程开发流程建立应用程序的FLASH磁盘分区,一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性FLASH(NOR型)512KB~32MB,有的系统使用非线性FLASH(NAND型)8MB~512MB,有的两个同时使用,需要根据应用规划FLASH的分区方案。开发应用程序,可以放入根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起。烧写内核、根文件系统和应用程序,发布产品。6.2嵌入式软件开发环境搭建6.2.1宿主机linux系统安装、配置RH9.0安装-准备嵌入式LINUX开发环境有几个方案:1、基于PC机WINDOWS操作系统下的CYGWIN;2、在WINDOWS下安装虚拟机后,再在虚拟机中安装LINXUX操作系统;3、直接安装LINUX操作系统。基于WINDOWS的环境要么有兼容性问题,要么速度有影响,所以我推荐大家使用纯LINUX操作系统开发环境。我们实际的开发环境为REDHAT9,它已经支持中文,并且包含了绝大部分的开发工具,不用担心装了LINUX就不能使用WINDOWS的问题。一般的情况都是用户已经有了WINDOWS操作系统,再安装LINUX,LINUX会自动安装一个叫作GRUB的启动引导软件,可以选择引导多个操作系统。RH9.0安装-准备6.2.1宿主机linux系统安装、配置硬件要求:CPU:高于奔腾500M,推荐高于赛扬1.7G;内存:大于128M,推荐256M;硬盘:大于10G,推荐高于40G。6.2.1宿主机linux系统安装、配置RH9.0安装在一台PC上安装RedHatLINUX9.0,选择Custom定制安装,在选择软件Package时最好将所有包都安装,需要空间约2.7G,如果选择最后一项:everything,即完全安装,将