Automotive Grade Linux is a collaborative, open source project that brings together automakers, suppliers, and technology companies for the purpose of building Linux-based, open source software platforms for automotive applications that can serve as de facto industry standards.
AGL address all software in the vehicle: infotainment, instrument cluster, heads-up-display (HUD), telematics, connected car, advanced driver assistance systems (ADAS), functional safety, and autonomous driving.
The Automotive Grade Linux Software Architecture diagram is below. The architecture consists of five layers. The App/HMI layer contains applications with their associated business logic and HMI.
The Application Framework layer provides the APIs for creating both managing and running applications on an AGL system. The Services layer contains user space services that all applications can access. The Operating System (OS) layer provides the Linux kernel and device drivers along with standard OS utilities. For IVI (In Vehicle Infotainment) system a full fledged demo is available.
The following table briefs about the various hardware platforms, supported by AGL :
| BOARD | $MACHINE | ARCHITECHTURE |
|---|---|---|
| BeagleBone | bbe | arm32 |
| beaglebone | arm32 | |
| i.MX 6 | cubox-i | arm32 |
| imx6qdlsabreauto | arm32 | |
| nitrogen6x | arm32 | |
| i.MX 8 | imx8mqevk | arm64 |
| imx8mqevk-viv | arm64 | |
| Snapdragon | dragonboard-410c | arm64 |
| dragonboard-820c | arm64 | |
| ARC HS | hsdk | ARC |
| virtio | virtio-aarch64 | arm64 |
AGL includes some major components showing as follow:
When the AGL project was started, weston was chosen as the compositor, which is the reference implementation of a Wayland compositor, while for window management functionality it relied on ivi-shell (In-Vehicle Infotainment) together with an extension, called wayland-ivi-exension.
Waltham protocol is a IPC library similar to Wayland, developed with networking in mind. It operates over TCP sockets, while the wayland protocol only works locally over a UNIX socket. It retains wayland-esque paradigm, making use of XMLs to describe the protocol, and it follows an object-oriented design with an asynchronous architecture.
The DRM Lease Manager is used in AGL to allocate display controller outputs to different processes. Each process has direct access to its allocated output via the kernel DRM interface, and is prevented from accessing any other outputs managed by the display controller.
PyAGL was written to be used as a testing framework replacing the Lua afb-test one, however the modules are written in a way that could be used as standalone utilities to query and evaluate apis and verbs from the App Framework Binder services in AGL.
AGL uses the PipeWire daemon service to provide audio playback and capture capabilities. PipeWire is accompanied by a secondary service, WirePlumber (also referred to as the session manager), which provides policy management, device discovery, configuration and more.
Applications can connect to the PipeWire service through its UNIX socket, by using either the libpipewire or libwireplumber libraries as a front-end to that socket.
repo init -b koi -uhttps://git.automotivelinux.org/AGL/AGL-repo
repo sync
add file agl_imx8qmmek.inc to path 'meta-agl\meta-agl-bsp\conf\include'.
add files 40_bblayers.conf.inc, 50_local.conf.inc and 50_setup.sh to path 'meta-agl\templates\machine\imx8qmmek'.
source meta-agl/scripts/aglsetup.sh -f -m imx8qmmek agl-demo
bitbake agl-demo-platform
Then the wic image can be flashed into i.mx8qm showing as below: