名称:嵌入式设备开发虚拟仿真实验
实验目的:通过实验教学,使学生了解嵌入式系统开发环境、过程和常用开发工具的使用。能够掌握嵌入式操作系统的启动、裁剪、驱动和应用开发的流程。使学生能够处理计算机领域硬件控制、端口数据获取等复杂工程问题。培养学生依据实际需求设计嵌入式产品的能力,为未来从事该领域工作打下坚实的基础。
(1)知识目标
1)明确接口技术在计算机系统中的重要地位与作用,掌握以ARM为核心的系列芯片的体系架构。
2)掌握ARM处理器系统结构、内部可编程模块、接口等硬件原理和开发方法。
3)掌握嵌入式操作系统的原理、开发及完整系统开发的流程及相关知识。
(2)能力目标
1)具备嵌入式计算机应用系统的整体架构分析能力,具备软硬件结合解决系统问题的能力。
2)能够将嵌入式软件硬件的知识应用于计算机领域中硬件控制、数据获取等工程问题的解决识。
3)能够将嵌入式系统应用开发的相关知识应用于特定系统或特定功能开发方案的设计,包括软、硬件的架构及及它们之间如何控制、协调。
4)面对多学科背景下复杂工程问题,理解团队的意义,发现自身优势与特长,主动与其他成员沟通、合作、开展工作,共同完成实验项目。
5)价值塑造,从嵌入式系统应用开发过程抽取思政元素,融入爱国主义、理想信念、使命感等思政教育的内容,进一步加强提升学生的家国情怀、社会责任感等。
实验课时:
《嵌入式虚拟仿真实验教学系统》开发初期首先满足《嵌入式系统应用开发》课程实验需要,在系统稳定运行后,基于该系统架构,又针对《计算机原理硬件综合实训》、《接口技术及应用》和《物联网系统与应用》等课程开发了部分虚拟仿真实验项目。支撑了两个专业四门课程的实验教学。
1、计算机科学与技术专业
(1)《嵌入式系统应用开发》,总课时51学时,实践课时34学时,本实验所占课时10课时;
(2)《计算机原理硬件综合实训》,总课时51学时,实践课时51学时,本实验所占课时15课时;
(3)《接口技术及应用》,总课时51学时,实践课时8学时,本实验所占课时4课时;
(4)《物联网系统与应用》,总课时51学时,实践课时34学时,本实验所占课时6课时。
2、电子信息工程专业
《嵌入式系统应用开发》,总课时85学时,实践课时51学时,本实验所占课时15课时。
实验原理:
1、嵌入式系统包括软件、硬件部分。硬件是以嵌入式处理器为核心,由存储器、I/O单元电路、通信模块、外部设备等接口组成。软件是嵌入式系统的灵魂,由引导程序BootLoader、驱动程序、操作系统、应用程序构成。
“无线路由器”是一个典型的嵌入式系统,体系架构如下图所示。其硬件部分是一个以ARM系列微控制器为核心,配备存储器、外部设备、无线通信模块等组成的一个完整计算机系统。软件系统包括Uboot、linux操作系统、设备驱动和上层应用程序。
Uboot移植:“无线路由器”系统有其特定的硬件体系架构和功能,需要移植或编写Uboot,首先完成硬件设备的初始化和内存空间映像,为linux内核启动准备好环境。其次,Uboot装载和启动内核,将CPU控制权交给linux内核。
内核移植:“无线路由器”是一个较复杂的嵌入式设备,其上需要运行linux操作系统,操作系统为用户程序提供一个有限服务集的低级支撑,负责将可用的共享资源分配给各系统进程,可将应用层程序的请求传递给硬件,对系统中的各种设备和组件进行寻址。这里需要对Linux操作系统进行裁剪、编译与移植。
驱动程序开发:应用程序对硬件的访问需要调用操作系统接口,而操作系统对于硬件的控制是通过驱动程序实现的。“无线路由器”实验设备中需要设计一个复位功能按键,和若干指示灯,以实现无线路由的复位初始化和工作状态的指示。另外还需要IIC总线的EEPROM来存储系统参数。这些设备的驱动程序开发也是嵌入式系统实验的重要组成部分。
文件系统的建立:Linux操作系统将一切都抽象为文件,Linux引入了虚拟文件系统VFS(Virtual File System)的概念,为各类文件系统提供一个统一的操作界面和应用编程接口。
应用程序开发:“无线路由器”设备需要通过WEB方式配置设备参数并永久保存。因此需要开发支持脚本CGI功能的WEB服务器应用程序,以提供对网页的支持,使用户通过WEB浏览器就可实现对嵌入式设备的管理和控制。
根据上述工作原理,本实验涉及7个知识点:
1)Uboot的功能、启动过程及编辑编译过程(《嵌入式系统应用开发》);
2)Linux内核的结构及其在不同开发板上移植的基本步骤和方法(《嵌入式系统应用开发》);
3)Linux文件系统组织的基本方法(《嵌入式系统应用开发》);
4)KEY、LED灯等硬件原理以及和CPU的连接控制(《嵌入式系统应用开发》、《计算机原理硬件综合实训》、《接口技术及应用》课程里的硬件知识);
5)EEPROM、I2C等硬件工作原理即编程接口(《计算机原理硬件综合实训》、《接口技术及应用》课程里的硬件知识);
6)Linux系统中驱动模型及外设驱动编程、加载应用过程(《嵌入式系统应用开发》、《接口技术及应用》);
7)WEB服务器的架构与实现(《嵌入式系统应用开发》、《物联网系统与应用》课程中智能网关知识)。
2、核心要素仿真设计
嵌入式虚拟仿真平台采用开源免费的QEMU模拟器并进行二次开发以虚拟化嵌入式开发板,可达到与实际开发相同的实验效果。QEMU可以模拟多种型号的ARM开发板,利用内核的虚拟机(KVM)执行x86处理器硬件虚拟化,使其CPU以近乎硬件本身的速度执行运算任务。QEMU具备跨平台性,其通过机器代码的实时转换来模拟其他处理器以用于虚拟机运行不同平台的操作系统。QEMU类似于Linux中的Wine,可以使用实时转换为其他架构运行简单的程序。所以用QEMU作为仿真开发板的工具是非常可行的。
无线路由器实验项目所有功能全部采用在QEMU虚拟的开发板上实现,在虚拟仿真界面进行引导程序的烧写、内核的裁剪移植、文件系统的挂载、驱动的开发、应用程序的开发,服务器的WEB页面收发用户指令,通过虚拟系统将指令传达到相应的虚拟硬件设备,实现对其硬件的控制。所有数据全部是真实数据,全实验过程可仿真整个开发过程,仿真度极高。
实验教学过程与实验方法:
本实验项目依托实验中心,推进虚实结合的实验教学改革。以工程项目或案例为教学内容,通过“做中学”的方式,让学生由被动学习变主动学习,主动建立起实践课程和理论之间的有机联系,培养学生的工程实践能力和创新意识,考核心方式也更加注重对于过程的考核,真正践行以学生为中心,培养目标为导向的教学理念。
(1)设计包含多个知识点的案例,使虚拟仿真在线实验教学更好地用于启迪学生的科学思维和创新意识,我们积极开展实验技术研究,合理规划、精心设计实验项目和实验方案,以项目驱动的方式呈现,以激发学生的主动性。
(2)多元化的考核方法,更加注重过程化的考核,统筹考核实验过程与实验结果,激发学生实验兴趣,提高实验能力。本在线实验项目除了支持实验教学外,还可有效支撑课外学习和科技活动。
实验方法与步骤要求:
本项目基于虚拟开发板完成无线路由器的开发实现。主要步骤包括Uboot编写、调试、编译、烧写;Linux内核的裁剪、编译与烧写;文件系统组织与挂载;ARM外设驱动的开发、加载与调用;Web服务器的开发、编译及调用、外部设备的读写控制等。
每个实验子项目按照“基本、拓展、拔高”三个层次递进展开,“基本”层次主要培养学生操作过程,侧重验证实验;“拓展”层次提供程序框架和部分配置文件,核心代码由学生自己编写,并实现编译、烧写及应用;“拔高”层次程序代码、配置文件等都由学生独立完成,在规定内容基础上,学生可以更改设计要求,以激发学生自主设计开发能力。
学生交互性操作步骤说明:
(1)Uboot引导程序
1)在宿主机上搭建开发环境
下载安装交叉编译器,运行过程(略)
2)进入uboot目录,生成配置文件
cd ~/uboot/u-boot-2018.09
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_ca9x4_defconfig

