Overview

The guide below shows you how to build Xen, boot Xen and then run some example configurations on ZU+. The steps below use PetaLinux and assume you have some knowledge of using PetaLinux.
Before starting you need to create a PetaLinux project. It is assumed that a default PetaLinux reference design is used unchanged in these instructions.
The default PetaLinux configuration has images ready to do boot Xen, these are the pre-built images. You can use those or you can manually edit receipes and build Xen yourself. The pre-built images can be found in this directory (inside a PetaLinux project) pre-built/linux/images/ and prefixed with "xen-". You can either use the pre-builts or follow the next section to configure and build Xen yourself. If you are using the pre-builts you can skip to the booting Xen section for your release version.

Configuring and building XEN from source using PetaLinux 2016.4

To build the XEN tools and XEN hypervisor you will need to edit the following two files:
$ vim project-spec/meta-plnx-generated/recipes-core/images/petalinux-user-image.bb
Remove or comment out '#' the following line
EXTRA_USERS_PARAMS = "usermod -P root root;"*
The second file that needs to be edited is:
$ vim build/conf/local.conf
Add the extra line at the end:
EXTRA_IMAGE_FEATURES = "debug-tweaks"
NOTE: You might need to have already run the build command below to be able to edit this file.

$ petalinux-build -c xen-image-minimal
NOTE: As of PetaLinux 2016.4 the petalinux-build command no longer builds Xen by default, so the above command is required

You have to manually copy the xen-qemu.dtb from the pre-built directory:
$ cp ./pre-built/linux/images/xen-qemu.dtb ./images/linux/

You will also need to manually copy the recently built Xen images
$ cp build/tmp/deploy/images/plnx_aarch64/xen.ub ./images/linux/
$ cp build/tmp/deploy/images/plnx_aarch64/Image ./images/linux/xen-Image
$ cp build/tmp/deploy/images/plnx_aarch64/xen-image-minimal-plnx_aarch64.cpio.gz.u-boot ./images/linux/xen-rootfs.cpio.gz.u-boot

NOTE: If you re-build anything else after Xen the following images will be over-written

TFTP Booting Xen and Dom0 2016.4

Run Xen dom0 on QEMU:

To use the prebuilt Xen run:
$ petalinux-boot --qemu --prebuilt 2 --qemu-args "-net nic -net nic -net nic -net nic -net user,tftp=pre-built/linux/images"
To use the Xen you built yourself run:
$ petalinux-boot --qemu --u-boot

Run Xen dom0 on HW:

To use the prebuilt Xen on hardware:
$ petalinux-boot --jtag --prebuilt 2
To use the Xen you built yourself run:
$ petalinux-boot --jtag --u-boot

You should eventually see something similar to this, when you do press any key to stop the autoboot.
Hit any key to stop autoboot:

If u-boot wasn't able to get an IP address from the DHCP server you may need to manually set the serverip (it's typically 10.0.2.2 for QEMU):
$ setenv serverip 10.0.2.2

Now to download and boot Xen, if running on QEMU, use xen-qemu.dtb otherwise use xen.dtb. Example:
$ tftpb 4000000 xen-qemu.dtb
$ tftpb 0x80000 xen-Image
$ tftpb 6000000 xen.ub
$ tftpb 0x1000000 xen-rootfs.cpio.gz.u-boot
$ bootm 6000000 0x1000000 4000000
Below is an example of what you will see.
ZynqMP> tftpb 4000000 xen-qemu.dtb
Using ethernet@ff0e0000 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'xen-qemu.dtb'.
Load address: 0x4000000
Loading: ######
    4 MiB/s
done
Bytes transferred = 29417 (72e9 hex)
ZynqMP> tftpb 0x80000 xen-Image
Using ethernet@ff0e0000 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'xen-Image'.
Load address: 0x80000
Loading: #################################################################
    #################################################################
    #################################################################
 
[...]
 
    #################################################################
    ##############################################################
    5.4 MiB/s
done
Bytes transferred = 12297216 (bba400 hex)
ZynqMP> tftpb 6000000 xen.ub
Using ethernet@ff0e0000 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'xen.ub'.
Load address: 0x6000000
Loading: #################################################################
    #################################################################
    ############
    4.2 MiB/s
done
Bytes transferred = 722528 (b0660 hex)
ZynqMP> tftpb 0x1000000 xen-rootfs.cpio.gz.u-boot
Using ethernet@ff0e0000 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'xen-rootfs.cpio.gz.u-boot'.
Load address: 0x1000000
Loading: #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
 
