嵌入式系统虚拟仿真实验设计与教学实践
2018-05-21杨昕欣刁为民刘荣科谭大为
杨昕欣 刁为民 王 俊 刘荣科 谭大为
北京航空航天大学电子信息工程学院 北京 100191
信息技术的发展带动高等教育信息化已成为高等教育改革创新的重要方面,《教育信息化十年发展规划(2011-2020年)》大力倡导信息技术与高等教育的深度融合,促进教育内容、教学手段和方法现代化,创新人才培养。作为贯彻落实该规划的一项重要措施,近年已在高校中开展国家级虚拟仿真实验教学中心的建设工作。
虚拟仿真实验教学是教育信息化建设和实验教学示范中心建设的重要内容[1],北京航空航天大学电子信息工程学院嵌入式系统原理与应用课程团队依托国家级实验示范教学中心,积极开展实验教学改革与创新,以提高学生实践创新能力和工程素质为目标,积极探索前沿技术,注重在实验教学中使用新兴技术以提高教学效果。本文即是以团队利用指令模拟虚拟机技术改善实验教学的教学实践为例,浅析虚拟仿真实验中心建设的探索与实践。
实践是创新的基础,而嵌入式系统课程又是实践性极强的一门课程,因此实验实践环节是教学中非常重要的环节,在实践中可以更好地理解知识和概念,掌握开发工具,锻炼实践和创新能力。同时,嵌入式系统技术日新月异快速发展的节奏,对实践教学不断提出新挑战,需要及时吸纳新的技术,进行实验教学改革[2]。
嵌入式系统是以应用为中心的计算机技术,课程内容主要涉及对计算机体系结构、操作系统、编译原理、编程语言、软件工程等知识的综合应用,解决基于软硬件协同进行系统优化设计等问题。近年来,随着虚拟化技术的发展,处理器和计算机系统的软件仿真技术也快速发展起来,软件仿真技术实现了硬件模拟,同时支持在模拟硬件上的软件开发,很好地模拟了嵌入式系统课程的研究对象,使得利用软件仿真技术开展嵌入式系统虚拟仿真实验成为可能[3,4]。我们基于开源虚拟机QEMU,开展虚拟仿真教学实验设计,与硬件实验形成了虚实结合的实验体系,在教学实践中取得了良好效果。
1 基于软件仿真虚拟化手段改善嵌入式系统实验教学效果
当前,多数嵌入式系统教学实验一般依托教学实验电路板或教学实验箱展开,其核心是嵌入式处理器和存储,外围根据需要扩展各类接口芯片,其实质是一种硬件仿真设备,基于核心处理器的性能,可以开展硬件控制、操作系统移植、应用程序设计、综合设计开发等多种类型、不同层次的实验,在多年嵌入式系统教学中发挥了重要的作用。基于硬件仿真进行软硬件技术的实验、验证、分析和设计,虽然是嵌入式系统实践教学必不可少的手段,但这种方式也存在一定局限,在教学实践中发现如下一些问题。
首先,硬件仿真是与实际场景最接近的仿真方式,不过也正由于硬件仿真贴近具体的应用类型,其灵活性和通用性受到了限制。硬件仿真系统首先必须确定一种处理器选型,而嵌入式处理器的种类繁多,包括面向轻量级控制类应用为主的MCU、以智能设备或复杂系统为主的MPU,以通信、多媒体计算性能取胜的DSP或者是复杂得多的CPU结构,近年来逐渐兴起的可编程SOC等众多类型,而每一种类型下又有来自不同厂商的众多不同体系结构选择,选定了处理器也就意味将教学内容限定在某个类型甚至某个具体厂商的体系结构上。同时,不同类型的处理器有与之相适应的外设接口类型,更换处理器需要重新开发仿真设备以更换相应外设,为此,一些硬件仿真设备采用了固定外设主板与可更换核心模块结合的方式获得了一定灵活性,另外一些则采用可编程SOC结构从而实现一定程度的接口定制,不过以硬件方式实现处理器和接口的任意组合还不是很方便。嵌入式系统是软硬件高度耦合的计算机系统,软件的层次架构、开发方法和开发工具都与硬件结构有密切联系,硬件仿真设备灵活度有限,也限制了软件实践教学设计的自由度。可见由于硬件仿真设备在处理器体系结构、接口等方面相对固定,使得展开更加全面和多样化的嵌入式系统实践教学需求受到一定限制。
从教学设备维护和教学运行角度,全硬件仿真实验模式也存在不足。从教学设备维护角度看,全硬件仿真方式在承载大量实验需求时面临故障率高和更新周期长的双重压力。一方面,教学实验设备产品大部分没有建立健全的质量标准体系,嵌入式系统教学实验平台产品更是如此,商业采购的设备质量保证期限一般短于预期使用年限,如果是自行开发的平台则故障率和报废率更高。嵌入式系统技术发展很快,厂商的产品线变化也较快,部分教学设备损坏后,一般也不容易再采购到同型号产品,容易造成可用实验设备数量不足。另一方面,硬件设备成本高、投入大,更新周期一般较长,与目前教学内容更新较快的节奏不能完全匹配。从教学运行角度看,硬件仿真实验在实验室进行,易受场地限制,每次实验又有时间限制,一些耗时较长的实验,如操作系统编译等,就不便充分展开。有限的实验资源与增长的教学需求之间存在一定矛盾。
软件仿真以软件方式模拟处理器或计算机系统,可以模拟CPU指令执行的过程和与外设的交互过程,可以运行在多种主机系统上,支持众多的处理器架构,具有易于更新升级、维护成本低、便于扩展、可以重构定制等特点,而这些正是硬件仿真方式所欠缺的,可以弥补硬件仿真方式的灵活性不足、易损坏、更新周期慢、受场地和时间限制等不足。因此,将软件仿真方式与硬件方式相结合,可以取长补短,形成对嵌入式系统实验实践教学的良好支持。
2 指令模拟虚拟机选型
软件仿真方式一般有两种,分为模拟器模式和仿真器模式,模拟器方式一般只模拟对外部的接口功能,其内部实现方式与被模拟目标工作方式可能完全不同,而仿真模式则是模拟目标处理器或系统的底层状态变化过程,因而更接近实际硬件。模拟嵌入式系统处理器或系统的软件大部分运行在通用计算机平台上,以模拟器方式为主,本文从教学应用角度,不特别区分两种方式,统一称为软件仿真器。软件仿真器有两种工作模式,一种是只仿真处理器的用户模式;另一种则仿真处理器及其外围设备,称为系统仿真模式。
软件仿真实验需要选用合适的仿真器软件,从嵌入式系统实验教学角度看,对仿真器软件的基本要求是,运行在通用计算机上,能够模拟嵌入式处理器及尽可能丰富的外设。具有这些特性的模拟器包括ADS ARMULATOR、Android仿真器、Proteus以及SkyEye和QEMU等开源模拟器。
ADS ARMulator是ARM 公司推出的集成开发环境ADS(ARM Developer Suite)中提供的指令集模拟器,可以模拟ARMv5TE之前多种内核,但是对外设的仿真较少,通过半主机模式提供一个与用户交互的控制台终端;ARM公司的最新集成开发环境DS-5中集成了一个性能更高的模拟器RTSM,可以模拟Cortex-A8系统,模拟外设接口,包括LCD控制器、键盘、鼠标、触摸屏、UART和以太网控制器等。
Android仿真器可以模拟多种类型的手机、平板等嵌入式系统,具有非常好的界面,不过一般只是适用于进行基于Android系统的应用软件的仿真和调试。
Proteus软件是英国Lab Center Electronics公司发布的EDA工具软件,可以仿真51系列、AVR、PIC、ARM等常用主流单片机,可以仿真外设并看到运行后输入输出的效果。
近年来出现了一些各具特色的开源模拟器如开源Armulator,Simit-ARM,SPIMARMSIM,ProEmulator等,可以对基于ARM、MIPS等体系架构的处理器或系统进行仿真。在嵌入式系统的开源模拟器中比较出色的是SkyEye和QEMU。
SkyEye是清华大学陈渝教授在博士后期间发起的一个开源项目,目标是实现嵌入式开发硬件模拟器,支持系统级仿真,已经实现了多种架构的处理器和包括LCD、网络接口等在内的多种外设,使用非常方便。
QEMU是一个开源的通用软件仿真器,使用动态翻译技术,可以在宿主机上模拟出另外一种体系结构客户机计算机系统,从而可以在宿主机上运行客户机操作系统和应用程序;QEMU既支持通用计算机体系结构,也支持ARM,MIPS,PowerPC,SPARC,ColdFire,MicroBlaze,Xtensa等多种嵌入式体系结构,其支持的ARM处理器数量有50多种;QEMU使用了多种优化技术,极大提高了仿真速度;QEMU自1.3.0版之后正式整合KVM,使其同时也成为一款优秀的虚拟机软件。
表1 软件仿真器选型
3 基于QEMU设计嵌入式系统虚拟仿真实验
QEMU所具备的多平台支持和系统级仿真能力,为嵌入式系统实验教学开拓了广阔的空间,可以在QEMU平台开展多种类型、不同层次实验,为学生提供丰富的实验内容和更多的实践机会,加强对其工程实践能力的培养和锻炼。
在讲解嵌入式操作系统原理部分时,教学主要以原理和算法分析为主,很多时候为了便于理解,需要规避一些硬件细节,软件模拟器恰好符合这个需求,可以对操作系统做任意的定制,还可以借鉴通用计算机操作系统原理课程中一些经典的教学实验和案例,展现关于进程管理、内核调度等相关概念。
在讲解嵌入式系统软件编程基础时,为了帮助学生理解知识并熟悉开发工具,需要布置一些编程的实验作业,需要上机调试,而有限的实验室资源无法支撑这个需要。借助QEMU可以指导学生在自己的个人计算机上建立一个仿真开发环境,可以调试并运行学生自己编写的程序。
在讲解嵌入式系统GUI编程时,希望学生可以动手搭建自己的GUI开发环境,自己开发GUI程序,会使用Qt或其他工具,QEMU可模拟LCD外设,在模拟出的LCD上显示图形化界面,可激发学生学习兴趣,这些实验也适合在课外完成,使学生有充足的时间完成设计与调试。
此外,在讲解嵌入式Linux驱动程序开发、网络编程等内容时,也可以使用QEMU设计教学实验、课堂演示案例等,提升教学效果。还可以设计系统性、综合性实验,帮助学生掌握嵌入式系统软件开发的方法和流程。表2是本教学团队在教学实践中基于QEMU,模拟 ARM Cortex-A9系统,开展嵌入式Linux移植和程序开发虚拟仿真综合实验的例子。
表2 基于QEMU的虚拟仿真实验示例
4 结语
嵌入式系统课程是一门实践性非常强的课程,充分的实验实践是掌握好课程知识的必要条件,而由于受到课场地、经费等限制,硬件仿真的实验学时尚显不足,实践能力培养效果不尽理想。QEMU所具备的系统级仿真能力,使其可以支撑嵌入式系统课程中绝大部分软件相关内容的实践教学,加之其开源、易用等特点,为实验教学带来诸多好处:对于部分硬件仿真实验可以在QEMU所模拟的系统上进行预习,以此为基础在实验室可以开展翻转课堂教学,就一些关键问题展开实验和讨论;可以布置开放性实验作业,学生可以利用课后时间展开探索研究;可以基于软件模拟器,增补新的课外实验;可利用QEMU的通用多架构支持特性,突破硬件仿真方式实验教学依赖于具体体系结构的限制,拓展课程覆盖面,同时便于通过直观的比较使学生了解不同体系结构的技术特点;此外,虚拟化是云计算的核心技术之一,QEMU-KVM作为一款优秀开源虚拟化软件,其自身也可以成为虚拟化技术相关实验的基础。
当然,软件仿真实验不可能取代硬件仿真实验,两者各具特色,教学中还需要进一步加强整体规划,丰富实验内容,健全相互协调的实验体系,使得嵌入式系统实验教学设计更加合理有效。
参考文献
[1]王卫国.虚拟仿真实验教学中心建设思考与建议[J].实验室研究与探索.2013,32(13):5-8.
[2]沈珊瑚,姚茂群.面向实践创新人才培养的嵌入式系统教学研究[J].计算机教育,2016(7):27-30.
[3]杨继森,张静,朱革,郑方燕.基于ARM Cortex平台的嵌入式系统课程虚拟实验平台设计[J].实验技术与管理.2014,31(7):97-101.
[4]姚英彪,曾宪彬.嵌入式系统设计实验的Qt MIPS仿真软件开发[J].实验室研究与探索.2017,36(1):98-103.