回答

收藏

创龙开发板|多核异构开发示例

创龙科技 创龙科技 1452 人阅读 | 0 人回复 | 2022-04-30


首先说一下什么是异构多核开发:
早期是单核CPU的运行,但是随着需求的增加,导致在性能上已经没有办法继续满足,所以出现在一颗芯片上封装多核个核心,协同工作的设计思路,并将其实现。

从硬件的角度说:从硬件的角度来看,多核设计分为两类。如果所有的核心或CPU具有相同的构架,那么定义为同构多核(homogeneous);如果架构不同,那么称为异构(heterogeneous)多核。今天我们在创龙的开发板上使用TI的芯片做一个简单的多核异构的开发。


  • 搭建环境
此处有个问题!官方给出的RTOS在Ubuntu18.04和Ubuntu20.04上安装会失败。所以此处选择官方所给的ubuntu14.04环境。
  • 案例
案例功能: ARM 端通过 MessageQ 组件以固定频率分别发送 LED 控制命令给 DSP/IPU

端, DSP/IPU 端根据命令改变 LED 状态。

  • 组件编译
将官方提供的代码例程放到ubuntu14.04环境下。



  • 进入ex02_messageq/src目录下,修改编译参数,将products.mak中的arm交叉编译工具链路径参数修改为实际的路径:


其他的参数保持和下面一直。
编译源码并安装。make -j8 && make install
完成后可以看到如下的可执行文件。


编写启动脚本
#!/bin/sh

if [ -f "server_dsp1.xe66" ];then
    path=$(cd "$(dirname "$0")"; pwd)"/server_dsp1.xe66"
    rm /lib/firmware/dra7-dsp1-fw.xe66
    ln -s $path /lib/firmware/dra7-dsp1-fw.xe66
    echo 40800000.dsp > /sys/bus/platform/drivers/omap-rproc/unbind
    echo 40800000.dsp > /sys/bus/platform/drivers/omap-rproc/bind
fi

if [ -f "server_dsp2.xe66" ];then
    path=$(cd "$(dirname "$0")"; pwd)"/server_dsp2.xe66"
    rm /lib/firmware/dra7-dsp2-fw.xe66
    ln -s $path /lib/firmware/dra7-dsp2-fw.xe66
    echo 41000000.dsp > /sys/bus/platform/drivers/omap-rproc/unbind
    echo 41000000.dsp > /sys/bus/platform/drivers/omap-rproc/bind
fi

if [ -f "server_ipu1.xem4" ];then
    path=$(cd "$(dirname "$0")"; pwd)"/server_ipu1.xem4"
    rm /lib/firmware/dra7-ipu1-fw.xem4
    ln -s $path /lib/firmware/dra7-ipu1-fw.xem4
    echo 58820000.ipu > /sys/bus/platform/drivers/omap-rproc/unbind
    echo 58820000.ipu > /sys/bus/platform/drivers/omap-rproc/bind
fi

if [ -f "server_ipu2.xem4" ];then
    path=$(cd "$(dirname "$0")"; pwd)"/server_ipu2.xem4"
    rm /lib/firmware/dra7-ipu2-fw.xem4
    ln -s $path /lib/firmware/dra7-ipu2-fw.xem4
    echo 55020000.ipu > /sys/bus/platform/drivers/omap-rproc/unbind
    echo 55020000.ipu > /sys/bus/platform/drivers/omap-rproc/bind
fi

将脚本和启动文件一起放进开发板。


启动运行脚本:


A15和DSP1通讯结果:
./app_host DSP1



A15和IPU1通讯结果:
./app_host IPU1


剩下的两个在此就不在赘述,方法都是一样的。由此我们可以看出,其实每个核心之间的工作状态都是通过MessageQ 组件进行通讯的,以此完成高效的运行。

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条