已阅读5页,还剩365页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1基于ARM的嵌入式LINUX系统开发原理与实战基于ARM的嵌入式LINUX系统开发原理与实战I目录目录I第一章嵌入式操作系统111嵌入式操作系统1111嵌入式操作系统特点1112嵌入式操作系统分类212实时操作系统4121实时操作系统与通用操作系统的比较4122实时操作系统的评价指标713基于LINUX的嵌入式操作系统8131ARMLINUX简介9132UCLINUX简介1114嵌入式系统设计方法13141嵌入式系统开发的特点13142嵌入式系统开发的流程1515本章小结1616本章习题17第二章搭建LINUX交叉编译开发环境1921什么是交叉编译1922建立交叉编译开发工具链20221编译工具链20222下载工具链30223验证工具链3423配置主机服务35231配置SAMBA36232配置DHCP37233配置TFTP40234配置NFS4124本章小结4325本章习题43第三章GNU开发工具的使用方法4531VI使用说明45311VI简介45312VI基本命令4532编写MAKEFILE50321什么是MAKEFILE51322MAKE命令53323隐含规则5533使用GCC56331GCC的用法57332GCC选项5834库文件的管理与使用66341库文件命名67342库文件操作67343库文件升级68344库文件使用70目录II35调试工具使用71351KDB使用71352GDB使用7636仿真器使用80361MULTIICESERVER状态80362MULTIICESERVER配置84363ADSV12配合MULTIICE调试8637本章小结9038本章习题90第四章BOOTLOADERVIVI移植9341BOOTLOADER简介93411BOOTLOADER的概念93412BOOTLOADER的启动过程9542VIVI概述10243VIVI的配置和编译10344VIVI代码导读105441阶段1ARCH/S3C2410/HEADS105442阶段2INIT/MAINC10745本章小结13846本章习题138第五章ARMLINUX内核移植13951内核结构139511系统组成139512代码目录结构140513内核代码阅读14252内核启动流程143521VMLINUXARMVLDSIN和HEADARMVS143522START_KERNEL函数14653定制LINUX内核148531裁剪、配置内核149532编译内核15754将内核下载到目标板上15855本章小结16256本章习题162第六章LINUX中断处理程序开发16561中断处理程序概述165611中断的产生165612IRQINTERRUPTREQUIREMENT165613中断处理程序166614置中断标志位167615中断处理程序的不可重入性167616避免竞争条件的出现16962ARM处理器中断处理169621ARM处理器异常中断处理概述169622支持中断跳转的解析程序17063中断处理程序架构17364时钟中断与看门狗技术177基于ARM的嵌入式LINUX系统开发原理与实战III641时钟中断与定时器概念177642时钟中断与定时器实现178643看门狗技术18165本章小结18166本章习题182第七章LINUX设备驱动开发18371设备驱动程序概述183711设备驱动程序分类183712其它相关概念18472设备驱动程序架构185721基本架构185722相关数据结构18773设备驱动程序开发实例199731编写内核模块199732编写块(字符)设备驱动程序201733编写网络设备驱动程序20874本章小结21475本章习题215第八章LINUX文件系统移植21781LINUX文件系统概述217811LINUX文件系统的历史217812LINUX文件系统的基本概念21982LINUX文件系统介绍221821EXTFS和EXT2FS222822EXT3FS224823REISERFS225824XFS227825JFS228826JFFS2229827其它文件系统简介23483LINUX文件系统结构235831VFSVIRTUALFILESYSTEM236832MTDMEMORYTECHNOLOGYDEVICE24084LINUX文件系统移植244841移植JFFS2文件系统244842使用RAMDISK25085本章小结25486本章习题254第九章LINUX应用程序开发25591进程控制255911LINUX进程概述255912LINUX进程调度255913相关系统调用及例程25892进程间通信273921LINUX进程间通信概述273922信号275923管道276924消息队列278目录IV925信号灯279926共享内存28293多线程应用程序开发283931线程概述283932POSIX线程库API288933线程编程实例30794本章小结31295本章习题313第十章SOCKET编程315101SOCKET编程基本概念3151011网间进程通信3151012服务方式3171013客户/服务器模式3181014套接字类型319102SOCKET系统调用3201021建立SOCKET3201022配置SOCKET3201023建立连接3221024传输数据3231025结束传输324103SOCKET编程实例3251031简单的C/S模型3251032PROXY源码分析336104本章小结362105本章习题3621第一章嵌入式操作系统嵌入式操作系统(EOS,EMBEDDEDOPERATINGSYSTEM)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、调度作业,控制、协调并发活动;它必须体现其所在系统的特征,并能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的EOS产品系列。随着INTERNET技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。嵌入式操作系统是嵌入式系统的重要组成部分。本章将主要介绍嵌入式操作系统的特点,并着重介绍嵌入式系统中常用的实时操作系统以及嵌入式系统的设计方法。11嵌入式操作系统111嵌入式操作系统特点传统的操作系统是计算机的一个大型的系统软件,是计算机的管家和指挥中心。通过它可以实现计算机自身硬件、软件的管理,提高计算机资源的利用率,合理地组织计算机的工作流程,增强计算机的处理能力,提供友好的人机界面,方便用户使用计算机。嵌入式操作系统(EOS)除了具有上述功能之外,还有其自身的特点(1)可装卸性。开放性、可伸缩性的体系结构。(2)强实时性。EOS实时性一般较强,可用于各种设备控制当中。(3)统一的接口。提供各种设备驱动接口。(4)操作方便、简单,提供友好的图形界面,追求易学易用。(5)提供强大的网络功能,支持TCP/IP协议及其它协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口。(6)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预,这就要负责系统管理的EOS具有较强的稳定性。嵌入式操作系统的用户接口一般不提供操作命令,它通过系统的调用命令向用户程序提供服务。第一章嵌入式操作系统2(7)固化代码。在嵌入式系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。辅助存储器在嵌入式系统中很少使用,因此,嵌入式操作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统。(8)更好的硬件适应性,也就是良好的移植性。知识点嵌入式操作系统伴随着嵌入式系统的发展经历了4个比较明显的阶段。第一阶段是无操作系统的嵌入算法阶段,是以单芯片为核心的可编程控制器形式的系统,同时具有与监测、伺服、指示设备相配合的功能。第二阶段是以嵌入式CPU为基础、以简单操作系统为核心的嵌入式系统。第三阶段是通用的嵌入式实时操作系统阶段,是以嵌入式操作系统为核心的嵌入式系统。第四阶段是以基于INTERNET为标志的嵌入式系统,这是一个正在迅速发展的阶段。112嵌入式操作系统分类一般情况下,嵌入式操作系统可以分为两类,一类是面向控制、通信等领域的实时操作系统,如WINDRIVER公司的VXWORKS、ISI的PSOS、QNX系统软件公司的QNX、ATI的NUCLEUS以及经过实时性改造的LINUX等;另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理PDA、移动电话、机顶盒、电子书、WEBPHONE等。1、非实时操作系统早期的嵌入式系统中没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机及裸设备。在这种情况下,通常把嵌入式程序分成两部分,即前台程序和后台程序。前台程序通过中断来处理事件,其结构一般为无限循环;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情况下,后台程序也叫任务级程序,前台程序也叫事件处理级程序。在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求特3别严格的操作通常由中断来完成,仅在中断服务程序中标记事件的发生,不再做任何工作就退出中断,经过后台程序的调度,转由前台程序完成事件的处理,这样就不会造成在中断服务程序中处理费时的事件而影响后续和其他中断。实际上,前后台系统的实时性比预计的要差。这是因为前后台系统认为所有的任务具有相同的优先级别,即是平等的,而且任务的执行又是通过FIFO队列排队,因而对那些实时性要求高的任务不可能立刻得到处理。另外,由于前台程序是一个无限循环的结构,一旦在这个循环体中正在处理的任务崩溃,使得整个任务队列中的其他任务得不到机会被处理,从而造成整个系统的崩溃。由于这类系统结构简单,几乎不需要RAM/ROM的额外开销,因而在简单的嵌入式应用被广泛使用。2、实时操作系统实时系统是指能在确定的时间内执行其功能并对外部的异步事件做出响应的计算机系统。其操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作进行的时间有关。“在确定的时间内”是该定义的核心。也就是说,实时系统是对响应时间有严格要求的。实时系统对逻辑和时序的要求非常严格,如果逻辑和时序出现偏差将会引起严重后果。实时系统有两种类型软实时系统和硬实时系统。软实时系统仅要求事件响应是实时的,并不要求限定某一任务必须在多长时间内完成;而在硬实时系统中,不仅要求任务响应要实时,而且要求在规定的时间内完成事件的处理。通常,大多数实时系统是两者的结合。实时应用软件的设计一般比非实时应用软件的设计困难。实时系统的技术关键是如何保证系统的实时性。实时多任务操作系统是指具有实时性、能支持实时控制系统工作的操作系统。其首要任务是调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。实时操作系统具有如下功能任务管理多任务和基于优先级的任务调度、任务间同步和通信信号量和邮箱等、存储器优化管理含ROM的管理、实时时钟服务、中断管理服务。实时操作系统具有如下特点规模小,中断被屏蔽的时间很短,中断处理时间短,任务切换很快。实时操作系统可分为可抢占型和不可抢占型两类。对于基于优先级的系统而言,可抢占型实时操作系统是指内核可以抢占正在运行任务的CPU使用权并将使用权交给进入就绪态的优先级更高的任务,是内核抢了CPU让别的任务运行。不可抢占型实时操作系统使用某种算法并决定让某个任务运行后,就把CPU的控制权完全交给了该任务,直到它主动将CPU控制权还回来。中断由中断服务程序来处理,可以激活一个休眠态的任务,使之进入就绪态;而这个进入就绪态的任务第一章嵌入式操作系统4还不能运行,一直要等到当前运行的任务主动交出CPU的控制权。使用这种实时操作系统的实时性比不使用实时操作系统的系统性能好,其实时性取决于最长任务的执行时间。不可抢占型实时操作系统的缺点也恰恰是这一点,如果最长任务的执行时间不能确定,系统的实时性就不能确定。可抢占型实时操作系统的实时性好,优先级高的任务只要具备了运行的条件,或者说进入了就绪态,就可以立即运行。也就是说,除了优先级最高的任务,其他任务在运行过程中都可能随时被比它优先级高的任务中断,让后者运行。通过这种方式的任务调度保证了系统的实时性,但是,如果任务之间抢占CPU控制权处理不好,会产生系统崩溃、死机等严重后果。重点嵌入式系统的特点可装卸性;强实时性;统一的接口;操作方便、简单,提供友好的图形界面,追求易学易用;提供强大的网络功能;强稳定性,弱交互性;固化代码;更好的硬件适应性,也就是良好的移植性。嵌入式操作系统的分类非实时操作系统和实时操作系统(可抢占型和不可抢占型)。12实时操作系统上节已经简单介绍了实时操作系统的一些基本概念。本节将从其它一些方面继续介绍实时操作系统的相关知识。121实时操作系统与通用操作系统的比较通用操作系统是由分时操作系统发展而来,大部分都支持多用户和多进程,负责管理众多的进程并为它们分配系统资源。分时操作系统的基本设计原则是尽量缩短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务。由此可以看出,分时操作系统注重平均表现性能,不注重个体表现性能。通用操作系统中采用的很多策略和技巧都体现出了这种设计原则,如虚存管理机制中由于采用LRU等页替换算法。而对于实时操作系统,它除了要满足应用的功能需求以外,更重要的是还要满足应用提出的实时性要求。而组成一个应用的众多实时任务对于实时性的要求是各不相同的。此外实时任务之间可能还会有一些复杂的关联和同步关系,如执行顺序限制、共享资源的互斥访问要求等。这就为系统实时性的保证带来了很大的困难。5因此,实时操作系统所遵循的最重要的设计原则是采用各种算法和策略,始终保证系统行为的可预测性。可预测性是指在系统运行的任何时刻,在任何情况下,实时操作系统的资源调配策略都能为争夺资源(包括CPU、内存、网络带宽等)的多个实时任务合理地分配资源,从而使每个实时任务的实时性要求都能得到满足。与通用操作系统不同,实时操作系统注重的不是系统的平均表现,而是要求每个实时任务在最坏情况下都要满足其实时性要求。也就是说,实时操作系统注重的是个体表现,更准确地讲是个体最坏情况表现。由于实时操作系统与通用操作系统的基本设计原则差别很大,因此在很多资源调度策略的选择上以及操作系统实现的方法上两者都具有较大的差异,这些差异主要体现在以下几点(1)任务调度策略通用操作系统中的任务调度策略一般采用基于优先级的抢占式调度策略。对于优先级相同的进程则采用时间片轮转调度方式,用户进程可以通过系统调用动态地调整自己的优先级,操作系统则可根据情况调整某些进程的优先级。实时操作系统中的任务调度策略目前使用最广泛的主要可分为两种一种是静态表驱动方式,另一种是固定优先级抢占式调度方式。静态表驱动方式是指在系统运行前,工程师根据各任务的实时要求用手工的方式或在辅助工具的帮助下生成一张任务的运行时间表。在运行时,调度器只需根据这张表在指定的时刻启动相应的任务即可。固定优先级抢占式调度方式则与通用操作系统中采用的基于优先级的调度方式基本类似。但在固定优先级抢占式调度方方式中,进程的优先级是固定不变的,并且该优先级是在运行前通过某种优先级分配策略来指定的。目前市场上大部分的实时操作系统采用的都是这种调度方式。(2)内存管理关于虚存管理机制在上面已经进行了一些分析。为解决虚存给系统带来的不可预测性,实时操作系统一般采用如下两种方式在原有虚存管理机制的基础上增加页面锁定功能。用户可将关键页面锁定在内存中,从而不会被SWAP程序将该页面交换出内存;采用静态内存划分的方式,为每个实时任务划分固定的内存区域。目前市场上的实时操作系统一般都采用第一种管理方式。第一章嵌入式操作系统6(3)中断处理在通用操作系统中,大部分外部中断都是开启的,中断处理一般由设备驱动程序来完成。由于通用操作系统中的用户进程一般都没有实时性要求,而中断处理程序直接跟硬件设备交互,可能有实时性要求,因此中断处理程序的优先级被设定为高于任何用户进程。但对于实时操作系统,采用上述的中断处理机制是不合适的。首先,外部中断是环境向实时操作系统进行的输入,它的频度是与环境变化的速率相关的,而与实时操作系统无关。如果外部中断产生的频度不可预测,则一个实时任务在运行时被中断处理程序阻塞的时间开销也是不可预测的,从而使任务的实时性得不到保证;如果外部中断产生的频度中可预测的,一旦某外部中断产生的频度超出其预测值如硬件故障产生的虚假中断信号或预测值本身有误就可能会破坏整个系统的可预测性。其次,实时控制系统中的各用户进程一般都有实时性要求,因此中断处理程序优先级高于所有用户进程的优先级分配方式是不合适的。一种较适合实时操作系统的中断处理方式为除时钟中断外,屏蔽所有其它中断,中断处理程序变为周期性的轮询操作。另一种可行的方式是对于采用轮询方式无法满足需求的外部事件,采用中断方式,其它时间仍然采用轮询方式。但此时中断处理程序与其它任务一样拥有优先级,调度器根据优先级对处于就绪态的任务和中断处理程序统一进行处理器调度。此外,为提高时钟中断响应时间的可预测性,实时操作系统应尽可能少地屏蔽中断。(4)共享资源的互斥访问通用操作系统一般采用信号量机制来解决共享资源的互斥访问问题。而对于实时操作系统,如果任务调度采用静态表驱动方式,共享资源的互斥访问问题在生成运行时间表时已经考虑到了,因此在运行时无需再考虑。如果任务调度采用基于优先级的方式,则传统的信号量机制在系统运行时很容易造成优先级倒置问题,即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级的任务抢先,因此造成高优先级任务被许多具有较低优先级的任务阻塞,实时性难以得到保证。因此在实时操作系统中,往往对传统的信号量机制进行了一些扩展,引入了如优先级继承协议、优先级顶置协议等机制,从而较好地解决了优先级倒置的问题。(5)系统调用以及系统内部操作的时间开销进程通过系统调用得到操作系统提供的服务。操作系统通过内部操作加上下7文切换等来完成一些内部管理工作。为保证系统的可预测性,实时操作系统中的所有系统调用以及系统内部操作的时间开销都应是有界的,并且该界限是一个具体的量化数值。而在通用操作系统中对这些时间开销则未做如此限制。(6)系统的可重入性在通用操作系统中,核心态系统调用往往是不可重入的。当一低优先级任务调用核心态系统调用时,在该时间段内到达的高优先级任务必须等到低优先级的系统调用完成才能获得CPU,这就降低了系统的可预测性。因此,实时操作系统中的核心态系统调用往往设计为可重入的。知识点使用实时操作系统的必要性首先,嵌入式实时操作系统提高了系统的可靠性。其次,提高了开发效率,缩短了开发周期。再次,嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。122实时操作系统的评价指标由于实时操作系统在实时应用中的特殊地位,对其性能指标的要求相对于通用操作系统来说要更加严格。评价一个实时操作系统,一般可以从进程管理、任务调度、内存管理、任务通信、内存开销、任务切换时间和最大中断禁止时间等技术指标来衡量其优劣。下面具体介绍这些性能指标(1)任务调度算法实时操作系统的实时性和多任务能力在很大程度上取决于它的任务调度算法。任务调度算法可以有以下分类方式从调度策略来讲,可分为优先级调度策略和时间片轮转调度策略;从调度方式上来讲,可分为可抢占式、不可抢占式以及选择克抢占式三种调度方式;从时间片来看,可分为固定与可变时间片轮转两种方式。(2)内存管理和最小内存开销在内存管理方面,可分实模式与保护模式两种。第一章嵌入式操作系统8在实时操作系统的设计过程中,最小内存开销是一个较重要的指标。这是因为在工业控制领域中,出于降低成本的考虑,某些工控机的内存配置一般不大。而在有限的空间内不仅要装载实时操作系统,还要装载用户程序。这是实时操作系统与通用操作系统设计的明显区别之一。(3)确定性在实时操作系统中,在一定的条件下,系统调用运行的时间应该是可以预测的。但这并不意味着所有的系统调用都总是执行一个固定长度的时间,而不管系统的负载如何。但是,系统调用的最大执行时间可以确定。(4)任务切换时间当由于某种原因使一个任务推出运行时,实时操作系统要保存它的运行现场信息,插入相应队列,并依据一定的调度算法重新选择一个任务使之投入运行。这一过程所需时间称为任务切换时间。(5)最大中断禁止时间当实时操作系统运行在内核态或执行某些系统调用时,是不会因为外部中断的到来而中断执行的。只有当实时操作系统重新回到用户态时才会相应外部中断请求。这一过程所需的最大时间就是最大中断禁止时间。上述几项中,最大中断禁止时间和任务切换时间是评价实时操作系统性能最重要的两个技术指标。重点实时操作系统与通用操作系统的差异表现在任务调度策略;内存管理;中断处理;共享资源的互斥访问;系统调用以及系统内部操作的时间开销;系统的可重入性。实时操作系统的评价指标任务调度算法;内存管理和最小内存开销;确定性;任务切换时间;最大中断禁止时间。其中,最大中断禁止时间和任务切换时间是评价实时操作系统性能最重要的两个技术指标。13基于LINUX的嵌入式操作系统LINUX是一套由芬兰赫尔辛基大学(UNIVERSITYOFHELSINKI)学生LINUSTORVALDS开发的系统内核(KERNEL)演化而成的电脑操作系统。1991年,LINUS(当时21岁)为了学习需要,在80386平台上开发类似UNIX和9MINIX(教育用的UNIX兼容操作系统)的操作系统,并在互联网上发布源代码。此后,吸引了大量的志愿开发者和黑客加入了LINUX内核的开发行列。1994年,10版本的LINUX内核正式完成。如今,经过十多年的努力,LINUX已被应用到多个领域,小至手机、PDA等嵌入式系统,大至过千个主机的超级电脑及银行、太空实验等要求极高稳定性的高端系统。除内核之外,LINUX系统的其他部分主要是由RICHARDSTALLMAN及其领导的自由软件基金会(FREESOFTWAREFOUNDATION,简称FSF),以及无数志愿开发者和黑客共同研发的成果。FSF在1984年建立了GNU项目,目的是开发一个兼容UNIX的操作系统。而LINUX的开发也是基于FSF所提供的自由软件,并且加入大量GNU的软件开发成果,故也被称为GNU/LINUX。LINUX是一个成熟而稳定的网络操作系统。将LINUX植入嵌入式设备具有众多的优点。首先,LINUX的源代码是开放的,任何人都可以获取并修改,用之开发自己的产品。其次,LINUX是可以定制的,其系统内核最小只有约134KB。一个带有中文系统和图形用户界面的核心程序也可以做到不足1MB,并且同样稳定。另外,它和多数UNIX系统兼容,应用程序的开发和移植相当容易。同时,由于具有良好的可移植性,人们已成功使LINUX运行于数百种硬件平台之上。然而,LINUX并非专门为实时性应用而设计,因此如果想在对实时性要求较高的嵌入式系统中运行LINUX,就必须为之添加实时软件模块。这些模块运行的内核空间正是操作系统实现进程调度、中断处理和程序执行的部分。因此错误的代码可能会破坏操作系统,进而影响整个系统的可靠性和稳定性。尽管如此,LINUX的众多优点使得它在嵌入式领域获得了广泛的应用,并出现了数量可观的嵌入式LINUX系统。其中有代表性的包括ARMLINUX、UCLINUX、ETLINUX、THINLINUX、LOAF等。下面着重介绍应用最为广泛的ARMLINUX和UCLINUX。131ARMLINUX简介完整的嵌入式LINUX解决方案应包括嵌入式LINUX操作系统内核、运行环境、图形化界面和应用软件等。由于嵌入式设备的特殊要求,嵌入式LINUX解决方案中的内核、环境、GUI等都与标准LINUX有很大不同,其主要挑战是如何在狭小的FLASH、ROM和内存中实现高质量的任务实时调度、图形化显示、网络通信等功能。LINUX内核有自己的结构体系,其中进程管理、内存管理和文件系统是其最基本的3个子系统。图11简单表示了它的框架。用户进程可直接通过系统调用或者函数库来访问内核资源。正因为LINUX内核具有这样的结构,因此修改内核时必第一章嵌入式操作系统10须注意各个子系统之间的协调。图11LINUX内核结构体系(1)裁剪内核嵌入式LINUX内核一般由标准LINUX内核裁剪而来。用户可根据需求配置系统,剔除不需的服务功能、文件系统和设备驱动。经过裁剪、压缩后的系统内核一般只有300K左右,十分适合嵌入式设备。对标准LINUX的修改主要是虚拟内存和调度程序部分的改动。对于实时性要求较高的嵌入式系统来说,实时任务往往要求CPU具有很高的突发处理能力,即在有些时候需要极高的处理效率,因此需要屏蔽内核的虚拟内存管理机制。强实时需求的嵌入式应用可以通过修改任务调度模块实现,主要是在内核和设备驱动程序中加入了许多切换点。在该点处,系统检测是否存在未处理的紧急中断,有则剥夺内核的运行,及时处理中断。实现实时性服务的一个较好的方法是在标准的LINUX内核上增加一个实时内核,标准LINUX内核作为一个任务运行于实时内核上,强实时性任务也直接运行在实时内核上,如RTLINUX等。文件系统是嵌入式LINUX操作系统必不可少的。一般嵌入式设备文件系统主要使用RAMDISK技术和网络文件系统技术。RAMDISK可驻留于FLASH,运行时加载到内存中。(2)精简运行环境LINUX通常的运行环境指用户运行任何应用的基础设施,主要包括函数库和基本命令集等。11LINUX应用运行所需的函数库主要有C库、数学库、线程库、加密库、网络通信库等。其中最基本的是C语言的运行库GLIBC。这个库主要完成基本的输入输出、内存访问、文件处理等功能。一个标准的GLIBC库大约要1200KB存储空间,考虑到嵌入式LINUX内核往往很小,这种运行库实在太大。因此我们需要做一些精简的工作,方法有两种A、使用静态链接的方法,完全不使用运行库动态链接;B、对这个库的函数进行精简。在嵌入式系统中,很少有多个程序并行的可能,程序的维护,尤其是库函数的维护更新是不常见的。这时,使用静态链接的优势就极为明显。为了便于将来扩充的需要,我们也采用第二种方法,针对我们的需要,对库函数的内容进行精简,只保留一些基本功能。基本命令集同样是运行用户应用的基础,主要包括初始化进程INIT、终端获取GETTY、SHELL和基本命令等。嵌入式系统的启动过程可能与标准LINUX不同,例如跳过登录过程直接启动GUI等。这就要求修改INIT、GETTY等。标准LINUX命令集同样由于体积问题无法直接应用于嵌入式环境。目前,小命令集的解决方法主要有集成方法和汇编方法两种。集成方法采用集成公共部分减少命令集整体体积,用C实现,有较好的平台移植性;汇编方法则采用汇编编程减少每个命令的体积这样可使体积很小,但其平台移植性较差。(3)嵌入式LINUX下的GUIGUI在嵌入式系统或者实时系统中的地位越来越重要,比如PDA、DVD播放机、WAP手机等,都需要一个完整、漂亮的图形用户界面。这些系统对GUI的基本要求包括A、轻型且占用资源少;B、高性能;C、高可靠性;D、可配置。这些也成为评价嵌入式系统的重要指标。嵌入式GUI主要通过削减功能,降低性能来实现体积小和占用资源少。ARMLINUX是RUSSELLKING主导维护的一个嵌入式LINUX版本。它基本具有以上嵌入式LINUX的各种特点。关于ARMLINUX的裁剪、编译、引导、开发等,留待以后章节进行详细介绍。132UCLINUX简介UCLINUX是LINUX操作系统的一种,是由LINUX20内核发展来的,是专为没有MMU的微处理器(如ARM7TDMI、COLDFIRE等)设计的嵌入式LINUX操作系统。嵌入式UCLINUX操作系统主要有三个基本部分组成引导程序、UCLINUX内核(由内存管理、进程管理和中断处理等构成)和文件系统。UCLINUX可以通过定制使内核小型化,还可以加上GUI图形用户界面和定制应用程序,并将其放在ROM、RAM、FLASH或DISKONCHIP中启动。由于嵌入式UCLINUX操作系统的内核定制高度灵活性,开发者可以很容易地对其进行按需配置,来满足实际应用需第一章嵌入式操作系统12要。又由于UCLINUX是源代码公开,因此开发人员只有了解内核原理就可以自己开发部分软件,例如增加各类驱动程序。下面将详细分析嵌入式操作系统UCLINUX。(1)UCLINUX的内核结构UCLINUX内核结构与标准LINUX基本相同,不同的只是对内存管理和进程管理进行改写,以满足无MMU处理器的要求。另外,由于大多数内核源代码都被重写,UCLINUX的内核要比原LINUX20内核小的多,但保留了LINUX操作系统的主要优点稳定性,优异的网络能力以及优秀的文件系统支持。(2)UCLINUX的内存管理UCLINUX同标准LINUX的最大区别就在于内存管理。标准LINUX是针对有MMU的处理器设计的。在这种处理器上,虚拟地址被送到MMU,MMU把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟物理地址转换映射,支持不同任务之间的保护。对于UCLINUX来说,其设计针对没有MMU的处理器,不能使用处理器的虚拟内存管理技术。UCLINUX仍采用存储器的分页管理,系统在启动时把实际存储器进行分页。在加载应用程序时程序分页加载。但是由于没有MMU管理,所以实际上UCLINUX采用实存储器管理策略REALMEMEORYMANAGEMENT。这一点影响了系统工作的很多方面。UCLINUX系统对于内存的访问是直接的,所有程序中访问的地址都是实际的物理地址。操作系统对内存空间没有保护(这实际上是很多嵌入式系统的特点),各个进程实际上共享一个运行空间(没有独立的地址转换表)。这样的设计,从内存的访问角度来看,开发人员的权利增大了(开发人员在编程时可以访问任意的地址空间),但与此同时系统的安全性也大为下降,同时也给开发人员提出了更高的要求。此外,系统对多进程的管理将有很大的变化。(3)UCLINUX的多进程处理UCLINUX没有MMU管理存储器,在实现多个进程时(FORK调用生成子进程)需要实现数据保护。由于UCLINUX的多进程管理是通过VFORK来实现,因此FORK等于VFORK。这意味着UCLINUX系统FORK调用完成后,要么子进程代替父进程执行(此时父进程已经SLEEP)直到子进程调用EXIT退出;要么调用EXEC执行一个新的进程,这个时候将产生可执行文件的加载,即使这个进程只是父进程的拷贝,这个过程也不能避免。当子进程执行EXIT或EXEC后,子进程使用WAKEUP把父进程唤醒,使父进程继续往下执行。UCLINUX的这种多进程实现机制同它的内存管理紧密相关。UCLINUX针对没有13MMU处理器开发,所以被迫使用一种FLAT方式的内存管理模式,启动新的应用程序时系统必须为应用程序分配存储空间,并立即把应用程序加载到内存。缺少了MMU的内存重映射机制,UCLINUX必须在可执行文件加载阶段对可执行文件RELOC处理,使得程序执行时能够直接使用物理内存。(4)UCLINUX针对实时性的解决方案UCLINUX本身并没有关注实时问题,它并不是为了LINUX的实时性而提出的。但是UCLINUX可以使用RTLINUX的PATCH,从而增强UCLINUX的实时性,使得UCLINUX可以应用于工业控制、进程控制等一些实时要求较高的应用。RTLINUX执行管理器把普通LINUX的内核当成一个任务运行,同时还管理了实时进程。而非实时进程则交给普通LINUX内核处理。这种方法已经应用于很多的操作系统来增强系统的实时性,包括一些商用版UNIX系统、WINDOWSNT等等。这种方法优点之一是实现简单,且实时性能容易检验。优点之二是由于非实时进程运行于标准LINUX系统上,同其它LINUX商用版本之间保持了很大的兼容性。优点之三是可以支持硬实时时钟的应用。重点了解LINUX的发展过程,明确其内核结构体系。将普通LINUX裁剪为嵌入式LINUX的主要内容裁剪内核;精简运行环境;嵌入式LINUX下的GUI。UCLINUX对内存管理和进程管理进行改写,以满足无MMU处理器的要求。因此它与ARMLINUX的不同之处主要是内存管理。14嵌入式系统设计方法141嵌入式系统开发的特点嵌入式系统与通用计算机在以下几个方面的差别比较明显(1)人机交互界面嵌入式系统和通用计算机之间的最大差别就在于人机交互界面。嵌入式系统可能根本就不存在键盘、显示器等设备。它所完成的事情也可能只是监视网络情况或者传感器的变化情况,并按照事先规定好的过程及时完成相应的处理任务。(2)有限的功能第一章嵌入式操作系统14嵌入式系统的功能在设计时已经定制好,在开发完成投入使用之后就不再变化。系统将反复执行这些预订好的任务,而不像通用计算机那样随时可以运行新任务。当然,使用嵌入式操作系统的嵌入式系统可以添加新的任务,删除旧的任务。但这样的变化对嵌入式系统而言是关键性变化,有可能会对整个系统行为产生影响。(3)时间关键性和稳定性嵌入式系统可能要求实时响应,具有严格的时序性。同时,嵌入式系统还要求有非常可靠的稳定性。其工作环境可能非常恶劣,如高温、高压、低温、潮湿等。这就要求在设计时考虑目标系统的工作环境,合理选择硬件和保护措施。软件稳定也是一个重要特征。软件系统需要经过无数次反复测试,达到预先规定的要求才能真正投入使用。与此同时,嵌入式软件的开发与传统的软件开发有许多共同点,它继承了许多传统软件开发的开发习惯。但嵌入式软件运行在特定的目标应用环境,因此只需要完成预期要完成的功能,所以嵌入式软件的开发有其自身的特点(1)需要交叉开发环境交叉开发环境是指实现编译、链接和调试应用程序代码的环境。与运行应用程序的环境不同,它分散在有通信连接的宿主机与目标机环境之中。宿主机(HOST)是一台通用计算机,它通过串口或网口与目标机通信。宿主机的软硬件资源比较丰富,包括功能强大的操作系统和各种辅助开发工具。目标机(TARGET)常在嵌入式软件开发期间使用,用来区别与嵌入式系统通信的宿主机。目标机可以是嵌入式应用软件的实际运行环境,也可以是能替代实际环境的仿真系统。目标机体积较小,集成度高,外围设备丰富多样,且软硬件资源配置都恰到好处。缺点是硬件资源有限,因此目标机上运行的软件需要经过裁剪和配置,并且应用软件需要和操作系统绑定运行。交叉软件开发工具包括交叉编译器、交叉调试器和模拟软件等。交叉编译器允许应用程序开发者在宿主机上生成能在目标机上运行的代码。交叉调试器和模拟调试软件用于完成宿主机与目标机应用程序代码的调试。(2)引入任务设计方法嵌入式应用系统以任务为基本的执行单元。在系统设计阶段,用多个并发的任务代替通用软件的多个模块,并定义了应用软件任务间的接口。(3)需要固化程序15通用软件的开发在测试完成后可以直接投入运行。其目标环境在总体结构上与开发环境差别不大。而嵌入式应用程序开发环境和运行的目标环境却千差万别。并且应用软件在目标环境下必须存储在非易失性存储器中,保证用户用完关机后确保下次的使用。所以应用软件在开发完成后,应生成固化版本,烧写到目标环境的FLASH中运行。(4)软件开发难度大绝大多数的嵌入式应用有实时性的要求,特别在硬实时系统中,实时性至关重要。这些实时性在开发的应用软件中要得到保证,这就要求设计者在软件的需求分析中充分考虑系统的实时性。这些实时性的体现一部分来源于实时操作系统的实时性,另一部分依赖于应用软件本身的设计和代码的质量。同时,嵌入式应用软件对稳定性、可靠性、抗干扰性等性能的要求都比通用软件的要求更为严格和苛刻。因此,嵌入式软件开发的难度更大。142嵌入式系统开发的流程嵌入式系统的设计与一般的硬件设计、软件开发不同。一般硬件设计包括电路模块设计、采购元器件、电路板的设计、仿真、分析、实现、测试等一系列的过程;普通软件的设计包括需求分析、总体设计、模块划分、模块设计、数据字典设计、软件编码、调试、测试等一系列过程。软件和硬件的设计都有各自的规律性可循,相对来说比较成熟。嵌入式系统的设计则不然,首先嵌入式系统是最近几年出现的新技术,系统的设计方法不是很完善;其次,嵌入式系统涵盖了软件、硬件的综合内容,传统的大学、研究生的教学体系往往把软件和硬件分开。嵌入式系统开发过程不仅设计硬件知识和设计,也涉及软件知识和设计,甚至涉及机械等方面的知识,所以嵌入式系统产品的设计必须综合考虑,否则产品的科研开发将无法达到预期的目标。嵌入式系统的开发过程一般包括需求分析阶段、详细设计阶段、实现阶段、测试阶段等(1)需求分析阶段需求分析阶段是在项目开始时了解项目的情况,解决用户需要做什么的问题。这一阶段主要包括分析用户的需求、初步确定硬件和软件、检查需求分析的结果、确定项目的约束条件、概要设计等几个方面。(2)详细设计阶段第一章嵌入式操作系统16详细设计阶段是通过需求分析的结果,设计出满足用户需求的嵌入式系统产品,这一阶段主要包括审查需求分析获得的资料、进行体系结构设计、硬件和软件功能的划分、硬件和软件的设计、检查设计等过程。(3)实现阶段实现阶段是根据详细设计的结果实现设计好的嵌入式系统产品,这一阶段主要包括选择开发平台和进行软件开发。嵌入式系统的开发平台由4部分组成硬件平台、操作系统、编程语言和开发工具。嵌入式系统软件开发过程包括建立交叉开发环境、交叉编译和链接、重定位和下载、联机调试、在主机系统上验证软件、在目标系统上验证软件、代码优化(4)测试阶段嵌入式系统软件的测试工作与应用软件的测试工作有许多共同之处,同时它们之间还有很多重要区别嵌入式软件必须在很长时间内稳定运行;嵌入式软件一般不会频繁地由用户进行升级;嵌入式软件有时使用在关键性的应用产品中;嵌入式软件必须与嵌入式硬件一起对产品故障负责;真实世界中事件一般是异步而且不可预测的,这就使得模拟测试既困难又不可靠。因此,根据这些区别,嵌入式系统的测试主要在4个方面不同于应用软件测试由于实时性与同时性很难同时满足,所以大多数测试集中于实时行为;由于大多数实时系统有资源约束,需要进行更多的性能与可用性测试;可以使用一些实时跟踪工具以测量测试对代码的覆盖率如何;对可靠性的测试级别要比在应用软件中高得多。重点嵌入式系统与通用计算机的差别人机交互界面;有限的功能;时间关键性和稳定性。嵌入式软件开发的自身特点需要交叉开发环境;引入任务设计方法;需要固化程序;软件开发难度大。嵌入式系统的开发过程一般包括需求分析阶段、详细设计阶段、实现阶段、测试阶段等。15本章小结本章着重介绍嵌入式操作系统的相关知识。嵌入式操作系统一般情况下都是17实时操作系统。目前业界流行的实时操作系统包括VXWORKS、PSOS、QNX、NUCLEUS以及LINUX等。由于免费并且开源,LINUX比其它操作系统具有更大的优势。因此我们重点介绍了两种基于LINUX改造而来的实时LINUX操作系统。在本章的最后,介绍了嵌入式系统开发的特点以及流程。16本章习题1什么是嵌入式操作系统2嵌入式操作系统的特点3请简单叙述实时操作系统的分类。4实时操作系统的评价指标有哪些5请简单叙述LINUX应用于嵌入式系统的优缺点以及如何将其修改为嵌入式操作系统。6UCLINUX是如何解决实时性问题的这种方法的优势在哪里7嵌入式软件开发的特点有哪些8嵌入式系统的测试与一般的软件测试有何不同为什么第一章嵌入式操作系统1819第二章搭建LINUX交叉编译开发环境进行嵌入式软件开发,首先要建立交叉编译开发环境。本章将从建立交叉编译开发环境的原因、方法以及使用等几个方面入手,带领大家进入嵌入式开发这个奇妙的世界。21什么是交叉编译什么是交叉编译呢简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念体系结构(ARCHITECTURE)和操作系统(OPERATINGSYSTEM)。同一个体系结构可以运行不同的操作系统;同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的X86LINUX平台实际上是INTELX86体系结构和LINUXFORX86操作系统的统称;而X86WINNT平台实际上是INTELX86体系结构和WINDOWSNTFORX86操作系统的简称。一个经常会被问到的问题就是,“既然我们已经有了主机编译器,那为什么还要交叉编译呢”其实答案很简单,没办法啊有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。另一个经常会被问到的问题就是“既然可以交叉编译,那还要主机编译干吗”其实答案也很简单,交叉编译是不得已而为之与主机编译相比,交叉编译受的限制更多,虽然在理论上我们可以做任何形式的交叉编译,但事实上,由于受到专利、版权、技术的限制,并不总是能够进行交叉编译,尤其是在业余条件下举例来说,我们至今无法生成惠普公司专有的SOM格式的可执行文件,因此我们根本无法做目的平台为HPPAHPUX的交叉编译。一般而言,需要交叉编译的原因有两个首先,在项目的起始阶段,目的平台尚未建立,因此需要做交叉编译,以生成我们所需要的BOOTLOADER(启动引导代码)以及操作系统核心;其次,当目的平台能启动之后,由于目的平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。知识点交叉编译中涉及到的平台概念包括两部分体系结构(ARCHITECTURE)和操作第二章搭建LINUX交叉编译开发环境20系统(OPERATINGSYSTEM)。22建立交叉编译开发工具链建立交叉编译开发工具链有两种方法自己动手编译一个工具链,或者直接下载制作好的工具链。221编译工具链在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和LIBC库等组成的开发环境。本节通过一个具体的例子来说明这些嵌入式交叉编译开发工具的制作过程。下面我们将以建立针对ARM的交叉编译开发环境为例来解说整个过程,其他的体系结构与这个相类似,只要作一些对应的改动。采用的开发环境是宿主机I386REDHAT90,目标机ARM。整个编译过程包括1下载源文件、补丁和建立编译的目录;2建立内核头文件;3建立二进制工具(BINUTILS);4建立初始编译器(BOOTSTRAPGCC);5建立C库GLIBC;6建立全套编译器(FULLGCC)。下面分别介绍每一步的建立过程。(1)下载源文件、补丁和建立编译的目录首先,选定软件的版本号。选择软件版本号时,先看看GLIBC源代码中的INSTALL文件。那里列举了该版本的GLIBC编译时所需的BINUTILS和GCC的版本号。例如在GLIBC223/INSTALL文件中推荐GCC用295以上,BINUTILS用2101以上版本。本节中选用的各个软件的版本是LINUX242
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新颖游乐活动策划方案(3篇)
- 2026内蒙古昌都市丁青县消防救援大队补招政府专职消防员4人备考考试试题及答案解析
- 2026山东事业单位统考淄博高新区事业单位面向退役大学生士兵招聘综合类(专项)岗位备考考试题库及答案解析
- 2026中电科金仓(北京)科技股份有限公司校园招聘备考考试试题及答案解析
- 2026年上半年黑龙江省林业科学院事业单位公开招聘工作人员55人笔试备考试题及答案解析
- 2026甘肃兰州市安宁区人民医院招聘编外医务工作人员1名备考考试题库及答案解析
- 2026四川宜宾市屏山县融媒体中心第一次招聘编外工作人员1人参考考试题库及答案解析
- 2026浙江宁波东方蔚蓝人力资源有限公司第一期招聘2人备考考试试题及答案解析
- 2026中国科学院理化技术研究所热声热机团队招聘特别研究助理博士后1人备考考试题库及答案解析
- 2026广东茂名出入境边防检查站编制外人员招聘1人笔试模拟试题及答案解析
- 太仓市高一化学期末考试卷及答案
- 生活物资保障指南解读
- 2025年浙江省委党校在职研究生招生考试(社会主义市场经济)历年参考题库含答案详解(5卷)
- DB3704∕T0052-2024 公园城市建设评价规范
- 采购领域廉洁培训课件
- 公司股东入股合作协议书
- 2025年中国化妆品注塑件市场调查研究报告
- 小儿药浴治疗
- 保险实务课程设计
- 物业管理公司管理目标标准
- 2023年重庆巴南区重点中学指标到校数学试卷真题(答案详解)
评论
0/150
提交评论