Difference between revisions of "R-Car/Boards/S4SK-Proto-Xen"
(→Preparing SD card(32GB or more)) |
(→Preparing SD card(32GB or more)) |
(No difference)
|
Latest revision as of 20:07, 26 March 2023
Introduction
This page is Xen for the R-Car S4 Starter Kit prototype board.
R-Car S4 Starter Kit prototype board specification & linux BSP
See here
Host PC
Ubuntu 20.04 LTS (64bit) is recommended as OS. 32bit version is not supported.
How to build
Installation of required tools and libraries
Ubuntu is used as Linux Host PC since Yocto Project Quick Start specifies Ubuntu as one of the distributions. You need to install the required packages as follows.
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \ build-essential chrpath socat cpio python3 python3-pip python3-pexpect \ xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa \ libsdl1.2-dev pylint3 xterm libarchive-zip-perl
Build Procedure
- Download Xen enviroment for S4 SK prototype board
- Run the script
mkdir build-xen cd build-xen unzip {PATH}/Script_xen_s4sk.zip cd Script_xen_s4sk ./xen_s4sk.sh setup pip3 install --upgrade pip export PATH="$PATH:${HOME}/.local/bin" pip3 install --user git+https://github.com/xen-troops/moulin sudo apt install ninja-build ./xen_s4sk.sh build
- Output
./xen_s4sk.sh output
- You can verify its content:
tree ../output output/ ├── dom0 │ ├── Image │ ├── r8a779f0-s4sk-proto-xen.dtb │ ├── uInitramfs │ ├── xen-uImage │ └── xenpolicy-s4sk-proto ├── domd │ └── rcar-image-minimal-s4sk-proto.tar.bz2 ├── domu │ └── rcar-image-minimal-s4sk-proto.tar.bz2 └── ipl ├── bl31-s4sk-proto.srec ├── tee-s4sk-proto.srec └── u-boot-elf-s4sk-proto.srec
How to boot
Update the loader
Write the binaries(bl31-s4sk-proto.srec tee-s4sk-proto.srec u-boot-elf-s4sk-proto.srec) in the output/ipl directory to S4SK.
If you do not have other binaries, please contact the S4SK-Proto board provider.
See here for the writing procedure.
Loading kernel and rootfs via SD card
This section describes steps that are necessary for preparing and booting from SD card.
Preparing SD card(32GB or more)
WARNING! These steps will erase the SD card completely. In short, all files will be lost.
Follow these steps on the host machine:
- Divide the SD card into three partions and set ID=83(Linux) for each.
$ fdisk /dev/mmcblk0 -> n -> p -> 1 -> (enter to select default begin block) -> +10G (size of 1st partition) -> t -> 83 -> n -> p -> 2 -> (enter to select default begin block) -> +10G (size of 2nd partition) -> t -> 83 -> n -> p -> 3 -> (enter to select default begin block) -> +10G (size of 3rd partition) -> t -> 83
- Format each partition to ext4
$ mkfs.ext4 /dev/mmcblk0p1 $ mkfs.ext4 /dev/mmcblk0p2 $ mkfs.ext4 /dev/mmcblk0p3
- Deploy images to SD card.
$ mount /dev/mmcblk0p1 /mnt $ cd build-xen $ cp output/dom0/* /mnt/ $ umount /mnt $ mount /dev/mmcblk0p2 /mnt $ tar jxf output/domd/rcar-image-minimal-s4sk-proto.tar.bz2 -C /mnt/ $ umount /mnt $ mount /dev/mmcblk0p3 /mnt $ tar jxf output/domu/rcar-image-minimal-s4sk-proto.tar.bz2 -C /mnt $ umount /mnt
- NOTE: probably you need to be a root user, hence use "sudo"
Configure U-Boot to boot from SD card
- Proper U-Boot command to boot from SD:
setenv initrd_high 0xffffffffffffffff setenv bootargs setenv bootcmd 'run bootcmd_sdcard' setenv bootcmd_sdcard 'run sdcard_xen_load; run sdcard_dtb_load; run sdcard_kernel_load; run sdcard_xenpolicy_load; run sdcard_initramfs_load; bootm 0x48080000 0x84000000 0x48000000' setenv sdcard_dtb_load 'ext4load mmc 0:1 0x48000000 r8a779f0-s4sk-proto-xen.dtb; fdt addr 0x48000000; fdt resize; fdt mknode / boot_dev; fdt set /boot_dev device mmcblk0' setenv sdcard_initramfs_load 'ext4load mmc 0:1 0x84000000 uInitramfs' setenv sdcard_kernel_load 'ext4load mmc 0:1 0x7a000000 Image' setenv sdcard_xen_load 'ext4load mmc 0:1 0x48080000 xen-uImage' setenv sdcard_xenpolicy_load 'ext4load mmc 0:1 0x7c000000 xenpolicy-s4sk-proto' run bootcmd
Confirmed Xen Commands
Dom0
- Get information about Xen host (xl info)
root@generic-armv8-xt-dom0:~# xl info host : generic-armv8-xt-dom0 release : 5.10.41-yocto-tiny version : #1 SMP PREEMPT Tue Nov 15 10:40:16 UTC 2022 machine : aarch64 nr_cpus : 8 max_cpu_id : 7 nr_nodes : 1 cores_per_socket : 1 threads_per_core : 1 cpu_mhz : 16.666 hw_caps : 00000000:00000000:00000000:00000000:00000000:00000000:00000000:00000000 virt_caps : hvm hvm_directio hap iommu_hap_pt_share vpmu gnttab-v1 total_memory : 3968 free_memory : 2013 sharing_freed_memory : 0 sharing_used_memory : 0 outstanding_claims : 0 free_cpus : 0 xen_major : 4 xen_minor : 17 xen_extra : -unstable xen_version : 4.17-unstable xen_caps : xen-3.0-aarch64 xen-3.0-armv7l xen_scheduler : credit2 xen_pagesize : 4096 platform_params : virt_start=0x200000 xen_changeset : Wed Jun 15 15:12:12 2022 +0300 git:4b09677806-dirty xen_commandline : dom0_mem=256M console=dtuart dtuart=/soc/serial@e6540000 dom0_max_vcpus=2 loglvl=all xsm=flask flask=permissive bootscrub=0 pci-passthrough=on cc_compiler : aarch64-poky-linux-gcc (GCC) 9.3.0 cc_compile_by : xen-4.17.0+gitA cc_compile_domain : poky cc_compile_date : 2022-06-16 build_id : bce36987e188c7c50ebb374769702ad5bbf915c5 xend_config_format : 4 root@generic-armv8-xt-dom0:~#
- List information about all/some domains (xl list)
root@generic-armv8-xt-dom0:~# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 256 2 r----- 15.3 DomD 1 1021 4 -b---- 16.1 DomU 2 511 2 -b---- 8.6 root@generic-armv8-xt-dom0:~#
- Terminate a domain immediately (xl destory DomU)
root@generic-armv8-xt-dom0:~# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 256 2 r----- 18.1 DomD 1 1021 4 -b---- 16.8 DomU 2 511 2 -b---- 9.0 root@generic-armv8-xt-dom0:~# xl destroy DomU root@generic-armv8-xt-dom0:~# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 256 2 r----- 18.8 DomD 1 1023 4 -b---- 17.6 root@generic-armv8-xt-dom0:~#
- Create a domain from config file <filename> (xl create <config file>)
root@generic-armv8-xt-dom0:~# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 256 2 r----- 50.7 DomD 1 1023 4 -b---- 20.4 root@generic-armv8-xt-dom0:~# xl create /etc/xen/domu.cfg Parsing config from /etc/xen/domu.cfg libxl: info: libxl_create.c:121:libxl__domain_build_info_setdefault: qemu-xen is unavailable, using qemu-xen-traditional instead: No such file or directory (XEN) GICv3: Mapping ITS translation register to d3:addr=0x00000000f1050000 size=0x0000000000010000 libxl: error: libxl_arm.c:1137:copy_partial_fdt: Can't copy the node "/passthrough" from the partial FDT (XEN) memory_map:add: dom3 gfn=e6260 mfn=e6260 nr=10 (XEN) memory_map:add: dom3 gfn=37fc9 mfn=47fc9 nr=2 (XEN) ipmmu: /soc/iommu@eefc0000: d3: Set IPMMU context 3 (pgd 0x4f65a0000) (XEN) ipmmu: /soc/rswitch_osid1: Using IPMMU context 3 (XEN) d3v0: vGICD: RAZ on reserved register offset 0x00000c (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER4 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER8 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER12 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER16 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER20 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER24 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER28 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER32 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER36 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER40 (XEN) d3v0: vGICD: unhandled word write 0x000000ffffffff to ICACTIVER44 (XEN) d3v0: vGICR: SGI: unhandled word write 0x000000ffffffff to ICACTIVER0 (XEN) d3v1: vGICR: SGI: unhandled word write 0x000000ffffffff to ICACTIVER0 (XEN) grant_table.c:1879:d3v1 Expanding d3 grant table from 1 to 2 frames (XEN) grant_table.c:1879:d3v1 Expanding d3 grant table from 2 to 3 frames root@generic-armv8-xt-dom0:~# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 256 2 r----- 51.7 DomD 1 1021 4 -b---- 22.6 DomU 3 511 2 -b---- 5.7 root@generic-armv8-xt-dom0:~#
- Attach to domain's console (xl console DomD)
root@generic-armv8-xt-dom0:~# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 256 2 r----- 55.3 DomD 1 1021 4 -b---- 23.5 DomU 3 511 2 -b---- 7.8 root@generic-armv8-xt-dom0:~# xl console DomD [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050] [ 0.000000] Linux version 5.10.41-yocto-standard (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP PREEMPT Thu Jul 15 12:11:21 UTC 2021 [ 0.000000] Machine model: XENVM-4.17 [ 0.000000] Xen 4.17 support found (snip) s4sk-proto-domd login: root root@s4sk-proto-domd:~#
- Back to Dom0 : ctrl + ]
- Attach to domain's console (xl console DomU)
root@generic-armv8-xt-dom0:~# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 256 2 r----- 58.1 DomD 1 1021 4 -b---- 24.2 DomU 3 511 2 -b---- 8.1 root@generic-armv8-xt-dom0:~# xl console DomU [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050] [ 0.000000] Linux version 5.10.41-yocto-standard (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP PREEMPT Thu Jul 15 12:11:21 UTC 2021 [ 0.000000] Machine model: XENVM-4.17 [ 0.000000] Xen 4.17 support found (snip) s4sk-proto-domu login: root root@s4sk-proto-domu:~#
- Back to Dom0 : ctrl + ]
- List the VCPUs for all/some domains (xl vcpu-list)
root@generic-armv8-xt-dom0:~# xl vcpu-list Name ID VCPU CPU State Time(s) Affinity (Hard / Soft) Domain-0 0 0 0 -b- 8.1 all / all Domain-0 0 1 1 r-- 5.8 all / all DomD 1 0 2 -b- 4.9 all / all DomD 1 1 3 -b- 3.6 all / all DomD 1 2 4 -b- 3.3 all / all DomD 1 3 5 -b- 4.3 all / all DomU 2 0 6 -b- 4.2 all / all DomU 2 1 7 -b- 4.2 all / all root@generic-armv8-xt-dom0:~#
- Set which CPUs a VCPU can use (xl vcpu-pin <domain ID> <vCPU> <physical CPUs>)
root@generic-armv8-xt-dom0:~# xl vcpu-list Name ID VCPU CPU State Time(s) Affinity (Hard / Soft) Domain-0 0 0 0 r-- 6.2 all / all Domain-0 0 1 1 -b- 5.3 all / all DomD 1 0 2 -b- 4.2 all / all DomD 1 1 3 -b- 4.1 all / all DomD 1 2 4 -b- 3.8 all / all DomD 1 3 5 -b- 3.3 all / all DomU 2 0 6 -b- 4.1 all / all DomU 2 1 7 -b- 3.8 all / all root@generic-armv8-xt-dom0:~# xl vcpu-pin 1 1 7 root@generic-armv8-xt-dom0:~# xl vcpu-list Name ID VCPU CPU State Time(s) Affinity (Hard / Soft) Domain-0 0 0 0 r-- 6.4 all / all Domain-0 0 1 1 -b- 5.4 all / all DomD 1 0 2 -b- 4.2 all / all DomD 1 1 7 -b- 4.1 7 / all DomD 1 2 4 -b- 3.8 all / all DomD 1 3 5 -b- 3.3 all / all DomU 2 0 6 -b- 4.2 all / all DomU 2 1 7 -b- 3.8 all / all root@generic-armv8-xt-dom0:~#
- Create multiple domains (xl create)
root@generic-armv8-xt-dom0:~# xl vcpu-list Name ID VCPU CPU State Time(s) Affinity (Hard / Soft) Domain-0 0 0 0 -b- 5.7 all / all Domain-0 0 1 1 r-- 4.6 all / all DomD 1 0 2 -b- 4.9 all / all DomD 1 1 3 -b- 3.5 all / all DomD 1 2 4 -b- 3.2 all / all DomD 1 3 6 -b- 3.3 all / all DomU 2 0 5 -b- 3.7 all / all DomU 2 1 7 -b- 3.3 all / all root@generic-armv8-xt-dom0:~# cp /etc/xen/domu.cfg /etc/xen/domu1.cfg root@generic-armv8-xt-dom0:~# cp /etc/xen/domu.cfg /etc/xen/domu2.cfg root@generic-armv8-xt-dom0:~# cp /etc/xen/domu.cfg /etc/xen/domu3.cfg root@generic-armv8-xt-dom0:~# vi /etc/xen/domu1.cfg Before: vif = [ 'backend=DomD, bridge=xenbr0, mac=08:00:27:ff:cb:cf' ] After : vif = [ 'backend=DomD, bridge=xenbr0, mac=08:00:27:ff:cb:d1' ] root@generic-armv8-xt-dom0:~# vi /etc/xen/domu2.cfg Before: vif = [ 'backend=DomD, bridge=xenbr0, mac=08:00:27:ff:cb:cf' ] After : vif = [ 'backend=DomD, bridge=xenbr0, mac=08:00:27:ff:cb:d2' ] root@generic-armv8-xt-dom0:~# vi /etc/xen/domu3.cfg Before: vif = [ 'backend=DomD, bridge=xenbr0, mac=08:00:27:ff:cb:cf' ] After : vif = [ 'backend=DomD, bridge=xenbr0, mac=08:00:27:ff:cb:d3' ] root@generic-armv8-xt-dom0:~# root@generic-armv8-xt-dom0:~# xl destroy DomU root@generic-armv8-xt-dom0:~# xl vcpu-list Name ID VCPU CPU State Time(s) Affinity (Hard / Soft) Domain-0 0 0 3 r-- 7.2 all / all Domain-0 0 1 0 -b- 6.1 all / all DomD 1 0 6 -b- 6.4 all / all DomD 1 1 5 -b- 4.4 all / all DomD 1 2 1 -b- 4.2 all / all DomD 1 3 7 -b- 4.0 all / all root@generic-armv8-xt-dom0:~# xl create /etc/xen/domu1.cfg 'name="DomU-1" ; vcpus="1" ; cpus="all" ; memory="128" ; tee = [] ; dt_passthrough_nodes = [] ; dtdev = [] ; irqs = [] ; iomem = [] ; renesas_vmq = []' Parsing config from /etc/xen/domu1.cfg libxl: info: libxl_create.c:121:libxl__domain_build_info_setdefault: qemu-xen is unavailable, using qemu-xen-traditional instead: No such file or directory (XEN) GICv3: Mapping ITS translation register to d4:addr=0x00000000f1050000 size=0x0000000000010000 libxl: error: libxl_arm.c:1137:copy_partial_fdt: Can't copy the node "/passthrough" from the partial FDT root@generic-armv8-xt-dom0:~# (XEN) d4v0: vGICD: RAZ on reserved register offset 0x00000c (XEN) d4v0: vGICR: SGI: unhandled word write 0x000000ffffffff to ICACTIVER0 (XEN) grant_table.c:1879:d4v0 Expanding d4 grant table from 1 to 2 frames root@generic-armv8-xt-dom0:~# xl create /etc/xen/domu2.cfg 'name="DomU-2" ; vcpus="1" ; cpus="all" ; memory="128" ; tee = [] ; dt_passthrough_nodes = [] ; dtdev = [] ; irqs = [] ; iomem = [] ; renesas _vmq = []' (snip) root@generic-armv8-xt-dom0:~# xl create /etc/xen/domu3.cfg 'name="DomU-3" ; vcpus="1" ; cpus="all" ; memory="128" ; tee = [] ; dt_passthrough_nodes = [] ; dtdev = [] ; irqs = [] ; iomem = [] ; renesas _vmq = []' (snip) root@generic-armv8-xt-dom0:~# xl vcpu-list Name ID VCPU CPU State Time(s) Affinity (Hard / Soft) Domain-0 0 0 3 -b- 9.1 all / all Domain-0 0 1 0 r-- 7.4 all / all DomD 1 0 6 r-- 9.3 all / all DomD 1 1 5 r-- 6.1 all / all DomD 1 2 1 -b- 5.3 all / all DomD 1 3 7 -b- 5.0 all / all DomU-1 4 0 3 -b- 6.7 all / all DomU-2 5 0 4 -b- 7.2 all / all DomU-3 6 0 2 r-- 2.7 all / all root@generic-armv8-xt-dom0:~#
DomD / DomU
- Attach to domain's console (xl console DomD)
root@generic-armv8-xt-dom0:~# xl console DomD [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050] [ 0.000000] Linux version 5.10.41-yocto-standard (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP PREEMPT Thu Jul 15 12:11:21 UTC 2021 (snip) s4sk-proto-domd login: root root@s4sk-proto-domd:~#
- Back to Dom0 : ctrl + ]
- Attach to domain's console (xl console DomU)
root@generic-armv8-xt-dom0:~# xl console DomU [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050] [ 0.000000] Linux version 5.10.41-yocto-standard (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP PREEMPT Thu Jul 15 12:11:21 UTC 2021 (snip) s4sk-proto-domu login: root root@s4sk-proto-domu:~#
- Back to Dom0 : ctrl + ]
- Ethernet TSN (DomD)
root@generic-armv8-xt-dom0:~# xl console DomD [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050] [ 0.000000] Linux version 5.10.41-yocto-standard (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP PREEMPT Thu Jul 15 12:11:21 UTC 2021 (snip) Poky (Yocto Project Reference Distro) 3.1.16 s4sk-proto-domd hvc0 s4sk-proto-domd login: root root@s4sk-proto-domd:~# ifconfig tsn0 192.168.10.10 [ 302.163420] rswitch_get_phy_node PHY interface = usxgmii [ 302.165252] libphy: rswitch_mii: probed [ 302.230256] Generic Clause 45 PHY etha0:00: attached PHY driver [Generic Clause 45 PHY] (mii_bus:phy_addr=etha0:00, irq=POLL) root@s4sk-proto-domd:~# ifconfig tsn0 tsn0 Link encap:Ethernet HWaddr 86:5E:BC:7C:2A:FC inet addr:192.168.10.10 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::845e:bcff:fe7c:2afc/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:1346 (1.3 KiB) root@s4sk-proto-domd:~#
- Ethernet TSN (DomU)
root@generic-armv8-xt-dom0:~# xl console DomU [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050] [ 0.000000] Linux version 5.10.41-yocto-standard (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP PREEMPT Thu Jul 15 12:11:21 UTC 2021 (snip) Poky (Yocto Project Reference Distro) 3.1.16 s4sk-proto-domu hvc0 s4sk-proto-domu login: root root@s4sk-proto-domu:~# ifconfig tsn1 192.168.10.100 root@s4sk-proto-domu:~# ifconfig tsn1 tsn1 Link encap:Ethernet HWaddr FE:5F:1D:9C:2D:0B inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::fc5f:1dff:fe9c:2d0b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:44 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:8686 (8.4 KiB) root@s4sk-proto-domu:~#