Contribute: Device Bring-Up

Contribute: Device Bring-Up

You want to contribute and help making AXP.OS better?! That is awesome and greatly appreciated!

Here some steps and tasks which would help in bringing up a new device more quickly!

Pre-requirements

  1. A github account (for PR’s against the manifests & build repos, can be skipped otherwise)
  2. A code.binbash.rocks account

Find device requests

Go through the list of device requests, there is no enforced priority but usually from oldest to newest is the expected one.

Low hanging fruits

Pre-filtered which shows just those which are 90% sure to be added:

Good enough

Pre-filtered (official) LineageOS ones which are 80% sure to be added:

Problematic ones

Pre-filtered unofficial LineageOS ones which are 40% sure to be added:

Firmware / Bootloader

for each device:

Firmware included?

A pre-check is required if Divest had supported including firmware in the past already:

If there is a folder with the requested codename, check the file 0SOURCE. It “maybe” lists the latest STOCK-OS version but that is not always the case.

If not, continue with the AXP.OS manifest topic otherwise go on.

Fairphone / SHIFTphone

AXP.OS does not ship the latest Android version but usually the firmware provided by the vendor is for the latest Android version only. There are some exceptions like Fairphone and SHIFT though which still supporting older Android versions and so AXP.OS releases based on those.

For these devices (currently Fairphone only) AXP.OS automatically downloads and includes the latest available firmware if properly set up. Here examples for the Fairphone 3 and Fairphone 4.

Basically the 0SOURCE file gets sourced by the update.sh script which must match the Fairphone model requirements. It handles not just the firmware but also the proprietary blobs! That also means the manifest for vendor/<vendor>/<model> must point to remote="axp.os-private".

Create a PR at https://code.binbash.rocks/AXP.OS/vendor_firmware for the file <codename>/0SOURCE in the following format:

##########################################################################
# <Fairphone | SHIFTphone> device
#
# will be sourced by the AXP.OS build process.
# FACTORYID and FACTORYIDHASH are case sensitive values
# and can be extracted from the actual download URL.
##########################################################################
#
# SOURCE: <BASE-DOWNLOAD-URL>
#
# LATEST: <DIRECT-DOWNLOAD-URL>
# MD5|SHA256|SHA512: <hash_IF-THERE-IS-NONE-CREATE-A-SHA512>
#
##########################################################################

FACTORYID="<REPLACE-FROM-DL-URL>"
FACTORYIDHASH="<REPLACE-FROM-DL-URL>"

# see download url
FACTORYFULLNAME="${FACTORYID}-gms-${FACTORYIDHASH}-user-fastbootimage"

# see release notes
export VENDOR_SECPATCH_DATE="<REPLACE-WITH-THAT-FROM-STRINGS-OUTPUT>"
Click to show an example for the Fairphone 3
##########################################################################
# Fairphone device
#
# will be sourced by the AXP.OS build process.
# FACTORYID and FACTORYIDHASH are case sensitive values
# and can be extracted from the actual download URL.
##########################################################################
#
# SOURCE: https://support.fairphone.com/hc/en-us/articles/18896094650513-Install-Fairphone-OS-manually#01HB8ZZ1BMMQNSNMFT3YXDBXA0
#
# LATEST: https://fairphone-android-builds.ams3.digitaloceanspaces.com/FP3/A13/FP3-6.A.031.7-gms-f31c7748-user-fastbootimage.zip
# SHA256: c061082822fa812a0e1485a60771069b1d0b7fabc107aecb3bc2ba63418b428b
#
##########################################################################

FACTORYID="FP3-6.A.035.2" FACTORYIDHASH="691ff58c"

see download url

FACTORYFULLNAME="${FACTORYID}-gms-${FACTORYIDHASH}-user-fastbootimage"

see release notes

export VENDOR_SECPATCH_DATE="2025-06-03"

<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Copy this”

<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>

Generic

All other devices (except Fairphone & SHIFTphone) will likely provide firmware for the latest Android version only.

You need to find the latest and Android-version-matching STOCK-OS ZIP from a trusted source. That means it must match the AXP.OS Android version.

