Support
FAQs
Canonical, the publisher and company behind Ubuntu has made available a supported Ubuntu Operating System optimized to be deployed on Qualcomm IoT Platforms and SoCs.
You can find the list of development kits currently available by Ubuntu here.
You can find all the needed code here.
You can find the release notes and technologies/features enabled and supported here.
Please refer to the release notes.
There is a vibrant Ubuntu community Forum that you can access to get technical help from like-minded developers.
-
To report a bug, identify the related package in https://launchpad.net/ubuntu, create a bug, then subscribe to the “ubuntu-qcom-iot” team.
-
For the issues related to Qualcomm’s packages, file the bugs in https://launchpad.net/ubuntu-qcom-iot Launchpad project, managed by ubuntu-qcom-iot team.
Yes, Ubuntu Linux supports an AI stack that allows developers to optimally deploy pre-trained, deep learning models on Qualcomm hardware accelerators, such as Neural Processing Unit (NPU), Graphic Processing Unit (GPU), and Central Processing Unit (CPU). The software offering contains software development kits (SDKs), APIs, sample applications, development tools, and third-party frameworks support such as GStreamer and TFLite, to ease application development. You can find the details here.
Yes, the Ubuntu Linux distribution provides sample AI/ML applications that demonstrate AI capabilities. You can find the details here.
Developers using Ubuntu who want to develop their own model can do so using the details.
Yes. The robotics developer workflow for Ubuntu leverages the Qualcomm Intelligent Robotics Product (QIRP) SDK, which includes components that enable you to develop robotic features on Qualcomm platforms using Ubuntu OS.
See the reference here.
Download non-HLOS code from chipcode as below.
git clone -b r1.0_00075.0 --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk.git
Browsing link for above:
You need to have access to Qualcomm chipcode portal for building Qualcomm PPA source code. Please discuss with your Qualcomm counterpart for access.
For building non-HLOS, you can find details here. For flashing, please use QDL tool.
Reference here for QCS6490.
Reference here for QCS9075.
For IQ-X7181, below is the sample chipcode link for non-HLOS.
https://code.qualcomm.com/qualcomm/ubuntu-qualcomm-iot-spf-1-0_ap_standard_oem/tree/r1.0.r1_00012.0
For flashing IQ-X7181 images, please make sure QDL tool version is v2.5 or above.
For Ubuntu-24.04 target images (QCS6490, QCS5430, IQ-9075, IQ-8275), you need Ubuntu-24.04 host machine.
Similarly, for Ubuntu-26.04 target images (IQ-X7181), you need Ubuntu-26.04 host machine.
You can also build linux-qcom kernel on-device directly on IQ-8275, IQ-9075, and IQ-X7181 development kits. It is covered in subsequent section after host machine based steps.
Please note, any changes in linux-qcom kernel needs to be submitted to Canonical.
Setup host machine:
Ubuntu-24.04:
echo ‘deb-src http://ports.ubuntu.com/ubuntu-ports noble main restricted’ | sudo tee -a /etc/apt/sources.list
sudo apt update
sudo apt build-dep -y linux
sudo apt install build-essential dpkg-cross libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf fakeroot libncurses-dev dh-make llvm dwarves libtraceevent-dev libtracefs-dev gcc-aarch64-linux-gnu debhelper crossbuild-essential-arm64 dwarfdump
sudo snap install rustup –-classic
rustup install stable
Ubuntu-26.04:
echo “deb-src http://ports.ubuntu.com/ubuntu-ports resolute main restricted” | sudo tee -a /etc/apt/sources.list
echo “deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports resolute main restricted universe multiverse” | sudo tee -a /etc/apt/sources.list
sudo dpkg --add-architecture arm64
sudo apt update
sudo apt build-dep -y linux
sudo apt install -y build-essential dpkg-cross gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf fakeroot libncurses-dev dh-make llvm dwarves libtraceevent-dev libtracefs-dev gcc-aarch64-linux-gnu debhelper crossbuild-essential-arm64 dwarfdump pkg-config libudev-dev:arm64 libpci-dev:arm64
Download kernel code:
Ubuntu-24.04:
git clone https://git.launchpad.net/~canonical-kernel/ubuntu/+source/linux-qcom/+git/noble
cd noble
git tag --sort=-v:refname --- >> Choose from the list of available tags.
git checkout Ubuntu-qcom-6.8.0-1051.51
You can view the kernel code contents at below weblink also:
https://git.launchpad.net/~canonical-kernel/ubuntu/+source/linux-qcom/+git/noble/tree/?h=Ubuntu-qcom-6.8.0-1051.51
You can see the kernel tag used in kernel log also as shown below. Alternately, you can check the kernel tag in manifest file of Desktop or Server image also.
Log:
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050]
[ 0.000000] Linux version 6.8.0-1051-qcom (buildd@bos03-arm64-105) (aarch64-linux-gnu-gcc-13 (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #51-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 23 15:25:00 UTC 2025 (Ubuntu 6.8.0-1051.51-qcom 6.8.12)
Manifest file:
Below is sample manifest file.
iot-qualcomm-dragonwing-classic-desktop-2404-x10-20260403.4096b.manifest
Search for “linux-image-qcom” in above file for kernel tag.
Ubuntu-26.04:
git clone https://git.launchpad.net/~carmel-team/ubuntu/+source/linux/+git/resolute
cd resolute
git tag --sort=-v:refname --- >> Choose from the list of available tags.
git checkout Ubuntu-qcom-7.0.0-1005.7
You can see the kernel tag used in kernel log also as shown below. Alternately, you can check the kernel tag in manifest file of Desktop or Server image also.
Log:
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x512f0011]
[ 0.000000] Linux version 7.0.0-1005.7-qcom (buildd@bos03-arm64-060) (aarch64-linux-gnu-gcc (Ubuntu 15.2.0-16ubuntu1) 15.2.0, GNU ld (GNU Binutils for Ubuntu) 2.46) #5-Ubuntu SMP PREEMPT_DYNAMIC Wed Apr 29 08:22:35 UTC 2026 (Ubuntu 7.0.0-1005.7-qcom 7.0.0)
Manifest file:
Below is sample manifest file.
iot-qualcomm-dragonwing-classic-desktop-<VERSION>.manifest
Search for “linux-image-qcom” in above file for kernel tag.
Build kernel code:
cd noble (for Ubuntu-24.04)
cd resolute (for Ubuntu-26.04)
<<< Below build steps are common for Ubuntu-24.04 and 26.04 >>>
export ARCH=arm64
export $(dpkg-architecture -aarm64)
export CROSS_COMPILE=aarch64-linux-gnu-
fakeroot debian/rules clean
fakeroot debian/rules updateconfigs
fakeroot debian/rules binary ------ >> This cmd will build kernel.
To modify kernel config:
fakeroot debian/rules editconfigs
Ubuntu-24.04 Output Debian binaries:
Output Debian binaries are generated at below path.
# cd ../noble
# ls -al
-rw-r--r-- 1 guest users 1126618 Aug 22 06:10 linux-buildinfo-6.8.0-1051-qcom_6.8.0-1051.51_arm64.deb
-rw-r--r-- 1 guest users 3456636 Aug 22 06:10 linux-headers-6.8.0-1051-qcom_6.8.0-1051.51_arm64.deb
-rw-r--r-- 1 guest users 17909952 Aug 22 06:10 linux-image-6.8.0-1051-qcom_6.8.0-1051.51_arm64.deb
-rw-r--r-- 1 guest users 573694 Aug 22 06:10 linux-libc-dev-qcom_6.8.0-1051.51_all.deb
-rw-r--r-- 1 guest users 174039232 Aug 22 06:10 linux-modules-6.8.0-1051-qcom_6.8.0-1051.51_arm64.deb
-rw-r--r-- 1 guest users 14016848 Aug 22 06:10 linux-qcom-headers-6.8.0-1051_6.8.0-1051.51_all.deb
Ubuntu-26.04 Output Debian binaries:
Output Debian binaries are generated at below path.
# cd ../resolute
# ls -al
drwxr-xr-x 3 slua_ff7abbde301a slua_ff7abbde301a 4096 Jun 1 08:17 .
drwxr-xr-x 3 slua_ff7abbde301a slua_ff7abbde301a 4096 Jun 1 04:36 ..
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 490154 Jun 1 08:16 linux-buildinfo-7.0.0-1005-qcom-rt_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 491518 Jun 1 06:50 linux-buildinfo-7.0.0-1005-qcom_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 41620480 Jun 1 08:16 linux-headers-7.0.0-1005-qcom-rt_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 41579672 Jun 1 06:51 linux-headers-7.0.0-1005-qcom_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 19691712 Jun 1 08:16 linux-image-7.0.0-1005-qcom-rt_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 20295872 Jun 1 06:49 linux-image-7.0.0-1005-qcom_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 190064832 Jun 1 08:16 linux-modules-7.0.0-1005-qcom-rt_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 190290112 Jun 1 06:50 linux-modules-7.0.0-1005-qcom_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 14781002 Jun 1 08:17 linux-qcom-headers-7.0.0-1005_7.0.0-1005.7_all.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 261786 Jun 1 05:25 linux-qcom-tools-7.0.0-1005_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 12112 Jun 1 08:17 linux-tools-7.0.0-1005-qcom-rt_7.0.0-1005.7_arm64.deb
-rw-r--r-- 1 slua_ff7abbde301a slua_ff7abbde301a 12098 Jun 1 06:51 linux-tools-7.0.0-1005-qcom_7.0.0-1005.7_arm64.deb
Install the kernel:
Output binaries contains both RT (RealtTime) and non-RT debians. Copy the required debians files (RT or non-RT image) on device using ssh. Install using below cmd.
sudo dpkg -i linux*.deb
sudo reboot
Above were the host-machine based build steps. Below are the steps for on-device compilation.
Steps for on-device linux-qcom kernel build on IQ-9075, IQ-8275, and IQ-X7181:
- Run below cmds on UART console or over SSH terminal.
- Below steps will download the exact kernel tag used on-device as part of Ubuntu release. You can also compile any other kernel tag also.
sudo sed -i '/^Types: deb/ s/$/ deb-src/' /etc/apt/sources.list.d/ubuntu.sources
cd ~
mkdir workspace
cd workspace
sudo apt update
sudo apt build-dep -y linux
sudo apt build-dep -y linux-qcom
sudo apt install -y fakeroot llvm libncurses-dev dwarves libtraceevent-dev libtracefs-dev
sudo apt source linux-image-$(uname -r)
cd <linux directory>
sudo fakeroot debian/rules clean
sudo fakeroot debian/rules binary
Output debian binaries and install steps remain same as host-machine steps as mentioned above.
References:
https://canonical-kteam-docs.readthedocs-hosted.com/public/how-to/build-kernel.html
The device tree is a data structure that describes the hardware components of a system. It is used by the OS to understand the hardware layout and manage device drivers. For different hardware designs, the device tree provides a flexible way to represent various configurations without modifying the OS kernel
For example, refer to the following document here, for QCS6490 devicetree files description.
Devicetree is located at below location in kernel code.
arch/arm64/boot/dts/qcom:
For QCM6490/QCS6490:
|
-rw-r--r-- |
33708 |
||
|
-rw-r--r-- |
461 |
||
|
-rw-r--r-- |
62599 |
||
|
-rw-r--r-- |
465 |
||
|
|
|
|
|
|
-rw-r--r-- |
13989 |
||
|
-rw-r--r-- |
62599 |
||
|
-rw-r--r-- |
695 |
||
|
-rw-r--r-- |
20297 |
||
|
-rw-r--r-- |
7515 |
||
|
-rw-r--r-- |
4127 |
||
|
-rw-r--r-- |
For QCS9100/QCS9075:
|
-rw-r--r-- |
9391 |
||
|
-rw-r--r-- |
353 |
||
|
-rw-r--r-- |
342 |
||
|
-rw-r--r-- |
74471 |
||
|
-rw-r--r-- |
489 |
||
|
-rw-r--r-- |
14502 |
||
|
-rw-r--r-- |
23515 |
||
|
-rw-r--r-- |
439 |
||
|
-rw-r--r-- |
469 |
||
|
-rw-r--r-- |
428 |
||
|
-rw-r--r-- |
4078 |
The combined-dtb.dtb file concatenates several DTB files, one of which will be chosen by the bootloader of the Qualcomm RB3G2 based on the CDT settings. For information on how to customize the CDT, please refer to the corresponding Qualcomm documentation link. Devicetree is generated as part of kernel build.
To customize how the combined-dtb.dtb is prepared, please modify at:
<kernel source>/arch/arm64/boot/dts/qcom
Add new devicetree entry in below file for compilation:
arch/arm64/boot/dts/qcom/Makefile:
For base platform devicetree:
dtb-$(CONFIG_ARCH_QCOM) += qcs6490-addons-rb3gen2-video-mezz.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs6490-addons-rb3gen2-vision-mezz.dtb
…
For peripherals addition related to camera, graphics, we use devicetree overlay. In below example, two different overlay related for “video-mezz” and “vision-mezz” base platforms are added with same camera, graphics overlay .dtso files. Add similar changes for your peripherals addition.
arch/arm64/boot/dts/qcom/Makefile:
# External overlays
dtb-$(CONFIG_ARCH_QCOM) += qcs6490-addons-rb3gen2-video-mezz-ovl.dtb
qcs6490-addons-rb3gen2-video-mezz-ovl-dtbs := \
qcs6490-addons-rb3gen2-video-mezz.dtb \
qcm6490-graphics.dtbo \
qcm6490-camera-rb3.dtbo \
qcm6490-video.dtbo
dtb-$(CONFIG_ARCH_QCOM) += qcs6490-addons-rb3gen2-vision-mezz-ovl.dtb
qcs6490-addons-rb3gen2-vision-mezz-ovl-dtbs := \
qcs6490-addons-rb3gen2-vision-mezz.dtb \
qcm6490-graphics.dtbo \
qcm6490-camera-rb3.dtbo \
qcm6490-video.dtbo
Re-build kernel.
Devicetree output (combined-dtb.dtb) is part of Ubuntu kernel build output Debian package “linux-modules-6.8.0-1012-qcom_6.8.0-1012.12_arm64.deb”. Update DT using below steps.
On host machine:
mkdir out
dpkg-deb -x linux-modules-6.8.0-1012-qcom_6.8.0-1012.12_arm64.deb ./out --- >> Extract .deb package.
mkdir mnt
sudo mount dtb.bin mnt
cp ./out/lib/firmware/6.8.0-1012-qcom/device-tree/qcom/combined-dtb.dtb mnt/ ---- >> Updated dtb.bin.
sudo umount mnt
On device:
We can use either of the below two methods to update DT. Method-1 is preferable.
Method-1:
- Copy from host “./out/lib/firmware/6.8.0-1012-qcom/device-tree/qcom/combined-dtb.dtb” to device at /tmp/.
- cd /tmp
- mkdir -p /tmp/mnt
- sudo mount /dev/disk/by-partlabel/dtb_a /tmp/mnt/
- cp ./combined-dtb.dtb /tmp/mnt/combined-dtb.dtb
- sudo umount /tmp/mnt
- sudo reboot
Method-2:
- Copy dtb.bin in the firmware repository.
- Flash using QDL tool. Refer here for QCS6490. Refer here for QCS9075.
For IQ-X7181, please use below QDL tool cmd as devicetree is saved on SPINOR.
qdl --storage spinor xbl_s_devprog_ns.elf write dtb_a dtb.bin
Note: After kernel update, devicetree will be overwritten.
Debian compilation for camx, chicdk has known limitations for now due to package dependency issues. Please refer to below steps for other debian QCOM PPA.
Complete list of publicly available PPA:
https://launchpad.net/~ubuntu-qcom-iot/+archive/ubuntu/qcom-ppa
Below are the steps to build QCOM PPA:
This guide provides step-by-step instructions for setting up an ARM environment and compiling source code into Debian packages (.deb) for the RB3 Gen 2 Core, which includes multimedia applications.
Per build requirement, it’s mandatory to use an ARM64 machine, not x86/64.
You need to have access to Qualcomm chipcode portal, https://chipcode.qti.qualcomm.com.
You need to have PPA access in Canonical Launchpad portal, https://launchpad.net/.
We create a sysroot from Ubuntu 24.04 (Noble), chroot into it, and compile Debian packages for the RB3 Gen 2 Core.
Steps
- Create a List of Required Packages
echo build-essential automake autoconf libtool git gcc devscripts debhelper autotools-dev dh-autoreconf flex python-dev-is-python3 libglib2.0-dev libnet-ssleay-perl > packages.txt
- Set Up the Sysroot Directory with default 24.04 ubuntu + above packages.
sudo apt install debootstrap
mkdir ./sysroot/
sudo debootstrap --arch=arm64 --include=$(cat packages.txt | tr ' ' ',') noble ./sysroot http://ports.ubuntu.com/
- Enter the Chroot Environment and setup locale.
sudo chroot ./sysroot
locale-gen en_US.UTF-8
update-locale LANG=en_US.UTF-8
- Add Additional Repositories.
sudo add-apt-repository ppa:ubuntu-qcom-iot/qcom-ppa
echo "deb [trusted=yes] https://ppa.launchpadcontent.net/ubuntu-qcom-iot/qcom-ppa/ubuntu noble main ./" | tee /etc/apt/sources.list.d/localrepo1.list
echo "deb [trusted=yes arch=arm64] http://ports.ubuntu.com noble/stable main ./" | tee /etc/apt/sources.list.d/localrepo2.list
- Update packages.
apt-get update
- Exit from chroot environment.
exit
- Prepare the Workspace on the ARM Host Machine.
mkdir -p ./sysroot/workspace
mkdir -p workspace
sudo mount --bind ./workspace sysroot/workspace
- Clone the Source Code.
cd ./workspace
git clone <sources>
For example:
git clone -b r1.0_00075.0 --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk.git
Browsing link for above:
You need to have access to Qualcomm chipcode portal for building Qualcomm PPA source code. Please discuss with your Qualcomm counterpart for access.
- Compile the Source Code.
sudo chroot ./sysroot
cd workspace/ <navigate to folder to be compiled where you can see "debian folder">
apt-get build-dep . -- >> To install the dependent packages.
chmod -x debian/*.install -- >> Set correct permission.
dpkg-buildpackage -us -uc -tc -- >> To compile and generate .deb.
In above command,
-us : tells dpkg-buildpackage not to sign the source package.
-uc : tells dpkg-buildpackage not to sign the .changes file.
-tc : tells dpkg-buildpackage to clean the source tree after the package has been built.
For example:
For compiling ‘qcom-qmi-framework’PPA, code is located at “LE.QCLINUX.1.0.r1/apps_proc/sources/core-tech/qmi-framework”.
$/core-tech/qmi-framework# apt-get build-dep .
$/core-tech/qmi-framework# chmod -x debian/*.install
$/core-tech/qmi-framework# dpkg-buildpackage -us -uc -tc
Below is sample build log:
dpkg-buildpackage: info: source package qcom-qmi-framework
dpkg-buildpackage: info: source version 1.0.0
dpkg-buildpackage: info: source distribution noble
…
make[1]: Leaving directory 'core-tech/qmi-framework'
dh_autoreconf_clean
dh_clean
dpkg-source --after-build .
dpkg-buildpackage: info: full upload; Debian-native package (full source is included)
$/core-tech/qmi-framework#
- Verify the Generated Debian Packages.
ls -la ../
-rw-r--r-- 1 root root 50596 Apr 11 11:24 qcom-libqmi-framework_1.0.0_arm64.deb
-rw-r--r-- 1 root root 129744 Apr 11 11:24 qcom-libqmi-framework-dbgsym_1.0.0_arm64.ddeb
-rw-r--r-- 1 root root 36522 Apr 11 11:24 qcom-libqmi-framework-dev_1.0.0_arm64.deb
-rw-r--r-- 1 root root 8591 Apr 11 11:24 qcom-qmi-framework_1.0.0_arm64.buildinfo
-rw-r--r-- 1 root root 3123 Apr 11 11:24 qcom-qmi-framework_1.0.0_arm64.changes
-rw-r--r-- 1 root root 869 Apr 11 11:24 qcom-qmi-framework_1.0.0.dsc
-rw-r--r-- 1 root root 144784 Apr 11 11:24 qcom-qmi-framework_1.0.0.tar.xz
-rw-r--r-- 1 root root 51636 Apr 11 11:24 qcom-qmi-framework-utils_1.0.0_arm64.deb
-rw-r--r-- 1 root root 186440 Apr 11 11:24 qcom-qmi-framework-utils-dbgsym_1.0.0_arm64.ddeb
Packages with extention .deb are debian packages with libraries binaries and headers.
Packages with .ddeb extension are packages with debug symbols.
- Install .deb file:
dpkg -i <name>.deb
- Clean Up Workspace.
:/core-tech/qmi-framework# dh_clean
sudo umount ./sysroot/workspace
sudo rm -rf ./sysroot/workspace/*
Known limitations:
Below debian packages are not supported for build yet. We will update in next revision.
qcom-dspservices-headers
qcom-sensors
qcom-qmi-framework
Some versions of the RB3 Gen 2 needs the USB firmware to be reprogramed. Please follow the steps here to reprogram the firmware
Ubuntu linux kernel follows the upstream method of adding new linux drivers in kernel tree. Below is sample example of “qti_devfreq_cdev.ko” addition.
Adding kernel config.
arch/arm64/configs/qcom_addons.config: CONFIG_QTI_DEVFREQ_CDEV=m
Adding ubuntu annotation for arm64.
debian.qcom/config/annotations: CONFIG_QTI_DEVFREQ_CDEV
policy<{'arm64': 'm'}>
Updating Kconfig for new kernel config with all the dependencies listed.
drivers/thermal/qcom/Kconfig: config QTI_DEVFREQ_CDEV
Adding driver source code:
drivers/thermal/qcom/qti_devfreq_cdev.c
Updating build Makefile:
drivers/thermal/qcom/Makefile: obj-$(CONFIG_QTI_DEVFREQ_CDEV) += qti_devfreq_cdev.o
Updating devicetree support:
arch/arm64/boot/dts/qcom/qcm6490-addons.dtsi
qcom,devfreq-cdev {
compatible = "qcom,devfreq-cdev";
qcom,devfreq = <&msm_gpu>;
Reference:
The Ubuntu Linux has support for Qualcomm Intelligent Media (QIM) SDK, which is the preferred method to create applications that use all the hardware capabilities of the chipset .
To get started refer to the Qualcomm Intelligent Multimedia (QIM) SDK Quick Start Guide.
The Ubuntu Linux has support for Qualcomm Intelligent Media SDK and there are several sample applications that you can use to evaluate the capabilities of the platform. For more details, refer here.
The AI Workflow and QIM applications are yet to be enabled on Ubuntu Desktop. They will be enabled in the upcoming release.
Yes. Currently, RB3Gen2 development kit using QCS6490, IQ-9075 (RB8), IQ-8275 (RB4) supports realtime Ubuntu-24.04 kernel. Please refer to the documentation here for more info.
You can modify Ubuntu iso image as per below steps. This will unpack, make changes and then pack the iso image again.
dev="$(sudo losetup --sector-size=4096 --find --show --partscan <UBUNTU.img>)"
mkdir mnt
sudo mount "${dev}p3" mnt/
sudo mount "${dev}p1" mnt/boot/efi
<< Make changes and update 'mnt' directory >>
sudo umount -R mnt
rmdir mnt
sudo losetup -d "${dev}"
Please note, for UFS storage 'sector-size' will be 4096. For emmc storage, it will be 512.
Ramdump is a snapshot of the system memory at the time of device failure and is useful for debugging various crash issues across HLOS and non-HLOS regions. To enable ramdump, please follow below:
Enable ramdump:
- sudo vi /etc/default/grub.d/99-qcom-iot-defaults.cfg
- Add the cmdline param “qcom_scm.download_mode=1 reboot=panic_warm panic=-1” at file /etc/default/grub.d/99-qcom-iot-defaults.cfg.
- sudo update-grub
- reboot
Collect ramdump:
- After enabling ramdump, run the usecase where device is crashing. Device will reboot to XBL and remain waiting for ramdump collection over USB type-C.
- Use PCAT tool (Product Configuration Assistant Tool) to collect ramdump over USB type-C cable. Download from QPM (Qualcomm Package Manager).
- After installing PCAT, access the PCAT user guide at the following locations:
Windows host computer: C:\Program Files(x86)\Qualcomm\PCAT\Docs
Linux host computer: /opt/qcom/PCAT/Docs/ - Below is snippet showing device attach.
Figure 1. PCAT collects ramdump over USB-C after device crash
- Below is the snippet showing ramdump collection.
Figure 2. Ramdump collection in progress using PCAT tool
- Below is the sample ramdump.
Figure 3. Example ramdump output files from PCAT collection
- On Linux host, you can also use PCAT cmdline method to collect dump.
PCAT -PLUGIN CC -DEVICE <serial-id> -DUMPDIR /tmp -RESET TRUE -UNIQUETS TRUE
Parse the ramdump:
- You can use ramparser to parse the ramdump for HLOS. This is opensource tool.
- You can QCAP to parse the ramdump for HLOS and non-HLOS regions like (ADSP, TZ). Download from QPM. This is available for licensed customers.
Documentation available at "C:\Program Files (x86)\Qualcomm\QCAP\4.0.0.12\QCAP User Guide.pdf" for Windows host. Similarly, documentation available at "/opt/qcom/QCAP' for Linux host.
Ramparser tool:
Setup the environment on host machine.
- Ramparser is supported on Windows host machine.
- Need python-3.7 or later version.
- Download Pyelftools package from Github-Pyelftools.
- Unzip the downloaded file and look for the pyelftools-master>elftools directory.
- Copy elftools directory to <installed Python path>\Lib\site-packages
Download the Ramparser software from Git-Codelinaro. Download in ‘C:\’ drive on host machine.
Setup toolchain:
The Ramparser requires access to gdb and nm tools. You can specify the paths to the gdb and nm tools in one of the following ways:
- Using --gdb-path and --nm-path to specify the absolute path
- Using CROSS_COMPILE to specify the prefix
- Using local_settings.py file
To set up toolchains using the local_settings.py file, do the following:
- Create the ramparser_utils\utils directory in the root directory.
- Download the toolchain (aarch64-none-linux-gnu) into the ramparser_utils\utils directory from Arm GNU toolchain.
local_settings.py:
The Ramparser automatically determines most of the settings. However, some settings are unique to the runtime environment. You specify these unique settings in the local_settings.py file. As local_settings.py is a Python file, it can leverage Python features.
For Ramparser to pick the correct path for toolchain utilities, add the local_settings.py file to the <root>/linux-ramdump-parser-v2 directory.
Example: local_settings.py:
import parser_util,os,sys
path = os.path.abspath(os.path.dirname(__file__))
ramparser_utils_path = os.path.abspath(os.path.join(path, "../../ramparser_utils"))
nm_path = ramparser_utils_path + "\\utils\\arm-none-eabi-nm.exe"
gdb_path = ramparser_utils_path + "\\utils\\arm-none-eabi-gdb.exe"
objdump_path = ramparser_utils_path + "\\utils\\objdump.exe"
nm64_path = ramparser_utils_path + "\\utils\\aarch64-linux-gnu-nm.exe"
gdb64_path = ramparser_utils_path + "\\utils\\mingw64\\bin\\gdb-multiarch.exe"
objdump64_path = ramparser_utils_path + "\\utils\\all-objdump.exe"
Sample ramparser commands:
To parse dumps using Ramparser, run the following command in the Windows Shell:
python ramparse.py --vmlinux <vmlinux path>\vmlinux --auto-dump <dump path> --force-hardware <hw name> --everything --mod_path <symbol path> -o <output path>
<hw name>: This string specifies the hardware ID of the chipset. See the following table and use the appropriate value.
| Chipset | Hardware Name |
| QCS6490 | qcm6490 |
| QCS5430 | |
| IQ-8275 | qcs8300 |
| IQ-9075 | qcs9100 |
| IQ-X7181 | hamoa |
- python ramparse.py: This file invokes the RAMParser.
- mod_path: Specify this option to copy all the unstripped kernel modules into a directory and reference it as the symbol path for the --mod_path option.
After ramdump parsing, ‘dmesg_TZ.txt’ is the important output file having the kernel dmesg, runqueues details.
Support Links
90%
ARM adoption over next three years
20%
Commercial devices, today
1K+
Optimized applications
90%
ARM adoption over next three years
20%
Commercial devices, today
1K+
Optimized applications
Helpful Links
Forums
Visit Qualcomm Support forums to ask questions, access resources, learn quick tips, and more. Expand your knowledge by interacting with others in the developer community.
Stay ahead of the curve
Receive the latest updates, exclusive offers, and valuable insights delivered through the Qualcomm® newsletter straight to your inbox
