2023年Zephyr开发者大会(ZDS)于6月27日至30日在捷克布拉格隆重举行。与以往两次不同,本次ZDS由Zephyr项目规划和管理,并作为首届嵌入式开源峰会(EOSS)的一部分进行。在这个令人期待已久的盛会中,全球Zephyr开发者们共同探讨了Zephyr实时操作系统(RTOS)的最新技术与发展趋势。作为一款开源、灵活和可扩展的嵌入式实时操作系统,Zephyr项目在2014年由英特尔发起,2016年作为Linux基金会项目正式面向公众启动,得到了全球范围内的广泛关注和采用。
ZDS 2023共70余个技术报告,涵盖了使用指导与展示、新功能与技术、架构修改与操作系统、多核异构与虚拟化、模拟器、测试、工业流程与代码管理、安全性、应用案例、工具与调试等丰富多样的内容。湖大嵌入式实验室的小伙伴们将对本次大会的所有技术报告进行逐一收集、整理与分享,尽最大努力为Zephyr开发者提供ZDS 2023技术报告的开发经验、实践成果以及解决方案的参考。
今天分享第7篇技术报告,题目为:
“ARM核心+DSP联合仿真在Zephyr中使用定制的QEMU”
作者简介
黄鹭是恩智浦的软件工程师、Zephyr测试工作组成员、和风实时操作系统项目协调员。
文章简介
模拟器提供了一种灵活安全的方法来模拟和操作不同操作系统的环境,为开发、测试、学习和维护操作系统提供了便利。它们可以节省时间和资源,并提供更好的可移植性和兼容性。本文以黄鹭的演讲为依据对QEMU进行了简要的介绍,并展示在Zephyr中如何使用定制的QEMU。此外,还讨论了模拟器如何受益,对QEMU进行简述,介绍了SOC协同模拟器设计模式和i.MX RT595 QEMU联合模拟器。
传统没有模拟器的工作模式:需要软件工程师,软件应用工程师,嵌入式软件工程师,目录工程师分层协作,各自独立工作。
使用应用模拟器后,各层级工程师于注册层和应用层共同工作,工作效率的提升相当于从游泳升级到坐潜艇。
QEMU简介
1. QEMU是一个机器仿真器:它可以运行未经修改的目标操作系统(如 Windows® 或 Linux®)及其在虚拟机中的所有应用程序。
2. QEMU由以下几个子系统组成:
① CPU模拟器(目前为x86,PowerPC,ARM,Sparc,RISC-V,XTENSA等)
② 仿真设备(例如VGA显示器、16450串行端口、PS/2鼠标和键盘、IDE硬盘)磁盘NE2000网卡
③ 通用设备(例如块设备,字符设备,网络设备)用于连接仿真
④ 对应相对主机的设备
⑤ 机器描述(例如PC,PowerMac,Sun4m)实例化模拟设备
⑥ 调试器
⑦ 用户界面Concepts for
全系统仿真的关键:
1. 解析目标文件以获取其符号表,重新定位条目及其代码部分。
2. 微操作位于代码中部分使用符号表。
3. 每个微操作的搬迁是检查已经获取常量的数量参数。
4. 生成C语言中的内存副本以复制微操作代码。
5. 对于某些主机(如ARM),常量必须存储在生成的代码附近,因为它们是使用PC相对负载访问,具有较小的位移。
协同模拟器设计
内核要完成上述操作需要两个条件:
这里就需要拓展一下D-Bus技术了,D-Bus技术有如下优势:
D-Bus是为Linux系统开发的进程间通信(IPC)和远程过程调用(RPC)机制,使用统一的通信协议来代替现有的各种IPC解决方案。D-Bus允许系统级进程(如:打印机和硬件驱动服务)和普通用户进程进行通信。
D-Bus使用一个快速的二进制消息传递协议,D-Bus协议的低延迟和低消耗特点适用于同一台机器的通信。D-Bus的规范目前由freedesktop.org项目定义,可供所有团体使用。
D-Bus不和低层的IPC直接竞争,比如sockets,shared memory或message queues。低层IPC有自己的特点,和D-Bus并不冲突。
与其他重量级的进程间通信技术不同,D-Bus是非事务的。D-Bus使用了状态以及连接的概念,比UDP等底层消息传输协议更“聪明”。但另一方面,D-Bus传送的是离散消息,与TCP协议将数据看做“流”有所不同。D-Bus支持点对点的消息传递以及广播/订阅式的通信。
启用QEMU dbus设备的4个调用方法(初始化、中断、写入和读取):
Python dbus守护进程,以便于事务实现,我们称之为dbus_mu_servi。
与之对应的python库函数:
带 DSP 的 i.MX RT595 QEMU 联合模拟器:
将定制的QEMU应用在Zephyr的优势在于:
1. 与Zephyr上的reali .MX RT595板共享相同的二进制文件
2. 重用Zephyr框架进行DSP开发
3. i.MX RT595的互操作
4. 从i.MX RT595 Cortex-M33内核到Fusion DSP的互操作
Dbus daemon协调CM33和DSP之间的交互,保证安全性。
待完成的工作:
1. 创建多个定制的QEMU用于CI测试
2. 使用QEMU系统对代码进行覆盖率分析
3. 通过联合仿真扩展用户案例