基于模拟仿真系统的嵌入式系统课程实践教学研究

2022-02-27 07:36徐国鑫
科教导刊·电子版 2022年33期
关键词:嵌入式指令处理器

满 毅,徐国鑫

(北京邮电大学电子工程学院,北京 100876)

0 引言

嵌入式系统设计课程对嵌入式系统的概念、软硬件组成、设计开发方法、嵌入式操作系统、嵌入式软件(包括应用程序和设备驱动程序)的设计开发进行全面的介绍。并以ARM体系架构的处理器为例讲解嵌入式系统硬件结构和处理器指令体系,以嵌入式Linux操作系统为例介绍了嵌入式操作系统的主要结构和嵌入式应用开发的基本方法。通过这门课的学习使学生深入地了解嵌入式系统结构,掌握其软硬件设计方法,提高学生的嵌入式系统的开发能力。

目前,在嵌入式系统相关课程的教学改革研究主要集中在几个方面,一是教学模式的改变,如探讨国际化教学模式和本土案例驱动相结合的课程建设[1]。从建设开放实验室、兴趣小组、强调理论联系实际的教学方法、促进师生交流等方面探讨了嵌入式系统课程的教改思路[2]。二是从教学内容的角度梳理嵌入式系统设计相关课程在知识体系中的定位,提出“计算机组成与体系结构”课程群的建设目标和思路,给出嵌入式系统课程的定位和教学内容[3]。研究多所高校的嵌入式系统课的教学内容,给出更合理的课程架构和教学内容设置[4]。三是针对特定专业来探讨嵌入式系统相关课程的教学内容,如探讨面向物联网专业,基于新的实验平台的嵌入式系统开发课程的教学改革思路[5-6]。还有就是针对实验环节的一些教改想法,如针对嵌入式系统的实验内容设置和管理提出教改的思路[7]。综上所述,针对嵌入式系统相关课程的实践教学改革项目还比较少。目前嵌入式系统课程的实践教学也存在一些问题:以开发板实物为核心的实验环境在非面对面教学需求下开展难度大;实物开发板的配置灵活性差、成本高,不能快速适应课程教学的需求变化。比如针对新的 RISC-V架构,购置设计一整套RISC-V开发实验环境和实验需要的时间周期和成本都比较高,在网络相关实验中配置多实例的实验环境也比较困难。

使用指令模拟器、仿真运行环境可以很好地解决上述问题。业界出于降低成本的考虑,采用仿真平台验证嵌入式系统和芯片软硬件设计已经比较普遍,完全有必要引入本课程支撑实践教学环节。而且基于仿真平台的实验教学能够很方便地支撑远程或线上教学的需求,还能充分利用线上教学的各种便利条件。仿真平台又保证了在其上的操作系统、应用软件与真实硬件环境里的完全一样。仿真平台可以很方便地实现多实例部署,实现仿真多个目标系统的实验环境。仿真平台也能很方便地变换为对另一个处理器环境,比如RISC-V等。

1 基于指令模拟器和仿真系统的教学平台

QEMU(quickemulator)是一款由FabriceBellard编写的免费的可执行硬件虚拟化的开源托管虚拟机。具有较高的运行速度、跨平台的特性。QEMU通过动态的二进制转换,在宿主环境中模拟多种不同类型的处理器,并且提供一组设备模型,使它能够运行多种未修改的操作系统,并可通过与 KVM 协作达到接近本地处理器速度运行虚拟机。QEMU还可以以用户模式运行,提供基本的运行库环境。考虑到性能表现QEMU仅提供功能级仿真,但对于嵌入式系统课程教学来说已经足够了。在本课程的实践环境中,用QEMU仿真ARM处理器运行树莓派操作系统Raspbian模拟树莓派ARM开发环境。

QEMU功能全面,同时也具有命令行参数复杂,系统级仿真运行的运行准备工作复杂繁多。为了简化问题,让学生在学习处理器指令时也有一个较好的实例化练习环境,本课程还引入了一个ARM指令模拟器。ArmSim#是R.Nigel Horspool开发的ARM7TDMI指令模拟器,可以完成嵌入式系统设计课程讲授的 ARM7TDMI指令的模拟运行,可以显示处理器寄存器、内存、堆栈等部件的状态,能进行GNU格式汇编程序的编译和运行,并支持调试运行、简单的外设模拟和SWI中断服务。ArmSim#可以通过插件的形式实现虚拟的开发板,支持按钮、LED、七段数码管、键盘、LCD显示屏等功能,并通过一套SWI软中断服务程序进行驱动。ArmSim#的运行环境非常简单,对程序的编写格式要求低,不需要操作系统特别支持,也不需要运行库支撑,能运行在一般Windows环境,能方便地进行调试运行,对于学生学习ARM基本指令有很大帮助。

