zynq-7000系列基于zynq-zed的AMP模式的实现(linux+bare-metal)
2017-03-04 10:27
2191 查看
zynq-7000系列基于zynq-zed的AMP模式的实现(linux+bare-metal)
作者:卢浩
时间:2017.3.4
转载请注明出处
这个实验要实现的是在zynq-zed上,cpu0运行linux系统,cpu1运行baremetal。原理上其实就是两个CPU共享DDR,比如zed上DDR有512M,我把384M分给CPU0-linux来使用,剩余的128M分给CPU1-BAREMETAL来使用。
首先建立vivado工程,工程文件就使用基于zedboard的example工程。编译生成bit文件,导出bit,然后launch sdk。这一步也就是说,AMP模式完全是软件上的实现,主要在SDK上做一些修改配置,与vivado工程并没有直接的联系。
下图是vivado工程:
打开sdk后,首先设置一下环境变量
选择
然后点击ok。
接下来选择
新建一个amp_fsbl,
如下图:
点击next,选择zynq_fsbl,然后点击finish。
选择modify this bsp setting。确认the
OS Version is
如下图:
接下来给CPU1创建一个BSP,
选择
输入工程名称
点击Finish
在
然后改变
点击OK。
如下图:
打开
保存。
接下来创建一个在CPU1上跑的例程
选择
输入工程名称
选择cpu1
选择
然后点击 Next
选择一个空的程序
然后点击finish。
如下图:
为app_cpu1导入 C 和 linkerscript 文件 . 右击
然后选择
点击Yes 来覆盖 lscript.ld。
如下图:
点击finish。
接下来就是制作BOOT.BIN文件了。
BOOT.BIN包含如下文件
amp_fsbl.elf,base_zynq_design_wrapper.bit,u-boot.elf,app_cpu1.elf。
其中记得修改uboot的DDR大小设置,
打开uboot源代码目录
为reg = <0x0 0x18000000>。
编译uboot,kernel,然后把所有制作完成的文件放进SD卡,启动linux。此时CPU0运行linux,CPU1运行baremetal。
附件下载链接
http://download.csdn.net/detail/luhao806/9770064
在linux下运行
./devmem 0xfffffff0 w 0x18000000
LED0会不断闪烁。
作者:卢浩
时间:2017.3.4
转载请注明出处
这个实验要实现的是在zynq-zed上,cpu0运行linux系统,cpu1运行baremetal。原理上其实就是两个CPU共享DDR,比如zed上DDR有512M,我把384M分给CPU0-linux来使用,剩余的128M分给CPU1-BAREMETAL来使用。
首先建立vivado工程,工程文件就使用基于zedboard的example工程。编译生成bit文件,导出bit,然后launch sdk。这一步也就是说,AMP模式完全是软件上的实现,主要在SDK上做一些修改配置,与vivado工程并没有直接的联系。
下图是vivado工程:
打开sdk后,首先设置一下环境变量
选择
Xilinx_Tools->Repositories.具体设置如下图,用户可以根据自己的实际路径来设置,
然后点击ok。
接下来选择
File->New->Application_Project
新建一个amp_fsbl,
如下图:
点击next,选择zynq_fsbl,然后点击finish。
选择modify this bsp setting。确认the
OS Version is
5.19
。
如下图:
接下来给CPU1创建一个BSP,
选择
File->New->Board_Support_Package
输入工程名称
app_cpu1_bsp,更改CPU选择
ps7_cortexa9_1.
点击Finish
在
Board Support Package Settings选择
Overview->drivers->ps7_cortexa9_1
然后改变
extra_compiler_flags值为
-g -DUSE_AMP=1
点击OK。
如下图:
打开
app_cpu1_bsp/ps7_cortexa9_1/libsrc/standalone_v5_19/src/xil-crt0.s删除以下行:
bl XTime_SetTime
保存。
接下来创建一个在CPU1上跑的例程
选择
File->New->Application_Project
输入工程名称
app_cpu1
选择cpu1
ps7_cortexa9_1
选择
Board Support Package使用
Use existing
app_cpu1_bsp
然后点击 Next
选择一个空的程序
Empty Application
然后点击finish。
如下图:
为app_cpu1导入 C 和 linkerscript 文件 . 右击
app_cpu1/src然后选择
Import,选择
General->File_System
然后选择
From directory, 选择
<your path>/src/cpu1_app/src,全选
app_cpu1.c和
lscript.ld然后finish.
点击Yes 来覆盖 lscript.ld。
如下图:
点击finish。
接下来就是制作BOOT.BIN文件了。
BOOT.BIN包含如下文件
amp_fsbl.elf,base_zynq_design_wrapper.bit,u-boot.elf,app_cpu1.elf。
其中记得修改uboot的DDR大小设置,
打开uboot源代码目录
u-boot/include/configs/zynq_zed.h,编辑
CONFIG_SYS_SDRAM_SIZE
大小为
(384 * 1024 * 1024)
,原本是(512*1024*1024)
修改内核dts文件关于DDR的设置和maxcpu的设置
在devicetree文件里,增加如下配置到环境变量 bootargs, mem=384M maxcpus=1。改变reg = <0x0 0x20000000>
为reg = <0x0 0x18000000>。
编译uboot,kernel,然后把所有制作完成的文件放进SD卡,启动linux。此时CPU0运行linux,CPU1运行baremetal。
附件下载链接
http://download.csdn.net/detail/luhao806/9770064
在linux下运行
./devmem 0xfffffff0 w 0x18000000
LED0会不断闪烁。
相关文章推荐
- zynq-7000系列基于zynq-zed的linux-kernel的编译
- zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的UART
- zynq-7000系列基于zynq-zed的linux-uboot的编译
- zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的GPIO
- zynq-7000系列基于zynq-zed的MAC->MAC 的实现(fixed-link)
- zynq-7000系列基于zynq-zed的vivado初步设计之使用jtag->uart(MDM)
- zynq-7000系列基于zynq-zed双核ARM-Cortex-A9性能的评估测试(多核的使用)
- zynq-7000系列基于7015的linux下IIC->RTC的扩展使用(DS3232)
- zynq-7000系列基于zynq-7015的vivado初步设计之linux下控制PL扩展的光以太网(1000BASE-X)
- zynq-7000系列基于zynq-zed的RGMII以太网控制器稳定性的问题
- ZYNQ平台AMP模式Linux+裸机(UCOS)实现
- zynq-7000系列基于7015的linux下 I2C-bus switch的扩展使用
- zynq-7000系列基于zynq-zed的ramdisk文件系统的修改
- Zynq AMP - Running Linux and Bare-Metal System on Both Zynq SoC Processors
- 《设计模式--基于C#的工程化实现及扩展》 Security Design Pattern 系列 1 公钥体系与分布式环境要求
- linux集群系列(一):LVS+Keepalived以DR模式实现负载均衡
- BlogEngine.Net架构与源代码分析系列part3:数据存储——基于Provider模式的实现
- 解读ASP.NET 5 & MVC6系列(12):基于Lamda表达式的强类型Routing实现
- 解读ASP.NET 5 & MVC6系列(12):基于Lamda表达式的强类型Routing实现
- BlogEngine.Net架构与源代码分析系列part3:数据存储——基于Provider模式的实现