Red Hat AutoSD#

AutoSD is the upstream binary distribution that serves as the public, in-development preview and functional precursor of the Red Hat In-Vehicle Operating System (OS).

AutoSD is downstream of CentOS Stream, so it retains most of the CentOS Stream code with a few divergences, such as an optimized automotive-specific kernel rather than CentOS Stream’s kernel package.

Red Hat In-Vehicle OS is based on both AutoSD and RHEL, both of which are downstreams of CentOS Stream.

Target Maintainers/Integration Assistance#

GitHub Handles of the target maintainers.

  • Leonardo Rossetti - @odra

Integration Assistance#

The following fulfills integration assistance (aou_req__platform__integration_assistance)

Leonardo Rossetti

Github Handler

@odra

Slack Handler

@lrossett

Integration Manual#

The following fulfills integration manual (aou_req__platform__os_integration_manual)

Build Instructions#

Building an AutoSD image can be done by using “aib”: CentOS/automotive/src/automotive-image-builder

Sample usage:

export OCI_IMAGE=localhost/score:latest
export AIB_DISTRO=autosd10-sig

aib build-builder --distro ${AIB_DISTRO}
aib build --target qemu --distro ${AIB_DISTRO} image.aib.yml ${OCI_IMAGE}
aib to-disk-image ${OCI_IMAGE} autosd-score.qcow2

As an alternative, you can replace the bare metal “aib” usage with a bash script that runs the tool inside an OCI container:

curl -o auto-image-builder.sh "https://gitlab.com/CentOS/automotive/src/automotive-image-builder/-/raw/main/auto-image-builder.sh"
chmod +x auto-image-builder.sh

You can then replace the usage of “aib” with “auto-image-builder.sh” (requires sudo):

export OCI_IMAGE=localhost/score:latest
export AIB_DISTRO=autosd10-sig
# set the container storage to the local "_builder" directory to avoid permissions issues
export AIB_LOCAL_CONTAINER_STORAGE=$PWD/_build/containers-storage

sudo -E ./auto-image-builder.sh build-builder --distro ${AIB_DISTRO}
sudo -E ./auto-image-builder.sh build --target qemu --distro ${AIB_DISTRO} image.aib.yml ${OCI_IMAGE}
sudo -E ./auto-image-builder.sh to-disk-image ${OCI_IMAGE} autosd-score.qcow2

If using QEMU, you can run the image using the following command:

/usr/bin/qemu-system-x86_64 \
-drive file=/usr/share/OVMF/OVMF_CODE_4M.fd,if=pflash,format=raw,unit=0,readonly=on \
-drive file=/usr/share/OVMF/OVMF_VARS_4M.fd,if=pflash,format=raw,unit=1,snapshot=on,readonly=off \
-enable-kvm \
-m 2G \
-smp $(nproc) \
-machine q35 \
-cpu host \
-device virtio-net-pci,netdev=n0 \
-netdev user,id=n0,hostfwd=tcp::2222-:22 \
-daemonize \
-display none \
-drive file=disk.qcow2,index=0,media=disk,format=qcow2,if=virtio,id=rootdisk,snapshot=off

Toolchain#

Upstream documentation: eclipse-score/inc_os_autosd

A Bazel toolchain defintion is provided for users to build their Bazel modules and components with AutoSD’s tooling (compilers, libraries, etc).

Sample usage (MODULE.bazel file):

# Use local path during development, or git_override for published versions
local_path_override(
    module_name = "os_autosd",
    path = "/path/to/inc_os_autosd/"
)

bazel_dep(name = "os_autosd", version = "1.0.0")

# Configure AutoSD 9 GCC toolchain
autosd_10_gcc = use_extension("@os_autosd//toolchain/autosd_10_gcc:extensions.bzl", "autosd_10_gcc_extension")
autosd_10_gcc.configure(
    c_flags = ["-Wall", "-Wno-error=deprecated-declarations", "-Werror", "-fPIC"],
    cxx_flags = ["-Wall", "-Wno-error=deprecated-declarations", "-Werror", "-fPIC"],
)

use_repo(autosd_10_gcc, "autosd_10_gcc_repo")
register_toolchains("@autosd_10_gcc_repo//:gcc_toolchain_linux_x86_64")

NOTE: AutoSD’s tooling does not support cross compilation.

Mixed Critical Orchestration#

Upstream documentation: https://sigs.centos.org/automotive/features-and-concepts/con_mixed-criticality/

Mixed Critical Orchestration, aka MCO, can be achieved with the following components:

  • Systemd: the init system that is responsible for workload orchestration

  • Eclise BlueChi: extends Systemd to enable multi-node and multi domain orchestration

  • QM: Quality management environment that is composed of two sub-systems: a dedicated rootfs partition + container isolation

ASIL and QM connectivity is done either via an IPC socket or shared memory (/dev/shm).

../../../../../_images/autosd-mco.png

Bug Interface#

The following fulfills bug interface (aou_req__platform__bug_interface)

CentOS SIG Automotive Mailing List

https://lists.centos.org/hyperkitty/list/automotive-sig@lists.centos.org/

Gitlab Issue Tracker

CentOS/automotive/sig

CentOS SIG Matrix Channel

https://app.element.io/#/room/#centos-automotive-sig:fedoraproject.org

Eclipse SDV Slack Channel

#autosd (https://sdvworkinggroup.slack.com/archives/C0986LJ9EJH)