Skip to content

boards/arm/imxrt: add the Holybro Pixhawk 6X-RT - #20239

Merged
acassis merged 1 commit into
apache:masterfrom
royzah:board/fmu-v6xrt-rebased
Sep 23, 2026
Merged

acassis merged 1 commit into
apache:masterfrom
royzah:board/fmu-v6xrt-rebased

Conversation

@royzah

@royzah royzah commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds the Holybro Pixhawk 6X-RT, a MIMXRT1176 flight controller built to the Pixhawk FMUv6X-RT standard. The port targets that standard, so it also covers the NXP MR-VMU-RT1176.

The board data comes from PX4, which already carries it as a NuttX board config: the clock tree, the LPUART1 pinmux, and the Macronix octal flash configuration block that the boot ROM reads at offset 0x400. The flash config block needed its NXP SDK field names translated to the ones imxrt_flexspi_nor_flash.h uses.

The board ships with the PX4 bootloader in the first 128 KB of QSPI, so the image links at 0x30020000 and is loaded by it rather than written to the flash base. The console is CDC/ACM as on teensy-4.x, so a USB cable is the only thing needed to run NuttX here. No debug adapter, no SWD.

Impact

New board only. Everything is under boards/arm/imxrt/fmu-v6xrt/, plus one entry in boards/Kconfig and one documentation page, written to Documentation/contributing/doc_templates/board.rst. No existing board or arch/ file is touched.

Testing

Host: Ubuntu, arm-none-eabi-gcc 9.3.1.
Board: Holybro Pixhawk 6X-RT, i.MX RT1176 rev B0, flashed over USB.

$ ./tools/configure.sh fmu-v6xrt:nsh && make
$ python Tools/px_mkfw.py --prototype firmware.prototype --image nuttx.bin > nuttx.px4
$ python Tools/px_uploader.py --port "/dev/serial/by-id/*PX4*" nuttx.px4
Found board id: 35,0 bootloader protocol revision 5
Loaded firmware for board id: 35,0 size: 152784 bytes (3.76%)
Chip: 001170b0
Family: i.MX RT1170
Rebooting.

The board then enumerates as NuttX CDC/ACM Serial and the shell is on it. uname reports the commit the image was built from:

NuttShell (NSH) NuttX-13.0.1
nsh> uname -a
NuttX 13.0.1 3716eea98b Sep 22 2026 17:07:22 arm fmu-v6xrt

nsh> ls /dev
/dev:
 console
 null
 random
 ttyACM0
 ttyS0
 urandom
 zero

CONFIG_IMXRT_RNG is on, so /dev/random exercises the CAAM driver from #20205 on real silicon. Two consecutive reads:

nsh> hexdump -c 32 /dev/random
/dev/random at 00016600:
0000: 64 d3 6f a1 bf 27 24 6f 73 ac cd 5e 19 fb 1e 24 d.o..'$os..^...$
0010: 92 1a 1f a8 45 27 e9 5c cf 92 71 79 c9 df 38 4f ....E'.\..qy..8O

nsh> hexdump -c 32 /dev/random
/dev/random at 0001b200:
0000: a0 56 e1 5f d6 b3 58 a4 26 fb 2d 18 63 96 53 05 .V._..X.&.-.c.S.
0010: e4 da 6a 44 2e 99 56 34 ab 9b 74 96 35 ef 1b 88 ..jD..V4..t.5...

Run on 3716eea98b, the parent of the current head. The only change since is the tools/refresh.sh defconfig normalisation, which leaves the generated .config identical (CONFIG_DEV_RANDOM, CONFIG_DEV_URANDOM_ARCH and CONFIG_BOARDCTL stay =y, they are just selected rather than listed).

@github-actions github-actions Bot added Area: Build system Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces. Board: arm labels Sep 22, 2026
@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

MemBrowse Memory Report

No memory changes detected for:

@xiaoxiang781216

Copy link
Copy Markdown
Contributor

@royzah please normalize defconfig by ./tools/refreshs.h --silent fmu-v6xrt:nsh:

