接着 Zynq UltraScale+ MPSoC-双核裸机AMP继续
平台工具:zcu106,vitis2020.2,petalinux2019.2
1.cpu1跑裸机
参照Zynq UltraScale+ MPSoC-双核裸机AMP建立的工程进行修改。BSP中stdin与out修改为uart1,uart1给裸机用,uart0给linux用。
ddr空间裸机与linux也需要分开,此时cpu1的ddr空间为
2.cpu0跑linux
2.1petalinux设置
petalinux-config
ddr空间默认是0x0~0x7fffffff,此空间给linux运行,与裸机ddr空间无重合,可以不改。
DTG setting–>Kernel Bootargs,关闭generate boot args automatically,选择自定义,maxcpu设置为1。
配置成clk_ignore_unused是阻止linux默认关闭未使用的外设时钟,uart1在linux中没有用到,会被系统关闭,从而导致裸机uart1无法使用。
2.2 app
创建hellolinux的工程
petalinux-create -t apps --template c --name hellolinux --enable
如下
在<工程路径>/project-spec/meta-user/recipes-apps/hellolinux/files下生成hellolinux.c文件,对其进行修改如下
确认hellolinux被装载
petalinux-config -c rootfs
apps选项如下,新程序被使用。
2.3 设备树
设备树路径
<工程路径>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
修改如下:
完成以上步骤重新编译一次
petalinux-build
3.生成BOOT.BIN
用petalinux将cpu1.elf与fsbl.elf,u-boot.elf等其他文件一起打包,这种方式没有测试成功。
还是使用vitis进行打包,vitis->xilinx->create boot image
具体设置如下
其他默认
4.zcu106测试
使用zcu106开发板进行测试,BOOT.BIN,image.ub拷贝至sd卡,开机。
linux使用uart0,裸机使用uart1,开两个串口通讯工具同时接收两个cpu发的数据,如下
测试成功。
5.补充
1.linux 下devmem得到错误“devmem:mmap:operation not permitted”
内核配置->Kernel hacking->Filter access to /dev/mem,此选项取消