【转载】基于 NXP i.MX8QM 的 硬件隔离 介绍

一、 Hardware Partition

        1.1 功能简介

        Hardware Partition 中文叫硬件分区或者硬件隔离。基于 NXP i.MX8QM 的 Hardware Partition 功能将 Resource, Memory, Pad 等硬件资源通过硬件分区的方式进行划分和管理。硬件资源的所属分区拥有对该资源的访问和管理 权限,其他分区不能对该资源进行操作。通过 Hardware Partition 功能强化了 i.MX8QM 对硬件资源的管理,通过硬件分区的方式对资源进行管理,简化了资源从属和管理问题,方便了软件开发。

 

        1.2 功能应用

        基于 NXP i.MX8QM 的 Hardware Partition 功能可用于双系统的开发。 i.MX8QM 是一款多核芯片,包括了 4x A53, 2x A72, 2x M4 等核心,通过创建两个系统的硬件分区,将不同的硬件资源划分到这两个分区,并分别将 A53 和 A72 core 划分到这两个系统分区,最终可实现两个分区上的 CPU 分别独立运行一套操作系统。

 NXP i.MX8QM 芯片多用于汽车产业,通过其 Hardware Partition 功能实现的双系统( A53 运行 Linux ,A72 运行 Android )可用于仪表和中控娱乐系统。

                                                                           
                                                   图1 仪表和中控娱乐系统

 

    二、 SCU 子系统

        Hardware Partition 功能集成在 SCU 子系统中,由 SCU 子系统实现。

        SCU 全称 System Control Unit ,中文叫系统控制单元。SCU 子系统在 i.MX8 以及 i.MX8X 系列起着中央控制功能的角色,此子系统主要由一个内含 256 KB TCM 的 Cortex-M4 所组成,另外还包含一些专属周边以及对外沟通的外设,其结构如下图 :

                                                                                                                                                                                                                                                                                                                                    图2 SCU 子系统结构
 
        这个 M4 并不开放让一般 User 使用,只提供给平台做系统内部的控制使用,所以子系统内的各种资源都不能被其他核心所使用。

 

    三、 SCFW 软体

        SCFW 固件是在 SCU 中运行的软件程序,SCU 为硬件的许多基本功能提供了抽象。通过 SCFW 固件开发可对 SCU 的功能进行进一步管理和使用。SCFW 负责管理硬件资源的所有权和访问权限。 SCFW 的资源管理功能通过创建分区的形式划分SOC资源,并控制主事务属性和外围设备访问权限。SCFW支持的功能有:

        (1)管理系统资源,例如 SOC外围设备(Resource),内存区域(Memory)和引脚(Pad)等。

        (2)允许将资源划分为与不同执行环境关联的不同所有权组。

        (3)允许所有者配置对资源的访问权限。

        (4)提供硬件强制隔离。

 

      3.1 硬件分区

        SCFW 中资源管理的主要概念之一是硬件分区,用于定义由 Resource,Pad 和 Memory组成的“逻辑 SOC” (即 Partition)。硬件分区具有以下特征,所有分区:

  • 可以在启动时创建和销毁,并在运行时动态创建,
  • 具有层次关系,每个分区都有一个父级( SCFW 无父级,分区号 0 ),
  • 分区内包含的资源: Resource(master and peripheral), Pad 和 Memory ,
  • 默认情况下,仅限于访问其拥有的资源,
  • 可以引导,复位和关闭电源,
  • 具有电源状态;可以转换到其他电源状态
  • 具有看门狗定时器,RTC警报和系统计数器警报。

                                                                              
                                              图3 i.MX8QM 硬件分区

      3.2 Resource

        资源代表 SOC 中的 IP 块。它们可以是主机,外围设备或两者。资源始终拥有一个(只有一个)分区。资源的访问控制包括两个主要机制:

  • API 访问权限 - SCFW API函数使用诸如调用分区和资源参数之类的信息来确定是否可以对资源执行操作。资源的所有权以及拥有分区和调用分区的层次关系用于确定操作是否得到授权。
  • 硬件保护 - SCFW 对基础保护硬件(在 i.MX8 中为 XRDC2 )进行编程,以控制哪些主机可以访问哪些外围设备。维护每个资源的访问权限,所有者可以为每个访问分区设置访问权限。默认情况下,只有同一个分区中的主机能访问同一分区中的外围设备。

        资源可以由所有者分配或移动到另一个分区(分配者分区将不再拥有这个资源)。主资源可以设置安全性,特权, SMMU 绕过和 streamID (SID)。外围资源可以设置访问权限。仅当拥有主资源的分区是安全的时,才能设置主资源的安全状态。

 

      3.3 Pad

        Pad 代表 SOC 的各个引脚。它们归分区所有。它们没有直接访问权限,因此访问操作类似于 Resource 的 SCFW API 的访问。

 

      3.4 Memory

        Memory 代表具有起始和结束地址的存储器块。定义后,它们将拥有类似于 Resource 的所有权和访问权限。它们支持两种访问保护, Memory 所有者(即分区)可以:

  • 分配 Memory 到另一个分区
  • 可以在现有拥有区域的范围内创建一个新的存储区域
  • 可以分割一个内存区域
  • 可以配置访问权限

        i.MX8 硬件将内存区域的数量限制为 16 个。

 

      3.5 范例

        刚开始,SCFW 创建三个硬件分区,分别是 Partition 0 :SCFW , Partition 1 : ATF 和 Partition 2 : SECO 。 SCFW 和 SECO 分区是安全且隔离的。 ATF 分区属性取决于 boot loader image 中的引导标志,通常也将是安全且隔离的。ATF 分区包含所有内存和几乎所有资源。其他两个分区仅拥有 SCFW 和 SECO 运行所需的最少资源。

        在 ATF 分区中运行的 ATF 软件会创建供 Linux 使用的分区。该分区通常是不安全的,并且不是隔离的。 ATF分区保留了Cortex-A CPU,MU0A,SC_R_SYSTEM 资源和少量内存。 所有其他资源都分配给 Linux 分区,在 Linux 分区中将运行 Linux 系统。

                                                 