[...]
 
    #################################################################
    #################################################################
    #####
    5.2 MiB/s
done
Bytes transferred = 36571940 (22e0b24 hex)
ZynqMP> bootm 6000000 0x1000000 4000000
## Booting kernel from Legacy Image at 06000000 ...
   Image Name:
   Image Type:   AArch64 Linux Kernel Image (uncompressed)
   Data Size:    722464 Bytes = 705.5 KiB
   Load Address: 05000000
   Entry Point:  05000000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 01000000 ...
   Image Name:   xen-image-minimal-plnx_aarch64-2
   Image Type:   AArch64 Linux RAMDisk Image (gzip compressed)
   Data Size:    36571876 Bytes = 34.9 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 04000000
   Booting using the fdt blob at 0x4000000
   Loading Kernel Image ... OK
   Loading Ramdisk to 05d1f000, end 07fffae4 ... OK
   Loading Device Tree to 0000000005d14000, end 0000000005d1e2e8 ... OK
 
Starting kernel ...
 
[...]
 
 
Starting OpenBSD Secure Shell server: sshd
  generating ssh RSA key...
  generating ssh ECDSA key...
  generating ssh DSA key...
  generating ssh ED25519 key...
done.
Starting syslogd/klogd: done
Starting /usr/sbin/xenstored...
Setting domain 0 name, domid and JSON config...
Done setting up Dom0
Starting xenconsoled...
Starting QEMU as disk backend for dom0
Starting domain watchdog daemon: xenwatchdogd startup
 
[done]
 
PetaLinux 2016.4 plnx_aarch64 /dev/hvc0
 
plnx_aarch64 login:

Login using 'root' as the username

Configuring and building XEN from source using PetaLinux 2017.1

First let's enable Xen to be built by default.
$ petalinux-config -c rootfs
Now let's enable Xen:
Filesystem Packages ---> misc ---> packagegroup-petalinux-xen ---> [*] packagegroup-petalinux-xen
Now we need to change the rootFS to be an INITRD
$ petalinux-config
And change
Image Packaging Configuration  --->  Root filesystem type (INITRAMFS)  ---> (X) INITRD
NOTE: This means that any images built will NOT have the rootFS in the Image that is built by PetaLinux. This means you will need to edit any scripts or configs that expect the rootFS to be included. This includes the Xen configs mentioned later.
You can still use the prebuilt Image file which does still include the rootFS.
We also want to edit the device tree to build in the extra Xen related configs.
Edit this file
project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
and add this line: /include/ "xen-overlay.dtsi".
It should look like this for harware:
/include/ "system-conf.dtsi"
/include/ "xen-overlay.dtsi"
/ {
};
or like this for QEMU:
/include/ "system-conf.dtsi"
/include/ "xen-overlay.dtsi"
/ {
    cpus {
        cpu@1 {
            device_type = "none";
        };
        cpu@2 {
            device_type = "none";
        };
        cpu@3 {
            device_type = "none";
        };
    };
};
NOTE: There is a bug on QEMU where the CPUs running in SMP sometimes cause hangs. To avoid this we only tell Xen about a single CPU.


Also edit this file:
project-spec/meta-user/recipes-bsp/device-tree/device-tree-generation_%.bbappend
and add this line to it: file://xen-overlay.dtsi.
The file should look like this:
SRC_URI_append ="\
    file://system-user.dtsi \
    file://xen-overlay.dtsi \
"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
Then run petaliux-build:
$ petalinux-build

TFTP Booting Xen and Dom0 2017.1

Run Xen dom0 on QEMU:

To use the prebuilt Xen run:
$ petalinux-boot --qemu --prebuilt 2 --qemu-args "-net nic -net nic -net nic -net nic -net user,tftp=pre-built/linux/images"
To use the Xen you built yourself run:
$ petalinux-boot --qemu --u-boot

Run Xen dom0 on HW:

To use the prebuilt Xen on hardware:
$ petalinux-boot --jtag --prebuilt 2
To use the Xen you built yourself run:
$ petalinux-boot --jtag --u-boot

You should eventually see something similar to this, when you do press any key to stop the autoboot.
Hit any key to stop autoboot:

