Quick Start Guide: Nitrogen95 SMARC Beta Evaluation Kit

Getting Started

Welcome to the Quick Start Guide (QSG) for Ezurio's Nitrogen95 SMARC Evaluation Kit: https://www.ezurio.com/n95-evk๐Ÿ”—. This guide will walk you through the initial setup process and introduce you to the key hardware and software components of the kit. It's designed to help you quickly get up and running, understand what's included, and start exploring the platform. If you encounter any issues or have questions, please visit https://www.ezurio.com/support๐Ÿ”— or contact us at support@ezurio.com. As always, let us know about your experience with the EVK — both the good and bad.

Please refer to http://ezurio.com/n93-evk๐Ÿ”— if you purchased a Nitrogen93 Evaluation Kit instead.

nitrogen95-smarc-dvk.pngimage-20251204-145421.png

Example of the box label for the Nitrogen95 SMARC Beta Evaluation Kit.
Label will vary based on chosen kit part number.
A heatsink is always included by default, even if not specifically mentioned.

Heads up! We are also preparing OSM versions of the evaluation kit, starting with CarbonAM62 and 67, which are expected to follow in Q1 2026. Stay tuned for updates.

Unboxing

The following table provides a breakdown of the hardware components included in the Nitrogen95 SMARC Evaluation Kit:

