NetBSD on the i.MX23-OLinuXino
February 2026
In the second half of 2025, I spent some time adding support for booting NetBSD on the i.MX23-OLinuXino using device trees and u-boot. All old i.MX23-OLinuXino guides have been lost in the depths of the internet and not even the internet archive has all pieces, so I've decided to collect all information on one page.
This guide is not a full step-by-step guide. Rather, it should be seen as a collection of notes to make it easier, but I won't be providing detailed instructions/commands for e.g. how to partition the SD card.
If you struggle to get it working, feel free to contact me. Perhaps one day, I'll also add it to the prebuild images on armbsd.org.
The i.MX23 SoC has many names, sometimes it is also called i.MX233 or MX23. Even Freescale/NXP couldn't decide on one name and calls it different across documents. These three names should be used synonymously and aren't a typo.
Supported Hardware
| Device | State |
|---|---|
| Debug UART | Working |
| Application UART | Not implemented |
| Audio Output | Working |
| Audio Input | Not implemented |
| USB | Working |
| ECC+crypto accelerators | Not implemented |
| SD card | Working |
| Display Outputs | Not implemented |
| GPIO | Working |
| SPI, I2C | bit-banging via gpio possible |
Booting NetBSD
The i.MX23 boots NetBSD using u-boot. The u-boot bootloader, kernel and device trees are stored on the SD card, while the root filesystem is either on the SD card or an USB device.
The SD card needs to be set up in a specific way:
- MBR partitions
- The first partition is of type 0x53 (83 in decimal) and contains u-boot.
- The second partition is FAT32 and contains the device tree and kernel uImage.
- The third partition is for the root filesystem.
Building u-boot
U-Boot for the i.MX233-Olinuxino is packaged as wip/u-boot-imx23-olinuxino in pkgsrc-wip. Instructions for how to build it can be found on the pkgsrc-wip page.
This produces u-boot in /usr/pkg/share/u-boot/imx23-olinuxino/u-boot.sb.
Alternatively, it is possible to directly compile from the u-boot sources:
gmake mx23_olinuxino_defconfig
CROSS_COMPILE=arm-none-eabi- gmake u-boot.sb
Getting the Kernel
The i.MX23 runs the GENERIC_V5 kernel configuration.
- You can download the kernel from https://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/latest/evbarm-earmv5/binary/
The correct file is
GENERIC_V5.ub. This file is the same asnetbsd.ubwhen building from source. The device tree can be extracted from the DTB set. - You can build the kernel from source:
The output./build.sh -u -j8 -U -m evbearmv5-el tools ./build.sh -u -j8 -U -m evbearmv5-el kernel=GENERIC_V5 ./build.sh -u -j8 -U -m evbearmv5-el dtbnetbsd.ubandimx23-olinuxino.dtbwill be somewhere in the destdir.
Preparing the SD card
Partition the SD card:
- MBR partitions
- The first partition is of type 0x53 (83 in decimal) and contains u-boot. 32MB is enough
- The second partition is FAT32 and contains the device tree and kernel uImage. 32-128MB is appropriate.
- The third partition is for the root filesystem.
Initially, I started out be modifying the linux image. This might be an option if you struggle to create a 0x53 partition.
To burn u-boot: dd if=u-boot.sb of=/dev/sd_card_part_1 bs=512 seek=4.
The seek=4 is important. Nobody really knows why, but your olinuxino won't boot without it.
Create a FAT32 filesystem on the second partition. Copy netbsd.ub and
imx23-olinuxino.dtb onto it.
Next, you can set up the root filesystem. Alternatively, you can also use the installer.
Using the installer
To use the installer, you have to build the kernel from source.
Add a file sys/arch/evbarm/conf/GENERIC_V5.local with the following contents to the source tree:
no options MEMORY_DISK_DYNAMIC
options MEMORY_DISK_IS_ROOT
options MEMORY_DISK_RBFLAGS=RB_SINGLE
options MEMORY_DISK_ROOT_SIZE=6144
Build the kernel as usual.
Next, we need a ramdisk containing the installer. You can download the ramdisk.fs from here: https://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/20260208145819Z/evbarm-earmv5/installation/ramdisk/
To embedd the ramdisk into the kernel, run:
$TOOLDIR/arm--netbsdelf-eabi-mdsetimage $BUILDDIR/GENERIC_V5/netbsd ramdisk.fs
$TOOLDIR/arm--netbsdelf-eabi-objcopy -S -O binary $BUILDDIR/GENERIC_V5/netbsd install-netbsd
$TOOLDIR/nbmkubootimage -A arm -T kernel_noload -O linux -C none -e 0 -n "NetBSD/earmv5 11.99.5" install-netbsd install-netbsd.ub
Then copy it onto the SD card as usual.
The following article about ramdisk/installer might be interesting too: https://bentsukun.ch/posts/ramdisk-kernel/
Common Issues
Sometimes NetBSD crashes early on in the boot process due to an invalid device tree header. This is due to u-boot
picking an unfortunate memory layout where NetBSD's BSS section overlaps the device tree. You can avoid it
using this
boot.scr script for NetBSD (compiled using mkimage -C none -A arm -T script -d imx23-boot.cmd
imx23-boot.scr, then copy it to the SD card):
env set fdt_high 0x41000000;
fatload mmc 0:2 0x41000000 imx23-olinuxino.dtb;
fatload mmc 0:2 0x41800000 uImage;
bootm 0x41800000 - 0x41000000;