Create a PR at https://code.binbash.rocks/AXP.OS/vendor_firmware for the file <codename>/0SOURCE in the following format:

##########################################################################
# <VENDOR-NAME> device
#
# will be sourced by the AXP.OS build process.
# FACTORYID and FACTORYIDHASH are case sensitive values
# and can be extracted from the actual download URL.
##########################################################################
#
# SOURCE: <BASE-DOWNLOAD-URL>
#
# LATEST: <DIRECT-DOWNLOAD-URL>
# MD5|SHA256|SHA512: <hash_IF-THERE-IS-NONE-CREATE-A-SHA512>
#
##########################################################################

FACTORYID="<REPLACE-FROM-DL-URL>"
FACTORYIDHASH="<REPLACE-FROM-DL-URL>"

# extract vendor.img, boot.img or system.img, then:
# $> strings <IMAGE> | grep -EA1 "build.vendor.security_patch|vendor.build.version.security_patch"
export VENDOR_SECPATCH_DATE="<REPLACE-WITH-THAT-FROM-STRINGS-OUTPUT>"
Click to show an example
##########################################################################
# Google device
#
# will be sourced by the AXP.OS build process.
# FACTORYID and FACTORYIDHASH are case sensitive values
# and can be extracted from the actual download URL.
##########################################################################
#
# SOURCE: https://developers.google.com/android/images#panther
#
# LATEST: https://dl.google.com/dl/android/aosp/panther-tq3a.230901.001-factory-21bf556f.zip
# SHA256: 21bf556f0d65fc1e383a5d0614084c9dce685219537e6909d0bbcffe0ef331ea
#
##########################################################################

FACTORYID="tq3a.230901.001" FACTORYIDHASH="21bf556f"

extract vendor.img, boot.img or system.img, then:

$> strings <IMAGE> | grep -EA1 "build.vendor.security_patch|vendor.build.version.security_patch"

export VENDOR_SECPATCH_DATE="2023-09-01"

<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Copy this”

<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>

Besides the quick “strings + grep” method you can also identify vendor.build.security_patch by extracting the vendor image from the STOCK-OS ZIP, mounting it and find the default or vendor prop containing that property.

If you are a trusted & verified developer:

Click to reveal
  • download STOCK-OS ZIP
  • extract the required files (likely requires an additional payload.bin extract)
  • modify 0SOURCE accordingly (see above)
  • push all required files (see <codename>/AndroidBoardVendor.mk)

Add sha1sums

Affects: <codename>/AndroidBoardVendor.mk

All new (i.e. starting from 2025-07 onwards) device additions must contain a sha1sum within the call method.

An example can be found here (noticed the for loop in the comment? it helps to generate the hash sums accordingly).

AXP.OS manifest

Note: this requires (atm) a github account.

A manifest entry must be added in the form like this: https://github.com/AXP-OS/manifest/commit/8c7b7df03ebb9fe615f7c98d91d7949075122c8d

Usually a device has its own tree and a common device one, while there are exceptions. The common one is usually included via inherit in the device one, e.g. as shown here. It usually is in the device.mk but can also happen in different mk files. Ensure you are on the correct LineageOS branch matching the requested Android version!

You might noticed some entries containing remote="axp.os" while others are named los or muppets. that depends on where to find the repos actually. At the top you find the base URLs of each remote.

  • remote="axp.os" for the common device tree (if there is none, the device specific one)
  • remote="muppets" for non-vendor-supported firmware at the vendor/<vendorname>/<model> entry (TheMuppets repo must be checked!)
  • remote="axp.os-private" only for vendor-supported firmware at the vendor/<vendor>/<model> entry
  • remote="los" for untouched repos, like the kernel and the device specific device tree

We need to enable AXP.OS’ build handling which usually happens in the common device tree, if available. Otherwise within the specific device itself but this is rare though. See above how to identify the common device tree.

Open a PR against https://github.com/AXP-OS/manifest and ensure that you base on the correct branch matching the requested Android version.

If you are a trusted & verified developer:

Click to reveal
Last updated on