ItemAdditional Description & Details
11× Nitrogen95 SMARC Module REV30#EZSMI-959-0816-00158-2. Equipped with 8 GB RAM and 16 GB eMMC storage. Sona NX611M variant (#453-00118), M.2 1216 form factor, featuring integrated Wi-Fi 6 and Bluetooth 5.4 connectivity.
21× HeatsinkDedicated cooling solution for the Nitrogen95 SMARC Family (#450-00218).
31× Universal SMARC Carrier Board REV20#SMARC_CAR, development board for all SMARC modules and solutions by Ezurio.
41× 5V/4A 100–240 VAC Switching Power Supply#FY0504000, includes region-specific AC power cord.
51× Dual DB9 Serial CableProvides terminal and debug access for both Cortex-A and Cortex-M cores.
61× 7" Touchscreen Display#BD070LIC3 (MIPI version) with 33-pin FPC (0.5 mm pitch, 203 mm length) flex cable.
71× 2.4/5/6 GHz FlexPIFA Antenna#EFB2471A3S-10MH4L with 10 cm cable.
81× Enclosure with Desktop StandBlack enclosure with integrated stand.
91× Arducam xISP – IMX678 Camera (Optional) #B0582, Arducam xISP – Darksee, Pre-tuned 8.3 MP Low-Light MIPI Camera Module.

Note: All accessories listed above are included unless otherwise stated.

Datasheets, Product Pages & DOCs

The following table provides an overview of available datasheets, product pages, and documentation (DOCs).

ProductDatasheetProduct Page (+Buy)Documentation
1Enclosure with Desktop StandN/AN/AN/A
2Nitrogen95 SMARC ModuleLink๐Ÿ”—Link๐Ÿ”—Link๐Ÿ”—
3Universal SMARC Carrier BoardLink๐Ÿ”—Link๐Ÿ”—Link๐Ÿ”—
4Sona NX611 Wi-Fi 6 + BLE 5.4 ModuleLink๐Ÿ”—Link๐Ÿ”—Link๐Ÿ”—
5BD070LIC3 – 7″ Touchscreen Display See documentation.Link๐Ÿ”—Link๐Ÿ”—
62.4/5/6 GHz FlexPIFA AntennaLink๐Ÿ”—Link๐Ÿ”—Link๐Ÿ”—
7Heatsink for the Nitrogen95 SMARC FamilySee documentation.Link๐Ÿ”—Link๐Ÿ”—
81× Arducam xISP – IMX678 Camera (Optional) See documentation.Link (Ezurio)๐Ÿ”—
Link (Arducam)๐Ÿ”—
Link๐Ÿ”—

The latest product brief for the Nitrogen95 SMARC Evaluation Kit can be found here๐Ÿ”—.

Board Assembly

Always make sure everything is completely powered off and disconnected from any power source before making changes to the board. Doing so while the board — or other parts of it — are still powered can cause irreversible damage to the hardware equipment!

The Nitrogen95 SMARC module, featuring on-board Wi-Fi 6 and Bluetooth 5.4, comes fully assembled with the Universal SMARC Carrier Board, heatsink, 7" touchscreen display, enclosure, desktop stand, and all necessary mounting hardware / screws / accessories — ready to use straight out of the box. The complete setup weighs 1.69 kg in total. The display connects to the motherboard via the MIPI-DSI interface (DSI0) using a 33-pin FPC/FFC ribbon cable, with the heatsink pre-attached to the module. By default, the antenna is glued to the stand for convenience and stability.
You can adjust the screen tilt vertically, like a laptop, to match your setup and preferences. If wireless connectivity is required, make sure the antenna is securely connected to U9 and the MHF4L connector on the PCB of the Sona NX611 module. We do not recommend removing the heatsink, but if necessary, it can be done using a 3 mm hex socket bit.

(Optional) If you purchased the camera version of the Nitrogen95 Beta Evaluation Kit, connect the 15 cm 22-pin FPC cable to the J11 (CSI0) port on the Universal SMARC Carrier Board, ensuring that the side labeled "To Board" is facing upward — just like the display. The connection on the camera side should already be pre-assembled. Next, attach the 2-pin jumper wire (GND/5V) between the Universal SMARC Carrier Board J28 pin header and the camera module. When finished, compare your setup with the following to make sure it matches: https://docs.arducam.com/Ezurio-Camera/MIPI-xISP-Camera-for-Ezurio/#hardware-connection๐Ÿ”—.
The 15 cm 22-pin FPC cable may appear copper-colored instead of black — depending on the production batch. If the camera is detected successfully, dmesg | grep "arducam" should return something like: [11.650954] arducam-pivariety 12-000c: sensor id: 0x0A56 … and … [11.651249] arducam-pivariety 12-000c: firmware version: 0x0010.

Stock Bootloader & OS

The system ships with U-Boot v2024.04 and the Yocto Scarthgap Boot2Qt release pre-installed on the eMMC (as of the time of writing). The example below shows the output from U-Boot SPLProperEnvironment Variables, and the Kernel’s dmesg log. You can use this as a reference to verify or compare the output from your own board.

To reprogram the eMMC, please follow the steps in https://www.ezurio.com/resources/software-announcements/programming-emmc-on-i-mx-platforms๐Ÿ”—. Alternatively, use balenaEtcher๐Ÿ”— (available for both Windows and Linux) to make the SOM boot from an SD card or a USB stick.

U-Boot SPL

U-Boot SPL 2024.04-00072-g67fd254f486 (Aug 20 2025 - 09:13:50 +0200)
SOC: 0xb0009500
LC: 0x40010
SYS Boot reason: por, origin: -1, errid: -1
SYS shutdown reason: por, origin: -1, errid: -1
DDRMIX is powered UP
Normal Boot
Trying to boot from MMC1
Primary set selected
Load image from MMC/SD 0xe0800
NOTICE:  BL31: v2.12.0(release):lf-6.12.20-2.0.0-5-geb84dde3e-dirty
NOTICE:  BL31: Built : 21:16:58, Aug 19 2025

U-Boot Proper

U-Boot 2024.04-00072-g67fd254f486 (Aug 20 2025 - 09:13:50 +0200)

CPU:   i.MX95 rev2.0 at 1800MHz
CPU:   Extended Industrial temperature grade (-40C to 125C) at 56C
LM Boot reason: por, origin: -1, errid: -1
LM shutdown reason: por, origin: -1, errid: -1
Model: Ezurio Nitrogen95 SMARC board
DRAM:  7.8 GiB
Core:  281 devices, 31 uclasses, devicetree: separate
MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
Loading Environment from MMC... OK
Fail to setup video link
In:    serial
Out:   serial
Err:   serial

BuildInfo:
  - SM firmware Build 648, Commit db9043a8, Aug 19 2025 17:01:35
  - ELE firmware version 2.0.2-2a118457

Normal Boot
Hit any key to stop autoboot:  0

U-Boot Environment Variables

=> printenv
arch=arm
baudrate=115200
board=nitrogen-smarc
board_name=imx95_nitrogen_smarc
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootaa64.efi; if fdt addr -q ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi
boot_efi_bootmgr=if fdt addr -q ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}
boot_fit=no
boot_net_usb_start=usb start
boot_pci_enum=pci enum
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_syslinux_conf=extlinux/extlinux.conf
boot_targets=mmc0 mmc1 usb0
bootcmd=run distro_bootcmd;run bsp_bootcmd
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
bootcmd_usb0=devnum=0; run usb_boot
bootdelay=2
bootm_size=0x10000000
cntr_addr=0xA8000000
cntr_file=os_cntr_signed.bin
console=ttyLP0
cpu=armv8
cpuidle=
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
dtbos=imx95-nitrogen-smarc-dsi.dtbo imx95-nitrogen-smarc-nx611.dtbo imx95-nitrogen-smarc-csi0-pivariety.dtbo
efi_dtb_prefixes=/ /dtb/ /dtb/current/
env_dev=0
env_part=1
eth1addr=00:19:b8:11:a7:78
ethact=enetc-0
ethaddr=00:19:b8:11:a7:77
ethprime=eth0
fastboot_raw_partition_bootloader=0x0 0x1ff0 mmcpart 1
fastboot_raw_partition_bootloader-env=0x1ff0 0x10 mmcpart 1
fdt_addr=0x93000000
fdt_addr_r=0x93000000
fdt_file=imx95-nitrogen-smarc.dtb
fdt_high=0xffffffffffffffff
fdtcontroladdr=fdec8260
fdtfile=imx95-nitrogen-smarc.dtb
fdtoverlay_addr_r=0x94000000
kernel_addr_r=0x90400000
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
loadaddr=0x90400000
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi
mmcdev=0
netargs=setenv bootargs ${cpuidle} ${mcore_args} console=${console},115200 root=/dev/nfs ip=dhcp nfsroot=${tftpserverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs;  if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${loadaddr} ${tftpserverip}:Image; if ${get_cmd} ${fdt_addr_r} ${tftpserverip}:${fdt_file}; then fdt addr ${fdt_addr_r}; fdt resize 0x10000; for dtbofile in ${dtbos}; do dhcp ${fdtoverlay_addr_r} ${tftpserverip}:${dtbofile}; fdt apply ${fdtoverlay_addr_r}; done; booti ${loadaddr} - ${fdt_addr_r}; else echo WARN: Cannot load the DT; fi;
prepare_mcore=setenv mcore_args pd_ignore_unused;
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi;
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then part uuid ${devtype} ${devnum}:${distro_bootpart} distro_bootpart_uuid ; run scan_dev_for_boot; fi; done; setenv devplist
scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;run boot_efi_bootmgr;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootaa64.efi; then echo Found EFI removable media binary efi/boot/bootaa64.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo EXTLINUX FAILED: continuing...; fi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
scriptaddr=0x93500000
sec_boot=no
soc=imx9
soc_type=imx95
splashimage=0xA0000000
uboot_defconfig=imx95_nitrogen_smarc
upgradeu=setenv boot_scripts upgrade.scr; boot;echo Upgrade failed!; setenv boot_scripts boot.scr;
usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi
vendor=boundary

Environment size: 4407/8188 bytes

dmesg

Please refer here (nitrogen95-beta-evk-dmesg.log) for dmesg, the kernel boot log.

Login Credentials:

Username: root
Password: —
Hostname: b2qt-nitrogen95

“Hello World”

Once the Universal SMARC Carrier Board is powered through J17using the DC barrel jack and the included power supply, the touchscreen display will initialize automatically. A green power indicator LED (D9) will illuminate; however, it may not be visible if the screen is folded down.Within a few seconds, the screen will display six Linux Tux (Penguins), followed by our Ezurio "IO" boot / loading animation. The system typically completes the boot process in under 30 seconds, after which the Boot2Qt Demo Launcher (see below) will appear.

Here you can select between a bunch of different demos, including: Startup Screen, Thermostat, Robot Arm, Coffee Maschine, Same Game, To Do List, and Calqlatr. In this case, please visit https://doc.qt.io/Boot2Qt๐Ÿ”— and https://code.qt.io/cgit/qt-apps/boot2qt-demos.git๐Ÿ”— for more information.

Tip: You can use Qt Creator to run, debug, and test your own applications on the Nitrogen95 SMARC Evaluation Kit. To do this, connect the kit to your computer using USB, Ethernet, or Wi-Fi. With a USB OTG cable, the board appears automatically in Qt Creator. For Ethernet, plug in a network cable and wait for the board to obtain an IP address. To connect over Wi-Fi, use the Boot to Qt Demo Launcher and ensure both the board and your computer are on the same network. Once connected, you’re ready to start building and deploying your applications directly from Qt Creator.

b2qt-landing-page-demo-launcher.png

Boot to Qt Demo Launcher on the Nitrogen95 SMARC Evaluation Kit.

Terminal and Debug Access

Cortex-M (MCU)

See section “FreeRTOS / NXP MCUXpresso SDK (2.16.0)” for more information

Cortex-A (CPU)
To set up and establish a serial connection, use the console cable provided in the kit. Connect the DB9 connector to the 6-pin Molex 53398-0671 header on the Universal SMARC Carrier Board (J18, SERIAL) — you may need to gently lift the screen for better access — and attach other end labeled CONSOLE to your host PC through an 5V USB-to-Serial adapter (not included by default); in our example, we used the Tripp Lite USA-19HS (Keyspan): https://tripplite.eaton.com/keyspan-high-speed-usb-to-serial-adapter~USA19HS๐Ÿ”—.Windows users can choose from terminal applications such as TeraTerm๐Ÿ”—, RealTerm๐Ÿ”—, or PuTTY๐Ÿ”—, while Linux users should use tools like screenminicom or picocom. The default serial settings are 115200 baud, 8 data bits, no parity, and 1 stop bit — commonly referred to as 8N1@115200. Once everything is in place, press the RESET button (SW1), and you should see the system boot logs appear in your terminal window.
The RS232 communication requires and operates at 5V TTL levels, not standard ±12V. If you prefer working with fastboot instead, then you may also want to connect a USB-C cable to J25 and your PC. In this context, please note that powering the entire board and setup through the USB-C connection is not sufficient, as it exceeds the current limits of a standard USB port.

Remote Network Login via SSH and Ethernet 1 /2

To connect the Nitrogen95 SMARC EVK to your local or public network, plug an RJ45 Ethernet cable into either J31 or J32 on the Universal SMARC Carrier Board. 100/1000 Mbps connections are supported on these two ports; 10 Gbps not. An SSH server (OpenSSHsshd) is enabled by default and listens on port 22 for incoming connections in the background. It becomes active once the system has fully booted.Ensure that a DHCP Server is running on your network. By default, the EVK operates as a DHCP Client, automatically requesting and receiving IPv4 + IPv6 addresses through systemd-networkd once available, as shown in the ipconfig and ip examples below:
root@b2qt-nitrogen95:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:19:B8:11:A7:77
          inet addr:192.168.2.186  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: 2003:c9:cf3e:2f0d:1c73:99ff:fe86:4ef8/64 Scope:Global
          inet6 addr: fe80::1c73:99ff:fe86:4ef8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:952 errors:0 dropped:45 overruns:0 frame:0
          TX packets:82 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:65165 (63.6 KiB)  TX bytes:9882 (9.6 KiB)

eth1      Link encap:Ethernet  HWaddr 00:19:B8:11:A7:78
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:108 errors:0 dropped:0 overruns:0 frame:0
          TX packets:108 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9196 (8.9 KiB)  TX bytes:9196 (8.9 KiB)

uap0      Link encap:Ethernet  HWaddr EA:CB:F5:20:8A:F0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

usb0      Link encap:Ethernet  HWaddr E6:1C:77:84:EF:83
          inet6 addr: fe80::e41c:77ff:fe84:ef83/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wfd0      Link encap:Ethernet  HWaddr EA:CB:F5:20:89:F0
          inet addr:192.168.2.183  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::e8cb:f5ff:fe20:89f0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:718 errors:0 dropped:0 overruns:0 frame:0
          TX packets:144 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:46751 (45.6 KiB)  TX bytes:16072 (15.6 KiB)

wlan0     Link encap:Ethernet  HWaddr E8:CB:F5:20:89:F0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@b2qt-nitrogen95:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:19:b8:11:a7:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.186/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2003:c9:cf3e:2f0d:0219:b8ff:fe11:a777/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 172764sec preferred_lft 86364sec
    inet6 fe80::1c73:99ff:fe86:4ef8/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:19:b8:11:a7:78 brd ff:ff:ff:ff:ff:ff
4: can1: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
    link/can
5: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
    link/can
6: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether e8:cb:f5:20:89:f0 brd ff:ff:ff:ff:ff:ff
7: uap0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether ea:cb:f5:20:8a:f0 brd ff:ff:ff:ff:ff:ff
8: wfd0: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ea:cb:f5:20:89:f0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.183/24 brd 192.168.2.255 scope global wfd0
       valid_lft forever preferred_lft forever
    inet6 fe80::e8cb:f5ff:fe20:89f0/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
9: usb0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether e6:1c:77:84:ef:83 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::e41c:77ff:fe84:ef83/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever

System Processes and Services

The following processes and services were captured and are automatically launched on the system at startup after a fresh boot:

root@b2qt-nitrogen95:~# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.5  0.1  19456 11260 ?        Ss   14:55   0:02 /sbin/init fixrtc
root           2  0.0  0.0      0     0 ?        S    14:55   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        S    14:55   0:00 [pool_workqueue_release]
root           4  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-rcu_g]
root           5  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-rcu_p]
root           6  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-slub_]
root           7  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-netns]
root          12  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-mm_pe]
root          13  0.0  0.0      0     0 ?        I    14:55   0:00 [rcu_tasks_kthread]
root          14  0.0  0.0      0     0 ?        S    14:55   0:00 [ksoftirqd/0]
root          15  0.0  0.0      0     0 ?        I    14:55   0:00 [rcu_preempt]
root          16  0.0  0.0      0     0 ?        S    14:55   0:00 [migration/0]
root          17  0.0  0.0      0     0 ?        S    14:55   0:00 [cpuhp/0]
root          18  0.0  0.0      0     0 ?        S    14:55   0:00 [cpuhp/1]
root          19  0.0  0.0      0     0 ?        S    14:55   0:00 [migration/1]
root          20  0.0  0.0      0     0 ?        S    14:55   0:00 [ksoftirqd/1]
root          21  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/1:0-events]
root          23  0.0  0.0      0     0 ?        S    14:55   0:00 [cpuhp/2]
root          24  0.0  0.0      0     0 ?        S    14:55   0:00 [migration/2]
root          25  0.0  0.0      0     0 ?        S    14:55   0:00 [ksoftirqd/2]
root          28  0.0  0.0      0     0 ?        S    14:55   0:00 [cpuhp/3]
root          29  0.0  0.0      0     0 ?        S    14:55   0:00 [migration/3]
root          30  0.0  0.0      0     0 ?        S    14:55   0:00 [ksoftirqd/3]
root          32  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/3:0H-kblockd]
root          33  0.0  0.0      0     0 ?        S    14:55   0:00 [cpuhp/4]
root          34  0.0  0.0      0     0 ?        S    14:55   0:00 [migration/4]
root          35  0.0  0.0      0     0 ?        S    14:55   0:00 [ksoftirqd/4]
root          38  0.0  0.0      0     0 ?        S    14:55   0:00 [cpuhp/5]
root          39  0.0  0.0      0     0 ?        S    14:55   0:00 [migration/5]
root          40  0.0  0.0      0     0 ?        S    14:55   0:00 [ksoftirqd/5]
root          41  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/5:0-pm]
root          42  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/5:0H-kblockd]
root          43  0.0  0.0      0     0 ?        S    14:55   0:00 [kdevtmpfs]
root          44  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-inet_]
root          45  0.7  0.0      0     0 ?        I    14:55   0:03 [kworker/u12:1-devfreq_wq]
root          46  0.0  0.0      0     0 ?        S    14:55   0:00 [kauditd]
root          47  0.0  0.0      0     0 ?        S    14:55   0:00 [oom_reaper]
root          48  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-write]
root          49  0.0  0.0      0     0 ?        S    14:55   0:00 [kcompactd0]
root          50  0.0  0.0      0     0 ?        SN   14:55   0:00 [ksmd]
root          51  0.0  0.0      0     0 ?        SN   14:55   0:00 [khugepaged]
root          52  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-kinte]
root          53  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-kbloc]
root          54  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-blkcg]
root          55  0.1  0.0      0     0 ?        I    14:55   0:00 [kworker/u12:2-events_unbound]
root          56  0.1  0.0      0     0 ?        I    14:55   0:00 [kworker/u12:3-events_unbound]
root          57  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/u12:4-events_power_efficient]
root          58  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-ata_s]
root          59  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/u12:5-events_freezable_power_]
root          60  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-devfr]
root          62  0.0  0.0      0     0 ?        S    14:55   0:00 [watchdogd]
root          63  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/1:1H-kblockd]
root          64  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-rpcio]
root          65  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-xprti]
root          66  0.0  0.0      0     0 ?        S    14:55   0:00 [kswapd0]
root          67  0.0  0.0      0     0 ?        S    14:55   0:00 [ecryptfs-kthread]
root          68  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-nfsio]
root          69  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-kthro]
root          71  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/22-arm-smmu-v3-evtq]
root          72  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-uas]
root          73  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/2:1-events]
root          74  0.0  0.0      0     0 ?        S    14:55   0:00 [hwrng]
root          75  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-neutr]
root          76  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/3:1-pm]
root          77  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/0:1H-mmc_complete]
root          78  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-tls-s]
root          79  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-mld]
root          80  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-ipv6_]
root          81  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-kstrp]
root          84  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/3:2-events]
root          87  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/1:4-pm]
root          88  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/4:1-pm]
root          90  0.1  0.0      0     0 ?        I    14:55   0:00 [kworker/0:5-events]
root          94  0.0  0.0      0     0 ?        S    14:55   0:00 [spi0]
root          95  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/200-4c010010.usb]
root          96  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-imx95]
root          97  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/4:2-pm]
root          98  0.2  0.0      0     0 ?        I<   14:55   0:01 [kworker/u13:0-MOAL_RX_WORK_QUEUE]
root          99  0.0  0.0      0     0 ?        S    14:55   0:00 [mali-simple-power-model-temp-poll]
root         100  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-rpmsg]
root         101  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/203-vpu_irq]
root         103  0.1  0.0      0     0 ?        I    14:55   0:00 [kworker/0:6-events]
root         105  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/204-6-0022]
root         106  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/5:2-pm]
root         107  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-enetc]
root         108  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-enetc]
root         111  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/198-4b0d0000.bridge]
root         113  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/u12:8-events_unbound]
root         114  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/222-rv3028]
root         123  0.0  0.0      0     0 ?        I    14:55   0:00 [kworker/2:10-pm]
root         126  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-sdhci]
root         127  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/224-mmc0]
root         128  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-sdhci]
root         129  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/225-mmc1]
root         130  0.0  0.0      0     0 ?        S    14:55   0:00 [card0-crtc0]
root         132  0.0  0.0      0     0 ?        S    14:55   0:00 [card0-crtc1]
root         133  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/240-42860000.mmc cd]
root         134  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-sdhci]
root         135  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/202-mmc2]
root         136  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-mmc_c]
root         137  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/2:1H-kblockd]
root         138  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-mmc_c]
root         139  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/242-ci_imx_wakeup]
root         140  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-ci_ot]
root         141  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/223-hd3ss3220]
root         143  0.0  0.0      0     0 ?        S    14:55   0:00 [jbd2/mmcblk1p2-8]
root         144  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-ext4-]
root         155  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/4:1H-kblockd]
root         158  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/0:2H-kblockd]
root         160  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/1:2H]
rpc          171  0.0  0.0   4644  2432 ?        Ss   14:55   0:00 /usr/sbin/rpcbind -w -f
root         174  0.1  0.1  40060  7936 ?        Ss   14:55   0:00 /usr/lib/systemd/systemd-journald
root         181  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/4:2H]
root         226  0.1  0.1  29524  9728 ?        Ss   14:55   0:00 /usr/lib/systemd/systemd-udevd
systemd+     311  0.0  0.0  89252  6400 ?        Ssl  14:55   0:00 /usr/lib/systemd/systemd-timesyncd
root         440  0.0  0.0  14972  5376 ?        Ss   14:55   0:00 /usr/lib/systemd/systemd-userdbd
root         537  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/5:2H]
root         541  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-cfg80]
root         542  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/2:2H]
root         562  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-MOAL_]
root         574  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/257-gt9271]
root         581  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-MOAL_]
root         582  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-MOAL_]
root         583  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-MOAL_]
root         584  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-MOAL_]
root         585  0.0  0.0      0     0 ?        S    14:55   0:00 [woal_reassoc_service]
root         593  0.0  0.1 395776 10752 ?        Ssl  14:55   0:00 /usr/sbin/ModemManager
root         604  0.0  0.0   3512  1536 ?        Ss   14:55   0:00 /usr/sbin/klogd -n
root         610  0.0  0.0   3512  1536 ?        Ss   14:55   0:00 /usr/sbin/syslogd -n
message+     613  0.1  0.0   7156  3712 ?        Ss   14:55   0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root         614  0.0  0.0   2724  1408 ?        Ss   14:55   0:00 /usr/bin/firmwared -d /lib/firmware
root         619  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/3:2H-kblockd]
root         629  0.0  0.0  15760  6528 ?        Ss   14:55   0:00 /usr/lib/systemd/systemd-logind
root         695  0.1  0.0  16048  6016 ?        Ss   14:55   0:00 /usr/sbin/connmand -n
systemd+     696  0.0  0.0  16920  7552 ?        Ss   14:55   0:00 /usr/lib/systemd/systemd-networkd
root         703  0.1  0.0      0     0 ?        I<   14:55   0:00 [kworker/u13:2-MOAL_TX_WORK_QUEUE]
root         704  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-CSAwl]
root         705  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-MCLIS]
root         706  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-CSAua]
root         707  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-MCLIS]
root         710  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-CSAwf]
root         711  0.0  0.0      0     0 ?        I<   14:55   0:00 [kworker/R-MCLIS]
root         737  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/220-0003:01:00.0:07]
avahi        738  0.0  0.0   7524  3200 ?        Ss   14:55   0:00 avahi-daemon: running [b2qt-nitrogen95.local]
root         739  0.0  0.0   8140  4224 ?        Ss   14:55   0:00 /usr/libexec/bluetooth/bluetoothd
root         741  0.1  0.1  17676  9728 ?        Ss   14:55   0:00 /usr/lib/systemd/systemd --user
root         742  0.0  0.0      0     0 ?        S    14:55   0:00 [irq/221-0003:01:00.0:03]
root         743  0.0  0.1  15528  9472 ?        Ss   14:55   0:00 /usr/sbin/sdcsupp -u
avahi        748  0.0  0.0   7228  1432 ?        S    14:55   0:00 avahi-daemon: chroot helper
root         749  0.0  0.0  19332  2908 ?        S    14:55   0:00 (sd-pam)
root         750  0.1  0.0      0     0 ?        I<   14:55   0:00 [kworker/u13:3-MOAL_TX_WORK_QUEUE]
root         758  0.1  0.6 2085968 47344 ?       Ssl  14:55   0:00 /usr/bin/containerd
root         764  0.0  0.1  56916 10368 ?        Ss   14:55   0:00 /usr/bin/appcontroller /usr/bin/qtlauncher
root         765  0.0  0.0   5260  1664 tty1     Ss+  14:55   0:00 /sbin/agetty -o -p -- \u --noclear - linux
root         766  0.0  0.0   5392  2048 ttyLP0   Ss+  14:55   0:00 /sbin/agetty -8 -L ttyLP0 115200 linux
root         774 11.9  2.1 1522036 166704 ?      Sl   14:55   0:54 /usr/bin/qtlauncher
root         793  0.0  0.1 278312 12784 ?        Sl   14:55   0:00 /usr/bin/qdbd --usb-ethernet-function-name ncm.usb0
root         819  0.0  0.0   6716  3328 ?        Ss   14:55   0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root         827  1.3  0.0      0     0 ?        S    14:55   0:06 [mali-gpuq-kthread]
root         850  0.0  0.1  13284  8500 ?        Ss   14:56   0:00 sshd: root@pts/0
root         852  0.2  0.0   7276  3712 pts/0    Ss   14:56   0:00 -sh
root         945  0.0  0.0      0     0 ?        I    15:00   0:00 [kworker/1:1-pm]
root         946  0.0  0.0      0     0 ?        I    15:00   0:00 [kworker/2:0-events_long]
root         947  0.1  0.0      0     0 ?        I    15:00   0:00 [kworker/0:0-events]
root         948  0.0  0.0      0     0 ?        I    15:00   0:00 [kworker/3:0-events]
root         949  0.0  0.0  15492  5248 ?        S    15:00   0:00 systemd-userwork: waiting...
root         950  0.0  0.0  15492  5248 ?        S    15:01   0:00 systemd-userwork: waiting...
root         951  0.0  0.0  15492  5248 ?        S    15:01   0:00 systemd-userwork: waiting...
root         952  0.1  0.0      0     0 ?        I    15:01   0:00 [kworker/u12:0-devfreq_wq]
root         953  0.0  0.0      0     0 ?        I    15:01   0:00 [kworker/4:0-events]
root         957  0.0  0.0      0     0 ?        I    15:01   0:00 [kworker/5:1-events]
root        1184  0.0  0.0      0     0 ?        I<   15:02   0:00 [kworker/u13:1-MOAL_RX_WORK_QUEUE]
root        1314  300  0.0   9372  3584 pts/0    R+   15:03   0:00 ps aux

