多核结构¶
设备上每个核心都可以根据用户需求运行不同的 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)。
多核加载¶
这里主要描述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 <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 介绍文档。