FVP¶
The FVP device-type in LAVA refers to running Fixed Virtual Platforms.
LAVA FVP Dispatcher Setup¶
LAVA executes FVP devices inside Docker containers. Therefore, like any other LAVA dispatcher that can run docker device types, Docker needs to be installed.
FVP Binaries¶
LAVA does not handle the download of FVP binaries: these are assumed to be in the Docker image defined in the LAVA job.
FVP binaries are not available in any public Docker images and must be download at developer.arm.com. Therefore, custom Docker images must be created for this purpose. Either these images should be built on the dispatcher to use a local image, or they can be pushed to a private registry: FVP binaries must not be redistributed.
Building FVP Docker Images¶
Once FVP binaries have been obtained from developer.arm.com, these must be built into a Docker image.
- There are few dependencies:
FVP Binaries
telnet
command. This is used to connect to a UART.
For these basics, here is a sample Dockerfile to create a Docker image for
running FVPs in LAVA, which can be built with a docker build
command.
Networking inside Models¶
Optionally, if you require networking in the model, here is a way to enable this. For this example the base OS is Ubuntu.
Ensure
libvirt-bin
package is installed in theDockerfile
.Add the following contents into
/etc/libvirt/hooks/network
.
#!/bin/bash
# If the change occurs to the "default" libvirt managed network
if [ "${1}" = "default" ] ; then
# If the network is started
if [ "${2}" = "started" ] ; then
ip tuntap add mode tap tap01
ip link set tap01 promisc on
ip link set tap01 up
brctl addif virbr0 tap01
fi
fi
Create a custom entrypoint script that calls
/usr/sbin/libvirtd &
before the commands given:exec "$@"
.libvirt will create a
virbr0
bridge and then a tap interfacetap01
connected to it.tap01
is what the model will use.Add the following arguments to your foundation model (other models will differ):
arguments:
- ...
- "--network=bridged"
- "--network-bridge=tap01"
This will be required if you require the use of transfer_overlay
.
This could be useful in the event you want to pass binaries to the model that
contains the filesystem but stored in a way LAVA cannot currently put the overlay into.
transfer_overlay:
# It may be required to suppress some kernel messages
download_command: echo 3 > /proc/sys/kernel/printk ; wget
unpack_command: tar -C / -xzf
Reading from all model consoles¶
Sometimes models offer more than one console that produces useful output. LAVA can only write to one console at a time.
Reading can be done from multiple consoles. In some cases it’s essential to read from all consoles to prevent
model from hanging. This happens when internal model buffer is not able to accept more output because previously
generated output is not consumed. FVP boot method allows to define additional regexes to match more than one console.
This is done with feedbacks
keyword:
console_string: 'terminal_0: Listening for serial connection on port (?P<PORT>\d+)'
feedbacks:
- '(?P<NAME>terminal_1): Listening for serial connection on port (?P<PORT>\d+)'
- '(?P<NAME>terminal_2): Listening for serial connection on port (?P<PORT>\d+)'
- '(?P<NAME>terminal_3): Listening for serial connection on port (?P<PORT>\d+)'
Feedbacks will be read twice during boot process (before matching login prompt) and periodically during test-shell.