root@b2qt-nitrogen95:~# systemctl list-units --type=service --state=running
  UNIT                                                LOAD   ACTIVE SUB     DESCRIPTION
  avahi-daemon.service                                loaded active running Avahi mDNS/DNS-SD Stack
  bluetooth.service                                   loaded active running Bluetooth service
  busybox-klogd.service                               loaded active running Kernel Logging Service
  busybox-syslog.service                              loaded active running System Logging Service
  connman.service                                     loaded active running Connection service
  containerd.service                                  loaded active running containerd container runtime
  dbus.service                                        loaded active running D-Bus System Message Bus
  demolauncher.service                                loaded active running Boot to Qt Demo Launcher
  firmwared.service                                   loaded active running Linux Firmware Loader Daemon
  getty@tty1.service                                  loaded active running Getty on tty1
  ModemManager.service                                loaded active running Modem Manager
  qdbd.service                                        loaded active running Qt Debug Bridge Daemon
  rpcbind.service                                     loaded active running RPC Bind
  serial-getty@ttyLP0.service                         loaded active running Serial Getty on ttyLP0
  sshd@0-192.168.2.183:22-192.168.2.121:54954.service loaded active running OpenSSH Per-Connection Daemon (192.168.2.121:54954)
  systemd-journald.service                            loaded active running Journal Service
  systemd-logind.service                              loaded active running User Login Management
  systemd-networkd.service                            loaded active running Network Configuration
  systemd-timesyncd.service                           loaded active running Network Time Synchronization
  systemd-udevd.service                               loaded active running Rule-based Manager for Device Events and Files
  systemd-userdbd.service                             loaded active running User Database Manager
  user@0.service                                      loaded active running User Manager for UID 0
  wpa_supplicant.service                              loaded active running WPA supplicant

  Legend:
        LOAD   → Reflects whether the unit definition was properly loaded.
        ACTIVE → The high-level unit activation state, i.e. generalization of SUB.
        SUB    → The low-level unit activation state, values depend on unit type.

