Linux U-boot可在单独的内核上加载两个映像

Linux U-boot可在单独的内核上加载两个映像,linux,linux-kernel,multicore,u-boot,symmetric,Linux,Linux Kernel,Multicore,U Boot,Symmetric,我有NXP/Free scale Imx6 sabre lite开发板。我的任务是闪存两个操作系统内核(Linux和RTOS),使Linux在core0上运行,RTOS在core1上运行。我有1GB的DDR3,其中第一个128MB用于RTO,其余用于LINUX映像 在这种情况下如何配置U-boot core-0应在>128MB DDR3区域加载Linux内核,同时core1此时处于空闲状态 core-0应加载RTO并将控制权转移到core-1 如何使用u-boot实现此场景 如果有人解决了这个问

我有NXP/Free scale Imx6 sabre lite开发板。我的任务是闪存两个操作系统内核(Linux和RTOS),使Linux在core0上运行,RTOS在core1上运行。我有1GB的DDR3,其中第一个128MB用于RTO,其余用于LINUX映像

  • 在这种情况下如何配置U-boot
  • core-0应在>128MB DDR3区域加载Linux内核,同时core1此时处于空闲状态
  • core-0应加载RTO并将控制权转移到core-1
  • 如何使用u-boot实现此场景

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


    提前谢谢

    这是可能的,但我认为uboot不允许有例外。一些供应商在其支持此类功能的主板上提供了经过修改的uboot二进制文件。例如,Xilinx为ZCU102提供的u-boot允许从同一SOC中的cortex-a53内核加载和提升cortex-R内核

    著名的开源框架OpenAMP之一就是这样做的。它允许远程的生命周期管理,还可以在运行在不同内核上的多个操作系统之间建立通信。但据我所知,目前不支持saber lite

    对您的情况很重要: 在您的情况下,您可以简单地按照以下步骤完成工作

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

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

    步骤3:从dts修改引导参数。在dts的引导参数中添加nosmp标志

    步骤4:构建dts并替换SD卡引导分区中已放置的dts

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

    步骤6:将RTOS二进制文件复制到SD卡的引导分区

    步骤7:运行电路板并在自动引导时停止u形引导。运行以下命令将RTOS映像加载到内存中

        fatload mmc 0:1 0x10000000 rtos.bin;
    
    显然,您需要根据RTOS地址更改加载地址,可能是mmc分区号

    步骤8:使用boot命令运行linux内核,在linux内核中需要使用一些寄存器。我会选择编写一个内核驱动程序,并使用ioremap映射这些寄存器并访问它们。但这取决于你怎么做,我在这里解释需要做什么

    将RTOS起始地址写入core1的SRC_GPR3寄存器或core2的SRC_GPR5或core3的SRC_GPR7

    现在,使用SRC_SCR寄存器的第22位23和第24位分别为core1 core2和core3启用core,无论您打算在其上运行RTO。请注意,不能禁用或启用core0

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

    这种总体配置正式称为无监督系统,而非运行hypervisor进行严格资源分区的监督系统。在这里,每个操作系统运行时都要小心,不要接触分配给其他操作系统的任何资源


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

    AFAIK,U-Boot是一个引导加载程序。这意味着它可以启动一个操作系统。要让多个操作系统在同一个系统上协作,您需要一个虚拟机监控程序或虚拟机。当你说Linux是你的第一个操作系统时,你可以看看QEMU或KVMcore-0是Cortex-a,Cortex-1是Cortex-M,对吗?@sam nope,它的Cortex A9四核处理器。@serge在U-boot中运行多个操作系统是可能的。我将检查QEMU或KVM。Thanks@saravanank您是如何同时使用两个操作系统的中断控制器的?另外,你还面临哪些其他问题?我对这个很感兴趣。@Lohana你说得对。大约两年前,我就实施了这个概念。为了运行两个不同的操作系统,应根据用户需求(每个操作系统的内存和资源)进行相应的分区。U-boot应更改为使用SRC_SCR在每个内核上引导两个操作系统。可以为两个操作系统实现共享内存以执行内核间通信。