X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=docs%2F0_Getting_Started%2F2_Building_AGL_Image%2F5_4_Virtio.md;fp=docs%2F0_Getting_Started%2F2_Building_AGL_Image%2F5_4_Virtio.md;h=3a55fb2e726e76a3d383244021467c89aac9a1ae;hb=dbeee147184e66acb090dd944456c7e8f1fde628;hp=0000000000000000000000000000000000000000;hpb=5041bc36d6c399e304940b3703fd908998049669;p=AGL%2Fdocumentation.git diff --git a/docs/0_Getting_Started/2_Building_AGL_Image/5_4_Virtio.md b/docs/0_Getting_Started/2_Building_AGL_Image/5_4_Virtio.md new file mode 100644 index 0000000..3a55fb2 --- /dev/null +++ b/docs/0_Getting_Started/2_Building_AGL_Image/5_4_Virtio.md @@ -0,0 +1,151 @@ +--- +title: Building for virtio +--- + +Virtio is a standartized interface for implementing virtual I/O devices: + +* Russell, Rusty. "virtio: towards a de-facto standard for virtual I/O devices." ACM SIGOPS Operating Systems Review 42.5 (2008): 95-103. + +This section describes the steps you need to take to build the AGL demo image +for virtio "platform". Later, the same image can be run on various emulators or +hypervisors that provide virtio devices, for example, QEMU aarch64 emulation on +PC, QEMU/KVM aarch64 virtualization on AGL Reference Hardware, etc. + +Below, AGL minimal image and Qt based IVI demo are used as example, but +similiarly one can run HTML5 based demos, cluster demo, or other AGL images. + +## 1. Making Sure Your Build Environment is Correct + +The +"[Initializing Your Build Environment](./3_Initializing_Your_Build_Environment.md)" +section presented generic information for setting up your build environment +using the `aglsetup.sh` script. +If you are building the AGL demo image for virtio platform, you need to specify +some specific options when you run the script: + +```sh +$ source meta-agl/scripts/aglsetup.sh -m virtio-aarch64 -b build-virtio-aarch64 agl-demo +``` + +The "-m" option specifies the "virtio-aarch64" machine. + +The "-b" option sets custom build directory instead of default "build". + +The "-f" option might be added to override previously available configuration. +By default, if there were already configuration files in build directory, they +will not be overriden, as result, aglsetup.sh might not have desired effect. + +## 2. Using BitBake + +This section shows the `bitbake` command used to build the AGL image. + +Start the build using the `bitbake` command. + +**AGL minimal image :** +The target is `agl-image-minimal`. + +```sh +$ bitbake agl-image-minimal +``` + +**Qt Based IVI demo :** +The target is `agl-demo-platform`. + +```sh +$ bitbake agl-demo-platform +``` + +## 3. Deploying the AGL Demo Image + +This subsection describes AGL virtio-aarch64 image deployment under virtio +platform provided by QEMU aarch64 emulator on PC, or QEMU/KVM hypervisor on AGL +Reference Hardware board. + +**3.1 QEMU on PC** + +If shell from which AGL was built is closed, or new shell is opened, then it is +needed to re-initialize build environment: + +```sh +$ source $AGL_TOP/build-virtio-aarch64/agl-init-build-env +``` + +And further use `runqemu` to boot the image : + +```sh +$ runqemu +``` + +**3.2 QEMU/KVM on AGL Reference Hardware** + +Follow these steps to run virtual AGL on bare-metal AGL (AGL-in-AGL) on AGL Reference Hardware board: + + 1. Partition eMMC or SD-Card to have two partitions, at least 1 GiB each. + Actually, can be less but just rounded up to have a nice number. + + 2. Flash AGL minimal image root file system to the second partition on SD-Card + or eMMC. + + 3. Build AGL minimal image for AGL Reference Hardware. + + ```sh + source meta-agl/scripts/aglsetup.sh -m h3ulcb -b build-h3ulcb agl-refhw-h3 + ``` + + In `build-h3ulcb/conf/local.conf` add + + ``` + AGL_DEFAULT_IMAGE_FSTYPES = "ext4" + IMAGE_INSTALL_append = "qemu" + ``` + + CAUTION: Calling aglsetup.sh with "-f" flag will remove above modification + in "local.conf", so they will be needed to be re-applied. + + Build image: + + ```sh + bitbake agl-image-minimal + ``` + + Add virtio kernel to the AGL Reference Hardware Linux rootfs: + + ```sh + cp build-virtio-aarch64/tmp/deploy/images/virtio-aarch64/Image build-h3ulcb/tmp/work/h3ulcb-agl-linux/agl-image-minimal/1.0-r0/rootfs/linux2 + bitbake agl-image-minimal -c image_ext4 -f + bitbake agl-image-minimal -c image_complete + ``` + + Flash root file system to the first partition on SD-Card or eMMC. + + 4. Boot AGL Reference Hardware board using Linux located on the first partition of SD-Card or eMMC. + + 5. Run QEMU from Linux 1 command line + + ```sh + qemu-system-aarch64 \ + -machine virt \ + -cpu cortex-a57 \ + -m 2048 \ + -serial mon:stdio \ + -global virtio-mmio.force-legacy=false \ + -drive id=disk0,file=/dev/mmcblk0p2,if=none,format=raw \ + -device virtio-blk-device,drive=disk0 \ + -object rng-random,filename=/dev/urandom,id=rng0 \ + -device virtio-rng-device,rng=rng0 \ + -nographic \ + -kernel /linux2 + -append 'root=/dev/vda rw mem=2048M' + ``` + + NOTE: mmcblk0p2 above is used for when root file system is flashed on eMMC. + In case of SD-Card, mmcblk1p2 has to be used. + + 6. It is possible to exit from QEMU using monitor commands. Enter "Ctrl+a h" for help. + +Know issue: to enable hardware virtualization using KVM, option `-enable-kvm` +could be added to QEMU command line, but it fails with: + +``` +qemu-system-aarch64: kvm_init_vcpu failed: Invalid argument +```