【问题标题】:U-boot to load two images on separate coresU-boot 在不同的内核上加载两个映像
【发布时间】:2016-11-14 15:40:43
【问题描述】:

我有 NXP/Free-scale Imx6 saber lite 开发板。我的任务是刷新两个操作系统内核(Linux 和 RTOS),使 linux 在 core0 上运行,RTOS 在 core1 上运行。我有 1GB DDR3,我必须为 RTOS 分配前 128MB,然后为 LINUX 映像分配剩余空间。

  1. 这种情况下如何配置U-boot?
  2. core-0 应该在 >128MB DDR3 区域加载 Linux 内核,此时 core1 处于空闲状态。
  3. core-0 应加载 RTOS 并将控制权转移到 core-1。

如何使用 u-boot 实现这种情况?

如果有人解决了这个问题,请告诉我!

提前致谢!

【问题讨论】:

  • AFAIK,U-Boot 是一个引导加载程序。这意味着它可以启动一个单一的操作系统。要让多个操作系统在同一个系统上协作,您需要一个管理程序或虚拟化程序。当您说 Linux 作为您的第一个操作系统时,您可以看看 QEMU 或 KVM
  • core-0 是 Cortex-A,core-1 是 Cortex-M,对吧?
  • @sam nope,它的Cortex A9 四核处理器。
  • @serge 可以在 U-boot 中运行多个操作系统。我会检查 QEMU 或 KVM。谢谢
  • @saravanank 您是如何同时使用两个操作系统的中断控制器的?另外,您还遇到了哪些其他问题?我对此很感兴趣。

标签: linux linux-kernel multicore u-boot symmetric


【解决方案1】:

嗯,这是可能的,但我认为 uboot 不允许这样做,但有一些例外。一些供应商提供修改后的 uboot 二进制文件及其支持此类功能的板。例如,赛灵思为 ZCU102 提供的 u-boot 允许从同一 SOC 中的 cortex-a53 内核加载和调出 cortex-R 内核。

著名的开源框架 OpenAMP 可以完成这项工作。它允许远程的生命周期管理,并在不同内核上运行的多个操作系统之间建立通信。但据我记得目前不支持 saber-lite。

对您来说很重要: 在您的情况下,您只需按照以下步骤即可完成工作。

步骤 1:确保分配给 RTOS 的内存不能被 Linux 访问。为此,您需要修改 dts 文件,确切地说是内存节点。

步骤 2:从 dts 中删除要从 RTOS 访问的设备。不要删除 GIC 等重要的。 RTOS 会在它不知情的情况下与 linux 共享它。这是我知道在无监督环境中使用 GIC 的唯一方法。这也回答了 cmets 中提出的@AndrejsCainikovs 问题。

Step3:从 dts 修改 bootargs。在 dts 的 bootargs 中添加 nosmp 标志。

Step4:构建dts并替换SD卡启动分区中已经放置的dts。

第 5 步:在您的 GIC 代码中注释我们的重置和初始化代码。让 GIC 处于任何状态。启用 cpu 接口和您将使用的外围中断,并将它们的 CPU 关联设置为仅与 RTOS 内核。现在修改链接器文件并为刚刚从 linux 内存区域中删除的内存区域构建和链接 RTOS 代码。

Step6:将 RTOS 二进制文件复制到 SD 卡的引导分区。

Step7: 运行开发板并在自动启动时停止 u-boot。运行以下命令将 RTOS 映像加载到内存中。

    fatload mmc 0:1 0x10000000 rtos.bin;

显然,您需要根据您的 RTOS 地址更改加载地址,并且可能是 mmc 分区号。

步骤8:使用引导命令运行linux内核,在linux内核中你需要使用一些寄存器。我会选择通过编写内核驱动程序并使用 ioremap 映射这些寄存器并访问它们来做到这一点。但如何做取决于你自己,我在这里解释需要做什么。

将 RTOS 起始地址写入核心 1 的 SRC_GPR3 寄存器或核心 2 的 SRC_GPR5 或核心 3 的 SRC_GPR7。

现在使用 SRC_SCR 寄存器的第 22 位、第 23 位和第 24 位分别为 core1、core2 和 core3 启用内核,无论您打算在哪一个上运行您的 RTOS。请注意,core0 不能被禁用或启用。

现在使用 SRC_SCR 寄存器的第 13 位、第 14 位、第 15 位和第 16 位分别为 core0、core1、core2 和 core3 使内核退出复位。您的 RTOS 将开始运行。

这种整体配置正式称为无监督系统,而不是运行管理程序以执行严格资源分区的受监督系统。这里每个操作系统都小心运行,不要触及分配给其他操作系统的任何资源。

您可以在 i.MX 6Dual/6Quad 应用处理器参考手册中找到这些寄存器内存地址。文件编号:IMX6DQRM

【讨论】:

  • @Lohana 你是对的。大约 2 年前,我已经实施了这个概念。为了运行两个不同的操作系统,应根据用户要求(每个操作系统的内存和资源)进行相应的分区。 U-boot 应更改为使用 SRC_SCR 寄存器在每个内核上启动两个操作系统。它可以实现两个操作系统的共享内存以执行内核间通信。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 2012-01-23
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多