1 x86 Virtual Machines

Contents

1.1 Build Targets

1.1.1 Machines

Table 1.1 Supported Machines

VM1

Target YAML2

Machine3

Target Recipe(s)4

Running Media5

Installation Media6

Common x86

qemux86.yml

qemux86

twimg-default-swu-factory

Virtual HDD

ISO image (Virtual CD)

Common x86 with screen support

qemux86-screen.yml

qemux86-screen

twimg-default-swu-factory

Virtual HDD

ISO image (Virtual CD)

Common x86-64

qemux86-64.yml

qemux86-64

twimg-default-swu-factory

Virtual HDD

ISO image (Virtual CD)

Common x86-64 with screen support

qemux86-64-screen.yml

qemux86-64-screen

twimg-default-swu-factory

Virtual HDD

ISO image (Virtual CD)

1

Target virtual machine.

2

Target YAML-file located in the kas/targets directory.

3

Target machine name stored in the MACHINE BitBake variable for selected Target YAML.

4

Recipes that will be built by default for the target. In Section 1.1.2, you can find list of supported recipes for the target images, which you can build in addition to the default recipes using optional --target option in build command (see Section 1.2).

5

External or internal data storage where the TanoWrt operating system is running.

6

External storage device for which an installation image is generated. When booting from the Installation Media, the TanoWrt system is installed on the Running Media storage.

1.1.2 Images

Table 1.2 Supported Images

Read-Only Root Filesystem Image

Recipe7

Supported by Target(s)

Description

twimg-default

twimg-default

All

Standard TanoWrt image.

twimg-default-swu

All

Standard TanoWrt image and firmware upgrade image. When building this image, twimg-default will also be built as dependency.

twimg-default-swu-factory

All

Factory installation image for standard TanoWrt . image. When building this image, twimg-default and twimg-default-swu will also be built as dependencies.

twimg-qt5

twimg-qt5

qemux86-screen.yml
qemux86-64-screen.yml

Standard TanoWrt image with Qt5 support.

twimg-qt5-swu

qemux86-screen.yml
qemux86-64-screen.yml

Standard TanoWrt image with Qt5 support and firmware upgrade image. When building this image, twimg-qt5 will also be built as dependency.

twimg-qt5-swu-factory

qemux86-screen.yml
qemux86-64-screen.yml

Factory installation image for standard TanoWrt . image with Qt5 support. When building this image, twimg-qt5 and twimg-qt5-swu will also be built as dependencies.

7

Image recipe name. This name can be used as argument for --target build command option (see Section 1.2 section).

1.2 Build

Please read the common information on how to perform a TanoWrt images build and preparing the build environment in section “Building TanoWrt”.

See also

  • See section Section 1.1.1 to select the required target YAML file (<target-yml>).

  • See section Section 1.1.2 to select the required root filesystem image recipe (<target-recipe>).

  • See section Section 1.3 for detailed information about the produced build artifacts.

1.2.1 Examples

1.2.1.1 Build Default Image for Common x86-64 Virtual Machine

$ kas build targets/kas/qemux86-64.yml

1.2.1.2 Build Default Image for Common x86-64 with Screen Support Virtual Machine

$ kas build targets/kas/qemux86-64-screen.yml

1.2.1.3 Build Image with Qt5 for Common x86-64 with Screen Support Virtual Machine

$ kas build --target twimg-qt5 targets/kas/qemux86-64-screen.yml

1.3 Produced Build Artifacts

All produced build artifacts are stored in the ~/tanowrt/build/tanowrt-glibc/deploy/images/<MACHINE> directory. Refer to table Produced Build Artifacts for a description of some common (not all) build artifacts.

Table 1.3 Produced Build Artifacts

Artifact

Target(s)

Description

UEFI Firmware

ovmf.qcow2

All

Flash image with UEFI Firmware based on TianoCore.

Bootloader

grub-efi-bootia32.efi

qemux86.yml
qemux86-screen.yml

GRUB bootloader image for x86 architecture.

grub-efi-bootx64.efi

qemux86-64.yml
qemux86-64-screen.yml

GRUB bootloader image for x86_64 architecture.

grub-efi-grubenv

All

GRUB bootloader initial environment.

grub-efi-startup.nsh

All

Startup script for UEFI shell

grub.cfg

All

GRUB bootloader configuration file

Linux Kernel

