多核结构
设备上每个核心都可以根据用户需求运行不同的 OS。
-
A53UP: Huawei LiteOS
-
A73BL: Linux(big.LITTLE) -> Buildroot
-
DSP0: LiteOS-m
-
DSP1: Liteos-m
-
M7: Huawei LiteOS 或者不运行 OS
本节主要介绍A53UP和A73BL同构和异构下的资源分配的区别以及示例介绍。
PS:
-
A53UP 代表单核的 A53 那个 CPU; A73BL 代表双核 A73 和双核 A53 组成的四核 CPU (有些文档会描述为
A53MP + A73MP意思相同)。 -
上述对应硬件资源的命名与文档一一对应,但是同步更新可能有延时请以 PDF 最新文档为最终标准。
多核结构
多核异构
多核异构主要指 A53UP 和 A73BL 上硬件资源分配上结构的差别。A53UP 可以分配如 Vi、Vo、Vdec、Hdmi 等等的一些硬件资源,主控 CPU A73BL 专注于 UI 和算法相关的工作。以下是异构的结构图:

官方提供了多核异构的固件和源码,烧录过程和正常烧录相同。固件只做示例展示,A73BL 上运行QT GLES的示例,通过GPU把图形绘制到Framebuff上,由 A53UP 控制 Vo、Vpss 和 Hdmi 把图形显示道 Hdmi 屏幕上。
PS:
-
Hi3559av100 平台和把内存分为多个段,这些内存分别作用于不同的 OS、多核间通信和媒体处理。详细请参考《内存分配》一节。
-
除了官方提供的示例固件,在源码中 MPP sample 已经适配了 Huawei LiteOS,可以直接编译烧录。
-
异构模式下 A53UP Huawei LiteOS 在 Uboot 阶段加载(‘mmc read 0 0x45000000 0x1C5A800 0x3000; go_a53up 0x45000000)。
多核非异构
多核非异构中 A73BL 占据了所有硬件资源,而 A53UP 仅用于运行用户的应用程序。以下是非异构的结构图:

多核非异构开发起来比较简单,官方非异构固件中只在 A73BL 上运行了 Buildroot + QT,A53UP 上没有运行 OS 需要的用户可以自行编译加载
PS:
-
Hi3559av100 平台和把内存分为多个段,这些内存分别作用于不同的 OS、多核间通信和媒体处理。详细请参考《内存分配》一节。
-
非异构模式下 A53UP Huawei LiteOS 在进入系统后通过 load_liteos 命令进行加载
多核加载
这里主要描述A53UP的加载方式,其他的核心加载请参考文档。
-
异构模式下需要在 uboot 下通过
go_a53up进行加载。-
编译好的 bin 文件烧写到对应分区。
-
通过 mmc read 从存储中读镜像文件到内存当中。
-
通过 go_a53up 0x45000000 (读入的内存地址)加载。
-
-
同构模式下需要在进入系统之后加载。
-
根军《内存分配》一节计算出,加载 A53UP 的内存地址(即
FCONFIG_LITEOS_TEXT_OFFSET之后,4G 版本默认 0x131000000)。 -
把编译好的镜像拷贝到设备上。
-
load_liteos 0 0x131000000 ./xxx.bin 加载镜像。
-
PS:
-
m7 的加载方式类似,具体请参考 PDF 文档。
-
这里所提及到的
bin文件和镜像是指源码编译出来用于 A53UP 启动的Huawei LiteOS镜像。 -
参考《源码编译》一节,使用
./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
eg. virt_tty m7 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 介绍文档。