Qualcomm Device Loader (QDL) is a cross-platform command-line flashing tool for Qualcomm devices. Use this method when you need full control over the flash process, are running in a headless environment, or want to script automated flashing.
For a GUI-based alternative, see Flash Qualcomm Linux using Qualcomm Launcher.
Flashing erases all data on the device. Back up anything important before you begin.
What you need
- IQ-9075 EVK with 12 V power supply
- USB Type-C cable (USB0 port on the EVK → host computer)
- Host computer running Ubuntu, Windows, or macOS
Select your host OS and follow the complete path
Download QDL for your host OS from the Qualcomm Software Center.
Download the Qualcomm Linux image
-
Download the Qualcomm Linux image.
-
Extract the zip file. The flashable artifacts are in:
<path-to-image>/images/iq-9075-evk/qcom-multimedia-proprietary-image-iq-9075-evk/
Where <path-to-image> is the folder created when you extracted the image zip.
Download QDL
-
Download the QDL tool for Linux (x64) and unzip it. The unzipped folder contains the
qdl binary — referred to as <qdl_dir> below.
-
Install the required libraries (skip if already installed):
sudo apt-get install libxml2-dev libudev-dev libusb-1.0-0-dev
We recommend extracting both the image and QDL into the same parent folder. This keeps all paths under one root and simplifies navigation between the provision, SAIL, and image folders.
Set up QDL driver
Ubuntu requires a udev rule so the kernel grants your user permission to communicate with the device when it enters EDL mode.
-
Check whether the rule already exists:
ls /etc/udev/rules.d/51-qcom-usb.rules
-
If the file is not present, create it in one command:
echo 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9008", MODE="0664", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/51-qcom-usb.rules
If the file already exists, verify the rule is present:
cat /etc/udev/rules.d/51-qcom-usb.rules
-
Reload udev to apply the rule:
sudo systemctl restart udev
If the USB cable was already connected, disconnect and reconnect it.
Set up QDL path
-
Make QDL executable:
-
Verify QDL is working:
You should see the QDL usage output. If you get an error, check the path.
Put the device in EDL mode
-
Turn on the SW2-3 DIP switch — push it up.
-
Connect the 12 V power supply to the EVK.
-
Connect the USB Type-C cable from USB0 on the EVK to your host.
-
Toggle the power switch to turn on the device.
-
Confirm the device is in EDL mode:
Expected output:
Bus 002 Device 014: ID 05c6:9008 Qualcomm, Inc. Gobi Wireless Modem (QDL mode)
If the device doesn’t appear, recheck SW2-3 and the USB-C cable.
Provision UFS
UFS (Universal Flash Storage) provisioning divides the internal storage into separate logical unit numbers (LUNs), each dedicated to a specific type of data (boot, system, user data, etc.). This improves access efficiency and keeps the partition layout consistent across flashes.Run UFS provisioning if any of the following apply:
- This is a brand-new board that has never been flashed.
- You are upgrading to a new image version.
- You are switching distributions (Qualcomm Linux ↔ Ubuntu).
-
Download and unzip the provision file:
wget https://artifacts.codelinaro.org/artifactory/codelinaro-le/Qualcomm_Linux/QCS9100/provision.zip
unzip provision.zip
-
Provision UFS from the unzipped provision directory:
cd provision
<qdl_dir>/qdl --storage ufs prog_firehose_ddr.elf provision_1_2.xml
Expected output:
UFS provisioning succeeded
After UFS provisioning completes, the device disconnects from USB. Toggle the power switch off and on to reboot it back into EDL mode before continuing.
Flash SAIL firmware
The Safety Island (SAIL) is a separate, isolated processor on the IQ-9075 EVK that handles safety-critical functions independently from the main application processor. Its firmware lives on a dedicated spinor flash partition and must be flashed separately before the main OS image.
-
Navigate to the
sail_nor subfolder inside the extracted image:
cd <path-to-image>/images/iq-9075-evk/qcom-multimedia-proprietary-image-iq-9075-evk/sail_nor
-
Flash the SAIL firmware:
<qdl_dir>/qdl --storage spinor prog_firehose_ddr.elf rawprogram0.xml patch0.xml
Expected output:
flashed "SAIL_HYP" successfully
flashed "SAIL_SW1" successfully
flashed "SAIL_HYP_BKUP" successfully
flashed "SAIL_SW1_BKUP" successfully
11 patches applied
Flash Qualcomm Linux
-
Navigate to the main image folder:
cd <path-to-image>/images/iq-9075-evk/qcom-multimedia-proprietary-image-iq-9075-evk
-
Flash the image:
<qdl_dir>/qdl --storage ufs prog_firehose_ddr.elf rawprogram*.xml patch*.xml
The flash is complete when the final line reads:
partition 1 is now bootable
Any sector-truncation warnings during flashing are harmless.
Download the Qualcomm Linux image
-
Download the Qualcomm Linux image
-
Extract the zip file. The flashable artifacts are in:
<path-to-image>\images\iq-9075-evk\qcom-multimedia-proprietary-image-iq-9075-evk\
Where <path-to-image> is the folder created when you extracted the image zip.
Download QDL
-
Download the QDL tool for Windows and extract it.
We recommend extracting both the image and QDL into the same parent folder (for example C:\Users\you\Downloads\qualcomm-flash\). This keeps all paths under one root and simplifies navigation between the provision, SAIL, and image folders.
Set up QDL driver
-
Uninstall any existing Qualcomm USB drivers (QUD) — they conflict with the QDL driver. Open Device Manager, find your device, and uninstall any existing drivers. The device should not appear under COM Ports.
-
Run
install_driver.bat from the unzipped QDL folder to install the WinUSB driver.
Put the device in EDL mode
-
Turn on the SW2-3 DIP switch — push it up.
-
Connect the 12 V power supply to the EVK.
-
Connect the USB Type-C cable from USB0 on the EVK to your host.
-
Toggle the power switch to turn on the device.
-
Open Device Manager and confirm a Qualcomm USB device appears (not under COM Ports).
Provision UFS
UFS (Universal Flash Storage) provisioning divides the internal storage into separate logical unit numbers (LUNs), each dedicated to a specific type of data (boot, system, user data, etc.). This improves access efficiency and keeps the partition layout consistent across flashes.Run UFS provisioning if any of the following apply:
- This is a brand-new board that has never been flashed.
- You are upgrading to a new image version.
- You are switching distributions (Qualcomm Linux ↔ Ubuntu).
-
Download provision.zip and extract it.
-
Navigate to the extracted provision folder:
-
Provision UFS (replace
<qdl_dir> with your QDL folder path):
Command Prompt:
"<qdl_dir>\qdl.exe" --storage ufs prog_firehose_ddr.elf provision_1_2.xml
PowerShell:
& "<qdl_dir>\qdl.exe" --storage ufs prog_firehose_ddr.elf provision_1_2.xml
Expected output:
UFS provisioning succeeded
After UFS provisioning completes, the device disconnects from USB. Toggle the power switch off and on to reboot it back into EDL mode before continuing.
Flash SAIL firmware
The Safety Island (SAIL) is a separate, isolated processor on the IQ-9075 EVK that handles safety-critical functions independently from the main application processor. Its firmware lives on a dedicated spinor flash partition and must be flashed separately before the main OS image.
-
Navigate to the
sail_nor subfolder inside the image directory:
cd <path-to-image>\images\iq-9075-evk\qcom-multimedia-proprietary-image-iq-9075-evk\sail_nor
-
Flash the SAIL firmware (replace
<qdl_dir> with your QDL folder path):
Command Prompt:
"<qdl_dir>\qdl.exe" --storage spinor prog_firehose_ddr.elf rawprogram0.xml patch0.xml
PowerShell:
& "<qdl_dir>\qdl.exe" --storage spinor prog_firehose_ddr.elf rawprogram0.xml patch0.xml
Expected output:
flashed "SAIL_HYP" successfully
flashed "SAIL_SW1" successfully
flashed "SAIL_HYP_BKUP" successfully
flashed "SAIL_SW1_BKUP" successfully
11 patches applied
Flash Qualcomm Linux
-
Navigate to the main image folder:
cd <path-to-image>\images\iq-9075-evk\qcom-multimedia-proprietary-image-iq-9075-evk
-
Flash the image (replace
<qdl_dir> with your QDL folder path — Windows does not support wildcards, list all files explicitly):
Command Prompt:
"<qdl_dir>\qdl.exe" prog_firehose_ddr.elf rawprogram0.xml rawprogram1.xml rawprogram2.xml rawprogram3.xml rawprogram4.xml rawprogram5.xml patch0.xml patch1.xml patch2.xml patch3.xml patch4.xml patch5.xml
PowerShell:
& "<qdl_dir>\qdl.exe" prog_firehose_ddr.elf rawprogram0.xml rawprogram1.xml rawprogram2.xml rawprogram3.xml rawprogram4.xml rawprogram5.xml patch0.xml patch1.xml patch2.xml patch3.xml patch4.xml patch5.xml
The flash is complete when the final line reads:
partition 1 is now bootable
Download the Qualcomm Linux image
-
Download the Qualcomm Linux image.
-
Extract the zip file. The flashable artifacts are in:
<path-to-image>/images/iq-9075-evk/qcom-multimedia-proprietary-image-iq-9075-evk/
Where <path-to-image> is the folder created when you extracted the image zip.
Download QDL
-
Download the QDL tool for macOS (Apple Silicon) and unzip it. The unzipped folder contains the
qdl binary — referred to as <qdl_dir> below. For tool usage details, see the QDL_User_Guide in that folder.
We recommend extracting both the image and QDL into the same parent folder. This keeps all paths under one root and simplifies navigation between the provision, SAIL, and image folders.
Set up QDL path
-
Install required libraries via Homebrew (skip if already installed):
brew install libusb libxml2
-
Make QDL executable and clear the macOS quarantine flag so Gatekeeper allows it to run:
chmod +x <qdl_dir>/qdl
sudo xattr -dr com.apple.quarantine <qdl_dir>
sudo is needed because some bundled libraries are read-only. If macOS still blocks the tool after this step, allow it under System Settings → Privacy & Security.
-
Verify QDL is working:
You should see the QDL usage output. If you get an error, check the path.
Put the device in EDL mode
-
Turn on the SW2-3 DIP switch — push it up.
-
Connect the 12 V power supply to the EVK.
-
Connect the USB Type-C cable from USB0 on the EVK to your host.
-
Toggle the power switch to turn on the device.
-
Confirm the device is in EDL mode:
system_profiler SPUSBDataType | grep -A4 -i qualcomm
Expected output:
Product ID: 0x9008
Vendor ID: 0x05c6 (Qualcomm, Inc)
Manufacturer: Qualcomm CDMA Technologies MSM
Product ID: 0x9008 confirms the device is in EDL mode. If it doesn’t appear, recheck SW2-3 and the USB-C cable.
Provision UFS
UFS (Universal Flash Storage) provisioning divides the internal storage into separate logical unit numbers (LUNs), each dedicated to a specific type of data (boot, system, user data, etc.). This improves access efficiency and keeps the partition layout consistent across flashes.Run UFS provisioning if any of the following apply:
- This is a brand-new board that has never been flashed.
- You are upgrading to a new image version.
- You are switching distributions (Qualcomm Linux ↔ Ubuntu).
-
Download provision.zip and unzip it:
-
Move the provision files and the QDL binary into the same folder, then run from there:
On macOS, the qdl binary and its supporting libraries must be in the same directory as the provision files. Copy the provision files into <qdl_dir>, then run the command from there.
./qdl --storage ufs prog_firehose_ddr.elf provision_1_2.xml
Expected output:
UFS provisioning succeeded
After UFS provisioning completes, the device disconnects from USB. Toggle the power switch off and on to reboot it back into EDL mode before continuing.
Flash SAIL firmware
The Safety Island (SAIL) is a separate, isolated processor on the IQ-9075 EVK that handles safety-critical functions independently from the main application processor. Its firmware lives on a dedicated spinor flash partition and must be flashed separately before the main OS image.
-
Navigate to the
sail_nor subfolder inside the extracted image:
cd <path-to-image>/images/iq-9075-evk/qcom-multimedia-proprietary-image-iq-9075-evk/sail_nor
-
Flash the SAIL firmware:
<qdl_dir>/qdl --storage spinor prog_firehose_ddr.elf rawprogram0.xml patch0.xml
Expected output:
flashed "SAIL_HYP" successfully
flashed "SAIL_SW1" successfully
flashed "SAIL_HYP_BKUP" successfully
flashed "SAIL_SW1_BKUP" successfully
11 patches applied
Flash Qualcomm Linux
-
Navigate to the main image folder:
cd <path-to-image>/images/iq-9075-evk/qcom-multimedia-proprietary-image-iq-9075-evk
-
Flash the image:
<qdl_dir>/qdl --storage ufs prog_firehose_ddr.elf rawprogram*.xml patch*.xml
The flash is complete when the final line reads:
partition 1 is now bootable
Any sector-truncation warnings during flashing are harmless.
If flashing fails at any point, disconnect the USB cable and power supply, reconnect them, and retry from the EDL mode step.
Finish
- Turn off the SW2-3 DIP switch — push it down.
- Power-cycle the device. It boots into the newly flashed Qualcomm Linux image.
Next steps
Continue to Set up the device to connect the debug UART, verify the software version, and bring up the network, SSH, and display.