23 loaded units listed.

System Information & Overview

You can check basic system information on the Nitrogen95 SMARC Evaluation Kit, including details such as the CPU type, usage, load, available memory, storage space, uptime, and software version. The example below shows the output from commands like lscpu, free -h, df -h, uptime, and cat /etc/os-release run on the device.
root@b2qt-nitrogen95:~# lscpu
Architecture:             aarch64
  CPU op-mode(s):         32-bit, 64-bit
  Byte Order:             Little Endian
CPU(s):                   6
  On-line CPU(s) list:    0-5
Vendor ID:                ARM
  Model name:             Cortex-A55
    Model:                0
    Thread(s) per core:   1
    Core(s) per cluster:  6
    Socket(s):            -
    Cluster(s):           1
    Stepping:             r2p0
    CPU(s) scaling MHz:   64%
    CPU max MHz:          1800.0000
    CPU min MHz:          500.0000
    BogoMIPS:             48.00
    Flags:                fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
Caches (sum of all):
  L1d:                    192 KiB (6 instances)
  L1i:                    192 KiB (6 instances)
  L2:                     384 KiB (6 instances)
  L3:                     512 KiB (1 instance)
Vulnerabilities:
  Gather data sampling:   Not affected
  Itlb multihit:          Not affected
  L1tf:                   Not affected
  Mds:                    Not affected
  Meltdown:               Not affected
  Mmio stale data:        Not affected
  Reg file data sampling: Not affected
  Retbleed:               Not affected
  Spec rstack overflow:   Not affected
  Spec store bypass:      Not affected
  Spectre v1:             Mitigation; __user pointer sanitization
  Spectre v2:             Not affected
  Srbds:                  Not affected
  Tsx async abort:        Not 

