在Microchip的PolarFire SoC FPGA上移植NuttX实时操作系统

描述

NuttX操作系统

NuttX是免费的开源RTOS,专注于标准合规性和小尺寸。NuttX的基本版本可以在低成本和低内存微控制器(MCU)上运行。

由于NuttX是一个POSIX RTOS,你可以在POSIX操作系统(如Linux或MacOS)中编写一个应用程序,并对其进行验证和编译以在NuttX上运行,而无需学习新的API。

NuttX也有许多与Linux并行的子系统。几个示例包括虚拟文件系统 (VFS)、内存技术设备 (MTD)、音频子系统和支持 USB 复合的 USB 系统。一些主要功能包括:

模块 化

微内核

完全抢占

自然可扩展

高度可配置

可轻松扩展到新的处理器架构

实时

确定性

支持优先级继承

极火®芯片芯片

Linux 操作系统 (OS) 的灵活性和实时系统控制硬件的确定性是安全关键系统、系统控制和安全应用的关键。尽管典型的对称多处理 (SMP) 实现提供了灵活性,但它们对于确定性性能并不理想。

PolarFire SoC FPGA 支持确定性非对称多处理 (AMP) Linux 应用和与内存子系统兼容的多核 Linux 处理器。这支持在单个多核中央处理器单元集群中混合使用确定性实时系统和 Linux 操作系统,该集群可以在运行 Linux 操作系统的同时以最高性能运行实时应用程序。也就是说,此解决方案提供了一个不完全确定的高性能系统。

PolarFire SoC FPGA 中的 NuttX

使用AMP模式,我们现在能够在PolarFire SoC FPGA中同时运行NuttX RTOS和Linux,这有助于将NuttX和Linux的优势整合到一个系统中。

NuttX RTOS在航空无人机行业非常受欢迎;它还用于各种应用,例如智能手机和录音机。

无人机对PX4自动驾驶软件的需求不断增长,Microchip的PolarFire SoC FPGA的电源效率使得在PolarFire SoC FPGA上实现NuttX端口非常相关和必要。

阿联酋阿布扎比技术创新研究所(TII)的安全系统研究中心(SSRC)拥有并领导了该集成项目。SSRC首先将基本端口分包给Offcode,Offcode是为该项目提供基本编码服务的Mi-V生态系统合作伙伴。这要归功于公共RISC-V标准,开源代码,强大的硬件,现有的工具链以及有价值的供应商工具,如SoftConsole和Libero® SoC设计套件。NuttX组织良好,进一步提升了移植任务本身。

SSRC进一步定义了NuttX工作所需的驱动程序和功能,并在NuttX实施之前测试了PX4功能和环境。该中心与开源社区密切合作,上游内容。SSRC的工程师也为上游NuttX内核的开发做出了贡献。

SSRC对内核开发的主要贡献包括:

RISC-V Sv39 MMU 驱动程序

在S模式下运行NuttX的配置选项

RISC-V PMP功能改进

支持CONFIG_BUILD_PROTECTED和CONFIG_BUILD_KERNEL

用于地址环境和页面分配器的RISC-V实现

NuttX CONFIG_BUILD_KERNEL任务环境初始化、elf 加载器、Crt0 编译和进程退出的更正

用于 SBI 集成的胶水逻辑

初始端口的详细信息可在此 GitHub 社区中找到。
 

大多数代码位于以下文件夹中:

arch/risc-v/src/mpfs/

板/RISC-V/MPFS/冰柱/

程序集文件mpfs_head。S 位于 arch/risc-v/src/mpfs -directory 下,包含代码执行的起点。安装机器陷阱-矢量基址寄存器(mtvec)也是其中的主要步骤。它指向所有中断和异常的陷阱处理程序。

Microchip有一个名为Hart软件系统(HSS)的引导加载程序。它包含 DDR 内存训练序列和其他硬件块初始化,在处理任何内存访问之前必须到位。因此,HSS最初用于加快移植速度。

后来,所有必需的设备驱动程序和功能也被整合到NuttX中。截至 2022 年 <> 月,NuttX 还可以作为支持 OpenSBI 的引导加载程序。这意味着基于 NuttX 的引导加载程序可以在其他 harts 上启动 U-boot 和 Linux。

现在,PolarFire Icicle套件支持NuttX的以下外围驱动程序:

串行端口

EMMC/SD (DMA 支持

以太网

通用信息总组织

I2C

SPI

USB(复合 CDC/ACM 和大容量存储)

脉宽调制

DMA(内存到内存)

除了外围驱动程序外,它还具有所有必要的时钟设置,计时器,DDR培训,OpenSBI支持,通过哈特间通信(IHC)的RPMSG和其他一些功能。

AMP将Linux内核和NuttX粘合在一起。此功能是通过远程处理器消息传递 (RPMSG) 构建的。如果一个操作系统使用网络硬件,则另一个操作系统不会通过同时初始化和使用硬件来冲突。不过,可以做的是通过RPMSG框架使用该接口。但是,出于任何原因,消息可能会在不同的操作系统之间共享。

2022 年 <> 月,一个补丁被合并到 NuttX 中,该补丁支持两个不同的 NuttX 操作系统通过自己的 RPMSG 路径与 Linux 内核进行通信。当然,这也需要一些小的 Linux 内核修改。测试的设置具有以下 hart 设置:

哈特0:NuttX引导加载程序

Hart1:NuttX OS(独立),使用 RPMSG 通道 1

Hart2:NuttX OS(独立),使用 RPMSG 通道 2

Hart3:Linux 内核

Hart4:Linux 内核

Linux 内核与 harts 1 和 2 上的两个 NuttX 进行通信。如果需要编写任何实时车辆、无人机或任何时间关键型任务,我们建议考虑使用 NuttX 作为选项。
 

我们强烈推荐NuttX操作系统

考虑一下将时间关键层合并到 NuttX 中,同时保持对 Linux 的良好关注是否对您来说是一个可行的选择。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分