图1 基于仿真系统的教学平台架构

上图是基于仿真系统的教学平台架构。在 Vmware基本虚拟运行环境中运行 Ubuntu作为虚拟的宿主系统,在Ubuntu环境中再运行QEMU系统仿真ARM环境,再运行Raspbian树莓派系统作为虚拟的目标系统。这种架构主要考虑到学生的计算机基本环境主要是 Windows10/11、MacOS、Ubuntu 等。通过Vmware运行 Ubuntu操作系统,取得一致的基本运行环境。虽然Windows10/11环境有更好WSL环境,但是考虑到安装WSL需要进行Windows版本升级,而且其他操作系统没有对应的支持,仍然在实验指导书中建议使用Vmware虚拟机的方式,当然对能力较强的学生也鼓励使用其他方法得到基本的Ubuntu运行环境。在这样的基本环境中再运行QEMU的ARM版本,用system方式运行,运行专用的kernel文件、设备树文件和对应文件系统文件启动Raspbian操作系统。Ubuntu系统作为宿主系统,Raspbian系统作为目标系统,构成基本的虚拟树莓派嵌入式开发环境。并且Ubuntu运行于x86处理器架构下,Raspbian运行于ARM处理器架构下,符合对实际硬件环境的仿真要求。

通过上述两个环境,能够很好地支持学生学习ARM处理器和指令,学习基于ARM和Linux环境的嵌入式环境搭建、开发、调试技能。下面就基于指令模拟器和仿真系统设计的一些典型实验做一下说明。

2 基于指令模拟器的实例

2.1 按钮控制LED闪灯

为了讲授虚拟开发板的基本外设控制设计本实验。实验要求学生编写简单ARM汇编程序调用SWI软件中断服务实现虚拟开发板通过按钮控制LED灯按照一定的规律循环闪亮,并通过数码管显示当前模式。通过程序控制输入设备按钮、输出设备LED,并编程实现延时,并需要考虑单执行线索程序如何处理延时操作和读取外设状态操作的关系保证程序对输入动作具有合理的响应时延。

此实验对训练学生的 ARM 汇编编程能力有很大好处,需要初步的规划寄存器的使用,需要考虑归纳部分常用逻辑作为子程序调用,需用通盘考虑程序逻辑的分配。

2.2 键盘控制贪吃蛇显示

为了讲授虚拟开发板的 LCD显示屏和键盘的控制,并练习较复杂的程序逻辑编写设计本实验。实验要求学生通过键盘控制贪吃蛇游戏的显示。编写程序通过键盘控制在LCD显示屏上以动画显示字符串方式实现蛇身的行进、改变方向等过程,并完成基本的生死判断,如触碰区域边界等。

此实验的编程难度较高,对训练学生的ARM指令编程能力有很大好处。需要形成一套较完整的寄存器使用规则,需要学会分解和抽象问题进行整体的架构设计,需要设计核心数据结构,使用内存区域保存多种状态参量等。是一个较完整的编程逻辑和布局训练实验。

3 基于仿真平台的嵌入式实验

3.1 嵌入式开发环境搭建

为了讲授仿真嵌入式环境的组成结构、虚拟嵌入式基本开发环境搭建和验证设计了本实验。实验要求学生先搭建基本框架,包括:Vmware15、Ubuntu 18.04、QEMU 6.1.0、Raspbian10。其次建立网络环境,通过QEMU端口映射连接虚拟宿主机 Ubuntu和目标系统 Raspbian的练习。在网络连接的基础上建立ssh、SFTP的登录和文件传输通道并传送文件进行验证。最后通过在宿主系统中编写C应用程序并上传至目标系统进行编译并运行,验证整个仿真系统运行环境搭建的是否正确。

此实验主要是知识性的,技能要求较低。要求学生按步骤完成即可。但也要求学生对整体结构概念清晰,并学习各个部件的功能和使用,了解对应指令的功能和用法。此实验能很好地训练学生对整体结构了解和认识功能部件。

3.2 Linux内核定制和调试

为了讲授Linux内核基本结构和功能设计了本实验。实验要求学生在宿主系统中先安装x86到ARM的交叉编译环境和IDE环境Vscode;下载安装对应版本的linux内核源码;对内核源码进行配置和简单修改;重新编译制作内核和设备树文件;使用Busybox制作对应文件系统;通过QEMU装载内核、设备树文件和文件系统。最后在宿主系统安装gdb的多体系架构支持版本,进行QEMU内核启动的gdb调试运行;在Vscode中安装C/C++插件,进行调试运行配置文件配置,通过Vscode进行QEMU内核启动的调试运行。

此实验虽然主要也是知识概念性的,但处理环节多,出错的可能较大。为降低难度,实验过程中所有使用到的部件均已准备好,保证是能相互适配的。本实验要求学生对操作系统、仿真运行环境的概念清晰,对相关指令的功能和使用有了解,并且需要具备一定的发现问题、解决问题的能力。

3.3 设备驱动程序开发和数据展示

为了讲授Linux设备驱动程序开发设计了本实验。实验要求学生基于一个样例设备驱动程序源码开发一个简单随机数发生器字符设备驱动程序,编译制作后装载入内核。进而基于一个WEB数据展示样例应用进行修改,增加对设备驱动对应设备文件的访问得到随机数字序列并展示在宿主系统的浏览器上。

本实验有一定难度,需要学生学习了解设备驱动程序的组成和工作方式,学习了解WEB应用框架的组成和运行机制,并具备一定编程能力。实验能很好地训练学生编写设备驱动程序和综合应用程序的能力。

3.4 仿真平台深度学习框架移植

目前产业界已经存在大量基于嵌入式系统承载物体识别、人脸识别类的AI应用。为了能让学生了解AI技术的发展,我们在嵌入式系统课程实践环节也增加了移植人工智能平台并进行物体识别的实验。实验要求在仿真Raspbian系统中移植原来在x86环境运行的AI平台darknet,并进行物体识别运算过程以验证移植的效果。

之所以选择darknet,主要是考虑到darknet是C语言开发的,对支持库的需求很小。而且darknet可以运行多种yolo族物体识别模型,yolo族模型是物体识别领域效果好且非常常见的基于深度神经网络的算法,并且在开放资源中能够得到训练好的权重文件。

实验要求学生从x86环境把darknet源码移植到ARM环境,在宿主系统中进行制作文件修改,交叉编译制作。使用准备好的权重文件对特定图片文件进行模型判断。实验有一定难度,为降低难度,事先已经准备好可以移植的darknet源码版本,实际移植的步骤已经确定,不需要探索。实验要求学生掌握软件移植的基本原则和过程,了解基于深度学习的AI技术基本知识,AI平台运行的基本知识,了解在嵌入式平台运行AI应用会遇到的问题和解决方法。

4 结语

基于模拟仿真平台的实践教学能很好地解决非面对面环境下的教学工作,而且在部署灵活性、可调试、展示能力上极大地超越实物环境。本文中提到的所有实验都在本科或研究生嵌入式系统课程的实践环节得到了应用,取得了较好的效果。虽然模拟仿真环境并不能模拟实物环境实验遇到的全部问题,在产业界仿真工作环节也不会完全代替实物调试环节,但是模拟仿真步骤能取代很大部分实物调试工作,并极大地缩短实物调试的时间。因此,基于模拟仿真平台的实践教学方式是嵌入式系统课程和其他计算机类课程实践环节的有益尝试。今后在虚拟设备的研发上可以做进一步工作,开发出不同类型的虚拟设备,可以支持更深入、更真实的嵌入式系统实践训练。

猜你喜欢
嵌入式指令处理器
ARINC661显控指令快速验证方法
LED照明产品欧盟ErP指令要求解读
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
Imagination的ClearCallTM VoIP应用现可支持Cavium的OCTEON® Ⅲ多核处理器
ADI推出新一代SigmaDSP处理器
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器
坐标系旋转指令数控编程应用
AItera推出Nios II系列软核处理器