root@b2qt-nitrogen95:~# free -h
               total        used        free      shared  buff/cache   available
Mem:           7.5Gi       551Mi       6.9Gi        11Mi       258Mi       7.0Gi
Swap:             0B          0B          0B

root@b2qt-nitrogen95:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 4.2G      2.2G      1.7G  56% /
devtmpfs                  3.3G      4.0K      3.3G   0% /dev
tmpfs                     3.8G         0      3.8G   0% /dev/shm
tmpfs                     1.5G     10.1M      1.5G   1% /run
tmpfs                     3.8G      4.0K      3.8G   0% /tmp
tmpfs                     3.8G     32.0K      3.8G   0% /var/volatile
tmpfs                   768.9M     68.0K    768.8M   0% /run/user/0
/dev/mmcblk1p1           59.0M     35.5M     23.5M  60% /run/media/boot-mmcblk1p1

root@b2qt-nitrogen95:~# uptime
 14:56:54 up 11 min,  1 user,  load average: 0.81, 1.08, 0.71

root@b2qt-nitrogen95:~# cat /etc/os-release
ID=ezurio-b2qt
NAME="Ezurio b2qt"
VERSION="5.0.4 (scarthgap)"
VERSION_ID=5.0.4
VERSION_CODENAME="scarthgap"
PRETTY_NAME="Ezurio b2qt 5.0.4 (scarthgap)"
CPE_NAME="cpe:/o:openembedded:ezurio-b2qt:5.0.4"

