多核结构

设备上每个核心都可以根据用户需求运行不同的 OS。

  • A53UP: Huawei LiteOS

  • A73BL: Linux(big.LITTLE) -> Buildroot

  • DSP0: LiteOS-m

  • DSP1: Liteos-m

  • M7: Huawei LiteOS 或者不运行 OS

本节主要介绍A53UPA73BL同构和异构下的资源分配的区别以及示例介绍。

PS:

  1. A53UP 代表单核的 A53 那个 CPU; A73BL 代表双核 A73 和双核 A53 组成的四核 CPU (有些文档会描述为A53MP + A73MP意思相同)。

  2. 上述对应硬件资源的命名与文档一一对应,但是同步更新可能有延时请以 PDF 最新文档为最终标准。

多核结构

多核异构

多核异构主要指 A53UP 和 A73BL 上硬件资源分配上结构的差别。A53UP 可以分配如 Vi、Vo、Vdec、Hdmi 等等的一些硬件资源,主控 CPU A73BL 专注于 UI 和算法相关的工作。以下是异构的结构图:

_images/YG.png

官方提供了多核异构的固件和源码,烧录过程和正常烧录相同。固件只做示例展示,A73BL 上运行QT GLES的示例,通过GPU把图形绘制到Framebuff上,由 A53UP 控制 Vo、Vpss 和 Hdmi 把图形显示道 Hdmi 屏幕上。

PS:

  1. Hi3559av100 平台和把内存分为多个段,这些内存分别作用于不同的 OS、多核间通信和媒体处理。详细请参考《内存分配》一节。

  2. 除了官方提供的示例固件,在源码中 MPP sample 已经适配了 Huawei LiteOS,可以直接编译烧录。

  3. 异构模式下 A53UP Huawei LiteOS 在 Uboot 阶段加载(‘mmc read 0 0x45000000 0x1C5A800 0x3000; go_a53up 0x45000000)。

多核非异构

多核非异构中 A73BL 占据了所有硬件资源,而 A53UP 仅用于运行用户的应用程序。以下是非异构的结构图:

_images/FYG.png

多核非异构开发起来比较简单,官方非异构固件中只在 A73BL 上运行了 Buildroot + QT,A53UP 上没有运行 OS 需要的用户可以自行编译加载

PS:

  1. Hi3559av100 平台和把内存分为多个段,这些内存分别作用于不同的 OS、多核间通信和媒体处理。详细请参考《内存分配》一节。

  2. 非异构模式下 A53UP Huawei LiteOS 在进入系统后通过 load_liteos 命令进行加载

多核加载

这里主要描述A53UP的加载方式,其他的核心加载请参考文档。

  • 异构模式下需要在 uboot 下通过go_a53up进行加载。

    1. 编译好的 bin 文件烧写到对应分区。

    2. 通过 mmc read 从存储中读镜像文件到内存当中。

    3. 通过 go_a53up 0x45000000 (读入的内存地址)加载。

  • 同构模式下需要在进入系统之后加载。

    1. 根军《内存分配》一节计算出,加载 A53UP 的内存地址(即FCONFIG_LITEOS_TEXT_OFFSET之后,4G 版本默认 0x131000000)。

    2. 把编译好的镜像拷贝到设备上。

    3. load_liteos 0 0x131000000 ./xxx.bin 加载镜像。

PS:

  1. m7 的加载方式类似,具体请参考 PDF 文档。

  2. 这里所提及到的 bin 文件和镜像是指源码编译出来用于 A53UP 启动的 Huawei LiteOS 镜像。

  3. 参考《源码编译》一节,使用 ./build.sh liteos_a53 可以编译出镜像,镜像保存在 output/liteos 中。

多核通信

多核间消息的传递使用 IPCM,图像帧数据的传递可以只传图像帧数据的物理地址到其他的核。IPCM 是 Inter-Processor Communication Module(多核通信模块)的简称。用于实现 A73BL、A53UP、DSP、Cortex-M7 等相互之间的通信。为了方便用户的使用,在 IPCM 之上又实现了HiSysLink模块并且提供相应 API,用于管理消息和数据的传输。具体通信方式:

  • virt-tty 命令相当于开启一个虚拟串口,当 A53UP 的 Huawei LiteOS 加载成功后,/dev/virt-tty 会生成 a53 设备节点,运行 virt_tty a53 就能进入 Huawei LiteOS 了

~ # virt-tty 
Usage: virt_tty <device>
   eg. virt_tty m7
   <device> is the device node in /dev/virt-tty
  • sharefs 命令相当于把 A73BL 的文件夹共享到其他核中。当 A53UP 加载成功后,并且有初始化 sharefs 在执行 sharefs & 后,使用 virt-tty 进入 Huawei LiteOS 在根目录就会发现 /sharefs 挂载的目录了。sharefs 挂载的目录支持 open/read/write/close、cd/ls/stat 等文件操作。

  • HiSysLink ,使用 HiSysLink 请参考 API 介绍文档。