> For the complete documentation index, see [llms.txt](https://dev.solid-run.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev.solid-run.com/nxp/imx8/sbc-platform/imx8m-plus-mini-nano-software/ubuntu-on-imx8mp.md).

# Ubuntu on i.MX8MP

The official [Ubuntu Distribution](https://ubuntu.com/) was tested functional on several SolidRun i.MX8M Plus based systems.

Previously this required distro maintainers support with custom boot-scripts and workarounds. Modern U-Boot ships the required facilities for booting a generic Linux distro designed for UEFI (with Device-Tree).

The instructions below show how Ubuntu Server 26.04 can be installed on SolidRun i.MX8MP Hummingboard Pro and similar boards.

## Install UEFI capable Bootloader

A special build of u-boot bundling upstream compatible device-tree is required, and should be installed to eMMC boot0 partition.

Download the a special u-boot microsd image [here](https://solidrn-my.sharepoint.com/:u:/g/personal/josua_solid-run_com/IQCKUhS8QZWtR7SLsFso_DorAcHyCYQqjWZ3n2g7gZVXi8w?e=qLpPN1), and write it to microSD using [dd](https://man7.org/linux/man-pages/man1/dd.1.html), [win32diskimager](https://win32diskimager.org/) or [etcher.io](https://etcher.balena.io/). (It was generated from a development version of SolidRun BSP based on LF-6.6.62-2.0.0 U-Boot and Device-Tree from Linux v7.2-rc6: [imx8mp\_build@979d8e2](https://github.com/SolidRun/imx8mp_build/tree/979d8e28afdb5e25127c31ae14301f3b003ef610), sha1sum c0875f4959671be48b7f180ef8322ce7ed29a6c0)

Configure boot-select switches for microSD (S3: ON-ON-X-X-X-X: from left to right switches numbered 1-6, X= don't care).

Power-on the device with serial console connected, and interrupt u-boot at the timeout:

```
...
Hit any key to stop autoboot:  3
```

Then issue below commands for enabling and programming the eMMC boot0 partition:

```
load mmc 1:1 $kernel_addr_r u-boot-mmc-boot0-979d8e2.bin
mmc dev 2 1
mmc write $kernel_addr_r 0 0x2000
mmc partconf 2 0 1 1
```

Change boot-select switches for eMMC (S3: ON-OFF-X-X-X-X: from left to right switches numbered 1-6, X= don't care).

Remove microSD and press reset button, confirm that the serial console shows similar messages as before and u-boot cli can be reached.

U-Boot is now installed to eMMC boot0 partition.

## Prepare Installation Media

Download [Ubuntu Server for ARM](https://ubuntu.com/download/server/arm) iso, e.g. "ubuntu-26.04-live-server-arm64.iso".

Write the iso to a USB Flash-Drive or microSD using [dd](https://man7.org/linux/man-pages/man1/dd.1.html), [win32diskimager](https://win32diskimager.org/) or [etcher.io](https://etcher.balena.io/).

## Boot Installer

Connect installation media, then power-on the device. Monitor the serial console and interrupt the u-boot timeout:

```
...
Hit any key to stop autoboot:  3
```

Press any key, then disable video console output (it corrupts the serial console grub ui):

```
u-boot=> setenv stdout serial
saveenv
reset
```

Default boot-order is USB, microSD, eMMC. If no other OS is detected first, the Installer should boot automatically showing the GRUB Menu. However if a previous installation set some UEFI variables to impact boot order, run `eficonfig` u-boot command to fix it by selecting "Change Boot Order" and unchecking the default built-in disks:

![Ubuntu Installer GRUB Menu](https://1160211108-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCsmHoAD7oNPYQbYxSWHU%2Fuploads%2Fgit-blob-af5c5cc7b8b5e95ec40097fee66cc2ea8e735ac3%2Feficonfig-bootorder-deselect.png?alt=media)

Save and Quit, Reset and Ubuntu GRUB Menu should show automatically:

![Ubuntu Installer GRUB Menu](https://1160211108-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCsmHoAD7oNPYQbYxSWHU%2Fuploads%2Fgit-blob-d7b1d507dbc86c7cd7f87d6d5502f772f7d6b1ea%2Fubuntu-installer-grub-menu.png?alt=media)

Press **E** key (no shift) to edit the highlighted "Try or Install Ubuntu Server" option. Navigate to the line starting with "linux", delete the existing "console=tty0" option and append "module.sig\_enforce=0 initcall\_blacklist=simpledrm\_platform\_driver\_init":

![Ubuntu Installer GRUB Menu, Edit Entry](https://1160211108-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCsmHoAD7oNPYQbYxSWHU%2Fuploads%2Fgit-blob-9140775e7fc835233adab369ab6f96e8ab859234%2Fubuntu-installer-grub-menu-edit-append-sigenforce-0.png?alt=media)

Press CTRL + X (or F10) to boot the installer.

Wait for the installer to boot fully, eventually it will show a welcome screen. In case network was connected there will be a "View SSH instructions" button at the bottom:

![Ubuntu Installer Welcome with SSH Instructions](https://1160211108-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCsmHoAD7oNPYQbYxSWHU%2Fuploads%2Fgit-blob-117503cd01b918682f3d569d345c8019bf5cc10d%2Fubuntu-installer-welcome-ssh.png?alt=media)

## Install

Follow the Installation Screens.

## Graphical Desktop

Ubuntu Desktop can be installed after the fact and is functional:

```sh
sudo apt-get install ubuntu-desktop libdrm-etnaviv1
sudo systemctl set-default graphical.target
```

Ensure there is enough space, 8GB eMMC is not enough.

## Disclaimer

SolidRun i.MX8M Plus based platforms are supported in [Ubuntu](https://ubuntu.com/) as a community effort without formal aggreements or guarantees.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://dev.solid-run.com/nxp/imx8/sbc-platform/imx8m-plus-mini-nano-software/ubuntu-on-imx8mp.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
