DR1 系列评估板 OpenAMP 双核 ARM 通信案例开发手册
前言本文主要介绍基于OpenAMP框架的双核ARM通信案例使用说明。开发环境Windows开发环境:Windows10 64bit开发工具:TD_5.9.1_DR1_2025.1_NL、FD_2025.1_SP1术语表为便于阅读,下表对文档出现的关键术语进行解释;对于广泛认同释义的术语,在此不做注释。
https://file1.elecfans.com/web3/M00/48/6F/wKgZO2lwfA2AZuL_AABc2ROKNvY517.png
注意事项案例位于产品资料“4-软件资料\Demo\amp_demos\”目录下,案例目录详细说明见下表。
https://file1.elecfans.com/web3/M00/48/6C/wKgZPGlwfBSAEz4oAAAkiTFmFlc648.png
1 OpenAMP使用说明OpenAMP是一个标准化的嵌入式多核框架,主要针对AMP应用场景提供RTOS和裸机程序必要的管理和通信接口。它兼容了Linux的Remoteproc和Rpmsg设计,为远程核心(Remoteprocessors)提供了软件组件,使得用户能够快速地搭建一套标准的核间交互应用场景。在安路多核异构系统中,APU0作为OpenAMP的Master端,运行Linux系统;APU1作为OpenAMP的Slave端,运行Baremetal或FreeRTOS程序。其中,APU0使用remoteproc(即Rproc)加载APU1程序,并对APU1进行配置。
https://file1.elecfans.com/web3/M00/48/6F/wKgZO2lwfBqAdkUNAAFKtcz85Dk007.png
目前TLDR1-EVM支持的OpenAMP场景组合如下表。
https://file1.elecfans.com/web3/M00/48/6F/wKgZO2lwfCGANVAlAAARdQzrtN4195.png
2 amp_rpmsg_echo案例2.1 案例功能案例功能:APU0使用RPMsg向APU1发送数据,APU1接收到数据后再使用RPMsg向APU0回传数据。APU0对回传的数据进行验证,并输出验证结果。2.2 TD工程说明请参考《Linux系统开发手册》的“FSBL TD工程说明”章节。2.2.1 IP核简介IP核开发相关资料可查阅产品资料“6-开发参考资料\Anlogic官方参考文档\”目录下文档,IP核配置参数如下。(1)ARM Processor SystemARM Processor System IP核心配置和FSBL工程基本一致,其他详细配置可参考位于产品资料“4-软件资料\Linux\FSBL\fsbl-[版本号]\”目录下的FSBL工程。2.3 FD工程说明Baremetal和FreeRTOS FD工程注意事项如下:(1)创建Platform Project工程时"Processor"选择"apu-1"。备注:生成Baremetal FD工程时,"Operating system"选择"standalone";生成FreeRTOS FD工程时,"Operating system"选择"freertos"。
https://file1.elecfans.com/web3/M00/48/6C/wKgZPGlwfCmAFUyWAANNcP1ClSg121.png
图 2
(2)生成Platform Project工程后双击"system.mss"后继续点击"Modify this BSP's Settings"修改相关配置。
https://file1.elecfans.com/web3/M00/48/6F/wKgZO2lwfceABKQeAADgFX3tewc744.png
图 3
(3)点击"library"选项勾选"LIB_METAL"和"LIB_OPENAMP",若不勾选这两个板级支持包将会无法正常创建OpenAMP应用。
https://file1.elecfans.com/web3/M00/48/6C/wKgZPGlwfc-AT8ioAABwi6ZkvCM637.png
图 4
(4)点击"platform"选项将"OUTPUT_DEV"中的Value值设置为"UART0",若不设置该选项将会导致主机和从机使用同一串口,导致冲突。
https://file1.elecfans.com/web3/M00/48/6F/wKgZO2lwfdiACqCSAACUGncCvsQ740.png
图 5
(5)创建Applicable project工程时直接选择"DEMO_OPENAMP_RPMSG_ECHO"应用。
https://file1.elecfans.com/web3/M00/48/6D/wKgZPGlwff-APwu0AADlLn6n6N8230.png
图 6
2.4案例测试请将产品资料“4-软件资料\Demo\amp_demos\amp_rpmsg_echo\linux_demo\dts\image”目录下的dtb.bin文件拷贝至评估板文件系统目录下。执行如下命令替换系统默认设备树文件,评估板重启生效。Target# mv dtb.bin /boot/dtb.binTarget# reboot
https://file1.elecfans.com/web3/M00/48/6F/wKgZO2lwfi2AcJmYAAAHguovPBA615.png
图 7
评估板上电启动后,在U-Boot倒计时结束之前长按"Ctrl + C"进入U-Boot命令行模式,执行如下命令,修改环境变量。U-Boot# setenv mmc_boot 'if mmc dev ${devnum}; then devtype=mmc; if test ${devnum} -eq 0; then setenv bootargs '"'"'console=ttyS1,115200n8 earlycon=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait maxcpus=1=1'"'"'; fi; if test ${devnum} -eq 1; then setenv bootargs '"'"'console=ttyS1,115200n8 earlycon=uart,mmio32,0xf8401000 loglevel=8 root=/dev/mmcblk1p2 rw rootfstype=ext4 rootwait maxcpus=1'"'"'; fi; ext4load mmc ${devnum}:2 ${kernel_addr_r} ${bootdir}/${kernel_image}; ext4load mmc ${devnum}:2 ${fdt_addr_r} ${bootdir}/${devicetree_image}; bootm ${kernel_addr_r} - ${fdt_addr_r}; run scan_dev_for_boot_part2; fi'U-Boot# saveenvU-Boot# reset
https://file1.elecfans.com/web3/M00/48/6D/wKgZPGlwfjqAegoEAABqGuP5TTI814.png
图 8
如需恢复U-Boot环境变量,在U-Boot命令行模式执行以下命令。U-Boot# env default -a -fU-Boot# saveenvU-Boot# reset
https://file1.elecfans.com/web3/M00/3E/CF/wKgZPGkmlrOAZQkFAAAKhGVVYnk073.png
图 9
进入评估板文件系统,执行如下命令,查看环境变量是否设置成功,确保只有一个核心被使用。Target# cat /proc/cpuinfo
https://file1.elecfans.com/web3/M00/48/6D/wKgZPGlwfw6ACYJGAAAZLAAU3MY274.png
图 10
将APU1 Baremetal或FreeRTOS可执行文件拷贝至评估板文件系统"/lib/firmware/"目录下(若该目录不存在,请新建),并执行如下命令加载APU1程序。本次以Baremeta程序进行演示,如需测试FreeRTOS程序请修改命令中对应的可执行文件名称。Target#mkdir -p /lib/firmwareTarget#cp amp_rpmsg_echo_baremetal_a35.elf /lib/firmware/
Target# echo amp_rpmsg_echo_baremetal_a35.elf > /sys/class/remoteproc/remoteproc0/firmwareTarget# echo start > /sys/class/remoteproc/remoteproc0/state
https://file1.elecfans.com/web3/M00/48/6D/wKgZPGlwfyOAHBxUAAA27Dr-NiE632.png
图 11
将产品资料“4-软件资料\Demo\amp_demos\amp_rpmsg_echo\linux_demo\bin”目录下的APU0应用程序可执行文件echo_test拷贝至评估板文件系统,执行如下命令,通过RPMsg实现与APU1进行通信。Target# chmod +x echo_testTarget# ./echo_test
https://file1.elecfans.com/web3/M00/48/6F/wKgZPGlwhYmAEUN0AAA2RCx0jSU445.png
图 12
https://file1.elecfans.com/web3/M00/48/6F/wKgZPGlwhZqAJcsFAAAuDnmenac245.png
图 13
执行如下命令,停止APU1程序。Target# echo stop > /sys/class/remoteproc/remoteproc0/state
https://file1.elecfans.com/web3/M00/48/6F/wKgZPGlwhaKAbKA9AAAPh_gAR0Y434.png
图 14
2.5案例编译2.5.1 设备树编译将案例"\linux_demo\dts\src\"目录下tldr1-evm.dts设备树拷贝至LinuxSDK源码"linux/arch/arm64/boot/dts/anlogic"目录下。
https://file1.elecfans.com/web3/M00/48/6F/wKgZPGlwhaiANQK_AABIklefRuk073.png
图 15
请按照《Linux系统开发手册》文档“LinuxSDK配置与编译”章节,重新编译LinuxSDK即可生成新的设备树镜像文件,位于LinuxSDK源码"device/output/anlogic_dr1m90/image"目录下。
https://file1.elecfans.com/web3/M00/48/72/wKgZO2lwha6AO_6uAABKSv5ebWg722.png
图 16
2.5.2 APU0应用程序编译请参考《Linux系统开发手册》文档编译LinuxSDK,并将APU0应用程序源码src目录拷贝至Ubuntu,然后在源码目录下执行如下命令修改Makefile文件。工具链路径请以实际情况进行修改。
https://file1.elecfans.com/web3/M00/48/72/wKgZO2lwhbaAEMvhAABWFXTLbbI193.png
图 17
修改内容如下:
CC = /home/tronlong/DR1/SDK_2025.1/toolchains/aarch64-linux/bin/aarch64-linux-gnu-gcc
https://file1.elecfans.com/web3/M00/48/6F/wKgZPGlwhb2AS5LWAACBjOj5Yl8526.png
图 18
修改完成保存后,在源码目录下执行如下命令进行编译。Host# make
https://file1.elecfans.com/web3/M00/48/6F/wKgZPGlwhc6AcKCpAACHJmrijuw268.png
图 19
2.5.3APU1 baremetal与FreeRTOS程序编译请参考《TD-FD工程编译与加载》进行工程编译。2.6关键代码2.6.1 linux_demo代码说明linux_demo程序的echo_test.c文件位于案例"linux_demo\src\"目录下。(1)加载RPMsg_char驱动。
https://file1.elecfans.com/web3/M00/48/6F/wKgZPGlwhkaAXyYkAAA5cLPPvMg978.png
图 20
(2)绑定RPMsg设备并获取RPMsg驱动。
https://file1.elecfans.com/web3/M00/48/6F/wKgZPGlwhk2AE_24AABsB9SJHEM264.png
图 21
(3)创建RPMsg端点。
https://file1.elecfans.com/web3/M00/48/72/wKgZO2lwhlSARXWyAAB2LiZkbPU976.png
图 22
(4)打开RPMsg驱动设备节点。
https://file1.elecfans.com/web3/M00/48/72/wKgZO2lwhluAVIO6AABF0NjP_DE363.png
图 23
(5)分配内存,进行数据收发测试。
https://file1.elecfans.com/web3/M00/48/72/wKgZO2lwho-APO1pAAFfDYzqHMk363.png
图 24
https://file1.elecfans.com/web3/M00/48/6F/wKgZPGlwho-Ab1H9AADvDhHcdwQ047.png
图 25
2.6.2 baremetal_demo代码说明baremetal_demo程序的rpmsg-echo.c文件位于案例"baremetal_demo\project\amp_rpmsg_echo_a35\amp_rpmsg_echo\src\system\generic\"目录下。(1)main()函数调用openamp_sample()函数进行系统初始化。
https://file1.elecfans.com/web3/M00/48/72/wKgZO2lwhp-ADeIcAAA66ecAWiY740.png
图 26
(2)openamp_sample()函数初始化系统、创建设备、调用app函数、释放设备。
https://file1.elecfans.com/web3/M00/48/72/wKgZO2lwhqaAUdIpAAEchp-IIEE899.png
图 27
https://file1.elecfans.com/web3/M00/48/72/wKgZO2lwhrCAAvoVAAAsrB6LXTI911.png
图 28
(3)创建RPMsg端点、进行消息处理和检测、最后销毁RPMsg端点。
https://file1.elecfans.com/web3/M00/48/72/wKgZO2lwhriAYc8tAAC1GFk9LIA347.png
图 29
2.6.3 freertos_demo代码说明由于FreeRTOS与Baremetal程序相似,freertos_demo代码说明可参考baremetal_demo代码说明小节。
页:
[1]