bzImage-<MACHINE>.bin

All

Compressed Linux kernel binary image.

bzImage-<MACHINE>.ext4

All

Compressed Linux kernel binary image packed into an ext4 file system image.

Images

<rootfs-image>-<MACHINE>.wic

All

Bootable image including all required partitions for booting and running the virtual machine. This image is ready to be run with QEMU or write to USB flash drive or HDD drive using the dd utility or similar.

<rootfs-image>-<MACHINE>.wic.vmdk

All

Same as <rootfs-image>-<MACHINE>.wic but in VMDK (Virtual Machine Disk) format.

<rootfs-image>-<MACHINE>.squashfs-lzo

All

Read-only root filesystem image (squashfs with LZO compression).

<rootfs-image>-swu-factory-<MACHINE>.iso

All

ISO factory installation image.

twimg-initramfs-swu-factory-<MACHINE>.cpio.gz

All

Root filesystem initramfs image for factory installtion image. This image is included in factory installation image as initramfs image.

<rootfs-image>-swu-<MACHINE>.swu

All

Firmware upgrade image.

Note

<MACHINE> in the artifacts path and artifacts file names are replaced by the actual value of the MACHINE BitBake variable for the chosen target. <rootfs-image> is replaced by the actual read-only root filesystem image name.

For example, below is the lists of artifacts produced by the qemux86-64-screen.yml target build. There are two types of listings here — a complete listing, and a reduced listing without the symbolic links display.

[~/tanowrt/build/tanowrt-glibc/deploy/images/qemux86-64-screen]$ ls -gGh | grep -v -e "^l"
total 413M
-rw-r--r-- 2 9.2M Jul 29 16:26 bzImage--5.10.70+git0+7dda2a9f69-tano0.2.7.20.0-qemux86-64-screen-20220729132401.bin
-rw-r--r-- 2  12M Jul 29 16:26 bzImage-5.10.70+gitAUTOINC+7dda2a9f69-tano0.2.7.20.0-qemux86-64-screen.ext4
-rw-r--r-- 2  12M Jul 29 16:26 bzImage-qemux86-64-screen.ext4
drwxr-xr-x 2 4.0K Mar 15 14:12 grub
-rwxr-xr-x 2 1.9K Mar 15 14:12 grub.cfg
-rw-r--r-- 2 712K Mar 15 06:06 grub-efi-bootx64.efi
-rw-r--r-- 2   23 Mar 15 06:06 grub-efi-bootx64.efi.version
-rwxr-xr-x 2 1.0K Mar 15 14:12 grub-efi-grubenv
-rw-r--r-- 2   26 Mar 15 06:06 grub-efi-startup.nsh
-rw-r--r-- 2 7.3M Jul 29 16:26 modules--5.10.70+git0+7dda2a9f69-tano0.2.7.20.0-qemux86-64-screen-20220729132401.tgz
-rw-r--r-- 2 3.9M Mar 15 05:58 ovmf.code.qcow2
-rw-r--r-- 2 4.4M Mar 15 05:58 ovmf.qcow2
-rw-r--r-- 2 896K Mar 15 05:58 ovmf.vars.qcow2
-rw-r--r-- 2 5.6K Jul 29 16:27 twimg-default.env
-rw-r--r-- 2 1.7K Jul 29 16:27 twimg-default-qemux86-64-screen-20220729132401.qemuboot.conf
-rw-r--r-- 2  87K Jul 29 16:27 twimg-default-qemux86-64-screen-20220729132401.rootfs.manifest
-rw-r--r-- 2  37M Jul 29 16:27 twimg-default-qemux86-64-screen-20220729132401.rootfs.squashfs-lzo
-rw-r--r-- 2   24 Jul 29 16:28 twimg-default-qemux86-64-screen-20220729132401.rootfs.version
-rw-r--r-- 2 1.2G Jul 29 16:28 twimg-default-qemux86-64-screen-20220729132401.rootfs.wic
-rw-r--r-- 2  95M Jul 29 16:28 twimg-default-qemux86-64-screen-20220729132401.rootfs.wic.vmdk
-rw-r--r-- 2 273K Jul 29 16:27 twimg-default-qemux86-64-screen-20220729132401.testdata.json
-rw-r--r-- 2 6.0K Jul  4 22:03 twimg-default-swu-factory.env
-rw-r--r-- 2  71M Jul 29 16:28 twimg-default-swu-factory-qemux86-64-screen-20220729132401.iso
-rw-r--r-- 2  273 Jul  4 22:03 twimg-default-swu-factory-qemux86-swu-factory.wks
-rw-r--r-- 2  50M Jul 29 16:28 twimg-default-swu-qemux86-64-screen-20220729132401.swu
-rw-r--r-- 2 2.0K Jul 29 16:27 twimg-default-tanowrt-image-qemux86.wks
-rw-r--r-- 2 1.7K Jul 29 16:26 twimg-initramfs-swu-factory-qemux86-64-screen-20220729132401.qemuboot.conf
-rw-r--r-- 2  11M Jul 29 16:26 twimg-initramfs-swu-factory-qemux86-64-screen-20220729132401.rootfs.cpio.gz
-rw-r--r-- 2 2.9K Jul 29 16:26 twimg-initramfs-swu-factory-qemux86-64-screen-20220729132401.rootfs.manifest
-rw-r--r-- 2   24 Jul 29 16:26 twimg-initramfs-swu-factory-qemux86-64-screen-20220729132401.rootfs.version
-rw-r--r-- 2 278K Jul 29 16:26 twimg-initramfs-swu-factory-qemux86-64-screen-20220729132401.testdata.json

