eefocus_3828748 发表于 2022-4-30 00:31:06

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


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

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



[*]搭建环境
此处有个问题!官方给出的RTOS在Ubuntu18.04和Ubuntu20.04上安装会失败。所以此处选择官方所给的ubuntu14.04环境。

[*]案例
案例功能: ARM 端通过 MessageQ 组件以固定频率分别发送 LED 控制命令给 DSP/IPU

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


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

https://q4cyam3uyq.feishu.cn/space/api/box/stream/download/asynccode/?code=MDI2MzllODgwMzBkMWIyOWUyZjg0ZDQxNTM3OWNjODRfeHdCeWN6Q2RQUUU4SjBXU3VnVldzVjZwVG5qcVdHaUVfVG9rZW46Ym94Y25aVExRME9QTXlvUlAybWt2aXh0VU5nXzE2NTEyNDk3NTI6MTY1MTI1MzM1Ml9WNA


[*] 进入ex02_messageq/src目录下,修改编译参数,将products.mak中的arm交叉编译工具链路径参数修改为实际的路径:
https://q4cyam3uyq.feishu.cn/space/api/box/stream/download/asynccode/?code=NTcxNGQ1NDU1ZTY4MTgxMmRiZWMwNDU2OWRkNWZkMWFfYzF2ZERCUGhwQ0xHOUh4VldRSlU4ZFBSamlVRjF6OUhfVG9rZW46Ym94Y244RkJldVhiTU1xWU8wY1Y0emtkQTliXzE2NTEyNDk3NTI6MTY1MTI1MzM1Ml9WNA

其他的参数保持和下面一直。
编译源码并安装。make -j8 && make install
完成后可以看到如下的可执行文件。
https://q4cyam3uyq.feishu.cn/space/api/box/stream/download/asynccode/?code=ZDhmZjY2NWE3NWRkMzI4Njg3MTEzODVkMmYxMzAxYTZfR3ZwbXU0N0RycVQyYkZ6MnVQYmQ5emNPcFFVVkxhWUhfVG9rZW46Ym94Y25ieXhaRHl4cnZnV3N0TlhHVXJVbkplXzE2NTEyNDk3NTI6MTY1MTI1MzM1Ml9WNA

编写启动脚本
#!/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

将脚本和启动文件一起放进开发板。
https://q4cyam3uyq.feishu.cn/space/api/box/stream/download/asynccode/?code=NDgwMGYyZGIyNWI0ODg4MDJiZDlmNDc2ZTUyZmE2NzRfMGpDdTdWZ1pXajBCQUx5MzZYZ2ZJMGRROG1LWGVScTZfVG9rZW46Ym94Y253ZmtKSXZTV0Q5ZzBrY28yM056b1RnXzE2NTEyNDk3NTI6MTY1MTI1MzM1Ml9WNA

启动运行脚本:
https://q4cyam3uyq.feishu.cn/space/api/box/stream/download/asynccode/?code=OGY5OGIyOWYwY2JlNjBkNTc3ZWI4NDRhOGRhODA0ZGRfd2o4SjJVNnZoRVBLOGtJN2xLQmVYMDB0ZFVqWW9HcEVfVG9rZW46Ym94Y25ITVZQRVBaTWI5OFpDa3EzNGJ3ZDVjXzE2NTEyNDk3NTI6MTY1MTI1MzM1Ml9WNA

A15和DSP1通讯结果:
./app_host DSP1
https://q4cyam3uyq.feishu.cn/space/api/box/stream/download/asynccode/?code=ZGZhMGUxMjVlZDU2NDg1YmI5YzFmMDIxNWRmNWY3NzFfNzZNc3czOW9ZTGd6SGpYRG5GMnBiNmoxVEVkS0dWR2pfVG9rZW46Ym94Y24wV1VoYW5kZUVOenVWY0pzdDdUdk5jXzE2NTEyNDk3NTI6MTY1MTI1MzM1Ml9WNA


A15和IPU1通讯结果:
./app_host IPU1
https://q4cyam3uyq.feishu.cn/space/api/box/stream/download/asynccode/?code=OWFlNTAzZjYyZTdlZDBmNTQxNDg4Y2RkMDU4M2U4NmJfQ09ERENtN28xSHR4SjRQaURpZHo4M3pzTm81NmsxTmFfVG9rZW46Ym94Y25LV2ZTRlJxOTQ3UGZMZklWd0RBZ2diXzE2NTEyNDk3NTI6MTY1MTI1MzM1Ml9WNA

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

页: [1]
查看完整版本: 创龙开发板|多核异构开发示例

Baidu
map