Important Git Repository and Sources

BSP Support, Drivers & Configs

Updating & Customizing your Bootloader & OS

U-Boot

For more information, please refer to https://www.ezurio.com/resources/software-announcements/u-boot-v2022-04-for-i-mx-platforms๐Ÿ”—. The latest binaries can be found at u-boot-images-2022.04๐Ÿ”— and u-boot-images-2024.04๐Ÿ”—, while the source code is available on GitHub under github.com/boundarydevices/u-boot๐Ÿ”—.

If you’re unsure which defconfig to download, you can check the current configuration from the U-Boot prompt using: printenv uboot_defconfig. For the Nitrogen95 SMARC module it should always imx95_nitrogen_smarc.

Yocto

To ensure reproducible Yocto builds, we recommend using our (Ubuntu-based) Docker Containers whenever possible: https://www.ezurio.com/resources/software-announcements/using-docker-containers-for-reproducible-yocto-builds๐Ÿ”—.

Boot to Qt | Qt 6.8.1

Please refer to https://lairdcp.github.io/guides/Boot2Qt-Scarthgap-Release-for-iMX-Platforms/1.0/Boot2Qt-Scarthgap-Release-for-i.MX-Platforms.html๐Ÿ”— for more information.

Scarthgap

Please refer to https://lairdcp.github.io/guides/yocto-scarthgap-release-for-imx-platforms/1.0/Yocto-Scarthgap-Release-for-i.MX-Platforms.html๐Ÿ”— for more information.

