分析实现zc706 AMP-linux和裸奔的注意点更新-参考xapp1078 latest info.

Posted 心之所向 极峰勇往

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分析实现zc706 AMP-linux和裸奔的注意点更新-参考xapp1078 latest info.相关的知识,希望对你有一定的参考价值。

在上一篇博文中,研究了xapp1078,它的目标平台是zc702。本文分析在zc706实现AMP时需要修改的关键点。参考资料:http://www.wiki.xilinx.com/XAPP1078+Latest+Information

1,zc706中的bootROM中,采用了V2版本。该版本使用了不同的WFE loop,CPU1被唤醒(中断、sev或者其他事件)后,会读取0xFFFFFFF0位置的数据与0xFFFFFF2C比较,如果与0xFFFFFF2C相同,则回到WFE状态(待机)。如果与0xFFFFFF2C不同,则CPU1跳转到与2C不同的新地址开始执行程序。因此,流程上首先将CPU1待执行程序的地址写入0xFFFFFFF0,然后中断或者sev唤醒CPU1。xapp1078中使用的是0xFFFFFF00,因此,需要将cpu1_bootvec.bin中的00改为2C。

2,CPU0的Linux kernel内核含有CPU1的初始化代码,需要修改代码使内核启动时,CPU1回到0xFFFFFF2C位置的WFE loop代码。

Edit the file arch/arm/mach-zynq/platsmp.c, search for the following line:  

ret=zynq_cpu1_start(virt_to_phys(secondary_startup));

and change the line to: ret = zynq_cpu1_start(0xFFFFFF2C);

注意:adi-linux-2016-r2内核中,相应位置的代码与参考信息不完全相同,如下所示:

static int zynq_boot_secondary(unsigned int cpu, struct task_struct *idle){

return zynq_cpun_start(virt_to_phys(secondary_startup), cpu);}

以上是关于分析实现zc706 AMP-linux和裸奔的注意点更新-参考xapp1078 latest info.的主要内容,如果未能解决你的问题,请参考以下文章

制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统

Zynq ZC706 传统方式移植Linux -- 编译kernel 文件系统 devicetree

ORACLE安全隐患系列四——Oracle Rootkits第一式“裸奔”

超360万台MySQL服务器在“裸奔”

Grafana 配置 API-KEY 实现免密 “裸奔”

(字典树)codeforces - 706D Vasiliy's Multiset