OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 72|回复: 3
打印 上一主题 下一主题

[XILINX] zynq7000在amp模式下,怎么构建CPU0运行linux,CPU1运行裸机的工程?

[复制链接]

5

主题

37

帖子

0

精华

高级会员

Rank: 4

积分
633
金钱
633
注册时间
2016-4-10
在线时间
106 小时
跳转到指定楼层
楼主
发表于 4 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1金钱
zynq7000在amp模式下,怎么构建CPU0运行linux,CPU1运行裸机的工程?  我的用的是ZYNQ 7100 7z100开发板。我使用petalinux构建linux,vitis构建cpu1的裸机工程代码。linux是可以正常运行了,但是一直唤不醒cpu1,cpu1跑不起来。

回复

使用道具 举报

14

主题

256

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7244
金钱
7244
注册时间
2016-12-19
在线时间
957 小时
2#
发表于 昨天 13:00 | 只看该作者
为什么不问AI
回复

使用道具 举报

0

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
600
金钱
600
注册时间
2026-1-29
在线时间
43 小时
3#
发表于 昨天 13:19 | 只看该作者
以下是针对ZYNQ 7000系列(如7z100开发板)在AMP模式下构建CPU0运行Linux、CPU1运行裸机工程的完整解决方案:

一、关键步骤与配置
硬件配置与内存划分

保留内存区域:需在设备树中为CPU1的裸机程序预留DDR空间,例如在system-user.dtsi中添加以下内容,防止Linux系统覆盖该区域:

reserved-memory {
    #address-cells = <1>;
    #size-cells = <1>;
    ranges;
    reserved: buffer@0x1e000000 {
        no-map;
        reg = <0x1e000000 0x02000000>; // 32MB 预留区域
    };
};

      
修改FSBL地址:在FSBL阶段需设置CPU1的启动地址为预留区域起始地址(如0x1e000000),可通过修改FSBL的CPUSTARTMEM宏实现。
软件配置与编译

Petalinux配置:
禁止Linux使用多核:通过 petalinux-config 进入内核配置界面,手动添加启动参数 maxcpus=1,确保Linux仅运行于CPU0。
修改设备树内存范围:调整Linux可用内存为总内存减去预留区域(如总内存512MB时,设置mem=384M)。
裸机工程配置:
BSP设置:在Vitis中为CPU1的裸机工程启用AMP支持,添加编译标志-DUSE_AMP=1,并禁用时间初始化代码(如删除xil-crt0.s中的bl XTime_SetTime)。
链接脚本:确保CPU1程序的链接地址与预留内存区域一致(如0x1e000000)。
启动流程与BOOT.BIN生成

BOOT.BIN组成:包含FSBL(CPU0)、FPGA比特流(如有)、U-Boot(CPU0的Linux引导程序)、CPU1裸机程序(app_cpu1.elf)。
打包工具:使用Vitis或SDK的Create Boot Image工具按顺序合并各组件,注意CPU1程序的地址需与预留内存匹配。
二、常见问题与调试方法
CPU1无法启动

检查设备树保留内存:确认reserved-memory节点已正确生成,且未被Linux占用。
验证启动地址:通过JTAG调试或打印FSBL初始化信息,确认CPU1的启动地址为0x1e000000。
查看串口输出:检查Linux启动日志中是否有remoteproc相关错误(如未找到CPU1的ELF文件)。
核间通信测试

共享内存验证:编写简单测试程序,让CPU1向预留内存写入数据(如递增计数器),Linux端通过/dev/mem读取并验证。
LED控制示例:在CPU1的裸机程序中控制LED闪烁,同时在Linux中通过echo 1 > /sys/class/leds/...触发,观察硬件响应。
三、参考资料与工具链适配
官方文档:Xilinx应用笔记XAPP1078(AMP模式下Linux+裸机)和UG1186(OpenAMP指南)提供了基础框架。

社区资源:论坛讨论(如Xilinx Forum)中关于maxcpus=1的配置细节可解决Linux抢占CPU1的问题。

总的来说,通过以上步骤,可实现ZYNQ 7000的AMP双核独立运行。若问题仍未解决,建议逐步排查硬件初始化(如DDR配置)、编译器兼容性(如不同版本的Petalinux工具链)及电源管理模块(如禁用不必要的外设以减少干扰)。
回复

使用道具 举报

5

主题

37

帖子

0

精华

高级会员

Rank: 4

积分
633
金钱
633
注册时间
2016-4-10
在线时间
106 小时
4#
 楼主| 发表于 昨天 17:49 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-8-18 14:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表