2

UG1186 OpenAMP实验 (Vivado 2018.3)

 2 years ago
source link: https://www.taterli.com/8718/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

UG1186 OpenAMP实验 (Vivado 2018.3)

  • TaterLi
  • 2022年3月23日2022年3月23日

RPMsg,VirtIO和remoteproc是Linux上提供的通信方法,OpenAMP是在裸机或者各种RTOS里面提供的,在Vivado不用说就是FreeRTOS了,实际通信机制,可以不经由内核用户空间.

如何写一套OpenAMP程序:

  • 准备固件资源表(Firmware Resource Table).
  • 创建Remoteproc结构.
  • 定义RPMsg回调函数.
  • 创建RPMsg Virtio设备.
  • 创建RPMsg端点,并绑定回调函数.
  • 使用rpmsg_send发送数据.
  • 各种发送接收生生不息.

不管学什么,我都习惯先体验下功能再学,但是我并没有指定的开发板,但是难不倒我的,不过第一步是启动Vivado,毕竟需要修改他的工程并生成合适的SDK,找到自己最接近的硬件开始,比如我选ZC702,比如他4个LED位置与我是不一样的,也要在xdc约束中修改,他所用内存与我不同,也要修改,就连器件他是7020我是7010也要修改.

根据手册创建例子,并根据手册上说的,决定是否使用WITH_PROXY.

由于我们用的是双A9,因此也要添加定义-DUSE_AMP=1.

最后我还修改了一下ld文件,毕竟我内存没那么大.

先把创建一份以BSP为样本的,然后继续修改.

petalinux-create -t project --template zynq -n tl-7010
cp ~/Downloads/xilinx-zc702-2018.3/hardware/xilinx-zc702-2018.3/xilinx-zc702-2018.3.sdk/system.hdf .
petalinux-config --get-hw-description=.

然后进入后创建一个app.

taterli@taterli-VirtualBox:~/tl-7010/components$ mkdir apps
taterli@taterli-VirtualBox:~/tl-7010/components$ cd apps/
taterli@taterli-VirtualBox:~/tl-7010/components/apps$ 
taterli@taterli-VirtualBox:~/tl-7010/components/apps$ petalinux-create -t apps --template install -n echo-test --enable
INFO: Create apps: echo-test
INFO: New apps successfully created in /home/taterli/tl-7010/project-spec/meta-user/recipes-apps/echo-test
INFO: Enabling created component...
INFO: sourcing bitbake

把编译的elf复制到配方目录里.

taterli@taterli-VirtualBox:~/tl-7010/project-spec/meta-user/recipes-apps/echo-test/files$ cp ~/Downloads/xilinx-zc702-2018.3/hardware/xilinx-zc702-2018.3/xilinx-zc702-2018.3.sdk/echo-test/Debug/echo-test.elf .

返回到上级目录修改配方配置bb文件,参考修改.

#
# This file is the echo-test recipe.
#

SUMMARY = "Simple echo-test application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://echo-test.elf \
	"

S = "${WORKDIR}"

INSANE_SKIP_${PN} = "arch"

do_install() {
	install -d ${D}/lib/firmware
	install -m 0644 ${S}/echo-test.elf ${D}/lib/firmware/echo-test.elf
}

FILES_${PN} = "/lib/firmware/echo-test.elf"

打开rpmsg支持:

petalinux-config -c kernel
Device Drivers --->
Remoteproc drivers --->
<M> Support ZYNQ remoteproc

打包rootfs上的支持.

petalinux-config -c rootfs
Filesystem Packages --->
-> Petalinux Package Groups
-> packagegroup-petalinux-openamp

如果并不想自己编译更多例子也可以直接在rootfs配置中包含.

Filesystem Packages --->
misc --->
openamp-fw-echo-testd --->
[*] openamp-fw-echo-testd
openamp-fw-mat-muld --->
[*] openamp-fw-mat-muld
openamp-fw-rpc-demo --->
[*] openamp-fw-rpc-demo

BSP包含了简单的例子.

路径:/home/taterli/Downloads/xilinx-zc702-2018.3/project-spec/meta-user/recipes-bsp/device-tree/files/openamp.dtsi

我们乞丐板只有512M内存,因此也要稍微修改.

/ {
	reserved-memory {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;
		rproc_0_reserved: rproc@1e000000 {
			no-map;
			reg =  <0x1e000000 0x01000000>;
		};
	};

	amba {
		elf_ddr_0: ddr@0 {
			compatible = "mmio-sram";
			reg = <0x1e000000 0x400000>;
		};
	};
	remoteproc0: remoteproc@0 {
		compatible = "xlnx,zynq_remoteproc";
		firmware = "firmware";
		vring0 = <15>;
		vring1 = <14>;
		srams = <&elf_ddr_0>;
	};
};

万事俱备,开始构建:

petalinux-build

吐槽:真心只有这个时候能体验到多核CPU的威力,平时全都是打酱油,特别是Vivado综合时候根本就喂不饱CPU.

image-29.png

在5950X的加持下,不到2分钟就完成了编译,编译结果在image/linux目录内,至于怎么下载应该不用多说吧,然后执行测试一下.

modprobe zynq_remoteproc
echo echo-test.elf > /sys/class/remoteproc/remoteproc0/firmware
echo start > /sys/class/remoteproc/remoteproc0/state
modprobe rpmsg_user_dev_driver
echo_test

测试结果:

image-30.png

发表评论 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

评论 *

显示名称 *

电子邮箱地址 *

网站地址

通过邮件订阅评论


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK