Zynq7000 Linux+Bare Rtos实现

前言

**环境准备
petalinux2019.1 viavdo2019.1

开始

CPU0:
Linux + uart0
正常建目录,然后划分空间,memory setting修改一下支持
在这里插入图片描述
启动参数修改
在这里插入图片描述
修改设备树

/include/ "system-conf.dtsi"
/ {
	amba {
		remoteproc0: remoteproc@0 {
			compatible = "xlnx,zynq_remoteproc";
			reg = < 0x10000000 0x0f000000 >;
			firmware = "firmware";
			vring0 = <15>;
			vring1 = <14>;
		};
	};

	reserved-memory {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;
		
		reserved: buffer@0x1f000000 {
			no-map;
			reg = <0x1f000000 0x01000000>;		
		};	
	};

	reserved-driver@0 {
		compatible = "xlnx,reserved-memory";
      		memory-region = <&reserved>;
   	};
};

&i2c0 {
    ssd1306:ssd1306@3c {
        compatible = "solomon,ssd1306fb-i2c";
        reg = <0x3c>;
        solomon,width = <128>;
        solomon,height = <64>;
        solomon,page-offset= <0>;
    };
};

&uart1 {
    status = "disabled";
};

第二个核的程序
CPU1:
修改fsbl增加

#define sev() __asm__("sev")

#define CPU1STARTADR  0xfffffff0

void LoadCpu1(void)
{
	fsbl_printf(DEBUG_GENERAL,"FSBL: writing startaddress for cpu1\n\r");
	Xil_Out32(CPU1STARTADR, 0x1f000000);
	dmb(); //waits until write has finished
	fsbl_printf(DEBUG_GENERAL,"FSBL: sending the SEV to wake up CPU1\n\r");
	sev();
}

然后再main里面直接调用

	HandoffAddress = LoadBootImage();

	fsbl_printf(DEBUG_INFO,"Handoff Address: 0x%08lx\r\n",HandoffAddress);
	LoadCpu1();

app程序
修改ddr起始地址
在这里插入图片描述
修改编译宏
在这里插入图片描述
增加-g -DUSE_AMP=1
修改uart
在这里插入图片描述
整合
在这里插入图片描述

启动

在这里插入图片描述
cpu1跑 rtos
cpu0 跑linux
linux查看一下cpuinfo:
在这里插入图片描述
查看iomem
在这里插入图片描述

END

下一步双核通信

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值