1.4 Booting and Running

To run the built virtual machine image in QEMU you should run the command:

$ kas shell -c "runqemu <MACHINE>" kas/targets/<TARGET_YAML>

Where <MACHINE> is a target machine name for required target and <TARGET_YAML> is a target YAML-file located in the kas/targets directory. You can find values for <MACHINE> and <TARGET_YAML> in the table Table 1.1. For example, to start virtual machine for qemux86-64.yml target you need to run the following command:

$ kas shell -c "runqemu qemux86-64" kas/targets/qemux86-64.yml

When the virtual machine boots, you can log in using the default credentials or access via network to WebUI.

For running virtual machine with screen support you also need to set proper value to environment variable DISPLAY. For example, for qemux86-64-screen.yml target:

$ kas shell -c "DISPLAY:=0 runqemu qemux86-64-screen" kas/targets/qemux86-64-screen.yml

See the following figures, showing the boot up process of the qemux86-64-screen virtual machine on the QEMU virtual screen.

../../../../_images/qemux86-64-screen-qemuboot-1.png

Fig. 1.1 Booting in QEMU 1/5

../../../../_images/qemux86-64-screen-qemuboot-2.png

Fig. 1.2 Booting in QEMU 2/5

../../../../_images/qemux86-64-screen-qemuboot-3.png

Fig. 1.3 Booting in QEMU 3/5

../../../../_images/qemux86-64-screen-qemuboot-4.png

Fig. 1.4 Booting in QEMU 4/5

../../../../_images/qemux86-64-screen-qemuboot-5.png

Fig. 1.5 Booting in QEMU 5/5

See also

See Running TanoWrt Image Inside Oracle VirtualBox for details about running built x86 virtual machine in Oracle VirtualBox.

1.5 Default Network Configuration

By default eth0 interface are joined into a bridge (br-lan interface). Bridge (br-lan) configured with static IP address 192.168.7.2/24 with enabled DHCP server.

The eth0 interface has enabled LLDP by default.

Default configuration /etc/config/network for qemux86-64-screen machine:

[root@tanowrt ~]# cat /etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config device
        option name 'br-lan'
        option type 'bridge'
        option stp '1'
        list ports 'eth0'

config interface 'lan'
        option proto 'static'
        option ipaddr '192.168.7.2'
        option netmask '255.255.255.0'
        option gateway '192.168.7.1'
        option ip6assign '60'
        option device 'br-lan'

config globals 'globals'
        option ula_prefix 'fd05:b980:c78a::/48'

1.6 Web User Interface

The WebUI can be accessed via Ethernet port or USB network connection through HTTP(s) protocol. You must see something like this in browser after you logged in:

../../../../_images/page-login.png

Fig. 1.6 LuCI WebUI Login Page

../../../../_images/qemux86-64-screen-luci-status.png

Fig. 1.7 LuCI WebUI Overview Page

1.7 Firmware Upgrade

No special information about firmware upgrade. Use produced .swu artifact for upgrading running system.

See also

See common instructions in Firmware Upgrade section.