zynq mpsoc 运行linux + 2个R5裸机程序

参考:
ZYNQ UltraScale+ MPSoC OpenAMP 2019.1官网资料翻译
ZYNQ UltraScale+ MPSoC OpenAMP 2018.3官网资料翻译
官网资料

MPSOC运行两个R5裸机与运行单个裸机程序相似
Zynq UltraScale+ MPSoC 在linux系统运行R5 裸机程序 remoteproc - R5

设备树修改
设备树可以参考
kernel-source\Documentation\devicetree\bindings\remoteproc\xilinx,zynqmp-r5-remoteproc.yaml
和kernel-source\Documentation\devicetree\bindings\remoteproc\xilinx,zynqmp-r5-remoteproc.txt
两个文件
预留两块内存给R5_0 和R5_1两个裸机运行,预留共享内存方便不同核之间进行信息交互

	reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;
		rproc_0_reserved: rproc@0x42000000 {
 			no-map;
 			reg = <0x0 0x42000000 0x0 0x1000000>;
 		};
		rproc_1_reserved: rproc@0x44000000 {
 			no-map;
 			reg = <0x0 0x44000000 0x0 0x1000000>;
 		};

		share_memory: r5sh_mem@0x64000000 {
			no-map;
			reg = <0x0 0x64000000 0x0 0x1000000>;
		};
	};

分别配置
tcm_0a tcm_0b 引导R5_0
tcm_1a tcm_1b 引导R5_1
两个RPU寄存器地址范围分别为
reg = <0x0 0xFF9A0100 0x0 0x100>;
reg = <0x0 0xFF9A0200 0x0 0x100>;
注意size是0x100。参考文件

power-domain分别为7 和 8 参考zynqmp_r5_remoteproc.c文件中power-domain属性。
ret = of_property_read_u32(node, “power-domain”, &(*z_rproc)->pnode_id);
VERSAL_RPU_0,VERSAL_RPU_1宏定义已经定好。
power-domain = <0x7>;
power-domain = <0x8>;

如果R5_0 R5_1只是运行内存地址不同,tcm,reg,power-domain没有区分开,无法同时运行两个R5程序,只能同一时间运行一个裸机。


	/* IPI device */
	ipi_amp: ipi@ff340000 {
		compatible = "ipi_uio";
		reg = <0x0 0xff340000 0x0 0x1000>;
		interrupt-parent = <&gic>;
		interrupts = <0 29 4>;
	};
	tcm_0a@ffe00000 {
		no-map;
		reg = <0x0 0xffe00000 0x0 0x10000>;
		phandle = <0x40>;
		status = "okay";
		compatible = "mmio-sram";
	};
	tcm_0b@ffe20000 {
		no-map;
		reg = <0x0 0xffe20000 0x0 0x10000>;
		phandle = <0x41>;
		status = "okay";
		compatible = "mmio-sram";
	};
	tcm_1a@0xffe90000 {
		no-map;
		reg = <0x0 0xffe90000 0x0 0x10000>;
		phandle = <0x42>;
		status = "okay";
		compatible = "mmio-sram";
	};
	tcm_1b@0xffeb0000 {
		no-map;
		reg = <0x0 0xffeb0000 0x0 0x10000>;
		phandle = <0x43>;
		status = "okay";
		compatible = "mmio-sram";
	};
	zynqmp-rpu {
 		compatible = "xlnx,zynqmp-r5-remoteproc";
		xlnx,cluster-mode = <1>;
		ranges;
		reg = <0x0 0xFF9A0000 0x0 0x10000>; 
 		#address-cells = <2>;
 		#size-cells = <2>;		
 		r5_0: r5@0 {
			compatible = "xilinx,r5f";
			reg = <0x0 0xFF9A0100 0x0 0x100>;
			#address-cells = <2>;
 			#size-cells = <2>;
 			ranges;
			sram = <0x40 0x41>;
			memory-region = <&rproc_0_reserved>;
			power-domain = <0x7>;
 		}; 
 		r5_1: r5@1 {
			compatible = "xilinx,r5f";
			reg = <0x0 0xFF9A0200 0x0 0x100>;
			#address-cells = <2>;
 			#size-cells = <2>;
 			ranges;
			sram = <0x42 0x43>;
			memory-region = <&rproc_1_reserved>;
			power-domain = <0x8>;
 		};
	};

vitis裸机程序需要分别新建R5_0 和 R5_1的裸机程序,修改lscript.ld的ddr地址,分别对应rproc_0_reserved和rproc_1_reserved。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《01米联客2020版Zynq MPSOC SDK篇-20210527》是一篇关于2020版Zynq MPSOC SDK的技术文档。该文档主要介绍了使用Zynq MPSOC SDK开发软件的基本流程和步骤。 文档首先简要介绍了Zynq MPSOC SDK的特点和功能,指出该软件开发套件可以为Zynq MPSOC芯片提供全面的软件开发环境,并支持多种编程语言和开发工具。 接着,文档详细介绍了Zynq MPSOC SDK的安装和配置过程。首先需要准备好开发环境和相关工具,然后按照文档提供的步骤进行安装和配置。文档给出了详细的图文说明,使读者可以轻松地完成这些操作。 在安装和配置完成后,文档介绍了使用Zynq MPSOC SDK进行软件开发的基本流程。首先,需要创建一个新的工程,并选择适合的模板。然后,可以根据实际需求,添加所需的库文件和驱动程序。接下来,可以编写和调试代码,并使用MPSOC SDK提供的调试工具进行调试。 文档还介绍了Zynq MPSOC SDK的一些高级功能,如使用硬件抽象层(HAL)进行底层驱动开发,以及使用RTOS进行多线程开发等。这些功能可以帮助开发者更好地利用Zynq MPSOC芯片的强大性能和功能。 总的来说,《01米联客2020版Zynq MPSOC SDK篇-20210527》是一篇系统介绍了2020版Zynq MPSOC SDK的技术文档。通过阅读该文档,读者可以全面了解并掌握使用Zynq MPSOC SDK进行软件开发的方法和技巧,帮助他们更高效地进行嵌入式软件开发工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值