gpt4 book ai didi

arm - 实时操作系统中的实时操作系统

转载 作者:行者123 更新时间:2023-12-01 12:34:55 32 4
gpt4 key购买 nike

我计划运行一个 RTOS(例如 Nuttx)作为另一个 RTOS(例如 FreeRTOS)的进程,这样 freertos 任务和作为 Freertos 任务运行的 Nuttx 将共存。

考虑到底层硬件是 ARM cortex A8 单核处理器,这是否可行?如果实现不是基于 VM 概念,可能需要进行哪些更改?

最佳答案

简而言之,您的要求是允许 GUEST RTOS 在底层 HOST RTOS 的范围内完全工作。第一个答案是使用虚拟化扩展,但 A8 处理器没有,因此将排除此选项。如果没有虚拟化扩展,您必须求助于以下方法之一,并且需要进行大量代码更改。

选项 1 - 移植您的 GUEST OS API

获取所有 GUEST OS API 并替换它们的实现,以便它通过使用 HOST OS 的 API 来模拟所需的 API 行为。从技术上讲,现在您的 GUEST OS 将没有调度程序,并且将简化为 HOST OS 之上的移植层。当公司需要他们的软件解决方案跨多个 RTOS 工作时,他们会使用这种方法。他们会编写基于 RTOS 的软件解决方案。当客户要求在他们的 RTOS 上运行软件时,他们只需将 RTOS API 实现移植到客户的 RTOS 上。

选项 2 - 准虚拟化

您的 guest RTOS 用户和内核空间都应该在您的主机 RTOS 的用户空间内工作。让我们把问题分成几个部分。

处理特权指令

当您的 guest 操作系统在“内核模式”下执行尝试执行特权指令时,将导致 undef 指令中止。您必须修改主机内核的 undef 指令中止处理程序以捕获/拦截这些指令并对它们采取行动。每一条特权指令都必须被捕获/拦截和“模拟”。有些指令不会陷入陷阱,但需要通过修改代码来处理。例如。如果你的内核代码读取 CPSR 来确认执行模式,CPSR 会说模式是用户模式。 (该指令不会导致指令中止,因此您无法遵循陷阱和模拟模型。唯一的方法是在您的 GUEST OS 代码库中识别、搜索和替换这些指令。)

内存管理单元

如果发生特权冲突,您的主机操作系统将触发数据中止。它必须转发到您的客户操作系统。

中断

您必须将您的 GUEST OS 的中断 Controller 驱动程序替换为虚拟 SVC 调用,这些调用将调用您的 HOST OS 以设置中断。

计时器

当您运行主机操作系统任务时,您将不得不修改您的 GUEST 计时器驱动程序以解决“丢失”的滴答声。

硬件驱动

必须修改您的 GUEST OS 使用的所有其他硬件驱动程序,以允许 GUEST 和 HOST 之间共享设备。

调度程序

您的 GUEST OS 调度程序现在可以在另一个调度程序(HOST OS 调度程序)中运行(因此受其支配)。

关于arm - 实时操作系统中的实时操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30572084/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com