# Firmware

*QGroundControl* **desktop** versions can be used to install PX4 firmware onto [Pixhawk-series](/px4-user-guide/getting_started/flight_controller_selection.md) flight-controller boards.

:::warning **Before you start installing Firmware** all USB connections to the vehicle must be *disconnected* (both direct or through a telemetry radio). The vehicle must *not be* powered by a battery. :::

## Install Stable PX4

Generally you should use the most recent *released* version of PX4, in order to benefit from bug fixes and get the latest and greatest features.

:::tip This is the version that is installed by default. :::

To install PX4:

1. Start *QGroundControl* and connect the vehicle.
2. Select **"Q" icon > Vehicle Setup > Firmware** (sidebar) to open *Firmware Setup*.

   ![Firmware disconnected](/files/repW095a4Tvoj6lgv49u)
3. Connect the flight controller directly to your computer via USB.

   :::note Connect directly to a powered USB port on your machine (do not connect through a USB hub). :::
4. Select the **PX4 Pro Stable Release vX.x.x** option to install the latest stable version of PX4 *for your flight controller* (autodetected).

   ![Install PX4 default](/files/cl09KkbNoeSxWI6veRYq)
5. Click the **OK** button to start the update.

   The firmware will then proceed through a number of upgrade steps (downloading new firmware, erasing old firmware etc.). Each step is printed to the screen and overall progress is displayed on a progress bar.

   ![Firmware upgrade complete](/files/mKLvd12Kmuh3qsrg3OcC)

   Once the firmware has completed loading, the device/vehicle will reboot and reconnect.

   :::tip If *QGroundControl* installs the FMUv2 target (see console during installation) and you have a newer board, you may need to [update the bootloader](#bootloader) in order to access all the memory on your flight controller. :::

Next you will need to specify the [vehicle airframe](/px4-user-guide/config/airframe.md) (and then sensors, radio, etc.)

## Installing PX4 Main, Beta or Custom Firmware

To install a different version of PX4:

1. Connect the vehicle as above, and select **PX4 Pro Stable Release vX.x.x**. ![Install PX4 version](/files/nIgafhNK9wI20GN4kS32)
2. Check **Advanced settings** and select the version from the dropdown list:
   * **Standard Version (stable):** The default version (i.e. no need to use advanced settings to install this!)
   * **Beta Testing (beta):** A beta/candidate release. Only available when a new release is being prepared.
   * **Developer Build (master):** The latest build of PX4/PX4-Autopilot *main* branch.
   * **Custom Firmware file...:** A custom firmware file (e.g. that you have built locally). If you select this you will have to choose the custom firmware from the file system in the next step.

Firmware update then continues as before.

## Bootloader Update

Pixhawk hardware usually comes with an appropriate bootloader version pre-installed.

A case where you may need to update is newer Pixhawk boards that install FMUv2 firmware. If *QGroundControl* installs the FMUv2 target (see console during installation), and you have a newer board, you may need to update the bootloader in order to access all the memory on your flight controller.

![FMUv2 update](/files/yxb7XFYxip5nB5DXYOEk)

You can update it by following the instructions in [Bootloader update > FMUv2 Bootloader Update](/px4-user-guide/advanced_config/bootloader_update.md#fmuv2-bootloader-update).

## Further Information

* [QGroundControl User Guide > Firmware](https://docs.qgroundcontrol.com/master/en/SetupView/Firmware.html).
* [PX4 Setup Video](https://youtu.be/91VGmdSlbo4) (Youtube)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://px4.gitbook.io/px4-user-guide/config/firmware.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
