冯刚 谭琦 董宇
摘 要: 为了降低嵌入式软件学习和开发中硬件资源的投入成本,提出以Proteus作为嵌入式target平台,Ubutun Linux作为host平台,构建嵌入式Linux软件设计虚拟实验室的步骤。以7段数码的显示为例演示了嵌入式Linux虚拟环境下进行嵌入式软件开发的过程,获得了较直观的实验结果。虚拟实验室的建设有效地降低了嵌入式系统的开发成本,弥补了传统实验室的不足。
关键词: Proteus; 嵌入式Linux软件设计; 虚拟实验室; 嵌入式系统
中图分类号:TP391.9 文献标识码:A 文章编号:1006-8228(2020)10-56-04
Abstract: In order to reduce the cost of hardware resources in embedded software learning and development, the steps of constructing a virtual laboratory for embedded Linux software design with Proteus as the embedded target platform and Ubuntu Linux as the host platform are proposed. A 7-segment digital display is used as an example to demonstrate the process of co-designing software and hardware in an embedded Linux virtual environment, which obtains a more intuitive experiment result. The construction of virtual lab effectively reduces the development cost of embedded systems and makes up for the shortcomings of traditional laboratories.
Key words: Proteus; embedded Linux software design; virtual laboratory; embedded system
0 引言
随着计算机技术的日益发展,嵌入式系统几乎渗入到人类社会生活的各个方面。全国各大高等院校的电子、计算机、信息等专业均开设了嵌入式相关课程,并建立了相应的嵌入式实验室。这些实验室基本上采用成套的硬件设备来构建,不同的实验室只能进行某一类课程的实验,而且由于嵌入式硬件的多样性以及资金的限制,无法建立一个适应各种需求的嵌入式实验室。一些学校已购买了一定的嵌入式设备,但因为学生人数众多、设备的损坏/老化等原因,使得嵌入式实践过程成为一种验证性的实验过程[1-3]。
虚拟实验室其基本思想是用软件方法虚拟各种实际的元器件、虚拟必要的电子检测设备如示波器等,即所有的实验只需要一台PC机和相应的软件就可以设计完成[5-7]。因此,虚拟实验室的出现较好地解决了目前嵌入式实践课程中出现的问题,为嵌入式软硬件教学提供了一个很好的平台,丰富了实践教学的手段,弥补了传统实验室的不足[4]。
本文针对嵌入式Linux软件设计虚拟实验室的建设进行了研究,提出了利用Proteus构建嵌入式Linux软件设计的虚拟仿真平台。通过该虚拟实验室,可以充分利用Proteus提供的各种硬件设备,搭建一个仿真现实的实验系统,进而在这个系统上完成整个基于Linux的嵌入式软件开发过程。
1 虚拟实验室的特点
由于嵌入式Linux软件设计涉及到嵌入式系统软硬件的多个方面,从嵌入式的引导程序Bootloader到Linux内核、根文件系统及应用程序的开发都需要有全面的认识,与传统的嵌入式实验室相比虚拟实验室存在下述特点:
⑴ 成本低。虚拟实验室其根本就是采用虚拟的设备来进行相关的嵌入式实验,整个实验过程均在软件上仿真运行,当实验设备和实验环境发生变化时,只需要对虚拟环境中的相关设备和环境进行改变即可,可以从根本上解决实验室建设经费短缺、实验设备不断损坏老化等问题。以嵌入式Linux软件设计课程为例,由于Bootloader、Linux内核及根文件的移植是一个十分复杂又容易出错的过程,往往要多次对实验箱开发板的flash进行底层的烧写,由于学生在实验中的不当操作极易导致开发板的损坏,改用虚拟实验环境就从根本上避免了这种问题,学生只需简单将移植后的软件装入到虚拟的flash中就可以检查移植的结果。
⑵ 实验时间灵活。采用虚拟实验室后,不再需要进行大班的嵌入式实践教学,可以让学生充分地利用課外时间,分散、灵活地完成实践教学。过去的嵌入式实验由于设备紧缺,常常是多个学生共用一套实验设备,有些基础差的同学根本没有机会理解实验内容,也无法完整地完成实验过程,基本上是属于走过场。通过虚拟嵌入式Linux环境,可以做到每个人独立完成实验要求,独立考核,并促使学生在平时也可以动手进行实践,充分调动了学生自主学习的积极性。
⑶ 方便灵活。实验环境不再固定单一,可以根据实验要求进行各种软硬件设计,有利于创新创造人才的培养。传统的嵌入式实验都是在固定的开发箱上进行, 几乎不能进行硬件电路上的创新改进,只能在已有的硬件平台上进行实验,而Proteus平台提供的ARM仿真开发环境提供了极大的改进与扩展的空间,我们可以对除CPU以外的硬件电路进行设计修改,并根据修改后的硬件电路进行bootloader、Linux内核的相应修改,最后完成应用程序的设计,充分体现了嵌入式软硬件协同设计的本质,对提高学生的学习水平,培养新工科提倡的人才提供了很好的实践环境。
2 虚拟实验室的构建
2.1 软件环境
⑴ Proteus
Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件,它不仅具有其他EDA工具软件的仿真功能,还能仿真嵌入式CPU及外围器件.其最具特色的地方在于:①互动的电路仿真;②仿真处理器及其外围电路;③直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。选用Proteus作为嵌入式Linux交叉开发环境的target端,在Proteus环境设计嵌入式系统的硬件原理图,并将host端生成的嵌入式软件加载运行,观察系统仿真运行结果。
⑵ Ubuntu
选用桌面Linux版本Ubuntu作为host端,在Ubuntu上安装交叉编译工具,如arm-linux-gcc/arm-elf-gcc、uboot源码、ucLinux源码等,为嵌入式系统开发建立好交叉开发环境。
2.2 实验内容和实验过程
⑴ 在Ubuntu Linux系统中安装嵌入式开发环境:arm-linux-gcc/arm-elf-gcc、uclinux源码、uboot源码等。
⑵ 在Proteus上进行硬件电路的设计。
⑶ 在Ubuntu Linux进行嵌入式软件开发,编写嵌入式驱动程序与应用程序源码。
⑷ 在Ubuntu Linux交叉编译产生驱动程序的内核模块及应用程序。
⑸ 在Proteus的仿真环境中加载并运行驱动程序模块及应用软件,观察系统仿真运行的结果。
2.3 实例分析
下面以Linux下进行7段数码管的显示控制过程为例介绍驱动程序和应用程序开发的过程。
⑴ 安装交叉编译环境(过程略)。
⑵ 完成硬件电路设计,设计中包括对Proteus中的ARM for VSM进行输入输出接口P0-P31的设计以及7段数码管的线路连接。最top层电路如图1所示。
⑶ 编写驱动程序c及应用程序,其关键c语言代码如下:
//驱动程序中提供给应用程序的接口函数
static struct file_operations seg7_fops = {
owner:THIS_MODULE,
open:seg7_module_open,
ioctl:seg7_module_ioctl,
release:seg7_module_release,
};
//7段数码管的驱动程序,接收应用程序的输入,控制7段数码的显示
static int seg7_module_ioctl(struct inode *inode, struct
file *file, unsigned int cmd, unsigned long arg)
{
switch (cmd) {
//根据cmd显示0~F的一个值
case 0:printk (KERN_INFO "Display 0\n");
P0=seg7_list[0];
break;
......
case 15:printk (KERN_INFO "Display F\n");
P0=seg7_list[15];
break;
default: return -EINVAL; }
return 0; }
static int seg7_module_init(void) { //注册设备
int register_result=register_chrdev(seg7_major,
"seg7", &seg7_fops);
if (seg7_major==0) seg7_major=register_result;
printk(KERN_INFO "seg7: init OK!\n");
P0=0x00;
return 0; }
static void seg7_module_cleanup(void) { //注销设备
if (unregister_chrdev(seg7_major, "seg7"))
printk (KERN_ALERT "seg7 module unregister!\n");
else
printk (KERN_ALERT "seg7 module unregister error!\n");}
module_init(seg7_module_init); //內核模块初始化函数
module_exit(seg7_module_cleanup); //内核模块卸载函数
//头文件seg7.h
#ifndef _SEG7_H_
#define _SEG7_H_
#define P0 *((volatile unsigned char *)0x80000080)
//对应的硬件接口地址
#define P1 *((volatile unsigned char *)0x80000084)
#define P2 *((volatile unsigned char *)0x80000088)
#define P3 *((volatile unsigned char *)0x80000090)
unsigned char seg7_list[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管的共阴极编码值
#endif /* _SEG7_H_ */
应用程序测试代码如下:
//test-seg7.c
#include
#include "seg7.h"
int main(void)
{ int fd;
int length,i,j;
fd=open("/dev/seg7", O_RDWR)
//调用驱动程序提供open函数
while(j<10) { //循环显示10次
for(i=0,i<16,i++) {
ioctl(fd, i); //循环显示0~F
sleep(1); }
j++ }
close(fd);
printf("Success!\n");
return 0; }
⑷ 编译连接生成内核模块seg7-module及应用程序test-seg7(过程略)。
⑸ bootloader启动并加载uclinux内核如图2所示。
⑹ 在Proteus加载运行,运行结果如图3所示。
3 结论
由此可见,基于Proteus进行嵌入式Linux虚拟仿真实验室的构建是完全可行的。采用虚拟实验室的方式,可以很好地解决传统嵌入式实验室设备老化折损等问题,降低了嵌入式系统开发的成本,同时也方便学生充分利用课余时间进行嵌入式系统的软硬件设计,不受实验室场地以及实验箱硬件设计的限制,能够充分调动学生自我学习积极性。在我院实际的教学与实践应用中,取得了很好的教學效果,学生对嵌入式Linux软件设计课程的满意度评分达到了98.8%。不仅如此,使用虚拟仿真的方式,还可以在项目开发中进行快速原形设计,在虚拟开发成功之后进行实际制作,这样可以大大节省开发成本、提高开发效率,具有极好的实用价值。
参考文献(References):
[1] 曹颖.虚拟实验室在仪器分析教学中的应用探讨[J].实验科学与技术,2015.13(2):36-37
[2] 沈珊瑚等.以学生为中心的嵌入式系统原理与设计实践课程教学探索[J].计算机教育,2019.7:159-162
[3] 赵继忠等.基于Proteus的工频参数测量仪的设计[J].自动化与仪器仪表,2019.2:84-87
[4] 江维等.基于PROTEUS和MDK的嵌入式虚拟实验室构建[J].武汉纺织大学学报,2018.31(5):22-25
[5] Elena V.Morozova etc. The Laboratory Stand Simulation for Programming Microprocessor Devices[C].IEEE Conference of Russian Young Researchers in Electrical and Electronic Engineering,2019:125-128
[6] Sohaib Aslam etc.Development of a Software Based PIC24F Series Microcontroller Educational Trainer[C]. International Conference on Engineering and Emerging Technologies (ICEET),2019.
[7] Sandeep Sasidharan etc. Design and Simulation of Microcontroller based Power factor correction converter[C].Electronic Converter for Nuclear Research Application 2018 International CET Conference on Control, Communication, and Computing (IC4),2018:95-100