QCOM Landing Team – #568
- Build URL: https://ci.linaro.org/job/lt-qcom-debian-images-dragonboard845c/568/
- OS flavour: sid
- FAI: https://git.linaro.org/ci/fai.git
- FAI commit: e3ec8d4074e8b454e21e16819641a514b48e87e3
- Linaro Debian developer: size: 2.1G
- Linaro Debian gnome: size: 4.0G
- Kernel package name: linux-image-5.15.0-qcomlt-arm64
- Kernel package version: 5.15.7-00005-19-252
The Linaro Qualcomm Landing Team is pleased to announce the new release of the Linaro Linux release for Qualcomm™ Snapdragon® 845 processor. The Linaro Linux release 21.12 is a Debian-based Linaro Build that provides developers with a desktop like environment using Debian and the GNOME desktop, as well as a console-only image.
What’s new in this release
- Major system upgrade to Debian Sid.
- Major kernel upgrade to Linux kernel 5.15.7.
- MESA upgrade to 21.2.6.
Important note(s) about this release
A firmware/bootloader upgrade is required for this release, install with the fastboot images, latest bootloader package.
For a list of all known issues, please check our Bugzilla
The Linaro Linux version 21.12 for the Snapdragon 845 supports the following features:
- Provides a working Debian environment with access to Debian repositories (apt-get) and updates. It is based on Debian Sid.
- It is based on Linux kernel 5.15.7.
- It is based on proprietary firmware released by the board manufacturer, Thundercomm. A copy of the firmware is available here.
- The following images are released:
bootimage that includes prebuilt kernel and initrd
developerimage that includes core packages as well as typical development packages (headless)
gnomeimage that includes a desktop environment GUI using GNOME3
- All images have a pre-configured user called
linaro, and the password for this user is set to
- The root file system should be flashed in the onboard UFS.
- The following features are supported on the DragonBoard 845c:
- SDA845 8x Kryo 385 CPU, up to 2.8 GHz
- PSCI with support for cpuidle, SMP, hotplug and restart.
- Adreno 630 GPU, powered by
freedrenoMesa/Gallium GPU driver, version 21.2.6
- Open GL ES 3.1 and Open GL 2.0
- X11 -modesetting video driver
- HDMI display
- UART, SD, UFS
- USB 3.0 (Mouse, Keyboard, Storage, Ethernet)
- Hardware accelerated video codecs using dedicated Snapdragon coprocessor
- Bluetooth using integrated WCN3990 chip.
- WiFi 802.11 using ATH10k.
- Analog audio using WCD934x.
- HDMI audio using Lontium Lt9611.
Information about the DragonBoard 845c
For more information about the DragonBoard 845c, please check the following website and wiki:
How to install and use this release
To install this release please follow the instructions from the DragonBoard 845c installation guide.
This release contains proprietary firmware. You can download the proprietary firmware separately, from here. All the required firmware files are pre-installed, and our images are bound to the Qualcomm Linux BSP license agreement. A copy of the LICENSE can be found in the image as
Running the GNOME Desktop image
The GNOME image is expected to provide a desktop-like experience, as such it is recommended to use an HDMI monitor, as well as USB keyboard and mouse. The default image will directly boot to the login screen by default. However a root console login will also be started on the serial console.
Note: The default bootargs enable the kernel messages to be displayed on the serial console.
Running the Developer based image
If you have flashed the developer image, when booting the board you will end up in a root login on the serial console. If you have an HDMI monitor connected, you will also have login terminals on the display
Building the Linux kernel from source
The Linux kernel used in this release is available via tags in the Linaro Qualcomm Landing Team git repository:
git: http://git.linaro.org/landing-teams/working/qualcomm/kernel.git tag: debian-qcom-dragonboard845c-21.12 defconfig: arch/arm64/defconfig kernel/configs/distro.config
The kernel image (
Image.gz) is located in the
boot image and partition and the kernel modules are installed in the root file system. It is possible for a user to rebuild the kernel and run a custom kernel image instead of the released kernel. You can build the kernel using any recent GCC release using the git tree, tag and defconfig mentioned above. This release only supports booting with device tree, as such both the device tree blobs need to be built as well.
The DragonBoard 845c is an ARMv8 platform, and the kernel is compiled for the Aarch64 target. Even though it is possible to build natively, on the target board, It is recommended to build the Linux kernel on a PC development host. In which case you need to install a cross compiler for the ARM architecture. It is recommended to download the ARM GCC cross compiler.
To build the Linux kernel, you can use the following instructions:
git clone -n http://git.linaro.org/landing-teams/working/qualcomm/kernel.git cd kernel git checkout -b kernel-21.12 debian-qcom-dragonboard845c-21.12 export ARCH=arm64 export CROSS_COMPILE=<path to your GCC cross compiler>/aarch64-linux-gnu- make defconfig distro.config make -j4 Image.gz dtbs KERNELRELEASE=5.15.0-qcomlt-arm64
Additionally, you might want or need to compile the kernel modules:
make -j4 modules KERNELRELEASE=5.15.0-qcomlt-arm64
The kernel modules need to be put in the root file system, under
/lib/modules folder. To export the built modules, please run:
make modules_install KERNELRELEASE=5.15.0-qcomlt-arm64 INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=<folder>
You will then need to transfer the content of
<folder> onto the target root file system.
Building a boot image
You now need to create a valid boot image with your own kernel build.
The boot image consists of the kernel image, appended with the proper device tree blob (
Image.gz) and an init ramdisk image. We used to include a device tree table generated with a custom tool (@dtbTool) but it is no longer needed, assuming you are running the most recent bootloader package. A new feature was implemented in the bootloader to allow using an unmodified device tree blob to be appended to the compressed kernel image.
cat arch/arm64/boot/Image.gz arch/arm64/boot/dts/qcom/sdm845-db845c.dtb > Image.gz+dtb
To create the boot image, you also need a ramdisk image, and you can use the one from the release:
wget http://releases.linaro.org/96boards/dragonboard845c/linaro/debian/21.12/initrd.img-5.15.0-qcomlt-arm64 -O initrd.img
mkbootimg is a standalone application that will process all files and create the boot image that can then be booted on the target board, or flash into the on-board eMMC. On Debian/Ubuntu systems,
mkbootimg can be installed with:
sudo apt install android-tools-mkbootimg
The boot image also contains the kernel bootargs, which can be changed as needed in the next command:
mkbootimg --kernel Image.gz+dtb \ --ramdisk initrd.img \ --output boot-db845c.img \ --pagesize 4096 \ --base 0x80000000 \ --cmdline "root=PARTLABEL=rootfs console=tty0 console=ttyMSM0,115200n8 clk_ignore_unused pd_ignore_unused"
Booting a custom boot image
Assuming you have now built a valid boot image called
boot-db845c.img, you can run the following
fastboot command to boot it on the board:
sudo fastboot boot boot-db845c.img
If you want to permanently use a custom kernel image, you can update the boot image and reflash it into the
sudo fastboot flash boot boot-db845c.img
How to get and customize the bootloader
While the first stage bootloader is proprietary and released by the board manufacturer, Thundercom here, the second stage bootloader is
ABL and is open source.
The source code which is used in this release can be found in the Linaro Qualcomm Landing Team git repository:
git: http://git.linaro.org/landing-teams/working/qualcomm/abl.git tag: dragonboard845c-LE.UM.3.2.2.r1-02700-sdm845.0-linaro3
wget -qO- https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz | tar -xf - export PATH=$(pwd)/../gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/:$PATH git clone https://source.codeaurora.org/quic/la/platform/prebuilts/clang/host/linux-x86 -b LA.UM.7.9.r1-07300-sm6150.0 clang git clone http://git.linaro.org/landing-teams/working/qualcomm/abl.git -b dragonboard845c-LE.UM.3.2.2.r1-02700-sdm845.0-linaro3 cd abl mkdir -p out/edk2 make all \ BOOTLOADER_OUT=out/edk2 \ BUILD_SYSTEM_ROOT_IMAGE=0 \ VERIFIED_BOOT=0 \ VERIFIED_BOOT_2=0 \ VERIFIED_BOOT_LE=0 \ USER_BUILD_VARIANT=0 \ DISABLE_PARALLEL_DOWNLOAD_FLASH=1 \ ABL_USE_SDLLVM=false \ ABL_SAFESTACK=false \ CLANG_BIN=$(pwd)/../clang/clang-4691093/bin/ \ CLANG_PREFIX="aarch64-linux-gnu-" \ TARGET_ARCHITECTURE=AARCH64 \ BOARD_BOOTLOADER_PRODUCT_NAME="SuperEDK2k"
How to get and customize Debian/Ubuntu packages source code
This release is based on Debian Sid, and it is not possible to use a different Debian release (e.g. it is not possible to downgrade to an older Debian release, nor is it possible to use a newer release, such as the one being currently developed).
Since all packages installed in Linaro Debian-based images are maintained either in Debian archives or in Linaro repositories, it is possible for users to update their environment with commands such as:
sudo apt-get update sudo apt-get upgrade
All user space software is packaged using Ubuntu or Debian packaging process. As such you can find extensive information about using, patching and building packages in the Ubuntu packaging guide or The Debian New Maintainers Guide. If you quickly want to rebuild any package, you can run the following commands to fetch the package source code and install all build dependencies:
sudo apt-get update sudo apt-get build-dep <pkg> apt-get source <pkg>
Then you can rebuild the package locally with:
cd <pkg-version> dpkg-buildpackage -b -us -uc
- you can drop patches in debian/patches/ and update debian/patches/series before building with dpkg-buildpackage to customize the source code.
- all associated .deb files will be located in the root folder, and can be installed in the system with dpkg -i
- all these commands should be executed on the target directly, not on the development host. It is generally enough to build packages natively, on the target platform. For some packages, it is possible to cross compile Ubuntu/Debian packages however this goes beyond the scope of this wiki page.
Optimized video pipeline
In order to exercise a fully optimized video pipeline some specific settings need to be applied throughout the pipeline elements. With the fully optimized video use case there is no extra buffer copy, and the various drivers involved are sharing all video buffers using dmabuf.
To exercise the opimized video pipeline, you can use for example the following gstreamer command:
GST_GL_PLATFORM=egl gst-launch-1.0 filesrc location=<path to file> ! qtdemux name=m m.video_0 ! h264parse ! v4l2h264dec capture-io-mode=dmabuf ! glimagesink
As of FFmpeg 3.4, support for v4l2 hardware assisted codecs was added. As a consequence, FFmpeg can now use the Venus codecs, using the v4l2 APIs. FFmpeg is not included by default in the Linaro images, however FFmpeg 3.4.1 (at least) is available from Debian archives:
sudo apt install ffmpeg
Here is a sample command line that would decode a video file using hardware acceleration on Dragonboard 845c:
ffplay -sync video -autoexit -vcodec h264_v4l2m2m -i <an h264 video clip>
Feedback and Support
For general question or support request, please go to 96boards.org Community forum.
Bugs will be reviewed and prioritized by the team. For any bug report it is recommended to provide as much information as possible, and at the very list please include the name of the release you are using, the output of
dpkg -l to list all packages installed, as well, as the boot log (output of
How to contribute
We very much encourage developers to use and contribute to our releases, using the following instructions.
Qualcomm Snapdragon is product of Qualcomm Technologies, Inc.