About this

This document describes the information about Qualcomm QCS404 evaluation board and it’s usage steps.

The current boot flow support loading u-boot as an Android boot image via Qualcomm’s UEFI-based ABL (Android) Bootloader.



Setup CROSS_COMPILE for aarch64 and build U-Boot for your board:

$ export CROSS_COMPILE=<aarch64 toolchain prefix>
$ make qcs404evb_defconfig
$ make

This will build u-boot.bin in the configured output directory.

Generate FIT image

A qcs404.its file can be found in board/qualcomm/qcs404-evb/ directory. It expects a folder as qcs404_imgs/ in the main directory containing pre-built kernel, dts and ramdisk images. See qcs404.its for full path to images.

  • Build FIT image:

    mkimage -f qcs404-evb.its qcs404-evb.itb

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:

  • create dump dtb:

    mkdir -p "$workdir"
    cd "$workdir"
    dtc -I dts -O dtb -o "$mock_dtb" << EOF
    / {
            model = "Qualcomm Technologies, Inc. QCS404 EVB 4000";
            compatible = "qcom,qcs404-evb-4000", "qcom,qcs404-evb", "qcom,qcs404";
            #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 { };
  • gzip 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 --kernel u-boot.bin.gz-dtb \
--ramdisk qcs404-evb.itb --pagesize 4096 \
--base 0x80000000 --output boot.img

Flash image on qcs404-evb using fastboot method.