Debian & Ubuntu

Not supported. For additional information, please contact your local sales representative or FAE.

Android (15 / 16)

We plan to introduce support for Android in an upcoming version and feature release. If you have an urgent need for your current project and product, please get in touch with us — our team will be happy to discuss your specific case. Visit https://www.ezurio.com/contact.

QNX (SDP 7.1 / 8.0)

We plan to introduce support for QNX in an upcoming version and feature release. If you have an urgent need for your current project and product, please get in touch with us — our team will be happy to discuss your specific case. Visit https://www.ezurio.com/contact.

FreeRTOS / NXP MCUXpresso SDK (2.16.0)

We plan to introduce support for FreeRTOS / the NXP MCUXpresso SDK in an upcoming version and feature release. If you have an urgent need for your current project and product, please get in touch with us — our team will be happy to discuss your specific case. Visit https://www.ezurio.com/contact.

J1 is the reserved JTAG connector, marked as DND (not fitted by default) on the Nitrogen95 SMARC module. You can populate it manually, if needed. For detailed pinout information and a list of compatible parts, refer to the SMARC 2.1 Hardware Specification, section 3.24, page 65: https://sget.org/wp-content/uploads/2020/03/SMARC_V21-specification.pdf๐Ÿ”—. The JTAG I/O voltage and interface operate at 1.8 V.

Buildroot

2025.02

TBD.

2024.02

TBD.

Additional Features & Information

Wi-Fi and Bluetooth / BLE Usage

To explore additional features and learn how to set up, bring up and use the internal Wi-Fi and BLE radio of the Sona NX611 module, for example, see https://lairdcp.github.io/guides/yocto-scarthgap-release-for-imx-platforms/1.0/Yocto-Scarthgap-Release-for-i.MX-Platforms.html๐Ÿ”—.

Arducam xISP – IMX678 Camera Usage

Enter U-Boot and verify that the following device tree overlays are applied by running setenv dtbos "imx95-nitrogen-smarc-dsi.dtbo imx95-nitrogen-smarc-nx611.dtbo imx95-nitrogen-smarc-csi0-pivariety.dtbo", followed by saveenv and reset. After the system has booted, stop Weston and terminate the QTLauncher to enable camera output by executing systemctl stop weston && killall qtlauncher via the debug UART interface or over SSH. Once the display is released, you can capture images and take pictures using GStreamer with WaylandSink. See the below examples.
Always check that the correct video device is selected (use v4l2-ctl --list-devices or ls /dev/video* to confirm) — in most cases, this will be /dev/video3. Also, do not forget to remove the plastic protection from the camera lens.
HD (1280x720)
# Stream. Do not forget to press Ctrl + C (STRG + C) to stop.
root@nitrogen95:~# gst-launch-1.0 v4l2src device=/dev/video3 ! video/x-raw,width=1280,height=720 ! waylandsink