If u-boot wasn't able to get an IP address from the DHCP server you may need to manually set the serverip (it's typically 10.0.2.2 for QEMU):
$ setenv serverip 10.0.2.2

Now to download and boot Xen, if running on QEMU, use xen-qemu.dtb otherwise use xen.dtb. Example:

TFTPing Xen from pre-built images

$ tftpb 4000000 xen-qemu.dtb; tftpb 0x80000 xen-Image; tftpb 6000000 xen.ub; tftpb 0x1000000 xen-rootfs.cpio.gz.u-boot; bootm 6000000 0x1000000 4000000

TFTPing Xen from your own images

$ tftpb 4000000 system.dtb; tftpb 0x80000 Image; tftpb 6000000 xen.ub; tftpb 0x1000000 rootfs.cpio.gz.u-boot; bootm 6000000 0x1000000 4000000
Below is an example of what you will see.
[...]
 
BOOTP broadcast 1
DHCP client bound to address 10.0.2.15 (2 ms)
Hit any key to stop autoboot:  0
ZynqMP>
ZynqMP> setenv serverip 10.0.2.2
ZynqMP> tftpb 4000000 system.dtb; tftpb 0x80000 Image; tftpb 6000000 xen.ub; tftpb 0x1000000 rootfs.cpio.gz.u-boot; bootm 6000000 0x1000000 4000000
Using ethernet@ff0e0000 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'system.dtb'.
Load address: 0x4000000
Loading: #########
         5.8 MiB/s
done
Bytes transferred = 42748 (a6fc hex)
Using ethernet@ff0e0000 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'Image'.
Load address: 0x80000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
 
[...]
 
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ##############################
         8.2 MiB/s
done
Bytes transferred = 43688238 (29aa12e hex)
## Booting kernel from Legacy Image at 06000000 ...
   Image Name:
   Image Type:   AArch64 Linux Kernel Image (uncompressed)
   Data Size:    721216 Bytes = 704.3 KiB
   Load Address: 05000000
   Entry Point:  05000000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 01000000 ...
   Image Name:   petalinux-user-image-plnx_aarch6
   Image Type:   AArch64 Linux RAMDisk Image (gzip compressed)
   Data Size:    43688174 Bytes = 41.7 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 04000000
   Booting using the fdt blob at 0x4000000
   Loading Kernel Image ... OK
   Loading Ramdisk to 7b539000, end 7dee30ee ... OK
   Loading Device Tree to 0000000007ff2000, end 0000000007fff6fb ... OK
 
Starting kernel ...
 
 Xen 4.8.1-pre
(XEN) Xen version 4.8.1-pre (alistai@) (aarch64-xilinx-linux-gcc (Linaro GCC 6.2-2016.11) 6.2.1 20161016) debug=n  Wed Mar 22 14:11:36 MDT 2017
(XEN) Latest ChangeSet: Wed Feb 22 15:46:19 2017 +0100 git:e9e1b9b-dirty
(XEN) Processor: 410fd034: "ARM Limited", variant: 0x0, part 0xd03, rev 0x4
(XEN) 64-bit Execution:
(XEN)   Processor Features: 0000000000002222 0000000000000000
(XEN)     Exception Levels: EL3:64+32 EL2:64+32 EL1:64+32 EL0:64+32
(XEN)     Extensions: FloatingPoint AdvancedSIMD
(XEN)   Debug Features: 0000000010305006 0000000000000000
(XEN)   Auxiliary Features: 0000000000000000 0000000000000000
(XEN)   Memory Model Features: 0000000000001122 0000000000000000
(XEN)   ISA Features:  0000000000011120 0000000000000000
(XEN) 32-bit Execution:
(XEN)   Processor Features: 00001231:00011011
(XEN)     Instruction Sets: AArch32 A32 Thumb Thumb-2 ThumbEE Jazelle
(XEN)     Extensions: GenericTimer Security
(XEN)   Debug Features: 03010066
(XEN)   Auxiliary Features: 00000000
(XEN)   Memory Model Features: 10101105 40000000 01260000 02102211
(XEN)  ISA Features: 02101110 13112111 21232042 01112131 00011142 00011121
(XEN) Generic Timer IRQ: phys=30 hyp=26 virt=27 Freq: 50000 KHz
(XEN) GICv2 initialization:
(XEN)         gic_dist_addr=00000000f9010000
(XEN)         gic_cpu_addr=00000000f9020000
(XEN)         gic_hyp_addr=00000000f9040000
(XEN)         gic_vcpu_addr=00000000f9060000
(XEN)         gic_maintenance_irq=25
(XEN) GICv2: Adjusting CPU interface base to 0xf902f000
(XEN) GICv2: 192 lines, 4 cpus (IID 00000000).
(XEN) Using scheduler: SMP Credit Scheduler (credit)
(XEN) Allocated console ring of 16 KiB.
(XEN) Bringing up CPU1
(XEN) Bringing up CPU2
(XEN) Bringing up CPU3
(XEN) Brought up 4 CPUs
(XEN) P2M: 40-bit IPA with 40-bit PA
(XEN) P2M: 3 levels with order-1 root, VTCR 0x80023558
/amba@0/smmu0@0xFD800000: Decode error: write to 6c=0
(XEN) I/O virtualisation enabled
(XEN)  - Dom0 mode: Relaxed
(XEN) Interrupt remapping enabled
 