*************************** Freescale i.MX8QM MEK board *************************** This file documents the Buildroot support for the NXP i.MX8QM MEK board. You will find a reference to the board on nxp.com: https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-8quadmax-multisensory-enablement-kit-mek:MCIMX8QM-CPU You can also find the get started guide here: https://www.nxp.com/document/guide/get-started-with-the-i.mx-8quadmax-mek:GS-iMX-8QM-MEK Build ===== First, configure Buildroot for the i.MX8QM MEK board: $ make freescale_imx8qmmek_defconfig Build all components: $ make You will find in output/images/ the following files: - ahab-container.img - bl31.bin - boot.vfat - fsl-imx8qm-mek.dtb - Image - imx8-boot-sd.bin - mkimg.commit - mx8qm-mek-scfw-tcm.bin - mx8qm-val-scfw-tcm.bin - mx8qm-a0-ddr4-scfw-tcm.bin - mx8qm-a0-mek-scfw-tcm.bin - mx8qm-a0-val-scfw-tcm.bin - mx8qm-ddr4-scfw-tcm.bin - rootfs.ext2 - rootfs.ext4 - rootfs.tar - sdcard.img - u-boot-atf.bin - u-boot.bin - u-boot-hash.bin Create a bootable SD card ========================= To determine the device associated to the SD card have a look in the /proc/partitions file: cat /proc/partitions Buildroot prepares a bootable "sdcard.img" image in the output/images/ directory, ready to be dumped on a SD card. Launch the following command as root: dd if=output/images/sdcard.img of=/dev/ *** WARNING! This will destroy all the card content. Use with care! *** For details about the medium image layout, see the definition in board/freescale/common/imx/genimage.cfg.template_imx8. Boot the i.MX8QM MEK board ========================== To boot your newly created system: - insert the SD card in the SD slot of the board; - Configure the boot switch as follows: SW2: OFF OFF ON ON OFF OFF - put a micro USB cable into the Debug USB Port and connect using a terminal emulator at 115200 bps, 8n1; - power on the b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值