Snapdragon 845¶
About this¶
This document describes the information about Qualcomm Snapdragon 845 supported boards and it’s usage steps.
SDM845 - hi-end qualcomm chip, introduced in late 2017. Mostly used in flagship phones and tablets of 2018.
U-Boot can be used as a replacement for Qualcomm’s original ABL (UEFI) bootloader. It is loaded as an Android boot image through ABL
Installation¶
Build¶
Setup CROSS_COMPILE for aarch64 and build U-Boot for your board:
$ export CROSS_COMPILE=<aarch64 toolchain prefix>
$ make <your board name here, see Boards section>_defconfig
$ make
This will build u-boot.bin in the configured output directory.
Generate FIT image¶
See doc/uImage.FIT for more details
Pack android boot image¶
We’ll assemble android boot image with u-boot.bin instead of linux kernel,
and FIT image instead of initramfs. Android bootloader expect gzipped kernel
with appended dtb, so let’s mimic linux to satisfy stock bootloader.
Boards¶
starqlte¶
The starqltechn is a production board for Samsung S9 (SM-G9600) phone, based on the Qualcomm SDM845 SoC.
Steps:
Build u-boot:
$ export CROSS_COMPILE=<aarch64 toolchain prefix> $ make starqltechn_defconfig $ make
Create dump dtb:
workdir=/tmp/prepare_payload mkdir -p "$workdir" cd "$workdir" mock_dtb="$workdir"/payload_mock.dtb dtc -I dts -O dtb -o "$mock_dtb" << EOF /dts-v1/; / { memory { /* We expect the bootloader to fill in the size */ reg = <0 0 0 0>; }; chosen { }; }; EOFgzip u-boot:
gzip u-boot.bin
Append dtb to gzipped u-boot:
cat u-boot.bin.gz "$mock_dtb" > u-boot.bin.gz-dtb
Now we’ve got everything to build android boot image:
mkbootimg --base 0x0 --kernel_offset 0x00008000 \ --ramdisk_offset 0x02000000 --tags_offset 0x01e00000 \ --pagesize 4096 --second_offset 0x00f00000 \ --ramdisk "$fit_image" \ --kernel u-boot.bin.gz-dtb \ -o boot.img
Flash image with your phone’s flashing method.
More information can be found on the Samsung S9 page.
dragonboard845c¶
The dragonboard845c is a Qualcomm Robotics RB3 Development Platform, based on the Qualcomm SDM845 SoC.
Steps:
Build u-boot:
$ export CROSS_COMPILE=<aarch64 toolchain prefix> $ make dragonboard845c_defconfig $ make
Create dummy dtb:
workdir=/tmp/prepare_payload mkdir -p "$workdir" mock_dtb="$workdir"/payload_mock.dtb dtc -I dts -O dtb -o "$mock_dtb" << EOF /dts-v1/; / { #address-cells = <2>; #size-cells = <2>; memory@80000000 { device_type = "memory"; /* We expect the bootloader to fill in the size */ reg = <0 0x80000000 0 0>; }; chosen { }; }; EOFgzip u-boot:
gzip u-boot.bin
Append dtb to gzipped u-boot:
cat u-boot.bin.gz "$mock_dtb" > u-boot.bin.gz-dtb
A
db845c.itsfile can be found inboard/qualcomm/dragonboard845c/directory. It expects a folder asdb845c_imgs/in the main directory containing pre-built kernel, dts and ramdisk images. Seedb845c.itsfor full path to images:mkimage -f db845c.its db845c.itb
Now we’ve got everything to build android boot image:
mkbootimg --kernel u-boot.bin.gz-dtb --ramdisk db845c.itb \ --output boot.img --pagesize 4096 --base 0x80000000
Flash boot.img using db845c fastboot method.
More information can be found on the DragonBoard 845c page.