On 2018-05-21 09:35, Imanol Allende wrote:
> Signed-off-by: Imanol Allende <ialle...@ikerlan.es>
> ---
>  Documentation/setup-on-zynqmp-zcu102.md | 172 
> ++++++++++++++++++++++++++++++++
>  1 file changed, 172 insertions(+)
>  create mode 100644 Documentation/setup-on-zynqmp-zcu102.md
> 
> diff --git a/Documentation/setup-on-zynqmp-zcu102.md 
> b/Documentation/setup-on-zynqmp-zcu102.md
> new file mode 100644
> index 0000000..ec4bb50
> --- /dev/null
> +++ b/Documentation/setup-on-zynqmp-zcu102.md
> @@ -0,0 +1,172 @@
> +Setup on ZCU102 ZynqMP Ultrascale+
> +============================================
> +The ZCU102 target is a Xilinx target based on ZynqMP Ultrascale+. The SoC is 
> a quad-core Cortex-A53 and a dual-core R5 real-time processor. Further 
> information can be found on 
> https://www.xilinx.com/products/boards-and-kits/ek-u1-zcu102-g.html
> +
> +The Linux Image which runs Jailhouse has been built with Petalinux 2017.4. 
> Petalinux uses linux-xlnx repository, and in this case it uses the 
> xilinx-v2017.4 one, which is based on 4.9 kernel.
> +
> +
> +Image build
> +-------------------------------------------
> +In order to build the Linux image with Petalinux it is necessary to set all 
> the environmental variables. 
> +
> +    $ source /opt/pkg/settings.sh
> +
> +Once petalinux environments are set, the Petalinux project is created with 
> the name lnx_jailhouse. The bsp has to be downloaded.
> +
> +    $ petalinux-create -t project --template zynqMP -s 
> ../xilinx-zcu102-v2017.4-final.bsp -n lnx_jailhouse
> +
> +The Linux project is configured by:
> +
> +    $ petalinux-config 
> +
> +A menuconfig window is opened and just enable `Root filesystem type (SD 
> card)`:
> +
> +    Image Packaging Configuration--->Root filesystem type-->SD card
> +
> +Save project and exit. It will take some to time to configure the project. 
> Once it has finished configuring, the Linux kenel needs to be configured 
> enabling `CONFIG_OF_OVERLAY` and `CONFIG_KALLSYMS_ALL`
> +
> +    $ petalinux-config -c kernel
> +
> +Once modified, save the changes and build the project.
> +
> +    $ petalinux-build
> +    $ petalinux-package --boot --u-boot
> +
> +
> +Jailhouse build
> +-------------------------------------------
> +In the Jailhouse source directory, create a file include/jailhouse/config.h 
> with the following lines:
> +
> +#define CONFIG_MACH_ZYNQMP_ZCU102      1
> +
> +For debugging and for obtaining more information it is also possible to add:
> +#define CONFIG_TRACE_ERROR             1
> +
> +
> +After that, it is possible to build the project. It is necessary to set the 
> variables `ARCH=` with arm64, `KDIR=` with the kernel directory inside the 
> Petalinux project, `CROSS_COMPILE=` with the compiler and `DESTDIR=` with the 
> rootfs directory.
> +
> +    $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- 
> KDIR=../lnx_jailhouse/build/tmp/work/plnx_aarch64-xilinx-linux/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_aarch64-standard-build/
>  DESTDIR=/media/user/rootfs install
> +
> +This command will add the jailhouse module and its binary. 
> +
> +
> +U-Boot
> +------------------------------------------
> +Jailhouse needs the Linux kernel boot parameters `mem=`  to be set in order 
> to reserve memory for other cells.
> +In this case we chose `mem=1536M`. This can be done through U-Boot:
> +
> +    ZynqMP> setenv bootargs "earlycon clk_ignore_unused earlyprintk 
> mem=1536M root=/dev/mmcblk0p2 rw rootwait"
> +    ZynqMP> setenv uenvcmd "fatload mmc 0 0x3000000 Image && fatload mmc 0 
> 0x2A00000 system.dtb && booti 0x3000000 - 0x2A00000"
> +    ZynqMP> setenv bootcmd "run uenvcmd"
> +    ZynqMP> saveenv
> +    ZynqMP> boot
> +
> +
> +Testing Jailhouse GIC Demo
> +-------------------------------------------
> +Copy the `configs/arm64/zynqmp-zcu102*.cell` to the rootfs. To test 
> Jailhouse it is also interesting to copy `inmates/demos/arm64/gic-demo.bin`. 
> This demo creates a periodic timer interrupt and calculates its jitter. Once 
> Linux is running:
> +
> +    # modprobe jailhouse
> +    [   24.309597] jailhouse: loading out-of-tree module taints kernel.
> +    
> +    # jailhouse enable zynqmp-zcu102.cell
> +    Initializing Jailhouse hypervisor v0.8 on CPU 2
> +    Code location: 0x0000ffffc0200060
> +    Page pool usage after early setup: mem 33/993, remap 64/131072
> +    Initializing processors:
> +     CPU 2... OK
> +     CPU 0... OK
> +     CPU 3... OK
> +     CPU 1... OK
> +    Initializing unit: irqchip
> +    Initializing unit: PCI
> +    Adding virtual PCI device 00:00.0 to cell "ZynqMP-ZCU102"
> +    Adding virtual PCI device 00:01.0 to cell "ZynqMP-ZCU102"
> +    Page pool usage after late setup: mem 42/993, remap 69/131072
> +    Activating hypervisor
> +    [   39.844953] The Jailhouse is opening.
> +
> +    # jailhouse cell create zynqmp-zcu102-gic-demo.cell
> +    [   55.351670] CPU3: shutdown
> +    [   55.354303] psci: CPU3 killed.
> +    Created cell "gic-demo"
> +    Page pool usage after cell creation: mem 56/993, remap 69/131072
> +    [   55.388029] Created Jailhouse cell "gic-demo"
> +    
> +    # jailhouse cell load 1 gic-demo.bin
> +    Cell "gic-demo" can be loaded
> +    # jailhouse cell start 1
> +
> +Second UART starts showing jitter data:
> +
> +    Timer fired, jitter:   2212 ns, min:   2101 ns, max:   2585 ns
> +    Timer fired, jitter:   2171 ns, min:   2101 ns, max:   2585 ns
> +    Timer fired, jitter:   2454 ns, min:   2101 ns, max:   2585 ns
> +    Timer fired, jitter:   2444 ns, min:   2101 ns, max:   2585 ns
> +    Timer fired, jitter:   2181 ns, min:   2101 ns, max:   2585 ns
> +    Timer fired, jitter:   2181 ns, min:   2101 ns, max:   2585 ns
> +    Timer fired, jitter:   2212 ns, min:   2101 ns, max:   2585 ns
> +
> +If second UART does not show anything, the problem can be between the DTB 
> and Jailhouse. Jailhouse is not still compatible with the last Xilinx DTBs. 
> Therefore, it is recommendable to use a 2016 repository DTB, such as, 
> https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2016.4/arch/arm64/boot/dts/xilinx/zynqmp-zcu102.dts
> +
> +Testing Jailhouse Linux
> +-------------------------------------------
> +It is possible to load a Linux image in a guest cell. In order to do that, 
> it is essential to do a new Linux image but with `Image Packaging 
> Configuration--->Root filesystem type-->INITRAMFS`. 
> +
> +The files `image/linux/Image` and `image/linux/rootfs.cpio` have to be 
> copied from the Petalinux project to the rootfs. Besides, 
> `configs/arm64/dts/inmate-zynqmp-zcu102.dtb` file has to be copied from 
> Jailhouse project. 
> +
> +To load Linux in the guest cell:
> +
> +    # modprobe jailhouse
> +    [   24.309597] jailhouse: loading out-of-tree module taints kernel.
> +    
> +    # jailhouse enable zynqmp-zcu102.cell
> +    Initializing Jailhouse hypervisor v0.8 on CPU 2
> +    Code location: 0x0000ffffc0200060
> +    Page pool usage after early setup: mem 33/993, remap 64/131072
> +    Initializing processors:
> +     CPU 2... OK
> +     CPU 0... OK
> +     CPU 3... OK
> +     CPU 1... OK
> +    Initializing unit: irqchip
> +    Initializing unit: PCI
> +    Adding virtual PCI device 00:00.0 to cell "ZynqMP-ZCU102"
> +    Adding virtual PCI device 00:01.0 to cell "ZynqMP-ZCU102"
> +    Page pool usage after late setup: mem 42/993, remap 69/131072
> +    Activating hypervisor
> +    [   39.844953] The Jailhouse is opening.
> +    
> +    # jailhouse cell linux zynqmp-zcu102-linux-demo.cell Image -d 
> inmate-zynqmp-zcu102.dtb -i rootfs.cpio -c "console=ttyPS0,115200"
> +    [   81.967652] CPU2: shutdown
> +    [   81.970285] psci: CPU2 killed.
> +    [   82.015619] CPU3: shutdown
> +    [   82.018242] psci: CPU3 killed.
> +    Adding virtual PCI device 00:00.0 to cell "ZynqMP-linux-demo"
> +    Shared memory connection established: "ZynqMP-linux-demo" <--> 
> "ZynqMP-ZCU102"
> +    Adding virtual PCI device 00:02.0 to cell "ZynqMP-linux-demo"
> +    Created cell "ZynqMP-linux-demo"
> +    Page pool usage after cell creation: mem 61/993, remap 69/131072
> +    [   82.062667] Created Jailhouse cell "ZynqMP-linux-demo"
> +    Cell "ZynqMP-linux-demo" can be loaded
> +    Started cell "ZynqMP-linux-demo"
> +    
> +Guest Linux booting will appear in the second UART. It possible to see the 
> state of each cell:
> +
> +    root@xilinx-zcu102-2017_4:/# jailhouse cell list
> +    ID      Name                    State             Assigned CPUs          
>  Failed CPUs
> +    0       ZynqMP-ZCU102           running           0-1
> +    1       ZynqMP-linux-demo       running           2-3
> +
> +Debug in ZCU102
> +-------------------------------------------
> +The debug console is supposed to help with early cell boot issues and/or 
> when a UART is not available or not working. Add 
> `JAILHOUSE_CELL_DEBUG_CONSOLE` to the cell config (see e.g.
> +configs/arm64/qemu-arm64-linux-demo.c). 
> +
> +As an example, the gic-demo can be debugged. Just add the following info in 
> the cell load. It will print all the data through the principal UART instead 
> of from the second one. 
> +
> +    # jailhouse cell load 1 gic-demo.bin -s "con-type=JAILHOUSE" -a 0x1000
> +    
> +The output can be seen in:
> +
> +    # jailhouse console -f
> 

Thanks, applied with some style massaging.

Jan

-- 
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jailhouse-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to