3)修改配置文件。(根据自己的需要进行修改)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

4)编写uboot程序
命令和步骤(略)
5)编译uboot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

6)测试UBoot运行
通过在QEMU虚拟嵌入式开发板上启动编写好的UBoot程序,观察屏幕输出结果,以判断UBoot编程正确性。命令如下:
qemu-system-arm -M vexpress-a9 -m 256 -kernel u-boot --nographic启动
参数说明:
-M机器模型
-m运行内存MB
-kernel运行的内核程序
--nographic不输出图像窗口,直接通过串口或者命令行控制台输出打印信息。

(2)Linux内核
1)下载内核源代码
下载ubantu18.04内核源代码(步骤略)
2)编译Linux内核、设备树
book@100ask:~/100ask_imx6ull-qemu$ cd linux-4.9.88
book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make mrproper
book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make 100ask_imx6ul_qemu_defconfig
book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make zImage -jN //编译zImage内核镜像,其中N参数可以根据CPU个数,来加速编译系统
book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make dtbs //编译设备树文件

3)配置内核
编译完成后,如果要查看内核详细配置选项,或者对想对内核进行裁剪,可输入make menuconfig命令,进入如图所示的Linux内核配置界面,配置完成可再次重新输入上一步命令重新编译,并用最新生成的镜像文件替换掉旧的镜像文件。

