Zynq UltraScale+ MPSoC-AMP(linux+裸机)

接着 Zynq UltraScale+ MPSoC-双核裸机AMP继续
平台工具:zcu106,vitis2020.2,petalinux2019.2

文章目录
  • 1.cpu1跑裸机
  • 2.cpu0跑linux
    • 2.1petalinux设置
    • 2.2 app
    • 2.3 设备树
  • 3.生成BOOT.BIN
  • 4.zcu106测试
  • 5.补充

1.cpu1跑裸机

参照Zynq UltraScale+ MPSoC-双核裸机AMP建立的工程进行修改。BSP中stdin与out修改为uart1,uart1给裸机用,uart0给linux用。
Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第1张图片
ddr空间裸机与linux也需要分开,此时cpu1的ddr空间为
Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第2张图片

2.cpu0跑linux

2.1petalinux设置

petalinux-config
  • 1

ddr空间默认是0x0~0x7fffffff,此空间给linux运行,与裸机ddr空间无重合,可以不改。

DTG setting–>Kernel Bootargs,关闭generate boot args automatically,选择自定义,maxcpu设置为1。
Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第3张图片
配置成clk_ignore_unused是阻止linux默认关闭未使用的外设时钟,uart1在linux中没有用到,会被系统关闭,从而导致裸机uart1无法使用。

2.2 app

创建hellolinux的工程

petalinux-create -t apps --template c --name hellolinux --enable
  • 1

如下
Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第4张图片
在<工程路径>/project-spec/meta-user/recipes-apps/hellolinux/files下生成hellolinux.c文件,对其进行修改如下
Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第5张图片
确认hellolinux被装载

petalinux-config -c rootfs
  • 1

apps选项如下,新程序被使用。

Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第6张图片

2.3 设备树

设备树路径
<工程路径>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
修改如下:

Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第7张图片
完成以上步骤重新编译一次

petalinux-build
  • 1

3.生成BOOT.BIN

用petalinux将cpu1.elf与fsbl.elf,u-boot.elf等其他文件一起打包,这种方式没有测试成功。
还是使用vitis进行打包,vitis->xilinx->create boot image
Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第8张图片
具体设置如下

Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第9张图片
Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第10张图片
Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第11张图片
其他默认

4.zcu106测试

使用zcu106开发板进行测试,BOOT.BIN,image.ub拷贝至sd卡,开机。
linux使用uart0,裸机使用uart1,开两个串口通讯工具同时接收两个cpu发的数据,如下
Zynq UltraScale+ MPSoC-AMP(linux+裸机)_第12张图片
测试成功。

5.补充

1.linux 下devmem得到错误“devmem:mmap:operation not permitted”
内核配置->Kernel hacking->Filter access to /dev/mem,此选项取消

你可能感兴趣的:(Zynq,UltraScale+,学习)