> 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/lx2160a/sbc-platform/lx2160a-software/fedora-on-lx2160a.md).

# Fedora on LX2160A

The official [Fedora Distribution](https://fedoraproject.org/) Server Edition was tested functional on several SolidRun LX2160A based systems.

Previously this was made possible by using a real EDK-2 based UEFI Firmware and ACPI Tables, which was eventually discontinued due to friction in the ACPI standardization process.

Modern U-Boot ships the required facilities for booting a generic Linux distro designed for UEFI (with Device-Tree).

The instructions below show how Fedora Server 44 can be installed on SolidRun LX2160A Clearfog-CX and similar boards.

## Install UEFI capable Bootloader

Download an SPI Flash bootloader binary from [images.solid-run.com](https://images.solid-run.com/LX2k/lx2160a_build) suitable to your board and sdram speed. Use "ls-6.6.52-2.2.0" branch and a build dated "2026-07-02" or later.

E.g. on Clearfog-CX with DDR4-2600 get `ls-6.6.52-2.2.0/2026-07-02-c90bec0/lx2160a_rev2_cex7_clearfog-cx_multi_2000_700_2600_8_5_2-c90bec0.img.xz`.

Some configurations are not available in `*_multi_*` variant. In that case download separate `*_sd_*` and `*_xspi_*` images.

Program the SD-bootable image (after decompression) to a microSD, configure boot-switches for SD-Boot (usually OFF-ON-ON-ON-OFF), and boot to the U-Boot CLI:

```
Hit any key to stop autoboot:  0
=>
```

If using separate `*_sd_*` and `*_xspi_*` images, swap media now to insert fat- or ext4-formatted drive containing the SPI Flash binary renamed to `xspi.img`.

Now write the SPI Flash:

```
=> ls mmc 0:1 /
<DIR>       4096 .
<DIR>       4096 ..
<DIR>      16384 lost+found
        67108864 xspi.img
       748683264 emmc.img

=> load mmc 0:1 $kernel_addr_r xspi.img
67108864 bytes read in 2800 ms (22.9 MiB/s)

=> sf probe
SF: Detected mt35xu512aba with page size 256 Bytes, erase size 128 KiB, total 64 MiB

=> sf update $kernel_addr_r 0 0x4000000
device 0 whole chip
30146560 bytes written, 36962304 bytes skipped in 81.584s, speed 849479 B/s
```

Return boot-switches to SPI (usually OFF-OFF-OFF-OFF-OFF) and remove microSD.

Due to a bug in uefi smmu tables configuration, one of the two built-in crypto accelerators must be disabled.

Enable power and break again at the u-boot prompt, then use `edit` command to add fdt fixup:

```
=> fdt addr $fdt_addr_r
Working FDT set to 81200000

=> edit crypto_fixup
edit: fdt addr $fdt_addr_r; fdt resize 32; fdt set /soc/crypto@8000000 status "disabled"

=> edit distro_bootcmd
edit: run crypto_fixup; scsi_need_init=; setenv nvme_need_init; for target in ${boot_targets}; do run bootcmd_${target}; done

=> saveenv
Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done
OK
```

Finally power-off device.

## Prepare Installation Media

Download [Fedora Server](https://fedoraproject.org/server/download/) for ARM aarch64 systems netinstall or dvd iso, e.g. "Fedora-Server-netinst-aarch64-44-1.7.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.

Default boot-order is USB, microSD, eMMC, NVMe, SATA, PXE. If no other OS is detected first, the Installer should boot automatically showing the GRUB Menu.

![Fedora Installer GRUB Menu](/files/PZJIk4AtRz3CEj7pRIqd)

Press enter key to start the highlighted "Test this media & install Fedora 44" option.

Wait for the installer to boot fully, eventually it will show a welcome screen. For graphical install press "1) Use graphical mode via Remote Desktop Protocol", follow the menu and it will print IP address for connecting.

![Fedora Installer Welcome with RDP Option](/files/clwic87i2coVjgq9AABC)

Connect to the graphical installation menu e.g. using `freerdp`:

```sh
xfreerdp3 /v:192.168.15.125 /u:josua
```

![Fedora Installer Welcome with RDP Option](/files/iS2aP0XRAjupqkjkfA9r)

## Install

Follow the Installation Screens.

At completion the installer will show an error dialog because it failed to set next boot target in uefi runtime services:

```
anaconda 44.30 exception report
Traceback (most recent call first):
  File "/usr/lib/python3.14/site-packages/dasbus/client/handler.py", line 509, in _handle_method_error
    raise exception from None
  File "/usr/lib/python3.14/site-packages/dasbus/client/handler.py", line 483, in _get_method_reply
    return self._handle_method_error(error)
  File "/usr/lib/python3.14/site-packages/dasbus/client/handler.py", line 450, in _call_method
    return self._get_method_reply(
  File "/usr/lib64/python3.14/site-packages/pyanaconda/ui/gui/spokes/installation_progress.py", line 78, in _on_installation_done
    self._task_proxy.Finish()
  File "/usr/lib/python3.14/site-packages/dasbus/signal.py", line 53, in emit
    callback(*args, **kwargs)
  File "/usr/lib/python3.14/site-packages/dasbus/client/handler.py", line 365, in _signal_callback
    callback(*unwrap_variant(parameters))
  File "/usr/lib/python3.14/site-packages/dasbus/client/handler.py", line 133, in _signal_callback
    callback(parameters, *callback_args)
pyanaconda.modules.common.errors.installation.BootloaderInstallationError: Failed to set new efi boot target. This is most likely a kernel or firmware bug.
```

Variable storage is not supported, and this error is expected. The installation has completed and the installed system can be booted:

![Fedora Installer Error](/files/WNNZb42XwDUCs64Sc066)

Select "Quit", RDP session will end and initiate system reboot. When the u-boot prompt appears again, unplug installation media (usb drive).

Then depending on boot-order fedora should boot automatically as long as installation drive was listed first, i.e.:

`mmc0` is microSD, `mmc1` is eMMC, `nvme` is any nvme drive, default boot-order: `usb0 mmc0 mmc1 nvme0 scsi0 scsi1 scsi2 scsi3 pxe dhcp`

This can be changed on u-boot cli with `edit` command:

```
=> edit boot_targets
edit: nvme0
=> saveenv
Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done
OK
```

## First Boot Login Workaround

Because the installer aborted earlier, it failed to actually create user-accounts, set passwords and label selinux contexts.

As a work-around for first boot, stop on the grub menu. Press **E** key (no shift) to edit the highlighted "Fedora Linux ... (Server Edition)" option. Navigate to the line starting with "linux", append "enforcing=0 init=/bin/bash":

![Fedora System GRUB Menu](/files/IyHzXwP2PmRIHOXd4Ikw) ![Fedora System GRUB Menu, Edit Entry](/files/USGtc4o0OQjqGDTM1wtx)

Press CTRL + X (or F10) to boot Fedora.

Once bash shell (`bash-5.3#` ) appears, mount rootfs rw, set initial root user password, and reboot:

```
mount -o remount,rw /
passwd root
New password:
Retype new password:
passwd: password updated successfully
mount -o remount,ro /
reboot -f
```

On next boot stop in grub menu again, but only append `enforcing=0`. Fedora will boot to login-prompt, and the root password should work.

Now perform selinux relabeling, and reboot again:

```sh
restorecon -R -v /
reboot
```

Finally on next boot login will work by default without error:

```
Fedora Linux 44 (Server Edition)
Kernel 7.1.5-200.fc44.aarch64 on aarch64 (ttyAMA0)

Web console: https://localhost:9090/ or https://192.168.15.125:9090/

localhost login: root
Password:

[root@localhost ~]#
```

## Future Work

There is a path to implementing UEFI Variable Storage by combining optee-os and an eeprom on a dedicated i2c bus on LX2160A CEX-7 module. Given sufficient interest it can be implemented.

## Disclaimer

SolidRun LX2160A based platforms are supported in [Fedora](https://fedoraproject.org/) as a community effort without formal agreements or guarantees. Vendor-specific features such as DPDK or 25/40/100Gbps networking might not work well.


---

# 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/lx2160a/sbc-platform/lx2160a-software/fedora-on-lx2160a.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.