[...]
 
Starting syslogd/klogd: done
Starting /usr/sbin/xenstored...
Setting domain 0 name, domid and JSON config...
Done setting up Dom0
Starting xenconsoled...
Starting QEMU as disk backend for dom0
Starting domain watchdog daemon: xenwatchdogd startup
 
[done]
Starting tcf-agent: OK
 
PetaLinux 2017.1 plnx_aarch64 /dev/hvc0
 
INIT: Id "PS0" respawning too fast: disabled for 5 minutes
 
PetaLinux 2017.1 plnx_aarch64 /dev/hvc0
 
plnx_aarch64 login:

Login using 'root' as the username and password

SD Booting Xen and Dom0 2017.1

To boot Xen from an SD card you need to copy the following files to the boot partition of the SD card:
  1. BOOT.bin
  2. Image
  3. the compiled device tree file renamed to system.dtb (xen.dtb or xen-qemu.dtb for QEMU from the pre-built images, system.dtb from a Petalinux build)
  4. xen.ub
  5. rootfs.cpio.gz.u-boot (Only if using initrd instead of initramfs for the rootfs)

When using the pre-built images from the BSP, copy these files from <project-dir>/pre-built/linux/images. The prebuilt images are built to support both Linux without Xen and with Xen such that some of the Xen based image file names are different than in a normal Petalinux build. The prebuilt Linux kernel image includes an initramfs rootfs. Petalinux builds (rather than prebuilt images) require an initrd rootfs such that another file for the rootfs must also be used as described below.

RootFS in Kernel (initramfs)

This method allows the use of a Linux kernel with an initramfs (such as the prebuilt image) . Boot the SD card on hardware or QEMU and stop the u-boot autoboot. At the u-boot prompt run:
mmc dev $sdbootdev && mmcinfo; load mmc $sdbootdev:$partid 4000000 system.dtb && load mmc $sdbootdev:$partid 0x80000 Image; fdt addr 4000000; mmc $sdbootdev:$partid 6000000 xen.ub; bootm 6000000 - 4000000
This would also allow a rootfs mounted on the SD card to be used. It requires that you extract the rootFS (cpio file) to the root partition on the SD card and setup the kernel to expect the rootfs on the SD card in the kernel command line.

RootFS mounted on RAM (initrd)

This method is required when using a Linux image which is initrd based and does not include a rootfs. The rootfs.cpio.gz.u-boot file will be loaded in memory from u-boot. Then boot the SD card on hardware or QEMU and stop the u-boot autoboot. At the u-boot prompt run:
mmc dev $sdbootdev && mmcinfo; load mmc $sdbootdev:$partid 4000000 system.dtb && load mmc $sdbootdev:$partid 0x80000 Image; fdt addr 4000000; load mmc $sdbootdev:$partid 6000000 xen.ub; load mmc $sdbootdev:$partid 9000000 rootfs.cpio.gz.u-boot; bootm 6000000 9000000 4000000

Starting simple additional guests (PetaLinux 2016.4 or later)

If running on QEMU, we'll need to setup a port mapping for port 22 (SSH) in our VM.
In this example, we forward the hosts port 2222 to the VM's port 22.
$ petalinux-boot --qemu --u-boot --qemu-args "-net nic -net nic -net nic -net nic -net user,tftp=images/linux,hostfwd=tcp:127.0.0.1:2222-10.0.2.15:22"

