Files
nixos-hardware/nxp/README.md
2025-11-04 13:35:34 +01:00

3.0 KiB

NXP i.MX8 SOC family support

1. Supported devices

2. How to use

2.1 For imx8qm-mek

Currently this NXP overlay is used for generating EFI-bootable NixOS images. I recommend to use Tow-Boot as a bootloader, but U-Boot from this overlay can also be used. U-Boot was tested separately from NixOS.

Code snippet example that enables imx8qm configuration:

{ nixos-hardware, }: {
  system = "aarch64-linux";
  modules = [
    nixos-hardware.nixosModules.imx8qm-mek
  ];
}

2.2 For imx8mq-evk/imx8mp-evk/imx93-evk

This NXP overlay is used for generating sdimage. Current configuration uses uboot as a bootloader. It provides an options to use optee-os which is currently disabled. It can be enabled using enable-tee boolean argument avalable in imx8m<q/p>-boot.nix, which is false by default in imx8m platform.

Code snippet example that enables 'imx8mp-evk/imx8mq-evk/imx93-evk' configuration:

{ nixos-hardware, }: {
  system = "aarch64-linux";
  modules = [
    nixos-hardware.nixosModules.imx8mp-evk  #For imx8mp-evk
    #nixos-hardware.nixosModules.imx93-evk  #For imx93-evk
    #nixos-hardware.nixosModules.imx8mq-evk  #For imx8mq-evk
  ];
}

2.3 Building Boot Images

Boot images for flashing to SD cards can be built directly from the flake:

# Build boot image for i.MX8MP EVK
nix build github:NixOS/nixos-hardware#packages.aarch64-linux.imx8mp-boot

# Build boot image for i.MX8MQ EVK
nix build github:NixOS/nixos-hardware#packages.aarch64-linux.imx8mq-boot

# Build boot image for i.MX93 EVK
nix build github:NixOS/nixos-hardware#packages.aarch64-linux.imx93-boot

# Or from a local checkout
nix build .#packages.aarch64-linux.imx8mp-boot

The boot image will be available at ./result/image/flash.bin.

Note: These packages target aarch64-linux. If you're on a different architecture (e.g., x86_64-linux), you'll need remote builders configured for aarch64-linux.

2.4 Flashing to SD Card

Once built, you can flash the boot image to an SD card:

# For i.MX8MP and i.MX93 (32KB offset):
sudo dd if=./result/image/flash.bin of=/dev/sdX bs=1k seek=32 conv=fsync

# For i.MX8MQ (33KB offset):
sudo dd if=./result/image/flash.bin of=/dev/sdX bs=1k seek=33 conv=fsync

Note: Different i.MX processors require different offsets. i.MX8MP and i.MX93 use 32KB (seek=32), while i.MX8MQ uses 33KB (seek=33).

Warning: Double-check the device path to avoid overwriting the wrong disk!