(3)文件系统的挂载及编译
主要命令:
cd ubuntu-18.04_imx6ul_qemu_system/imx6ull-system-image
sudo mount -o loop rootfs.img /mnt
可以在/mnt目录下对其中的文件进行操作了,也可以把Ubuntu中的文件复制进去。

修改完毕后,要执行以下命令实现卸载:
sudoumount /mnt
(4)驱动开发,实现KEY控制LED实验
1)进入开发目录
cd led_driver_qemu/
2)编写LED驱动程序
(根据不同培养层析,编写LED驱动程序,步骤略)
3)配置编译环境
(根据不同培养层析,编写LED驱动程序编译配置文件,步骤略)
4)编译驱动程序
5)编写LED测试程序
(根据不同培养层析,编写LED测试程序,步骤略)
6)配置编译环境
(根据不同培养层析,编写LED测试程序编译配置文件,步骤略)
7)编译LED测试程序
8)装载驱动程序
9)配置运行权限
insmod100ask_led.ko
10)运行LED测试程序,观察虚拟仿真环境LED状态变化
./ledtest /dev/100ask_led1 off
./ledtest /dev/100ask_led1 on

11)编写KEY驱动程序
(过程类似LED,略)
12)测试KEY控制LED程序
(过程类似LED,略)
cd ../button_driver_qemu/
insmodbutton_drv.ko
insmodboard_100ask_qemu_imx6ull.ko
./button_led_test

(5)利用I2C实现对EEROM的读写
首先在“QEMU设备管理器”中打开at24c02的界面,然后执行以下命令测试:
// 0x50是AT24C02的I2C设备地址
i2c_usr_test /dev/i2c-0 0x50 r 0 //读地址0 data: , 0, 0x00
i2c_usr_test /dev/i2c-0 0x50 w 1 0x58 //写地址1,写入0x58

(6)应用层的部分——Web服务器设计与实现
1)完成http模块的设计与实现,然后拷贝到相应目录,然后对其makefile文件进行编译。
[root@localhost04_webserver]# make clean
rm -f ../bin/httpd ./httpd *.elf *.gdb *.o
[root@localhost04_webserver]# make

2)当前目录下生成可执行程序httpd。
然后把这个httpd程序拷贝到~/nfs_rootfs目录中。
3)挂载主机nfs目录
QEMU模拟的imx6ull开发板,可以去访问10.0.2.2,比如使用NFS挂载:
[root@qemu_imx6ul:~]# mount -t nfs -o nolock,vers=3 10.0.2.2:/home/book/nfs_rootfs /mnt
4)测试服务器
[root@UP-TECH04_webserver]# ./httpd

实验结果与结论:
1)注意开发板的型号,如果型号不同可能导致编译出错。
2)在内核和文件系统的编译过程中,编辑makefile文件时,一定注意书写和格式问题,如果书写或者格式有问题,编译过程可能出错。
3)在内核裁剪过程中,有若干不同的选项,实际项目中应依据产品的特点选择内容,以符合嵌入式设备的特点,不同产品这里选择加入编译的内容不同。
面向学生要求:
(1)专业与年级要求
计算类学生,大三
(2)基本知识和能力要求
要具体以下知识:接口知识、linux操作系统基础知识、具备一定的编程能力。
实验项目应用及共享情况:
(1)本校上线时间:2016年5月20日
(2)已服务过的学生人数:本校945人,外校158人
(3)纳入教学计划的专业数:2
具体专业:计算机科学与技术、电子信息工程
教学周期:17
学习人数:945
(4)是否面向社会提供服务:●是 ○否
(5)社会开放时间:2019年1月10日
(6)已服务过的社会学习者人数:158人