# Take photo. Do not forget to press Ctrl + C (STRG + C) to stop.
root@nitrogen95:~# gst-launch-1.0 v4l2src device=/dev/video3 ! video/x-raw,width=1280,height=720 ! identity sync=true ! jpegenc ! multifilesink location="hd.jpg"
Full HD (1920x1080)
# Stream. Do not forget to press Ctrl + C (STRG + C) to stop.
root@nitrogen95:~# gst-launch-1.0 v4l2src device=/dev/video3 ! video/x-raw,width=1920,height=1080 ! waylandsink

# Take photo. 
root@nitrogen95:~# gst-launch-1.0 v4l2src device=/dev/video3 ! video/x-raw,width=1920,height=1080 ! identity sync=true ! jpegenc ! multifilesink location="fhd.jpg"
UHD aka. 4K (3840x2160)
# Stream. Do not forget to press Ctrl + C (STRG + C) to stop.
root@nitrogen95:~# gst-launch-1.0 v4l2src device=/dev/video3 ! video/x-raw,width=3840,height=2160 ! waylandsink

# Take photo. Do not forget to press Ctrl + C (STRG + C) to stop.
root@nitrogen95:~# gst-launch-1.0 v4l2src device=/dev/video3 ! video/x-raw,width=3840,height=2160 ! identity sync=true ! jpegenc ! multifilesink location="uhd4k.jpg"

Recovery Instructions

If your Nitrogen95 SMARC evaluation board isn't powering on or showing any signs of life, you may want to try recovering *both* the bootloader and operating system using NXP's Universal Update Utility (UUU). A step-by-step guide is available here: https://www.ezurio.com/resources/software-announcements/recovering-i-mx-platforms-using-uuu๐Ÿ”—.
Before that, make sure to double-check the following: (a) There are no visible signs of hardware damage — inspect all components carefully; (b) the Nitrogen95 SMARC module is properly seated in the SMARC socket slot (J1) of the Universal SMARC Carrier Board; (c) cables and connections are securely in place — nothing should be loose or jammed; (d) all boot switches on the Universal SMARC Carrier Board (S1) are in OFF position; and (e) SW1 on the Nitrogen95 SMARC module itself is also set to OFF.

Troubleshooting

Known Issues

  1. Bluetooth not working: If you encounter an error message such as [279.259014] Bluetooth: hci0: Frame reassembly failed (-84) repeatedly appearing in the debug terminal, try restarting or resetting the device. Then, at the U-Boot prompt, enter setenv dtbos "imx95-nitrogen-smarc-dsi.dtbo imx95-nitrogen-smarc-nx611.dtbo imx95-nitrogen-smarc-csi0-pivariety.dtbo" followed by saveenv and reset . This manually applies and saves the correct device tree. You only have to do it once.

Workarounds

  1. If the camera is detected but fails to operate correctly, try the following: Prepare a FAT32-formatted USB drive, copy the attached archive (nitrogen95-beta-evk-arducam.tar.gz) onto it, and insert it into one of the available USB ports (J2 or J24) on the Universal SMARC Carrier Board. The USB drive should mount automatically under /run/media/<usb-label>; if unsure, check the mount point using the mount command.

    Navigate to the directory using cd /run/media/<usb-label>, extract the archive with tar xvzf nitrogen95-beta-evk-arducam.tar.gz -C /, and then restart the system using reboot. Do not forget to remove the USB drive, as it's no longer needed. After the system comes back up, you will need to stop Weston and kill the QTLauncher with systemctl stop weston && killall qtlauncher to free the display before continuing and using libcamerify and cam — see below.

    Now, you should be able to run GStreamer through libcamerify, for example: libcamerify gst-launch-1.0 v4l2src device=/dev/video3 ! video/x-raw,width=1920,height=1080 ! waylandsink to stream video, or libcamerify gst-launch-1.0 v4l2src device=/dev/video3 ! video/x-raw,width=1920,height=1080 ! identity sync=true ! jpegenc ! multifilesink location="fhd.jpg" to take a photo — im this case, always prefixing your GStreamer commands with libcamerify!

    As a second option, it's also possible to use the cam tool: cam -c 1 --capture -D -s width=3840,height=2160 to stream 4K video or cam -c 1 --capture=10 -s width=3840,height=2160 -F to capture a series of UHD photos. Please note that for the latter you’ll need to convert the raw video data, for example on your local Linux host machine using: ffmpeg -f rawvideo -pixel_format yuyv422 -video_size 3840x2160 -i input.bin output.jpg.

References

  1. (Boundary Devices) Wiki → https://bdwiki.ezurio.com/index.php/Nitrogen95_SMARC,
  2. (Ezurio) GitHub SOM Documentation → https://lairdcp.github.io/soms,
  3. (Ezurio) Software Releases → https://www.ezurio.com/resources/software-announcements,
  4. (Arducam) Documentation → https://docs.arducam.com,
  5. (NXP) i.MX 95 Applications Processor Family → https://www.nxp.com/products/i.MX95,
  6. (NXP) IW611 Chipset → https://www.nxp.com/products/IW611,
  7. (Buildroot Project) Documentation → https://buildroot.org/docs.html,
  8. (Yocto Project) Documentation → https://docs.yoctoproject.org,
  9. (SGeT Consortium) SMARC Standard → https://sget.org/standards/smarc,
  10. (Docker) Documentation → https://docs.docker.com,
  11. (Qt & Boot2Qt) Documentation → https://doc.qt.io/Boot2Qt + https://doc.qt.io.

Changelog

  • Public Version 2.0 − 03/12/2025 (Florian Baumgartl): Updates for #P/N EZSMI-959-0816-00158-2-KC REV 1.0, the camera version.
  • Public Version 1.0 − 24/10/2025 (Florian Baumgartl): Initial release based on #P/N EZSMI-959-0816-00158-2-K2 REV 1.0, the non-camera version.