This repository contains a Yocto-based Automotive IVI platform integration project designed to build a custom Linux image integrating a Head Unit and an Instrument Cluster on a single system.
The project focuses on layered Yocto design, graphics stack integration, and application-level composition control, following common Automotive IVI architecture principles.
- Build a reproducible and maintainable IVI Linux image using Yocto.
- Integrate multiple automotive applications within a unified graphics environment.
- Control application startup, rendering, and system behavior through Yocto recipes and system services.
- Establish a scalable layer structure suitable for future automotive platform expansion.
flowchart TB
subgraph Base["Yocto Base"]
Poky[Poky]
OE[meta-openembedded]
BSP[meta-raspberrypi]
end
subgraph Custom["Custom Layer"]
MI[meta-infotainment]
end
subgraph Kernel["Kernel Customization"]
KBB[linux-raspberrypi bbappend]
end
subgraph Graphics["Graphics & Display"]
IVI[IVI Compositor]
Qt[Qt / Wayland]
end
subgraph Applications["Userspace Applications"]
HU[Head Unit App]
IC[Instrument Cluster App]
SM[Service Manager]
end
subgraph Image["Final Image"]
IMG[Infotainment Image]
end
Poky --> MI
OE --> MI
BSP --> MI
MI --> KBB
MI --> IVI
MI --> HU
MI --> IC
MI --> SM
MI --> IMG
IVI --> Qt
Qt --> HU
Qt --> IC
The system is built on top of the Yocto Project and structured using a clear layer hierarchy:
- Provide the Yocto build system, common packages, and BSP support.
- Include Poky, meta-openembedded, and a Raspberry Pi BSP layer.
- A dedicated custom layer that integrates kernel customization, graphics stack configuration, and automotive applications.
- Serves as the central integration point for the IVI platform.
- Kernel behavior and configuration are extended using bbappend files.
- Hardware-specific and platform-level requirements are handled at the Yocto layer level.
- Uses Qt with Wayland as the display backend.
- An IVI compositor is configured to control rendering and separation between the Head Unit and Instrument Cluster.
- Head Unit and Instrument Cluster applications are built and packaged as individual Yocto recipes.
- Applications are launched automatically at boot using systemd services.
- A single custom Linux image is generated, containing the complete IVI platform.
cd DES_Automotive-Yocto
scripts/install_layers.sh
source layers/poky/oe-init-build-env
../scripts/add_layers.sh
../scripts/append_local_conf.sh
bitbake infotainmentContains all layers, including Poky, meta-qt6, meta-raspberrypi, and our custom layer meta-infotainment.
Board Support Package for Raspberry Pi 4B
Recipes for the custom infotainment image
Connectivity components such as Bluetooth, VSOMEIP, SSH, and CAN
Fixes the Linux kernel version to a specific release
Includes auto-login configuration and limited-privilege user creation for running applications
Qt6 bbappend files and customizations
Recipes for infotainment applications
Recipe for the IVI graphical compositor using Qt Wayland
Since the connected displays (DSI, HDMI) are rendering the GUI applications, you won't see the command line interface. Connect a keyboard to your Raspberry Pi and type the following commands:
sudo -
systemctl stop ivi-compositor
Then set a password using passwd and check the RPI's IP address using ifconfig.
Now you are ready to access your Raspberry Pi through SSH.
Make sure your host machine for development is in the same network with the RPi - WLAN access information can be configured in layers/meta-infotainment/recipes-connectivity/wpa-config/files/wpa_supplicant.conf (it is hardcoded - just for development).
We currently have the following systemd services:
- instrument-cluster
- head-unit
- ivi-compositor
- service-manager servicies
To start a service:
systemctl start [service name]To stop a service:systemctl stop [service name]
journalctl -u [service name]