====================================================================================
Configuration/Tool: fmu-v6xrt/nsh,CONFIG_ARM_TOOLCHAIN_GNU_EABI
2026-09-22 17:06:45
------------------------------------------------------------------------------------
  Cleaning...
HEAD detached at pull/20239/merge
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)
	flash.bin

nothing to commit, working tree clean
  Configuring...
  Disabling CONFIG_ARM_TOOLCHAIN_GNU_EABI
  Enabling CONFIG_ARM_TOOLCHAIN_GNU_EABI
  Building NuttX...
  [1/1] Normalize fmu-v6xrt/nsh
1a2,7
> # This file is autogenerated: PLEASE DO NOT EDIT IT.
> #
> # You can use "make menuconfig" to make any modifications to the installed .config file.
> # You can then do "make savedefconfig" to generate a new defconfig file that includes your
> # modifications.
> #
7,10d12
< # This file is autogenerated: PLEASE DO NOT EDIT IT.
< # You can then do "make savedefconfig" to generate a new defconfig file that includes your
< # You can use "make menuconfig" to make any modifications to the installed .config file.
< # modifications.
23d24
< CONFIG_BOARDCTL=y
31d31
< CONFIG_DEV_RANDOM=y
33d32
< CONFIG_DEV_URANDOM_ARCH=y
Saving the new configuration file
HEAD detached at pull/20239/merge
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   boards/arm/imxrt/fmu-v6xrt/configs/nsh/defconfig

@royzah

royzah commented Sep 23, 2026

Copy link
Copy Markdown
Contributor Author

@xiaoxiang781216 done, thanks. Ran ./tools/refresh.sh --silent fmu-v6xrt:nsh and pushed.

It dropped CONFIG_BOARDCTL, CONFIG_DEV_RANDOM and CONFIG_DEV_URANDOM_ARCH, they are already selected by IMXRT_RNG. Checked the generated .config after and all three are still =y, so nothing changed on the board.

michallenc
michallenc previously approved these changes Sep 23, 2026
Comment thread Documentation/platforms/arm/imxrt/boards/fmu-v6xrt/index.rst Outdated
@royzah
royzah dismissed stale reviews from xiaoxiang781216 and michallenc via a7e8107 September 23, 2026 12:43
@royzah
royzah force-pushed the board/fmu-v6xrt-rebased branch 2 times, most recently from a7e8107 to 37b9366 Compare September 23, 2026 12:47
@royzah royzah changed the title boards/arm/imxrt: add the NXP MR-VMU-RT1176 (PX4 FMUv6X-RT) boards/arm/imxrt: add the Holybro Pixhawk 6X-RT Sep 23, 2026
A MIMXRT1176 flight controller built to the Pixhawk FMUv6X-RT standard, so
the port also covers the NXP MR-VMU-RT1176.

Board data comes from PX4, which already carries it as a NuttX board config:
the clock tree, the LPUART1 pinmux, and the Macronix octal flash
configuration block the boot ROM reads at offset 0x400.

The board ships with the PX4 bootloader in the first 128 KB of QSPI, so the
image links at 0x30020000 and is loaded by it rather than written to the
flash base. The console is CDC/ACM as on teensy-4.x, so a USB cable is the
only thing needed to run NuttX here.

Signed-off-by: Royyan Zahir <royzah@gmail.com>
@royzah
royzah force-pushed the board/fmu-v6xrt-rebased branch from 37b9366 to e6524e5 Compare September 23, 2026 12:53
@royzah

royzah commented Sep 23, 2026

Copy link
Copy Markdown
Contributor Author

@acassis rewrote the page to doc_templates/board.rst and added a photo of the board.

Also renamed it: the board I tested on is a Holybro Pixhawk 6X-RT, not the NXP MR-VMU-RT1176 I first called it. Both are FMUv6X-RT so the port covers either, but the page and the title now say what was actually on the bench.

@xiaoxiang781216 @michallenc ready for another look when you have a moment.

@acassis
acassis merged commit 5b2311e into apache:master Sep 23, 2026
54 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area: Build system Board: arm Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants