
Constructing an Android Automotive OS won’t be a troublesome activity by itself, however the lack of excellent tutorials makes it exceptionally arduous. It solely will get tougher in the event you don’t have at hand any specialised {hardware} like R-Automotive or Dragonboard. Nonetheless, you possibly can simply get a Raspberry Pi – a small ARM-powered, multi-usage laptop and an ideal candidate to run AAOS. To make the method simpler for everybody combating this sort of activity, on this article, I’ll clarify step-by-step methods to construct and run the newest model: Android Automotive OS 13.
Let’s get began!
Conditions
To construct the system, you will want a Linux. You need to use WSL or MacOS (keep in mind, you want a case-sensitive file system), however pure Linux is the best choice.
{Hardware}
As within the earlier article, you want a Raspberry Pi 4B microcomputer, an influence adapter (or you possibly can energy it out of your PC with a USB cable), a reminiscence card, and a show. It’s good to have a touchscreen, however you should utilize your mouse and, optionally, a keyboard if extra handy.
One other nice-to-have factor is a USB-TTL bridge for debugging. Discover my earlier article for extra particulars on methods to use it.
TL;DR;
If you happen to’re on the lookout for the easy means, go to https://github.com/grapeup/aaos_local_manifest and observe the readme. There are only a few instructions to obtain, construct and create a writeable IMG file in your Raspberry. However you want a couple of hours to obtain and construct it anyway. Warning! It could not begin in the event you gained’t regulate the show settings (see beneath for particulars).
Adjusting AOSP to make it AAOS
This undertaking relies on Raspberry Vanilla by KonstaT – an awesome AOSP port for Raspberry Pi. It covers every little thing you want to run a pure Android in your Raspberry – an adjusted kernel, {hardware} drivers, and so on. Nonetheless, there isn’t a automotive construct, so you want to assemble it.
There are 4 repositories in github.com/grapeup concerning AAOS – three forks based mostly on Raspberry Vanilla and one new one.
The repository aaos_local_manifest incorporates an inventory of modified and new repositories. All vital modifications are situated in system/brcm/rpi4 and system/brcm/rpi4-car
tasks outlined within the manifest_brcm_rpi4.xml
file. Within the readme of this repository, you’ll discover steps to clone and construct the undertaking.
The following repository, aaos_device_brcm_rpi4, incorporates three components:
The primary and most essential is to make the most of the brand new rpi4-car
undertaking and take away conflicting objects from the bottom undertaking.
Within the aosp_rpi4.mk
file, there’s a new line
$(name inherit-product, system/brcm/rpi4-car/rpi4_car.mk)
to incorporate a brand new undertaking.
Within the system.mk
file, the product attribute is modified to “automotive,nosdcard
“, and all customized overlays are eliminated, together with the overlay listing subsequent to the file.
Within the manifest.xml
file, the “android.{hardware}.automotive.automobile
“ HAL ({Hardware} Abstraction Layer) is added.
The second factor is to configure the construct for the display I use. I needed to set the display decision in vendor.prop
and set the display density in BoardConfig.mk
. You most likely don’t want such modifications in the event you use a regular PC monitor, otherwise you want another one in your customized show. Remember that the system gained’t begin in any respect if the decision configured right here shouldn’t be supported by your show.
The final factor incorporates my regional/language settings in aosp_rpi4.mk
. I’ve determined to make use of this file, because it’s not automotive-related, and to depart it within the code to indicate methods to regulate it if wanted.
The principle half
Essentially the most main modifications are situated within the aaos_device_brcm_rpi4_car repository.
The rpi4_car.mk
file relies on system/generic/automobile/frequent/automobile.mk
with few modifications.
Conditional, particular settings for the Generic System Pictures are eliminated together with the emulator configuration (system/generic/automobile/frequent/config.ini
) and the emulator audio package deal (android.{hardware}.audio.service-caremu
).
As a substitute, you want a mix of vendor-specific and board-specific elements, not included within the frequent/automobile makefile designed for an emulator.
Android Automotive OS is strictly coupled with an audio engine, so you want to add an automotive audio management package deal (android.{hardware}[email protected]
) to make it work, even in the event you don’t wish to join any audio system to your board. Additionally, AAOS makes use of a particular show controller with the power to make use of two shows on the identical time ([email protected]
), so you want to embody it too. The following half is SELinux policy for actual boards (not an emulator).
BOARD_SEPOLICY_DIRS += system/generic/automobile/frequent/sepolicy
Then you want to add permissions to a couple pre-installed, automotive-oriented packages, to permit them to run within the system or consumer areas.
PRODUCT_COPY_FILES += system/google/cuttlefish/shared/auto/preinstalled-packages-product-car-cuttlefish.xml:$(TARGET_COPY_OUT_PRODUCT)/and so on/sysconfig/preinstalled-packages-product-car-cuttlefish.xml
The following part is EVS – Exterior View System launched to AAOS 13. Even in the event you don’t actually wish to join a number of cameras to the system up to now, you must embody the default implementation of the part and configure it to work as a mock.
DEVICE_PACKAGE_OVERLAYS += system/google/cuttlefish/shared/auto/overlay
ENABLE_EVS_SERVICE ?= true
ENABLE_MOCK_EVSHAL ?= true
ENABLE_CAREVSSERVICE_SAMPLE ?= true
ENABLE_SAMPLE_EVS_APP ?= true
ENABLE_CARTELEMETRY_SERVICE ?= true
CUSTOMIZE_EVS_SERVICE_PARAMETER := true
PRODUCT_PACKAGES += android.{hardware}[email protected]
PRODUCT_COPY_FILES += system/google/cuttlefish/shared/auto/evs/init.evs.rc:$(TARGET_COPY_OUT_VENDOR)/and so on/init/init.evs.rc
BOARD_SEPOLICY_DIRS += system/google/cuttlefish/shared/auto/sepolicy/evs
The final half is to regulate variables for a system when working. You set two system properties straight within the makefile (to permit a compelled orientation and to allow the AVRCP Bluetooth profile).
PRODUCT_SYSTEM_DEFAULT_PROPERTIES +=
config.override_forced_orient=true
persist.bluetooth.enablenewavrcp=false
Ultimately, you override the next system variables, utilizing predefined and customized overlays.
PRODUCT_PACKAGE_OVERLAYS +=
system/brcm/rpi4-car/overlay
system/generic/automobile/frequent/overlay
Typically talking, PRODUCT_PACKAGE_OVERLAYS
permits us to overwrite any worth from a property file situated within the supply code. For instance, in our case the overlay root listing is system/brcm/rpi4-car/overlay
, so the file system/brcm/rpi4-car/overlay/frameworks/base/core/res/res/values/config.xml
overwrites properties from the file frameworks/base/core/res/res/values/config.xml.
Let’s dive into properties modified.
- frameworks/base/core/res/res/values/config.xml file:
- config_useVolumeKeySounds disables utilization of {hardware} quantity keys, as they don’t seem to be current in our setup,
- config_voice_capable permits data-only mode, as there isn’t a risk to make a voice name from our board,
- config_sms_capable disables SMS capabilities for a similar cause,
- networkAttributes and radioAttributes units the system to make use of WiFi, Bluetooth and ethernet connections solely, as there isn’t a GSM modem onboard,
- config_longPressOnPowerBehavior disables long-press on an influence button, as there isn’t a energy button related,
- config_disableUsbPermissionDialogs disables USB permission display, because it shouldn’t be used within the AAOS,
- config_defaultUiModeType permits the automotive launcher by default,
- config_defaultNightMode permits evening mode because the default one.
- frameworks/base/packages/SettingsProvider/res/values/defaults.xml file:
- def_wifi_on permits WiFi by default,
- def_accelerometer_rotation units the default orientation,
- def_auto_time permits acquiring time from the Web when related,
- def_screen_brightness units the default display brightness,
- def_bluetooth_on permits Bluetooth by default,
- def_location_mode permits functions to make use of location companies by default,
- def_lockscreen_disabled disables the lockscreen,
- def_stay_on_while_plugged_in units the system to remain enabled on a regular basis.
packages/apps/Automotive/LatinIME/res/structure/input_keyboard.xml
file units the default foreground colour of the default keyboard, because the default one shouldn’t be very readable. SetkeyTextColorPrimary
andtextColor
parameters to regulate it.packages/apps/Automotive/LatinIME/res/values/colours.xml
units colours or image characters on the default keyboard and the letter/symbols swap on the underside proper nook.packages/apps/Automotive/SystemUI/res/values/colours.xm
l units the background colour of the standing bar fast settings to make the default font colour readable.-
packages/apps/Automotive/SystemUI/res/values/config.xml
hides brightness settings from the highest bar, because it doesn’t work and not using a particular drivers for the show.
- packages/apps/Settings/res/values/config.xml file:
- config_show_call_volume disables quantity management throughout calls,
- config_show_charging_sounds disables charging sounds,
- config_show_top_level_battery disables battery degree icon.
- packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml permits 5Ghz help for the WiFi.
-
packages/companies/Automotive/service/res/values/config.xml
disables working a devoted software when the system begins up or a driver is modified.
You possibly can learn extra about every of these settings within the feedback within the authentic information which these settings got here from.
The final repository is aaos_android_hardware_interfaces . You don’t want it, however there may be one helpful property hardcoded right here. In Android, there’s a idea known as HAL – {Hardware} Abstraction Layer. For AAOS, there may be VHAL – Automobile {Hardware} Abstraction Layer. It’s accountable, amongst others, for HVAC – Heating, Air flow, and Air Conditioning. In our setup, there isn’t a automobile {hardware} and no bodily HVAC, so you employ android.{hardware}.automotive.automobile@V1-emulator-service
whose default implementation is situated beneath {hardware}/interfaces/automotive/automobile
. To vary the default models utilized by HVAC from imperial to rest-of-the-world, you want to regulate the {hardware}/interfaces/automotive/automobile/aidl/impl/default_config/embody/DefaultConfig.h
file.
Constructing
The constructing course of for AAOS 13 for Raspberry Pi is way simpler than the one for AAOS 11. The kernel is already precompiled and there may be a lot much less to do.
Simply name these three instructions:
. construct/envsetup.sh
lunch aosp_rpi4-userdebug
make bootimage systemimage vendorimage
On a Home windows laptop computer (utilizing WSL, in fact) with the i7-12850HX processor and 32GB RAM, it takes round 1 hour and 40 minutes to perform the construct.
Making a bootable SD card
There are two choices – with or with out the mkimg.sh
script. The script is situated beneath system/brcm/rpi4
listing and linked in the primary listing of the undertaking as rpi4-mkimg.sh
. The script creates a digital picture and places 4 partitions inside – boot, system, vendor,
and userdata.
It’s helpful as a result of you should utilize Raspberry Pi Imager to put in writing it into an SD card nonetheless, it has a couple of limitations. The picture all the time has 7GB (you possibly can change it by adjusting the IMGSIZE
variable within the script), so that you gained’t use the remainder of your card, regardless of how huge it’s. Apart from that, you all the time want to put in writing 7GB to your card – even when you must replace solely a single partition, and together with writing zeros to an empty userdata partition.
The choice means is to put in writing it on the cardboard by hand. It’s difficult beneath Home windows as WSL doesn’t comprise card reader drivers, however it’s handy in different working techniques. All required information are constructed within the out/goal/product/rpi4
listing. Let’s put together and write the cardboard. Warning! In my system, the SD card is seen as /dev/sdb
. Please regulate the instructions beneath to not destroy your information.
OK, let’s clear the cardboard. You should wipe every partition earlier than wiping your entire system to take away file techniques signatures.
sudo umount /dev/sdb*
sudo wipefs -a /dev/sdb*
sudo wipefs -a /dev/sdb
Now let’s put together the cardboard. This line will use fdisk
to create 4 partitions and set flags and filesystems.
echo -e "nnnnn+128Mnantn0cnnnnnn+2Gnnnnnn+256Mnnnpnnnwn" | sudo fdisk /dev/sdb
The final step is to put in writing information and put together the final partition.
sudo dd if=boot.img of=/dev/sdb1 bs=1M
sudo dd if=system.img of=/dev/sdb2 bs=1M
sudo dd if=vendor.img of=/dev/sdb3 bs=1M
sudo mkfs.ext4 -L userdata /dev/sdb4
sudo umount /dev/sdb*
Abstract
Android Automotive OS is a big leap for the automotive business. As there isn’t a manufacturing automobile with AAOS 13 up to now, you possibly can expertise the long run with this guide. What’s extra, you are able to do it with a low-budget Raspberry Pi laptop. This manner, I hope you possibly can develop your functions and play with the system simply with out a further layer of utilizing emulators. Good luck and completely satisfied coding!