Once you hit the u-boot prompt, follow the steps in the earlier section on how to run Xen dom0.
When dom0 has finished booting, we'll need to copy a guest Image into dom0's filesystem.
We'll use the base prebuilt PetaLinux Image as our domU guest.

If running on QEMU, we use scp's -P option to connect to our hosts port 2222 where QEMU will forward the connection to the guests port 22:
To target QEMU run the following on the host:
scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P 2222 images/linux/Image root@localhost:/boot/
If running on hardware run the following on the host:
scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no images/linux/Image root@<board-ip>:/boot/
If you would prefer to load DomU's kernel to the guest via SD card, you can follow the instructions in the "Starting Linux guests with Pass-through networking" section.

The xen-image-minimal rootFS includes some prepared configurations that you can use. These are located in '/etc/xen/'
$ cd /etc/xen

To start a simple guest run the following from the dom0 prompt
xl create -c example-simple.cfg

You'll see another instance of Linux booting up.
At any time you can leave the console of the guest and get back to dom0 by pressing ctrl+].
Once at the dom0 prompt you can list the guests from dom0:
xl list

To get back to the guests console:
xl console guest0

You can create further guests by for example running:
xl create example-simple.cfg name=\"guest1\"
xl create example-simple.cfg name=\"guest2\"
root@plnx_aarch64:/etc/xen# xl list
Name                                        ID   Mem VCPUs  State Time(s)
Domain-0                                     0   512     1     r-----      79.8
Domain-0                                     0   512     1     r-----      79.8
guest0                                       1   256     2     ------      93.7
guest1                                       2   256     2     ------      26.6
guest2                                       3   256     2     ------       1.8

To destroy a guest:
xl destroy guest0

CPU Pinning


The following will only work on QEMU with multi-core enabled or on real HW.
When running multiple guests with multiple Virtual CPUs, Xen will schedule the various vCPUs onto real physical CPUs.
The rules and considerations taken in scheduling decisions depend on the chosen scheduler and the configuration.
To avoid having multiple vCPUs share a single pCPU, it is possible to pin a vCPU onto a pCPU and to give it exclusive access.

To create a simple guest with one Virtual CPU pinned to Physical CPU #3, you can do the following:
xl create example-simple.cfg 'name="g0"' 'vcpus="1"' 'cpus="3"'

Another way to pin virtual CPUs on to Physical CPUs is to create dedicated cpu-pools.
This has the advantage of isolating the scheduling instances.

By default a single cpu-pool named Pool-0 exists. It contains all the physical cpus.
We'll now create our pool named rt using the credit2 scheduler.
xl cpupool-create 'name="rt"' 'sched="credit"'
xl cpupool-cpu-remove Pool-0 3
xl cpupool-cpu-add rt 3

Now we are ready to create a guest with a single vcpu pinned to physical CPU #3.

xl create /etc/xen/example-simple.cfg 'vcpus="1"' 'pool="rt"' 'cpus="3"' 'name="g0"'

Starting Linux guests with Para-Virtual networking (PetaLinux 2016.4 or later)

This time we will run QEMU slightly different. We'll create two port mappings. One for dom0's SSH port and another for the Para-Virtual domU.
The default IP addresses assigned by QEMUs builtin DHCP server start from 10.0.2.15 and count upwards.
Dom0 will be assigned 10.0.2.15, the next guest 10.0.2.16 and so on.
So here's the command line that maps host port 2222 to dom0 port 22 and 2322 to domUs port 22.
petalinux-boot --qemu --u-boot --qemu-args "-net nic -net nic -net nic -net nic -net user,tftp=./images/linux/,hostfwd=tcp:127.0.0.1:2222-10.0.2.15:22,hostfwd=tcp:127.0.0.1:2322-10.0.2.16:22"

Now, follow the instructions from section 1 on how to boot Xen dom0.
Once you are at the dom0 prompt and have copied a domU image we'll need to setup the networking.
In this example, we will configure the guests to directly join the external network by means of a bridge.

First of all, we need to de-configure the default setup.
Kill the dhcp client for eth0:
# killall -9 udhcpc

List and remove existing addresses from eth0:
# ip addr show dev eth0
In our example the address is 10.0.2.15/24:
# ip addr del 10.0.2.15/24 dev eth0

Then, create the bridge and start DHCP on it for dom0:
# brctl addbr xenbr0
# brctl addif xenbr0 eth0
# /sbin/udhcpc -i xenbr0 -b

You should see something like the following:
udhcpc (v1.24.1) started
[  186.459495] xenbr0: port 1(eth0) entered blocking state
[  186.461194] xenbr0: port 1(eth0) entered forwarding state
Sending discover...
Sending select for 10.0.2.15...
Lease of 10.0.2.15 obtained, lease time 86400
/etc/udhcpc.d/50default: Adding DNS 10.0.2.3

Similar to before we will use the pre-defined examples in '/etc/xen/'
$ cd /etc/xen

# xl create -c example-pvnet.cfg

You should see a new linux instance boot up.
Now we'll ssh into the domU from the host running Para-Virtual networking:
ssh -p 2322 root@localhost

Starting Linux guests with Pass-through networking (PetaLinux 2017.1)

The difficulty with using pass through networking is that the steps above use Dom0 networking to load the DomU boot image onto the guest. This won't work with pass through networking as Dom0 never has any networking avaliable.
You will need to find a way to get the kernel and rootFS (the pre-built Image file) onto the guest. The steps below are used to get the Image file onto a SD card image and attach it to QEMU. Similar steps can be followed for hardware, excpet just copy the Image file to a formated SD card and insert it into the board.
Create and format the file we will be using on your host:
$ dd if=/dev/zero of=qemu_sd.img bs=128M count=1
$ mkfs.vfat -F 32 qemu_sd.img
Copy the Image file onto the card.
NOTE: We are using the pre-built Image which contains a kernel and rootFS. If you use the Image you built above then no rootFS is included. You will need to copy the rootFS onto the SD card and edit the Xen config file later to specify a rootFS.
$ mcopy -i qemu_sd.img ./pre-built/linux/images/Image ::/
Now boot QEMU with this extra option appened inside the --qemu-args: -drive file=qemu_sd.img,if=sd,format=raw,index=1
The full command should look something like this for your prebuilt images:
petalinux-boot --qemu --u-boot --qemu-args "-net nic -net nic -net nic -net nic -net user,tftp=./pre-built/linux/images/,hostfwd=tcp:127.0.0.1:2222-10.0.2.15:22,hostfwd=tcp:127.0.0.1:2322-10.0.2.16:22 -drive file=qemu_sd.img,if=sd,format=raw,index=1"
The full command should look something like this for your own images:
petalinux-boot --qemu --u-boot --qemu-args "-net nic -net nic -nic -net nic -net user,tftp=./images/linux/,hostfwd=tcp:127.0.0.1:2222-10.0.2.15:22,hostfwd=tcp:127.0.0.1:2322-10.0.2.16:22 -drive file=qemu_sd.img,if=sd,format=raw,index=1"
Then boot Dom0 following the steps above, with one difference. You will need to make sure that you tell Xen about the network passthrough. To do this you will need to edit the device tree. We are going to use u-boot to edit the device tree.
After loading the device tree to memory you will need to run this: fdt addr $fdt_addr && fdt resize 128; fdt set /amba/ethernet@ff0e0000 status "disabled" && fdt set /amba/ethernet@ff0e0000 xen,passthrough "1"
The full command for booting prebuilt images you built is shown below:
$ tftpb 4000000 xen-qemu.dtb; fdt addr 4000000 && fdt resize 128; fdt set /amba/ethernet@ff0e0000 status "disabled" && fdt set /amba/ethernet@ff0e0000 xen,passthrough "1" && tftpb 0x80000 xen-Image; tftpb 6000000 xen.ub; tftpb 0x1000000 xen-rootfs.cpio.gz.u-boot; bootm 6000000 0x1000000 4000000
The full command for booting images you built is shown below:
$ tftpb 4000000 system.dtb; fdt addr 4000000 && fdt resize 128; fdt set /amba/ethernet@ff0e0000 status "disabled" && fdt set /amba/ethernet@ff0e0000 xen,passthrough "1" && tftpb 0x80000 Image; tftpb 6000000 xen.ub; tftpb 0x1000000 rootfs.cpio.gz.u-boot; bootm 6000000 0x1000000 4000000
NOTE: If running on hardware you will need to make a change to allow the DMA transactions. See here for more details: Passthrough Network Example
Once you have logged onto the system mount the SD card and copy the image.
# mount /dev/mmcblk0 /mnt/
# cp /mnt/Image /boot/
Similar to before we will use another pre-defined examples in '/etc/xen/'
$ cd /etc/xen
# xl create -c example-passnet.cfg