UG1186 OpenAMP实验 (Vivado 2018.3)

/ 3评 / 3

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

如何写一套OpenAMP程序:

不管学什么,我都习惯先体验下功能再学,但是我并没有指定的开发板,但是难不倒我的,不过第一步是启动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.

在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

测试结果:

  1. mingwei_huang说道:

    打扰下,请问你那边接受一些openamp的定制化外包吗?如有意麻烦联系13914933054,谢谢

发表回复

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