我正在努力扩展在具有双ARM A9的Xilinx Zynq Soc上运行的Linux的暂停和恢复功能,使用使用3.17内核的Xilinx 2014.4 PetaLinux发行版。
当前分发支持暂停和恢复,而不会切断处理器的电源。我正在努力扩展支持,包括在DDR内存处于自刷新模式时移除处理器的电源,然后执行热启动并将第一阶段引导加载程序(FSBL)手动控制返回到正确位置的Linux内核继续恢复过程。
我正在寻找第一阶段引导加载程序调用的例程。我认为它可能是arch / arm / kernel / sleep.S中的cpu_resume,但我不确定并且想要验证它是正确的调用例程。
我在暂停和热启动后从FSBL跳转到此,并在调试器中单步执行代码。它已经超过了重新打开MMU的程度,但调试器在该例程结束时失去了连接。
为了查看这是否是正确的入口点,我已经修改了arch / arm / mach-zynq.c中的pm.c,以便在恢复发生后立即调用soft_restart(virt_to_phys(cpu_resume))处理器没有断电但被中断唤醒的地方。 soft_restart例程关闭MMU并清除缓存,我正在使用它来使处理器处于类似状态,如果它们已经重新上电,它们将处于什么状态。这个测试主要起作用,并且比从FSBL调用cpu_resume更进一步。期望在缓存和MMU关闭的情况下调用cpu_resume例程。
我已阅读了Documentation / power / devices.txt文件,以及我能找到的任何其他内容。
我已经完成了一个版本,它使用无操作系统流程将DDR置于自刷新状态并重新启动处理器,并在硬件上进行测试。该流程不使用虚拟内存。
提前谢谢你,
约翰