Xen ARM with Virtualization Extensions/Vexpress
- If you are trying to run Xen on a Versatile Express Cortex A15 machine, you might want to copy xen (the Xen binary output, xen.git/xen/xen) and the Linux Dom0 zImage to the SOFTWARE directory and add the two following stanzas to your images.txt file:
NOR3UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE NOR3ADDRESS: 0c000000 ;Image Flash Address NOR3FILE: \SOFTWARE\Xen\xen ;Image File Name NOR3LOAD: 80200000 ;Image Load Address NOR3ENTRY: 80200000 ;Image Entry Point NOR4UPDATE: AUTO ;IMAGE UPDATE:NONE/AUTO/FORCE NOR4ADDRESS: 000c0000 ;Image Flash Address NOR4FILE: \SOFTWARE\Xen\zImage ;Image File Name NOR4LOAD: 80008000 ;Image Load Address NOR4ENTRY: 80008000 ;Image Entry Point
Note that before commit 47d1a51 (xen: arm: make zImage the default target which we install) it was necessary to use xen.git/xen/xen.bin for NOR3FILE instead of xen.git/xen/xen.
- We recommend disabling the A7 cpus by editing the board.txt file under the SITE directory corresponding to your Cortex A15 daughterboard:
;SCC: 0x018 0x1FFFFFFF ;Reset control (CA7s running, CA15s running) - uncomment this for normal operation ;SCC: 0x018 0x1FFFF000 ;Reset control - (CA7s running, CA15s reset) - uncomment this to hold A15 cluster in reset SCC: 0x018 0x00001FFF ;Reset control - (CA7s reset, CA15s running) - uncomment this to hold A7 cluster in
- With recent firmware (newer than boot monitor V5.1.9), the Versatile Express can use multiple ways to bring up secondary cpus. Xen only supports sys_flags bring up. To select this mode, you need to set the bit of SCC: 0x700 to 0. For instance:
** Before: SCC: 0x700 0x0032F003 ** After: SCC: 0x700 0x0032E003
- The address of the Dom0 kernel in Flash at the moment is not configurable, it is defined as KERNEL_FLASH_ADDRESS in Xen. On a Versatile Express machine this address can be determined by executing flash list images from the boot manager. You'll have to manually change it.
- In order to make your Dom0 boot sequence faster, you might want to consider passing init=/bin/bash to your kernel and then manually executing a minimal init script like this.