DESK-MX9-L/pdf

From DAVE Developer's Wiki
Jump to: navigation, search


History[edit | edit source]

DESK-MX9-L History
Version Issue Date Notes Refers to

5.0.0

Feb 2024 DESK-MX9-L-5.0.0 release AURA

5.1.0

Apr 2024 DESK-MX9-L-5.1.0 release AURA

5.2.0

Mar 2025 DESK-MX9-L-5.2.0 release AURA
6.0.0 Feb 2026 DESK-MX9-L-6.0.0 release AURA-SOM top.png AURA


General Information[edit | edit source]

Release Notes[edit | edit source]

DAVE Embedded Systems adds to the latest Linux BSP from NXP the customization required to support the SOC platform. For this reason, most of the documentation provided by NXP remains valid for the DESK development kit.

However, some customization is required, in particular at bootloader and linux kernel levels.

The following table reports the DESK releases information.

DESK version
Release number 6.0.0
Release type Major
Status Released
Release date Feb 2026
Release notes Ver 6.0.0
Product support AURA
MVM (distro version) Ubuntu 20.04
U-Boot version 2024.04-desk-mx9-l-6.0.0
Linux version 6.6.52-desk-mx9-l-6.0.0
Drivers

NAND
eMMC
CAN
Ethernet
LVDS
MIPI

SD
UART
SD
USB Host
USB Peripheral

Manufacturer BSP version lf-6.6.52-2.2.1
Graphic libraries N.A.
Build System Yocto Scarthgap (5.0)

DESK-MX9-L 6.0.0[edit | edit source]

200px-Emblem-important.svg.png

New MVM must be installed for using DESK-MX9-L-5.0.0. The VM is available for download on DAVE's DESK-MX Reserved Area for registered users.

  • Release notes:

update u-boot and linux to desk-mx9-l-6.0.0 update the meta-layer to Scarthgap

Known Limitations[edit | edit source]

The following table reports the known limitations of this DESK release:

Issue Description
U-Boot SPI NAND is not supported
Kernel Camera is not supported
UART Only RS232 mode is supported on Evaluation Kit multiprotocol port

Downloadable binary images[edit | edit source]

All binary images for DESK-MX9-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.

The binary file must be stored into SD card using BalenaEtcher tool, see How to create a bootable microSD card page.

A summary of images with a brief description can be found in the table below:

Image DESK version 6.0.0
Platform SBCX AURA
Carrier Board ConfigID 2001
LCD panel Ampire 800 x 480 7" LVDS
(AM-800480BTMQW-TG0H-C)
Touchscreen capacitive
Linux kernel Image-desk-mx93-rev1.bin
Device tree imx93-aura-som0002-cb2001-desk-mx93-rev1.dtb
root file system dave-image-devel-desk-mx93-rev1.tar.bz2
wic file dave-image-devel-desk-mx93-rev1.wic.bz2

DESK-MX9-L 5.2.0[edit | edit source]

200px-Emblem-important.svg.png

New MVM must be installed for using DESK-MX9-L-5.0.0. The VM is available for download on DAVE's DESK-MX Reserved Area for registered users.

Release notes:

  • add desk-mx9-wayland custom distro
  • add kas support
  • add bluez public repo
  • enable EGALAX I2C driver
  • update ethernet aliases for SBCX-Aura REV1 platform in U-Boot and Linux
  • add audio support
  • add frequency configuration for tlv320aic31xx
  • add AzureWave AW-CM276MA-SUR support
  • update RGMII pinmux settings

Known Limitations[edit | edit source]

The following table reports the known limitations of this DESK release:

Issue Description
U-Boot SPI NAND is not supported
Kernel Camera first access after power-on fails. The following access are working correctly
UART Only RS232 mode is supported on Evaluation Kit multiprotocol port
Reset When Ethernet is connected and the board is reset, the system freezes

Downloadable binary images[edit | edit source]

All binary images for DESK-MX9-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.

The binary file must be stored into SD card using BalenaEtcher tool, see How to create a bootable microSD card page.

A summary of images with a brief description can be found in the table below:

Image DESK version 5.2.0
Platform SBCX AURA
Carrier Board ConfigID 2001
LCD panel Ampire 800 x 480 7" LVDS
(AM-800480BTMQW-TG0H-C)
Touchscreen capacitive
Linux kernel Image-desk-mx93-rev1.bin
Device tree imx93-aura-som0002-cb2001-desk-mx93-rev1.dtb
root file system dave-image-devel-desk-mx93-rev1.tar.bz2
wic file dave-image-devel-desk-mx93-rev1.wic.bz2

DESK-MX9-L 5.1.0[edit | edit source]

200px-Emblem-important.svg.png

New MVM must be installed for using DESK-MX9-L-5.0.0. The VM is available for download on DAVE's DESK-MX Reserved Area for registered users.

Release notes:

  • Add support for SOC Rev. A1
  • Enable support driver Low Drive Mode
  • Disable flexspi1 (used for SPI NAND on SOM) to use the PADs for the SDIO (usdhc3) bus
  • Minor fixes

Known Limitations[edit | edit source]

The following table reports the known limitations of this DESK release:

Issue Description
U-Boot SPI NAND is not supported
Kernel Camera first access after power-on fails. The following access are working correctly
UART Only RS232 mode is supported on Evaluation Kit multiprotocol port
Temp The TMU temperature reading may spike incorrectly (ERR052243), leading to invalid data.

Downloadable binary images[edit | edit source]

All binary images for DESK-MX9-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.

The binary file must be stored into SD card using BalenaEtcher tool, see How to create a bootable microSD card page.

A summary of images with a brief description can be found in the table below:

Image DESK version 5.1.0
Platform SBCX AURA
Carrier Board ConfigID 2001
LCD panel Ampire 800 x 480 7" LVDS
(AM-800480BTMQW-TG0H-C)
Touchscreen capacitive
Linux kernel Image-desk-mx93-rev1.bin
Device tree imx93-aura-som0002-cb2001-desk-mx93-rev1.dtb
root file system dave-image-devel-desk-mx93-rev1.tar.bz2
wic file dave-image-devel-desk-mx93-rev1.wic.bz2

DESK-MX9-L 5.0.0[edit | edit source]

200px-Emblem-important.svg.png

New MVM must be installed for using DESK-MX9-L-5.0.0. The VM is available for download on DAVE's DESK-MX Reserved Area for registered users.

Release notes:

  • First release based on NXP BSP 6.1.55

Known Limitations[edit | edit source]

The following table reports the known limitations of this DESK release:

Issue Description
U-Boot SPI NAND is not supported
Kernel Camera first access after power-on fails. The following access are working correctly
kernel Power management is not supported
UART Only RS232 mode is supported on Evaluation Kit multiprotocol port

Downloadable binary images[edit | edit source]

All binary images for DESK-MX9-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.

The binary file must be stored into SD card using BalenaEtcher tool, see How to create a bootable microSD card page.

A summary of images with a brief description can be found in the table below:

Image DESK version 5.0.0
Platform SBCX AURA
Carrier Board ConfigID 2001
LCD panel Ampire 800 x 480 7" LVDS
(AM-800480BTMQW-TG0H-C)
Touchscreen capacitive
Linux kernel Image-desk-mx93.bin
Device tree imx93-aura-cb2001-desk-mx93.dtb
root file system dave-image-devel-desk-mx93.tar.bz2
wic file dave-image-devel-desk-mx93.wic.bz2

Release types[edit | edit source]

DESK release type can be:

  • Major, when substantial changes are applied to the BSP (eg: major kernel version upgrades) or to the development kit (eg: new features, build system updates, ..). This usually means that a new DVDK is created for the DESK release
  • Maintenance, when minor updates and bug fixes are introduced. This usually means that the DVDK remains the same provided with the previous major version, and only an update of the source tree repositories (and the tftp binaries) is required

As an example, DESK 1.1.0 is a maintenance release, so it provides the DVDK released with the 1.0.0 major release; customers can easily upgrade to the 1.1.0 release by updating the software components as described in Synchronizing git repositories.

Supported platforms[edit | edit source]

The following table reports the supported platforms in this DESK release:

Platform Description
SBC AXEL Single Board Computer using AURA SOM as Evaluation Kit



Virtual Machine[edit | edit source]

DAVE' standard DVDK Virtual Machine contains all the required software and documentation to start developing Linux applications on the AURA platforms. In particular, DESK-MX9-L provides a virtual machine, called DVDK, with the following features:

  • VirtualBox virtual machine (.OVA archive)
  • based on Lubuntu 20.04 LTS (64-bit version)
  • pre-installed VirtualBox Guest Additions
  • LXDE desktop environment
  • boot disk with the distro and pre-configured basic Linux services:
    • TFTP: with base directory /tftpboot/desk-mx9-l/
    • NFS: configured through the /etc/exports file
  • Disk containing source code and tools:
    • bootloader (U-Boot) source tree cloned from DAVE Embedded Systems public git repository
    • Linux kernel source tree cloned from DAVE Embedded Systems public git repository
    • external pre-built toolchain
    • Yocto BSP for AURA SOM
  • pre-installed Yocto-based root file systems with setup scripts, makefiles, example applications, ...
  • administrator account (dvdk) with autologin. Please note that the user account credentials are provided with the development kit (you can find them in the README file contained in the sw/dvdk folder of the kit distribution)
    • user: dvdk
    • password: dvdk

Please note that U-Boot and kernel source trees are derived from the official trees released by NXP/Freescale; these trees have been customized to add support for the AURA SOMs.

Host setup[edit | edit source]

As stated previously, AURA SOM host tools are based on a Managed Virtual Machine. As indicated here, microSD card delivered along with AURA Evaluation Kit includes basic version of MVM that is the default option.

Please follow the README file on the SD card to extract the *.ova archive and to install the MVM.

It is also worth remembering that access to git repositories is required to download the target source code. To enable it, please refer to this page.

MVM can be downloaded here. For accessing DESK Reserved area please contact our helpdesk support channel

To install it, please refer to this page.


200px-Emblem-important.svg.png

The DESK-MX9L-L Ubuntu 20.04 Virtual Machine - used up to DESK-MX9-L-5.x.x release - is still valid.

Installing the meta-toolchain SDK[edit | edit source]

DESK-MX9-L-6.0.0 meta toolchain SDK can be installed to build U-Boot and kernel sources:

dvdk@vagrant:~$ cd desk-mx-l/
dvdk@vagrant:~/desk-mx-l$ wget https://mirror.dave.eu/desk-mx-l/desk-mx9-l-6.0.0/fsl-imx-wayland-glibc-x86_64-meta-toolchain-armv8a-desk-mx93-rev1-toolchain-6.6-scarthgap.sh
dvdk@vagrant:~/desk-mx-l$ chmod +x fsl-imx-wayland-glibc-x86_64-meta-toolchain-armv8a-desk-mx93-rev1-toolchain-6.6-scarthgap.sh
dvdk@vagrant:~/desk-mx-l$ ./fsl-imx-wayland-glibc-x86_64-meta-toolchain-armv8a-desk-mx93-rev1-toolchain-6.6-scarthgap.sh -d /opt/yocto/sdk/desk-mx9-l/desk-mx9-l-6.0.0 -y
NXP i.MX Release Distro SDK installer version 6.6-scarthgap
===========================================================
Enter target directory for SDK (default: /opt/fsl-imx-wayland/6.6-scarthgap): ^C
dvdk@vagrant:~/desk-mx-l$ ./fsl-imx-wayland-glibc-x86_64-meta-toolchain-armv8a-desk-mx93-rev1-toolchain-6.6-scarthgap.sh -d /opt/yocto/sdk/desk-mx9-l/desk-mx9-l-6.0.0 -y
NXP i.MX Release Distro SDK installer version 6.6-scarthgap
===========================================================
You are about to install the SDK to "/opt/yocto/sdk/desk-mx9-l/desk-mx9-l-6.0.0". Proceed [Y/n]? Y
Extracting SDK.................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /opt/yocto/sdk/desk-mx9-l/desk-mx9-l-6.0.0/environment-setup-armv8a-poky-linux
dvdk@vagrant:~/desk-mx-l$

Installing the application SDK[edit | edit source]

DESK-MX9-L-6.0.0 application SDK can be installed to build userspace application:

dvdk@vagrant:~$ cd desk-mx-l/
dvdk@vagrant:~/desk-mx-l$ wget https://mirror.dave.eu/desk-mx-l/desk-mx9-l-6.0.0/fsl-imx-wayland-glibc-x86_64-dave-image-minimal-armv8a-desk-mx93-rev1-toolchain-6.6-scarthgap.sh
dvdk@vagrant:~/desk-mx-l$ chmod +x fsl-imx-wayland-glibc-x86_64-dave-image-minimal-armv8a-desk-mx93-rev1-toolchain-6.6-scarthgap.sh
dvdk@vagrant:~/desk-mx-l$ ./fsl-imx-wayland-glibc-x86_64-dave-image-minimal-armv8a-desk-mx93-rev1-toolchain-6.6-scarthgap.sh -d /home/dvdk/desk-mx-l/sdk/desk-mx9-l-6.0.0 -y

Using the SDK[edit | edit source]

Anytime it is required to compile u-boot or kernel sources, it is enough to start the script:

 source /opt/yocto/sdk/desk-mx9-l/desk-mx9-l-6.0.0/environment-setup-armv8a-poky-linux



ConfigID and UniqueID[edit | edit source]

ConfigID[edit | edit source]

ConfigID is a new feature of DAVE Embedded Systems products. Its main purpose is providing an automatic mechanism for the identification of the product model and configuration.

With ConfigID, we aim at:

  • completing the hardware configuration information that the software can't normally auto-detect (i.e. RAM chip version,...), implementing a dedicated reliable detect procedure
  • when required, overriding the auto-detected hardware configuration information

When implemented, this mechanism allows for:

  • initializing in the proper way the hardware platform, based on the specific features and parameters of the product, using a common software base (eg: a typical case is the SDRAM controller parameters, which must be configured by U-Boot depending on the particular memory chip, which can be different for the various SOM models)
  • getting the complete hardware configuration (combining ConfigID with the information collectable at runtime) of a product deployed on the field

In simple words, model identification means the capability of reading a numerical code, stored in an available device (SOC's OTP , I2C EEPROM, 1-wire memories, protected NOR flash, etc.)

There are two ConfigIDs:

  • SOM ConfigID: which reflects the characteristics of the SOM (stored on the SOM itself)
  • Carrier Board (CB) ConfigID: which reflects the characteristics of the carrier board that hosts the SOM (stored on the carrier board itself and read by the SOM at boot time)

UniqueID[edit | edit source]

An additional attribute is UniqueID, which is a read-only code which univocally identifies a single product and is used for traceability.


200px-Emblem-important.svg.png

It is worth remembering that ConfigID and UniqueID are independent from product serial number.

Customer's action[edit | edit source]

DAVE Embedded Systems recommends to be up-to-date with Official SOM's BSPs for taking advantages of ConfigID/UniqueId features: this is the only required action.

  • ConfigID advantage: to allow U-Boot bootloader to be executed only with the correct configuration (if the U-Boot loaded is not the proper one, it may stop execution avoiding incorrect behaviour)
  • UniqueID advantage: to trace univocally each individual SOMs and, in turn, all the on-the-field equipments

ConfigID values[edit | edit source]

ConfigID is a N-bit (typically N>8) signed integer, that can have the following values:

  • < 0: error
    • -1: not initialized
  • = 0: ConfigID legacy
    • for prototypes (ConfigID not yet defined) or for products manufactured before the introduction of the ConfigID feature
  • > 0: valid ConfigID
    • values are reported accordingly with the specific product table

Hardware implementations of the ConfigID[edit | edit source]

The following paragraphs briefly describe the available solutions for storing the ConfigID.

OTP on the SOC[edit | edit source]

Some SOCs provides programmable OTPs (eg. for security, MAC address, boot modes, etc). Usually, some of these are general purpose registers and can be managed by the user.

This is the ideal implementation, because:

  • ConfigID is stored in the most important component of the SOM
  • the component that hosts the ConfigID is NOT optional
  • typically, a very selective lock can be forced. In general, for reliability and/or security reasons, OTP areas used to store ConfigIDs may be locked during the manufacturing process.

OTP 1-wire memory[edit | edit source]

This implementation requires a 1-wire memory chip.

I2C Eeprom[edit | edit source]

This implementation requires connecting an EEPROM to an I2C bus of the SOC. Moreover, routing a write protect pin to the SOM connector is required.

NOR Flash SPI[edit | edit source]

This implementation requires a NOR flash connected to the SPI bus of the SOC.

DAVE Embedded Systems' hardware implementation[edit | edit source]

DAVE's SOCs implement the ConfigID feature depending on hardware Capabilities of the SOCs. The following list shows the priority used for its implementation:

  1. OTPs
    1. example: AXEL family processor (i.MX6) implements ConfigID using processor's OTP
    2. AXEL uses GP1 eFuse register to store ConfigID
  2. NOR Flash SPI
    1. example: DIVA family processor (AM335x) implements ConfigID using NOR SPI (if present)
    2. DIVA and BORA use the first 32bytes OTP block on NOR SPI to store ConfigID (and its CRC32), UniqueID (and its CRC32)
  3. I2C Eeprom
    1. example: DIVA family processor (AM335x) or BORA Lite processor (ZYNQ) implements ConfigID using I2C Eeprom when NOR SPI is not present (module boots from NAND or SD)
    2. DIVA and BORA Lite use the first 32bytes on I2C EPROM to store ConfigID (and its CRC32), UniqueID (and its CRC32)
  4. 1-wire
    1. example: latest AXEL Lite, AXEL ULite and BORA/BORA Xpress/BORA Lite Evaluation Kits implement CB ConfigID using the onboard 1-wire device (DS2431)

Software implementation[edit | edit source]

U-Boot[edit | edit source]

u-boot integrates the software routines for reading and displaying the ConfigID: hereunder an example of SOM ConfigID at startup:

U-Boot 2013.04-00010-gcb05b30 (Jun 26 2015 - 12:49:26)-xelk-2.1.0

CPU:   Freescale i.MX6Q rev1.5 at 792 MHz
CPU:   Temperature 47 C, limits (-40 C, 125 C), calibration data: 0xc0
Reset cause: POR
Environment: SPI Flash
I2C:   ready
DRAM:  2 GiB
Now running in RAM - U-Boot at: 8ff35000
NAND:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
SF: Detected S25FL256S with page size 64 KiB, total 32 MiB
In:    serial
Out:   serial
Err:   serial
Power: found PFUZE100 (devid=10, revid=21)
SOM ConfigID#: 00000003
SOM UniqueID#: df646299:0b0579d4

For accessing these information on Linux procfs, the device tree must be modified (using u-boot fdt command): for example:

DIVA# setenv fdtfixup 'fdt addr ${fdtaddr}; run fdtfixup_configid'
DIVA# setenv fdtfixup_configid 'fdt set / som_configid ${som_configid#}; fdt set / som_uniqueid ${som_uniqueid#}; fdt set / cb_configid ${cb_configid#}; fdt set / cb_uniqueid ${cb_uniqueid#}'
Linux[edit | edit source]

It is possible to read the ConfigID/UniqueID via procfs; for example:

root@axel-lite:~# cat /proc/device-tree/som/configid && echo
00000003
root@axel-lite:~# cat /proc/device-tree/som/uniqueid && echo
df646299:0b0579d4
root@axel-lite:~#

Legacy device tree, has a sightly different procfs structure:

root@axel-lite:~# cat /proc/device-tree/som_configid && echo
00000003
root@axel-lite:~# cat /proc/device-tree/som_uniqueid && echo
df646299:0b0579d4
root@axel-lite:~#

A real case example of ConfigID benefit[edit | edit source]

The ConfigID benefit is clear when:

  • there is a number of products deployed on the field
  • the products deployed on the field needs a SW update

The ideal scenario is that all products are equal and there are no differences on the Bill Of Material (BOM):

In this case there are no problems to deploy a new SW update on the field: all products have the same HW configuration, then the same SW configuration.

Unfortunately, this is an ideal scenario. The reality is that:

  • component obsolescence
  • product shortage
  • second source strategies

force to have an on-the-field different version of product (with same functionalities but with different HW configuration) which doesn't permit to realize what proposed in the ideal case.


200px-Emblem-important.svg.png

The usage of the ConfigID technique, allows the running SW to identify the underlying HW configuration and automatically adapt the BSP (i.e. the driver layer) to properly use the HW subsystems: this, maintaining the overall product features identical to the final User point-of-view.

With a scenario, like the one described above, if you would like to update the SW you need to implement a strategy for understanding what platform version is going to be updated. The Config ID is used exactly for this goal.

The ConfigID provides to the software update routine the information on which product version is so the update can be adapted to the exact product version.

In this way, you can distribute one single version of the software update which will automatically adapt itself to the currently running platform.

How to handle After Sales with Config ID[edit | edit source]

One of the mos common questions about Config ID is how to handle the Config ID issue. Below is described with an example how to handle it.

This product is returned from the field with a problem on the display:

Config ID A

After Sales Dept analizes the product and decide to substitute the display. The problem is that the existing display is not available - because of is End Of Life (EOL) - and it is required to move to a different display: in the product a different Config ID will be written because of the 2 displays requires a dedicated SW version and cannot be distinguished automatically during the startup. The final result is to have the similar product:

Config ID B

As indicated, the new display requires a different Config ID (from A to B) so it can be updated with an easy software routine before start the SW update. This Config ID update routine can be implemented in manufacturing facility typically using a dedicated USB pen drive which modify the saved ConfigID to the new one depending on the storage memory in use



ConfigID[edit | edit source]

This article describes how the ConfigID is implemented in the products supported by the DESK-MX9-L Linux Kit.

AURA[edit | edit source]

As AURA is a system-on-module (SOM), the typical mechanism described here is used.

Moreover, a system is composed of the combination of a SOM and a carrier board. In this case, two ConfigIDs are used to identify the actual board configuration like it was a SOM+carrier board system.

For the sake of simplicity, the first ConfigID is denoted as SOM ConfigID, while the second one is denoted as CB ConfigID:

...
SOM ConfigID#: 00000001
SOM UniqueID#: df646299:0b0579d4
CB ConfigID#: 00002001
CB UniqueID#: da000011:0dd2e72d
...

Generally speaking:

  • SOM ConfigID is used to identify the configuration of the basic features of the SOM
  • CB ConfigID is used to identify the peripherals and the I/O interfaces.


200px-Emblem-important.svg.png

NXP guarantees that processors UIDs (a.k.a. SOM UniqueID# on DESK-MX9-L) to be unique over the whole MX9 family



Booting from NFS[edit | edit source]

This configuration is very helpful during the software development (both for kernel and applications). The kernel image is downloaded via TFTP while the root file system is remotely mounted via NFS from the host. It is assumed that the development host:

  • is connected with the target host board through an Ethernet LAN
  • exports the directory containing the root file system for the target through the NFS server
  • runs a TFTP server.
  • has a proper subnet IP address

net_nfs configuration[edit | edit source]

DESK-MX9-L Virtual Machine is properly configured for the TFTP and NFS debug.

In any case, some variables has to be configured on the target and the VM itself has to be configured for respect to the network environment.

Host (Virtual Machine) configuration[edit | edit source]

The DESK-MX9-L Virtual Machine has the tftp and nfs services already running. Optionally, their configuration has to be changed according to the network configuration where the target is connected to.

Check and properly configure the items describe in VirtualBox Network Configuration

Target configuration[edit | edit source]

The IP address for server and target should be configured: an example (for a network subnet 192.168.0.x)

u-boot=> setenv serverip 192.168.0.89
u-boot=> setenv ipaddr 192.168.0.169
u-boot=> setenv gatewayip 192.168.0.254
u-boot=> setenv netmask 255.255.255.0
u-boot=> setenv netdev eth0
  • serverip is the IP address of the host machine running the tftp/nfs server
  • ipaddr is the IP address of the target
  • gatewayip is the gateway address of the target
  • netmask is the netmask address of the target
  • netdev is the name of ethernet interface of the target

For using the DVDK Virtual Machine, a static IP address configuration has been selected, to the U-Boot variable ip_dyn has to be set to no:

u-boot=> setenv ip_dyn no

The kernel and device tree files have to be selected

u-boot=> setenv bootfile /desk-mx9-l/Image

AURA has its dtb file imx93-aura-cb2001.dtb

u-boot=> setenv fdtfile /desk-mx9-l/imx93-aura-som0002-cb2001.dtb

finally, the root file system directory on the Virtual Machine should be configured to let the kernel find the INIT

u-boot=> setenv rootpath /home/dvdk/desk-mx-l/rfs/desk-mx9-l/

To run this configuration just issue the net_nfs command which firstly downloads the kernel and device tree using the tftp protocol

u-boot=> setenv net_nfs 'run loadk loadfdt nfsargs addip addcons addmisc; booti ${loadaddr} - ${fdtaddr}'

Here below the complete bootlog from nfs:

u-boot=> run net_nfs
ethernet@428a0000 Waiting for PHY auto negotiation to complete........ done
Using ethernet@428a0000 device
TFTP from server 192.168.0.89; our IP address is 192.168.0.169
Filename 'desk-mx9-l/Image'.
Load address: 0x80400000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ################################
         3.9 MiB/s
done
Bytes transferred = 35766784 (221c200 hex)
Using ethernet@428a0000 device
TFTP from server 192.168.0.89; our IP address is 192.168.0.169
Filename 'desk-mx9-l/imx93-aura-som0002-cb2001.dtb'.
Load address: 0x83000000
Loading: ####
         6.4 MiB/s
done
Bytes transferred = 46719 (b67f hex)
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
Working FDT set to 83000000
   Using Device Tree in place at 0000000083000000, end 000000008300e67e
Working FDT set to 83000000

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050]
[    0.000000] Linux version 6.6.52-desk-mx9-l-6.0.0-lts-next-lts-next-gf90bc32626fe (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 13.3.0, GNU ld (GNU Binutils) 2.42.0.20240723) #1 SMP PREEMPT Fri Feb 13 09:39:57 UTC 2026
[    0.000000] KASLR enabled
[    0.000000] Machine model: DAVE i.MX93 AURA Board SOC rev 1 on SBCX CB2001
[    0.000000] efi: UEFI not found.
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000b0000000, size 256 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x00000000b0000000..0x00000000bfffffff (262144 KiB) map reusable linux,cma
[    0.000000] OF: reserved mem: 0x000000002021f000..0x000000002021ffff (4 KiB) nomap non-reusable rsc_table@2021f000
[    0.000000] OF: reserved mem: 0x00000000a4000000..0x00000000a4007fff (32 KiB) nomap non-reusable vdev0vring0@a4000000
[    0.000000] OF: reserved mem: 0x00000000a4008000..0x00000000a400ffff (32 KiB) nomap non-reusable vdev0vring1@a4008000
[    0.000000] OF: reserved mem: 0x00000000a4010000..0x00000000a4017fff (32 KiB) nomap non-reusable vdev1vring0@a4000000
[    0.000000] OF: reserved mem: 0x00000000a4018000..0x00000000a401ffff (32 KiB) nomap non-reusable vdev1vring1@a4018000
[    0.000000] Reserved memory: created DMA memory pool at 0x00000000a4020000, size 1 MiB
[    0.000000] OF: reserved mem: initialized node vdevbuffer@a4020000, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x00000000a4020000..0x00000000a411ffff (1024 KiB) nomap non-reusable vdevbuffer@a4020000
[    0.000000] Reserved memory: created DMA memory pool at 0x00000000a4120000, size 1 MiB
[    0.000000] OF: reserved mem: initialized node ele-reserved@a4120000, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x00000000a4120000..0x00000000a421ffff (1024 KiB) nomap non-reusable ele-reserved@a4120000
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000c0000000, size 256 MiB
[    0.000000] OF: reserved mem: initialized node ethosu_region@C0000000, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x00000000c0000000..0x00000000cfffffff (262144 KiB) map reusable ethosu_region@C0000000
[    0.000000] earlycon: lpuart32 at MMIO32 0x0000000044380000 (options '')
[    0.000000] printk: bootconsole [lpuart32] enabled
[    0.000000] NUMA: No NUMA configuration found
[    0.000000] NUMA: Faking a node at [mem 0x0000000080000000-0x00000000ffffffff]
[    0.000000] NUMA: NODE_DATA [mem 0xffbc56c0-0xffbc7fff]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000080000000-0x00000000ffffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080000000-0x00000000a3ffffff]
[    0.000000]   node   0: [mem 0x00000000a4000000-0x00000000a421ffff]
[    0.000000]   node   0: [mem 0x00000000a4220000-0x00000000ffffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000ffffffff]
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: MIGRATE_INFO_TYPE not supported.
[    0.000000] psci: SMC Calling Convention v1.4
[    0.000000] percpu: Embedded 22 pages/cpu s50920 r8192 d31000 u90112
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: GIC system register CPU interface
[    0.000000] CPU features: detected: Virtualization Host Extensions
[    0.000000] CPU features: kernel page table isolation forced ON by KASLR
[    0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[    0.000000] CPU features: detected: Qualcomm erratum 1009, or ARM erratum 1286807, 2441009
[    0.000000] CPU features: detected: ARM errata 1165522, 1319367, or 1530923
[    0.000000] alternatives: applying boot alternatives
[    0.000000] Kernel command line: root=/dev/nfs rw nfsroot=192.168.0.89:/home/dvdk/desk-mx-l/rfs/desk-mx9-l/,v3,tcp ip=192.168.0.169:192.168.0.89:192.168.0.254:25.255.255.0:desk-mx:eth0:off panic=1 console=ttyLP0,115200 earlycon panic=5
[    0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.000000] Fallback order for Node 0: 0
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 516096
[    0.000000] Policy zone: DMA
[    0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[    0.000000] software IO TLB: area num 2.
[    0.000000] software IO TLB: mapped [mem 0x00000000f9800000-0x00000000fd800000] (64MB)
[    0.000000] Memory: 1428344K/2097152K available (21248K kernel code, 1648K rwdata, 7848K rodata, 4032K init, 644K bss, 144520K reserved, 524288K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] rcu:     RCU event tracing is enabled.
[    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=2.
[    0.000000]  Trampoline variant of Tasks RCU enabled.
[    0.000000]  Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] GICv3: GIC: Using split EOI/Deactivate mode
[    0.000000] GICv3: 960 SPIs implemented
[    0.000000] GICv3: 0 Extended SPIs implemented
[    0.000000] Root IRQ handler: gic_handle_irq
[    0.000000] GICv3: GICv3 features: 16 PPIs
[    0.000000] GICv3: CPU0: found redistributor 0 region 0:0x0000000048040000
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000000] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    0.008324] Console: colour dummy device 80x25
[    0.012554] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=96000)
[    0.022729] pid_max: default: 32768 minimum: 301
[    0.027367] LSM: initializing lsm=capability,integrity
[    0.032505] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.039805] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.048247] cacheinfo: Unable to detect cache hierarchy for CPU 0
[    0.054618] RCU Tasks: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1.
[    0.061473] RCU Tasks Trace: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1.
[    0.069089] rcu: Hierarchical SRCU implementation.
[    0.073718] rcu:     Max phase no-delay instances is 1000.
[    0.079678] EFI services will not be available.
[    0.084134] smp: Bringing up secondary CPUs ...
[    0.088825] Detected VIPT I-cache on CPU1
[    0.088884] GICv3: CPU1: found redistributor 100 region 0:0x0000000048060000
[    0.088919] CPU1: Booted secondary processor 0x0000000100 [0x412fd050]
[    0.089017] smp: Brought up 1 node, 2 CPUs
[    0.110366] SMP: Total of 2 processors activated.
[    0.115037] CPU features: detected: 32-bit EL0 Support
[    0.120161] CPU features: detected: 32-bit EL1 Support
[    0.125266] CPU features: detected: Data cache clean to the PoU not required for I/D coherence
[    0.133849] CPU features: detected: Common not Private translations
[    0.140082] CPU features: detected: CRC32 instructions
[    0.145205] CPU features: detected: RCpc load-acquire (LDAPR)
[    0.150915] CPU features: detected: LSE atomic instructions
[    0.156461] CPU features: detected: Privileged Access Never
[    0.162007] CPU features: detected: RAS Extension Support
[    0.167382] CPU features: detected: Speculative Store Bypassing Safe (SSBS)
[    0.174365] CPU: All CPU(s) started at EL2
[    0.178389] alternatives: applying system-wide alternatives
[    0.188311] devtmpfs: initialized
[    0.195967] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.205472] futex hash table entries: 512 (order: 3, 32768 bytes, linear)
[    0.220096] pinctrl core: initialized pinctrl subsystem
[    0.226621] DMI not present or invalid.
[    0.230635] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.236941] DMA: preallocated 256 KiB GFP_KERNEL pool for atomic allocations
[    0.243815] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.251518] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.259381] audit: initializing netlink subsys (disabled)
[    0.264862] audit: type=2000 audit(0.176:1): state=initialized audit_enabled=0 res=1
[    0.265258] thermal_sys: Registered thermal governor 'step_wise'
[    0.272420] thermal_sys: Registered thermal governor 'power_allocator'
[    0.278425] cpuidle: using governor menu
[    0.288984] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.295596] ASID allocator initialised with 32768 entries
[    0.301603] Serial: AMBA PL011 UART driver
[    0.305488] imx mu driver is registered.
[    0.309339] imx rpmsg driver is registered.
[    0.318294] imx93-pinctrl 443c0000.pinctrl: initialized IMX pinctrl driver
[    0.333200] platform lvds_panel: Fixed dependency cycle(s) with /ldb-display-controller/lvds-channel@0
[    0.342873] Modules: 2G module region forced by RANDOMIZE_MODULE_REGION_FULL
[    0.349693] Modules: 0 pages in range for non-PLT usage
[    0.349696] Modules: 515376 pages in range for PLT usage
[    0.355543] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[    0.367357] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[    0.373596] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[    0.380354] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[    0.386595] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[    0.393354] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[    0.399595] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[    0.406354] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[    0.414059] ACPI: Interpreter disabled.
[    0.418437] iommu: Default domain type: Translated
[    0.422997] iommu: DMA domain TLB invalidation policy: strict mode
[    0.429385] SCSI subsystem initialized
[    0.433184] usbcore: registered new interface driver usbfs
[    0.438416] usbcore: registered new interface driver hub
[    0.443705] usbcore: registered new device driver usb
[    0.449489] mc: Linux media interface: v0.10
[    0.453541] videodev: Linux video capture interface: v2.00
[    0.459002] pps_core: LinuxPPS API ver. 1 registered
[    0.463895] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.473000] PTP clock support registered
[    0.477077] EDAC MC: Ver: 3.0.0
[    0.480494] scmi_core: SCMI protocol bus registered
[    0.485489] FPGA manager framework
[    0.488687] Advanced Linux Sound Architecture Driver Initialized.
[    0.495236] Bluetooth: Core ver 2.22
[    0.498570] NET: Registered PF_BLUETOOTH protocol family
[    0.503851] Bluetooth: HCI device and connection manager initialized
[    0.510169] Bluetooth: HCI socket layer initialized
[    0.515020] Bluetooth: L2CAP socket layer initialized
[    0.520053] Bluetooth: SCO socket layer initialized
[    0.525261] vgaarb: loaded
[    0.528232] clocksource: Switched to clocksource arch_sys_counter
[    0.534294] VFS: Disk quotas dquot_6.6.0
[    0.538004] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.544945] pnp: PnP ACPI: disabled
[    0.553256] NET: Registered PF_INET protocol family
[    0.558039] IP idents hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.566341] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes, linear)
[    0.574665] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.582326] TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.590270] TCP bind hash table entries: 16384 (order: 7, 524288 bytes, linear)
[    0.597887] TCP: Hash tables configured (established 16384 bind 16384)
[    0.604281] UDP hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    0.610851] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    0.618060] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.623917] RPC: Registered named UNIX socket transport module.
[    0.629576] RPC: Registered udp transport module.
[    0.634246] RPC: Registered tcp transport module.
[    0.638925] RPC: Registered tcp-with-tls transport module.
[    0.644386] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.651557] PCI: CLS 0 bytes, default 64
[    0.655459] kvm [1]: IPA Size Limit: 40 bits
[    0.659487] kvm [1]: GICv3: no GICV resource entry
[    0.664234] kvm [1]: disabling GICv2 emulation
[    0.668670] kvm [1]: GIC system register CPU interface enabled
[    0.674481] kvm [1]: vgic interrupt IRQ9
[    0.678381] kvm [1]: VHE mode initialized successfully
[    0.684376] Initialise system trusted keyrings
[    0.688746] workingset: timestamp_bits=42 max_order=19 bucket_order=0
[    0.695218] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.701030] NFS: Registering the id_resolver key type
[    0.705849] Key type id_resolver registered
[    0.709977] Key type id_legacy registered
[    0.713976] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    0.720644] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[    0.728016] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[    0.734261] 9p: Installing v9fs 9p2000 file system support
[    0.760504] jitterentropy: Initialization failed with host not compliant with requirements: 9
[    0.768755] Key type asymmetric registered
[    0.772833] Asymmetric key parser 'x509' registered
[    0.777716] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 243)
[    0.785057] io scheduler mq-deadline registered
[    0.789554] io scheduler kyber registered
[    0.793575] io scheduler bfq registered
[    0.801444] EINJ: ACPI disabled.
[    0.809111] Bus freq driver module loaded
[    0.818243] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.835874] printk: console [ttyLP0] enabled0x44380010 (irq = 17, base_baud = 1500000) is a FSL_LPUART
[    0.835874] printk: console [ttyLP0] enabled
[    0.844297] printk: bootconsole [lpuart32] disabled
[    0.844297] printk: bootconsole [lpuart32] disabled
[    0.856962] 44390000.serial: ttyLP1 at MMIO 0x44390010 (irq = 18, base_baud = 1500000) is a FSL_LPUART
[    0.867045] 42580000.serial: ttyLP3 at MMIO 0x42580010 (irq = 19, base_baud = 1500000) is a FSL_LPUART
[    0.877063] 42690000.serial: ttyLP2 at MMIO 0x42690010 (irq = 20, base_baud = 1500000) is a FSL_LPUART
[    0.893362] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops lcdifv3_crtc_ops)
[    0.901714] imx93-ldb ldb-display-controller: Failed to create device link (0x180) with 4ae30000.lcd-controller
[    0.915421] loop: module loaded
[    0.919747] megasas: 07.725.01.00-rc1
[    0.928023] tun: Universal TUN/TAP device driver, 1.6
[    0.933334] CAN device driver interface
[    0.938738] thunder_xcv, ver 1.0
[    0.942022] thunder_bgx, ver 1.0
[    0.945264] nicpf, ver 1.0
[    0.949199] hns3: Hisilicon Ethernet Network Driver for Hip08 Family - version
[    0.956428] hns3: Copyright (c) 2017 Huawei Corporation.
[    0.961767] hclge is initializing
[    0.965111] e1000: Intel(R) PRO/1000 Network Driver
[    0.969982] e1000: Copyright (c) 1999-2006 Intel Corporation.
[    0.975735] e1000e: Intel(R) PRO/1000 Network Driver
[    0.980697] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    0.986625] igb: Intel(R) Gigabit Ethernet Network Driver
[    0.992051] igb: Copyright (c) 2007-2014 Intel Corporation.
[    0.997640] igbvf: Intel(R) Gigabit Virtual Function Network Driver
[    1.003898] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.
[    1.009959] sky2: driver version 1.30
[    1.014004] usbcore: registered new device driver r8152-cfgselector
[    1.020284] usbcore: registered new interface driver r8152
[    1.026168] VFIO - User Level meta-driver version: 0.3
[    1.033191] usbcore: registered new interface driver uas
[    1.038530] usbcore: registered new interface driver usb-storage
[    1.044579] usbcore: registered new interface driver usbserial_generic
[    1.051107] usbserial: USB Serial support registered for generic
[    1.057112] usbcore: registered new interface driver ftdi_sio
[    1.062855] usbserial: USB Serial support registered for FTDI USB Serial Device
[    1.070166] usbcore: registered new interface driver usb_serial_simple
[    1.076696] usbserial: USB Serial support registered for carelink
[    1.082792] usbserial: USB Serial support registered for flashloader
[    1.089146] usbserial: USB Serial support registered for funsoft
[    1.095161] usbserial: USB Serial support registered for google
[    1.101084] usbserial: USB Serial support registered for hp4x
[    1.106831] usbserial: USB Serial support registered for kaufmann
[    1.112924] usbserial: USB Serial support registered for libtransistor
[    1.119448] usbserial: USB Serial support registered for moto_modem
[    1.125714] usbserial: USB Serial support registered for motorola_tetra
[    1.132327] usbserial: USB Serial support registered for nokia
[    1.138160] usbserial: USB Serial support registered for novatel_gps
[    1.144516] usbserial: USB Serial support registered for siemens_mpi
[    1.150865] usbserial: USB Serial support registered for suunto
[    1.156791] usbserial: USB Serial support registered for vivopay
[    1.162801] usbserial: USB Serial support registered for zio
[    1.168463] usbcore: registered new interface driver usb_ehset_test
[    1.177819] input: 44440000.bbnsm:pwrkey as /devices/platform/soc@0/44000000.bus/44440000.bbnsm/44440000.bbnsm:pwrkey/input/input0
[    1.193792] bbnsm_rtc 44440000.bbnsm:rtc: registered as rtc0
[    1.200637] bbnsm_rtc 44440000.bbnsm:rtc: setting system clock to 1970-01-01T00:02:32 UTC (152)
[    1.210016] i2c_dev: i2c /dev entries driver
[    1.215108] Error: Driver 'mxsfb' is already registered, aborting...
[    1.224277] imx7ulp-wdt 42490000.watchdog: imx93 wdt probe
[    1.262103] Bluetooth: HCI UART driver ver 2.3
[    1.266569] Bluetooth: HCI UART protocol H4 registered
[    1.271704] Bluetooth: HCI UART protocol BCSP registered
[    1.277025] Bluetooth: HCI UART protocol LL registered
[    1.282154] Bluetooth: HCI UART protocol ATH3K registered
[    1.287564] Bluetooth: HCI UART protocol Three-wire (H5) registered
[    1.293945] Bluetooth: HCI UART protocol Broadcom registered
[    1.299613] Bluetooth: HCI UART protocol QCA registered
[    1.305964] sdhci: Secure Digital Host Controller Interface driver
[    1.312160] sdhci: Copyright(c) Pierre Ossman
[    1.316846] Synopsys Designware Multimedia Card Interface Driver
[    1.323212] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.330259] ledtrig-cpu: registered to indicate activity on CPUs
[    1.337498] fsl-se secure-enclave: assigned reserved memory node ele-reserved@a4120000
[    1.347485] fsl-se secure-enclave: Successfully registered ele-trng
[    1.353791] fsl-se secure-enclave: i.MX secure-enclave: hsm0 interface to firmware, configured.
[    1.362476] random: crng init done
[    1.364242] mmc0: SDHCI controller on 42850000.mmc [42850000.mmc] using ADMA
[    1.365986] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[    1.379689] usbcore: registered new interface driver usbhid
[    1.385304] usbhid: USB HID core driver
[    1.390336] ethosu ethosu: assigned reserved memory node ethosu_region@C0000000
[    1.399361] remoteproc remoteproc0: releasing imx-rproc
[    1.406125] hw perfevents: enabled with armv8_cortex_a55 PMU driver, 7 counters available
[    1.416188]  cs_system_cfg: CoreSight Configuration manager initialised
[    1.426717] NET: Registered PF_LLC protocol family
[    1.431584] u32 classifier
[    1.434306]     input device check on
[    1.437977]     Actions configured
[    1.441681] NET: Registered PF_INET6 protocol family
[    1.447228] Segment Routing with IPv6
[    1.450944] In-situ OAM (IOAM) with IPv6
[    1.454953] NET: Registered PF_PACKET protocol family
[    1.460029] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    1.472971] can: controller area network core
[    1.477366] NET: Registered PF_CAN protocol family
[    1.482222] can: raw protocol
[    1.485197] can: broadcast manager protocol
[    1.489395] can: netlink gateway - max_hops=1
[    1.493951] Bluetooth: RFCOMM TTY layer initialized
[    1.498848] Bluetooth: RFCOMM socket layer initialized
[    1.504006] Bluetooth: RFCOMM ver 1.11
[    1.507759] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    1.513069] Bluetooth: BNEP filters: protocol multicast
[    1.518293] Bluetooth: BNEP socket layer initialized
[    1.523262] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[    1.529177] Bluetooth: HIDP socket layer initialized
[    1.534411] 8021q: 802.1Q VLAN Support v1.8
[    1.538665] lib80211: common routines for IEEE802.11 drivers
[    1.544408] 9pnet: Installing 9P2000 support
[    1.548830] Key type dns_resolver registered
[    1.553345] NET: Registered PF_VSOCK protocol family
[    1.564732] mmc0: new high speed MMC card at address 0001
[    1.570727] mmcblk0: mmc0:0001 DG4008 7.28 GiB
[    1.576575] registered taskstats version 1
[    1.580806]  mmcblk0: p1 p2
[    1.580966] Loading compiled-in X.509 certificates
[    1.584112] mmcblk0boot0: mmc0:0001 DG4008 4.00 MiB
[    1.594684] mmcblk0boot1: mmc0:0001 DG4008 4.00 MiB
[    1.600716] mmcblk0rpmb: mmc0:0001 DG4008 4.00 MiB, chardev (234:0)
[    1.607222] usb_phy_generic usbphynop1: dummy supplies not allowed for exclusive requests
[    1.615595] usb_phy_generic usbphynop2: dummy supplies not allowed for exclusive requests
[    1.633993] imx93-ldb ldb-display-controller: Failed to create device link (0x180) with ldb-phy
[    1.645772] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops lcdifv3_crtc_ops)
[    1.655263] imx-dwmac 428a0000.ethernet: IRQ eth_lpi not found
[    1.661457] imx-dwmac 428a0000.ethernet: User ID: 0x10, Synopsys ID: 0x52
[    1.668314] imx-dwmac 428a0000.ethernet:     DWMAC4/5
[    1.673158] imx-dwmac 428a0000.ethernet: DMA HW capability register supported
[    1.680289] imx-dwmac 428a0000.ethernet: RX Checksum Offload Engine supported
[    1.687417] imx-dwmac 428a0000.ethernet: TX Checksum insertion supported
[    1.694111] imx-dwmac 428a0000.ethernet: Wake-Up On Lan supported
[    1.700252] imx-dwmac 428a0000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[    1.707905] imx-dwmac 428a0000.ethernet: Enabled L3L4 Flow TC (entries=8)
[    1.714696] imx-dwmac 428a0000.ethernet: Enabled RFS Flow TC (entries=10)
[    1.721472] imx-dwmac 428a0000.ethernet: Enabling HW TC (entries=256, max_off=256)
[    1.729031] imx-dwmac 428a0000.ethernet: Using 32/32 bits DMA host/device width
[    1.748139] sdhci-esdhc-imx 42860000.mmc: Got CD GPIO
[    1.750770] remoteproc remoteproc0: releasing imx-rproc
[    1.762490] i2c i2c-0: LPI2C adapter registered
[    1.768205] i2c i2c-1: LPI2C adapter registered
[    1.771796] nxp-pca9450 1-0025: pca9451a probed.
[    1.777580] input: eGalax_Touch_ScreenAllPoint as /devices/virtual/input/input1
[    1.785313] i2c i2c-2: LPI2C adapter registered
[    1.788483] mmc1: SDHCI controller on 42860000.mmc [42860000.mmc] using ADMA
[    1.791043] imx93-ldb ldb-display-controller: Failed to create device link (0x180) with lvds_panel
[    1.806943] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops lcdifv3_crtc_ops)
[    1.815202] imx-drm display-subsystem: bound ldb-display-controller (ops imx93_ldb_ops)
[    1.823544] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 0
[    1.828268] mmc1: new high speed SDHC card at address aaaa
[    1.837563] mmcblk1: mmc1:aaaa SA16G 14.8 GiB
[    1.844540]  mmcblk1: p1 p2
[    1.872526] Console: switching to colour frame buffer device 100x30
[    1.895907] imx-drm display-subsystem: [drm] fb0: imx-drmdrmfb frame buffer device
[    1.907530] ci_hdrc ci_hdrc.1: EHCI Host Controller
[    1.912446] ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 1
[    1.932238] ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00
[    1.938142] hub 1-0:1.0: USB hub found
[    1.941916] hub 1-0:1.0: 1 port detected
[    1.948194] remoteproc remoteproc0: releasing imx-rproc
[    1.948409] sdhci-esdhc-imx 428b0000.mmc: allocated mmc-pwrseq
[    1.955258] remoteproc remoteproc0: releasing imx-rproc
[    2.014826] mmc2: SDHCI controller on 428b0000.mmc [428b0000.mmc] using ADMA
[    2.022888] imx-dwmac 428a0000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[    2.022915] remoteproc remoteproc0: releasing imx-rproc
[    2.056625] mmc2: new high speed SDIO card at address 0001
[    2.102044] imx-dwmac 428a0000.ethernet eth0: PHY [stmmac-0:07] driver [Microchip LAN8841 Gigabit PHY] (irq=POLL)
[    2.119185] imx-dwmac 428a0000.ethernet eth0: No Safety Features support found
[    2.126420] imx-dwmac 428a0000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
[    2.134787] imx-dwmac 428a0000.ethernet eth0: registered PTP clock
[    2.141363] imx-dwmac 428a0000.ethernet eth0: FPE workqueue start
[    2.147467] imx-dwmac 428a0000.ethernet eth0: configuring for phy/rgmii-id link mode
[    2.155642] 8021q: adding VLAN 0 to HW filter on device eth0
[    2.608236] usb 1-1: new high-speed USB device number 2 using ci_hdrc
[    2.770079] usb-storage 1-1:1.0: USB Mass Storage device detected
[    2.776578] scsi host0: usb-storage 1-1:1.0
[    2.782050] remoteproc remoteproc0: releasing imx-rproc
[    3.806610] scsi 0:0:0:0: Direct-Access      USB      SanDisk 3.2Gen1 1.00 PQ: 0 ANSI: 6
[    3.823976] sd 0:0:0:0: [sda] 240353280 512-byte logical blocks: (123 GB/115 GiB)
[    3.832097] sd 0:0:0:0: [sda] Write Protect is off
[    3.837469] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[    3.852358]  sda: sda1
[    3.854959] sd 0:0:0:0: [sda] Attached SCSI removable disk
[    3.861434] remoteproc remoteproc0: releasing imx-rproc
[    5.213877] imx-dwmac 428a0000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[    5.240238] IP-Config: Complete:
[    5.243458]      device=eth0, hwaddr=5a:dd:0e:59:b5:d8, ipaddr=192.168.0.169, mask=25.255.255.0, gw=192.168.0.254
[    5.253711]      host=desk-mx, domain=, nis-domain=(none)
[    5.259096]      bootserver=192.168.0.89, rootserver=192.168.0.89, rootpath=
[    5.259196] IP-Config: Unable to set interface netmask (-22)
[    5.272086] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    5.281174] Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    5.287370] Loaded X.509 cert 'wens: 61c038651aabdcf94bd0ac7ff06c7248db18c600'
[    5.294662] clk: Disabling unused clocks
[    5.298666] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[    5.300892] ALSA device list:
[    5.307285] platform regulatory.0: Falling back to sysfs fallback for: regulatory.db
[    5.310268]   No soundcards found.
[    6.353370] VFS: Mounted root (nfs filesystem) on device 0:22.
[    6.359880] devtmpfs: mounted
[    6.364109] Freeing unused kernel memory: 4032K
[    6.368738] Run /sbin/init as init process
[    6.674465] systemd[1]: System time before build time, advancing clock.
[    6.754060] systemd[1]: systemd 255.4^ running in system mode (+PAM -AUDIT -SELINUX -APPARMOR +IMA -SMACK +SECCOMP -GCRYPT -GNUTLS -OPENSSL +ACL +BLKID -CURL -ELFUTILS -FIDO2 -IDN2 -IDN -IPTC +KMOD -LIBCRYPTSETUP +LIBFDISK -PCRE2 -PWQUALITY -P11KIT -QRENCODE -TPM2 -BZIP2 -LZ4 -XZ -ZLIB +ZSTD -BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[    6.786099] systemd[1]: Detected architecture arm64.

Welcome to NXP i.MX Release Distro 6.6-scarthgap (scarthgap)!

[    6.814097] systemd[1]: Hostname set to <desk-mx93-rev1>.
[    6.825155] systemd[1]: Initializing machine ID from random generator.
[    7.553324] systemd[1]: Queued start job for default target Graphical Interface.
[    7.579786] systemd[1]: Created slice Slice /system/getty.
[  OK  ] Created slice Slice /system/getty.
[    7.601792] systemd[1]: Created slice Slice /system/modprobe.
[  OK  ] Created slice Slice /system/modprobe.
[    7.625828] systemd[1]: Created slice Slice /system/serial-getty.
[  OK  ] Created slice Slice /system/serial-getty.
[    7.649424] systemd[1]: Created slice User and Session Slice.
[  OK  ] Created slice User and Session Slice.
[    7.672658] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[  OK  ] Started Dispatch Password Requests to Console Directory Watch.
[    7.700599] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[  OK  ] Started Forward Password Requests to Wall Directory Watch.
[    7.724540] systemd[1]: Reached target Path Units.
[  OK  ] Reached target Path Units.
[    7.744399] systemd[1]: Reached target Remote File Systems.
[  OK  ] Reached target Remote File Systems.
[    7.764409] systemd[1]: Reached target Slice Units.
[  OK  ] Reached target Slice Units.
[    7.784419] systemd[1]: Reached target Swaps.
[  OK  ] Reached target Swaps.
[    7.838356] systemd[1]: Listening on RPCbind Server Activation Socket.
[  OK  ] Listening on RPCbind Server Activation Socket.
[    7.860517] systemd[1]: Reached target RPC Port Mapper.
[  OK  ] Reached target RPC Port Mapper.
[    7.882230] systemd[1]: Listening on Syslog Socket.
[  OK  ] Listening on Syslog Socket.
[    7.904757] systemd[1]: Listening on initctl Compatibility Named Pipe.
[  OK  ] Listening on initctl Compatibility Named Pipe.
[    7.930036] systemd[1]: Listening on Journal Audit Socket.
[  OK  ] Listening on Journal Audit Socket.
[    7.952927] systemd[1]: Listening on Journal Socket (/dev/log).
[  OK  ] Listening on Journal Socket (/dev/log).
[    7.977039] systemd[1]: Listening on Journal Socket.
[  OK  ] Listening on Journal Socket.
[    7.997790] systemd[1]: Listening on Network Service Netlink Socket.
[  OK  ] Listening on Network Service Netlink Socket.
[    8.022988] systemd[1]: Listening on udev Control Socket.
[  OK  ] Listening on udev Control Socket.
[    8.044925] systemd[1]: Listening on udev Kernel Socket.
[  OK  ] Listening on udev Kernel Socket.
[    8.065482] systemd[1]: Listening on User Database Manager Socket.
[  OK  ] Listening on User Database Manager Socket.
[    8.112659] systemd[1]: Mounting Huge Pages File System...
         Mounting Huge Pages File System...
[    8.152606] systemd[1]: Mounting POSIX Message Queue File System...
         Mounting POSIX Message Queue File System...
[    8.181430] systemd[1]: Mounting Kernel Debug File System...
         Mounting Kernel Debug File System...
[    8.200807] systemd[1]: Kernel Trace File System was skipped because of an unmet condition check (ConditionPathExists=/sys/kernel/tracing).
[    8.220287] systemd[1]: Mounting Temporary Directory /tmp...
         Mounting Temporary Directory /tmp...
[    8.273009] systemd[1]: Starting Create List of Static Device Nodes...
         Starting Create List of Static Device Nodes...
[    8.312929] systemd[1]: Starting Load Kernel Module configfs...
         Starting Load Kernel Module configfs...
[    8.338356] systemd[1]: Starting Load Kernel Module drm...
         Starting Load Kernel Module drm...
[    8.368682] systemd[1]: Starting Load Kernel Module fuse...
         Starting Load Kernel Module fuse...
[    8.420978] systemd[1]: Starting RPC Bind...
         Starting RPC Bind...
[    8.441244] systemd[1]: File System Check on Root Device was skipped because of an unmet condition check (ConditionPathIsReadWrite=!/).
[    8.469504] fuse: init (API version 7.39)
[    8.471771] systemd[1]: Starting Journal Service...
         Starting Journal Service...
[    8.501061] systemd[1]: Load Kernel Modules was skipped because no trigger condition checks were met.
[    8.544937] systemd[1]: Mounting NFSD configuration filesystem...
         Mounting NFSD configuration filesystem...
[    8.593520] systemd[1]: Starting Generate network units from Kernel command line...
         Starting Generate network units from Kernel command line...
[    8.623206] systemd[1]: Starting Remount Root and Kernel File Systems...
         Starting Remount Root and Kernel File Systems...
[    8.661035] systemd-journald[138]: Collecting audit messages is enabled.
[    8.661131] systemd[1]: Starting Apply Kernel Variables...
         Starting Apply Kernel Variables...
[    8.714110] systemd[1]: Starting Coldplug All udev Devices...
         Starting Coldplug All udev Devices...
[    8.751091] systemd[1]: Started RPC Bind.
[  OK  ] Started RPC Bind.
[    8.769933] systemd[1]: Started Journal Service.
[  OK  ] Started Journal Service.
[  OK  ] Mounted Huge Pages File System.
[  OK  ] Mounted POSIX Message Queue File System.
[  OK  ] Mounted Kernel Debug File System.
[  OK  ] Mounted Temporary Directory /tmp.
[  OK  ] Finished Create List of Static Device Nodes.
[  OK  ] Finished Load Kernel Module configfs.
[  OK  ] Finished Load Kernel Module drm.
[  OK  ] Finished Load Kernel Module fuse.
[FAILED] Failed to mount NFSD configuration filesystem.
See 'systemctl status proc-fs-nfsd.mount' for details.
[DEPEND] Dependency failed for NFS Mount Daemon.
[DEPEND] Dependency failed for NFS server and services.
[  OK  ] Finished Generate network units from Kernel command line.
[  OK  ] Finished Remount Root and Kernel File Systems.
[  OK  ] Finished Apply Kernel Variables.
         Mounting FUSE Control File System...
         Mounting Kernel Configuration File System...
         Starting Flush Journal to Persistent Storage...
         Starting Create Static Device Nodes in /dev gracefully...
[  OK  ] Mounted FUSE Control File System.
[  OK  ] Mounted Kernel Configuration File System.
[    9.328822] systemd-journald[138]: Received client request to flush runtime journal.
[  OK  ] Finished Flush Journal to Persistent Storage.
[  OK  ] Finished Create Static Device Nodes in /dev gracefully.
         Starting Create System Users...
[    9.591919] audit: type=1334 audit(1709054766.912:2): prog-id=6 op=LOAD
[    9.599655] audit: type=1334 audit(1709054766.912:3): prog-id=7 op=LOAD
[    9.607076] audit: type=1334 audit(1709054766.912:4): prog-id=8 op=LOAD
         Starting User Database Manager...
[  OK  ] Finished Coldplug All udev Devices.
[  OK  ] Started User Database Manager.
[  OK  ] Finished Create System Users.
         Starting Create Static Device Nodes in /dev...
[  OK  ] Finished Create Static Device Nodes in /dev.
[  OK  ] Reached target Preparation for Local File Systems.
         Mounting /var/volatile...
[   10.022283] audit: type=1334 audit(1709054767.344:5): prog-id=9 op=LOAD
[   10.045315] audit: type=1334 audit(1709054767.368:6): prog-id=10 op=LOAD
         Starting Rule-based Manager for Device Events and Files...
[  OK  ] Mounted /var/volatile.
         Starting Load/Save OS Random Seed...
[  OK  ] Reached target Local File Systems.
         Starting Rebuild Dynamic Linker Cache...
         Starting Create Volatile Files and Directories...
[FAILED] Failed to start Load/Save OS Random Seed.
See 'systemctl status systemd-random-seed.service' for details.
[  OK  ] Started Rule-based Manager for Device Events and Files.
[  OK  ] Finished Create Volatile Files and Directories.
         Starting Rebuild Journal Catalog...
[   10.898523] audit: type=1334 audit(1709054768.216:7): prog-id=11 op=LOAD
[FAILED] Failed to start Network Name Resolution.
[   10.936709] audit: type=1334 audit(1709054768.260:8): prog-id=11 op=UNLOAD
See 'systemctl status systemd-resolved.service' for details.
[  OK  ] Reached target Host and Network Name Lookups.
[   10.988558] audit: type=1334 audit(1709054768.312:9): prog-id=12 op=LOAD
[FAILED] Failed to start Network Time Synchronization.
See 'systemctl status systemd-timesyncd.service' for details.
[   11.031804] audit: type=1334 audit(1709054768.352:10): prog-id=12 op=UNLOAD
[  OK  ] Reached target System Time Set.
         Starting Record System Boot/Shutdown in UTMP...
[   11.200144] audit: type=1334 audit(1709054768.520:11): prog-id=13 op=LOAD
[FAILED] Failed to start Network Name Resolution.
See 'systemctl status systemd-resolved.service' for details.
[FAILED] Failed to start Network Time Synchronization.
See 'systemctl status systemd-timesyncd.service' for details.
[  OK  ] Finished Rebuild Journal Catalog.
[FAILED] Failed to start Network Name Resolution.
See 'systemctl status systemd-resolved.service' for details.
[FAILED] Failed to start Network Time Synchronization.
See 'systemctl status systemd-timesyncd.service' for details.
[  OK  ] Finished Record System Boot/Shutdown in UTMP.
[FAILED] Failed to start Network Name Resolution.
See 'systemctl status systemd-resolved.service' for details.
[FAILED] Failed to start Network Time Synchronization.
See 'systemctl status systemd-timesyncd.service' for details.
[FAILED] Failed to start Network Name Resolution.
See 'systemctl status systemd-resolved.service' for details.
[FAILED] Failed to start Network Time Synchronization.
See 'systemctl status systemd-timesyncd.service' for details.
[FAILED] Failed to start Network Name Resolution.
See 'systemctl status systemd-resolved.service' for details.
[FAILED] Failed to start Network Time Synchronization.
See 'systemctl status systemd-timesyncd.service' for details.
[  OK  ] Finished Rebuild Dynamic Linker Cache.
         Starting Update is Completed...
[  OK  ] Finished Update is Completed.
[  OK  ] Reached target System Initialization.
[  OK  ] Started Daily rotation of log files.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Reached target Timer Units.
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[  OK  ] Listening on D-Bus System Message Bus Socket.
         Starting sshd.socket...
         Starting Weston[   12.677205] remoteproc remoteproc0: releasing imx-rproc
 socket...
[  OK  ] Listening on sshd.socket.
[  OK  ] Listening on Weston socket.
[  OK  ] Created slice Slice /system/systemd-backlight.
[  OK  ] Reached target Socket Units.
[  OK  ] Reached target Basic System.
[   12.837862] remoteproc remoteproc0: releasing imx-rproc
[  OK  ] Started Job spooling tools.
[   12.883979] remoteproc remoteproc0: releasing imx-rproc
         Starting Avahi mDNS/DNS-SD Stack...
[  OK  ] Started Periodic Command Scheduler.
[   12.943017] fsl_mc_err_probe: No ECC DIMMs discovered
         Starting D-Bus System Message Bus...
         Starting IPv6 Packet Filtering Framework...
         Starting IPv4 Packet Filtering Framework...
         Starting Telephony service...
[  OK  ] Started System Logging Service.
         Starting Load/Save Screen Backligh…rightness of backlight:backlight...
[FAILED] Failed to start User Login Management.
See 'systemctl status systemd-logind.service' for details.
syslogd[253]: Error opening log file: /var/log/auth.log: No such file or directory
syslogd[253]: Error opening log file: /var/log/syslog: No such file or directory
syslogd[253]: Error opening log file: /var/log/kern.log: No such file or directory
syslogd[253]: Error opening log file: /var/log/mail.log: No such file or directory
syslogd[253]: Error opening log file: /var/log/mail.err: No such file or directory
syslogd[253]: Error opening log file: /var/log/messages: No such file or directory
         Starting OpenSSH Key Generation...
[  OK  ] Started D-Bus System Message Bus.
[  OK  ] Finished IPv6 Packet Filtering Framework.
[  OK  ] Finished IPv4 Packet Filtering Framework.
[FAILED] Failed to start Load/Save Screen B… Brightness of backlight:backlight.
See 'systemctl status systemd-backlight…cklight:backlight.service' for details.
[  OK  ] Reached target Preparation for Network.
[  OK  ] Reached target Hardware activated USB gadget.
         Starting Load Kernel Module drm...
         Starting Network Configuration...
[  OK  ] Started Telephony service.
[  OK  ] Started Avahi mDNS/DNS-SD Stack.
[  OK  ] Finished Load Kernel Module drm.
[FAILED] Failed to start User Login Management.
See 'systemctl status systemd-logind.service' for details.
         Starting Load Kernel Module drm...
[  OK  ] Finished Load Kernel Module drm.
[FAILED] Failed to start User Login Management.
See 'systemctl status systemd-logind.service' for details.
[  OK  ] Started Network Configuration.
[  OK  ] Reached target Network.
         Starting Load Kernel Module drm...
[  OK  ] Started Network Time Service.
         Starting Permit User Sessions...
[  OK  ] Started Xinetd A Powerful Replacement For Inetd.
[  OK  ] Finished Load Kernel Module drm.
[  OK  ] Finished Permit User Sessions.
         Starting Save/Restore Sound Card State...
[  OK  ] Started Getty on tty1.
[  OK  ] Started Serial Getty on ttyLP0.
[  OK  ] Reached target Login Prompts.
[FAILED] Failed to start User Login Management.
See 'systemctl status systemd-logind.service' for details.
[  OK  ] Reached target Multi-User System.
         Starting Virtual Console Setup...
         Starting Weston, a Wayland compositor, as a system service...
[  OK  ] Finished Save/Restore Sound Card State.
[  OK  ] Reached target Sound Card.
         Starting Load Kernel Module drm...
[  OK  ] Finished Load Kernel Module drm.
[FAILED] Failed to start User Login Management.
See 'systemctl status systemd-logind.service' for details.
         Starting Load Kernel Module drm...
[  OK  ] Finished Load Kernel Module drm.
[FAILED] Failed to start User Login Management.
See 'systemctl status systemd-logind.service' for details.
[  OK  ] Finished Virtual Console Setup.
[  OK  ] Finished OpenSSH Key Generation.

NXP i.MX Release Distro 6.6-scarthgap desk-mx93-rev1 ttyLP0

desk-mx93-rev1 login: root
root@desk-mx93-rev1:~# uname -a
Linux desk-mx93-rev1 6.6.52-desk-mx9-l-6.0.0-lts-next-lts-next-gf90bc32626fe #1 SMP PREEMPT Fri Feb 13 09:39:57 UTC 2026 aarch64 GNU/Linux
root@desk-mx93-rev1:~# cat /etc/os-release
ID=fsl-imx-wayland
NAME="NXP i.MX Release Distro"
VERSION="6.6-scarthgap (scarthgap)"
VERSION_ID=6.6-scarthgap
VERSION_CODENAME="scarthgap"
PRETTY_NAME="NXP i.MX Release Distro 6.6-scarthgap (scarthgap)"
CPE_NAME="cpe:/o:openembedded:fsl-imx-wayland:6.6-scarthgap"
BUILD_VERSION="desk-mx9-l-6.0.0"
root@desk-mx93-rev1:~# cat /etc/buildinfo
-----------------------
Build Configuration:  |
-----------------------
DISTRO = fsl-imx-wayland
DISTRO_VERSION = 6.6-scarthgap
MACHINE = desk-mx93-rev1
IMAGE_BASENAME = dave-image-minimal
-----------------------
Layer Revisions:      |
-----------------------
meta-arm          = scarthgap:950a4afce46a359def2958bd9ae33fc08ff9bb0d
meta-arm-toolchain = scarthgap:950a4afce46a359def2958bd9ae33fc08ff9bb0d
meta-clang        = scarthgap:2b7433611d80f6d0ee1b04156fa91fc73d3c2665
meta-dave         = scarthgap:988f0475300d2f5ff4cea89df5eebfb16e8ad28d
meta-desk-mx-app  = HEAD:20fb3dbd8a525a546dbc7e72720c510a2ddde43f
meta-desk-mx-bsp  = HEAD:20fb3dbd8a525a546dbc7e72720c510a2ddde43f
meta-desk-mx-distro = HEAD:20fb3dbd8a525a546dbc7e72720c510a2ddde43f
meta-flutter      = scarthgap:545eda504de8d9e7b7d2911898e891cb016b6693
meta-flutter-apps = scarthgap:545eda504de8d9e7b7d2911898e891cb016b6693
meta-freescale    = scarthgap:0627128b341cfb2bef7a0832ce8cac0ce1127f13
meta-freescale-3rdparty = scarthgap:6c063450d464eb2f380443c7d9af1b94ce9b9d75
meta-freescale-distro = scarthgap:b9d6a5d9931922558046d230c1f5f4ef6ee72345
meta-imx-bsp      = HEAD:e83d4402acde050d2b2761995761c81c797b5b03
meta-imx-ml       = HEAD:e83d4402acde050d2b2761995761c81c797b5b03
meta-imx-sdk      = HEAD:e83d4402acde050d2b2761995761c81c797b5b03
meta-imx-v2x      = HEAD:e83d4402acde050d2b2761995761c81c797b5b03
meta-nxp-matter-baseline = HEAD:f58365ec75a5768ff3e8e8bcd64f237738c93160
meta-nxp-openthread = HEAD:f58365ec75a5768ff3e8e8bcd64f237738c93160
meta-nxp-demo-experience = HEAD:e8e646e22b1f926aac83bb7ad522efa9cd8ccc45
meta-filesystems  = scarthgap:72018ca1b1a471226917e8246e8bbf9a374ccf97
meta-gnome        = scarthgap:72018ca1b1a471226917e8246e8bbf9a374ccf97
meta-multimedia   = scarthgap:72018ca1b1a471226917e8246e8bbf9a374ccf97
meta-networking   = scarthgap:72018ca1b1a471226917e8246e8bbf9a374ccf97
meta-oe           = scarthgap:72018ca1b1a471226917e8246e8bbf9a374ccf97
meta-python       = scarthgap:72018ca1b1a471226917e8246e8bbf9a374ccf97
meta-qt6          = 6.8:586a6cb5aec755803a3be3cec359baafe89d6432
meta-parsec       = scarthgap:459d837338ca230254baa2994f870bf6eb9d0139
meta-tpm          = scarthgap:459d837338ca230254baa2994f870bf6eb9d0139
meta-timesys      = scarthgap:4dc3f4bdfde4a86904b6e1a3d58df4696e7a63fa
meta-virtualization = scarthgap:6f3c1d8f90947408a6587be222fec575a1ca5195
meta              = scarthgap:200d12b6a58ad961d60a7774ca0f7a9d29498724
meta-poky         = scarthgap:200d12b6a58ad961d60a7774ca0f7a9d29498724
root@desk-mx93-rev1:~#

The following message appears from the VM, when the rootfs is mounted:

dvdk@vagrant:~$ cat /var/log/syslog | tail -n 2
Jan 30 16:06:08 vagrant tftpd[2326386]: tftpd: serving file from /tftpboot
Jan 30 16:06:15 vagrant rpc.mountd[862]: authenticated mount request from 192.168.0.89:720 for /home/dvdk/desk-mx-l/rfs/desk-mx9-l-5.0.0/mx9 (/home)

Kernel Module[edit | edit source]

The module are already present and loaded on RFS on MVM.

root@desk-mx93-rev1:~# ls -la /lib/modules/$(uname -r)
total 1252
drwxr-xr-x  4 weston weston   4096 Mar  9  2018 .
drwxr-xr-x  3 weston weston   4096 Mar  9  2018 ..
drwxr-xr-x 11 weston weston   4096 Mar  9  2018 kernel
-rw-r--r--  1 weston weston 236763 Mar  9  2018 modules.alias
-rw-r--r--  1 weston weston 247965 Mar  9  2018 modules.alias.bin
-rw-r--r--  1 weston weston  39800 Mar  9  2018 modules.builtin
-rw-r--r--  1 weston weston  22898 Mar  9  2018 modules.builtin.alias.bin
-rw-r--r--  1 weston weston  42680 Mar  9  2018 modules.builtin.bin
-rw-r--r--  1 weston weston 254966 Mar  9  2018 modules.builtin.modinfo
-rw-r--r--  1 weston weston  53483 Mar  9  2018 modules.dep
-rw-r--r--  1 weston weston  93250 Mar  9  2018 modules.dep.bin
-rw-r--r--  1 weston weston    174 Mar  9  2018 modules.devname
-rw-r--r--  1 weston weston  34154 Mar  9  2018 modules.order
-rw-r--r--  1 weston weston    479 Mar  9  2018 modules.softdep
-rw-r--r--  1 weston weston  92092 Mar  9  2018 modules.symbols
-rw-r--r--  1 weston weston 118173 Mar  9  2018 modules.symbols.bin
drwxr-xr-x  3 weston weston   4096 Mar  9  2018 updates
root@desk-mx93-rev1:~# lsmod
Module                  Size  Used by
crct10dif_ce           12288  1
polyval_ce             12288  0
polyval_generic        12288  1 polyval_ce
layerscape_edac_mod    16384  0
snd_soc_tlv320aic31xx    53248  1
snd_soc_fsl_sai        32768  2
snd_soc_fsl_utils      12288  1 snd_soc_fsl_sai
imx_pcm_dma            12288  1 snd_soc_fsl_sai
fuse                  131072  1
root@desk-mx93-rev1:~#


Development[edit | edit source]

Synchronizing the repository[edit | edit source]

In DESK-MX9-L, the following source trees are clones of the correspondent DAVE Embedded Systems git repositories:

Component GIT Remote
U-Boot git@git.dave.eu:dave/desk-mx-l/u-boot-imx.git
Linux kernel git@git.dave.eu:dave/desk-mx-l/linux-imx.git
Yocto BSP git@git.dave.eu:dave/desk-mx-l/desk-mx-l-bsp.git

For more information about the access to these repositories, please refer to this link.

Access to DAVE Embedded Systems' git repositories is granted to development kit's owners only. Please refer to this page for detailed instructions on how to get access.

Instructions[edit | edit source]

The components listed in the table above can be kept in sync and up to date with DAVE Embedded Systems' repositories.

Once the git account has been enabled, the developer can:

  • clone the repository with the git clone <git_remote_repository> command
  • synchronize a source tree entering the repository directory and launching the git fetch origin command.

Please note that git fetch doesn't merge the commits on the current branch. To do that, the developer should run the git merge command or replace the fetch-merge process with a single git pull command. Please note that the recommended method is the fetch-merge process. For further information on Git, please refer to the official Git Documentation



Building Linux[edit | edit source]

Quick reference[edit | edit source]

Repository Information
URL git@git.dave.eu:desk-mx-l/linux-imx.git
stable branch desk-mx9-l-6.x.x
stable tag desk-mx9-l-6.0.0

Build Information
defconfig imx_v8_desk_defconfig
Kernel binary Image
Device trees Platform DTB
SBC freescale/imx93-aura-som0002-cb2001.dtb

Instructions[edit | edit source]

It is assumed that the development build environment has been set up properly as described here.

  • open a terminal window and cd into Linux kernel source code
dvdk@vagrant:~$ cd ~/desk-mx-l/linux
dvdk@vagrant:~/desk-mx-l/linux$
  • update your local repository to the latest version
dvdk@vagrant:~/desk-mx-l/linux$ git pull
dvdk@vagrant:~/desk-mx-l/linux$ git checkout desk-mx9-l-6.0.0
  • configure the build environment
dvdk@vagrant:~/desk-mx-l/linux$ source /opt/yocto/sdk/desk-mx9-l/desk-mx9-l-6.0.0/environment-setup-armv8a-poky-linux
  • enter the source tree directory and run the following commands:
dvdk@vagrant:~/desk-mx-l/linux$ make imx_v8_desk_defconfig
dvdk@vagrant:~/desk-mx-l/linux$ make Image modules freescale/imx93-aura-som0002-cb2001.dtb

NOTE: this is the default configuration suitable for the latest target.

The former command selects the default DESK-MX9-L configuration, while the latter builds the kernel binary image with the required u-boot header and the kernel device tree.

Default Linux kernel configuration can be changed by using the standard menuconfig, xconfig, or gconfig make target. Subsequent builds just require uImage make target to update the binary image. Once the build process is complete, the kernel binary image is stored into the arch/arm/boot/Image file. Both this file and the kernel device tree can be copied to the tftp root directory /tftpboot/desk-mx9-l/ with the following commands:

dvdk@vagrant:~/desk-mx-l/linux$ cp arch/arm64/boot/Image /tftpboot/desk-mx9-l/
dvdk@vagrant:~/desk-mx-l/linux$ cp arch/arm64/boot/dts/freescale/*.dtb /tftpboot/desk-mx9-l/

Usually, kernel modules are installed with make modules_install command, but this method installs the modules into the /lib/modules directory of your MVM, which is not what you want.

A better way to deploy kernel modules while cross-compiling is

  • generate a .tar.gz archive
  • install this archive into the target root file system

User can create such an archive, for example, using the following commands:

dvdk@vagrant:~/desk-mx-l/linux$ mkdir modules-install
dvdk@vagrant:~/desk-mx-l/linux$ make INSTALL_MOD_PATH=modules-install modules_install
dvdk@vagrant:~/desk-mx-l/linux$ cd modules-install
dvdk@vagrant:~/desk-mx-l/linux/modules-install$ tar cvzf ../modules.tar.gz . && cd ..
dvdk@vagrant:~/desk-mx-l/linux$ 

Now copy modules.tar.gz into the target root file system and install them as root with the following command

root@desk-mx93:~# tar xvzf modules.tar.gz -C /



Building the Yocto BSP[edit | edit source]

Quick reference[edit | edit source]

Repository Information
Repository Yocto BSP Layer
URL git@git.dave.eu:desk-mx-l/meta-desk-mx.git
stable branch desk-mx9-l-6.x.x
stable tag desk-mx9-l-6.0.0
Build targets
Name Description
dave-image-minimal This image include the core image minimal distro

Introduction[edit | edit source]

As known, in addition to a bootloader and the o.s. kernel, an embedded Linux system needs a root file system to operate. The root file system must contain everything needed to support the Linux system (applications, settings, data, etc.). The root file system is the file system that is contained on the same partition on which the root directory is located. The Linux kernel, at the end of its startup stage, mounts the root file system on the configured root device and finally launches the /sbin/init, the first user space process and "father" of all the other processes. For more information on the Linux filesystem, please refer to http://www.thegeekstuff.com/2010/09/linux-file-system-structure/.

DESK-MX9-L provides one (or more) pre-built root file system, that can be used during the evaluation/development/deployment cycle. For instance, the root file system included in the desk-mx9-l-5.x.x-image-devel image is suited for the development phase, since it provides a relatively rich set of packages including tools and libraries used to debug the application code. The pre-built root file systems are located here: /home/dvdk/<target_name>/rfs/<kit_name>/.

To generate the supported root file systems, the build of the Yocto BSP has to be run. The output of this process is an image containing the U-Boot binary file, the Linux kernel image, and the selected root file system image. The following sections describe in detail how to execute this operation.

For more general information regarding the Yocto build system, please refer the dedicated category page.

How to build the Yocto BSP images including the U-Boot binary file, the Linux kernel image, and the target root file system image with KAS[edit | edit source]

200px-Emblem-important.svg.png

The following procedure requires access to the DAVE Embedded Systems' git repositories. Access to such repositories is granted to the development kit's owners. Please refer to this page for detailed instructions on how to get it.


200px-Emblem-important.svg.png

This process requires a lot of hardware resources in terms of disk storage, RAM, and processing power. For this reason, it is recommended to use a physical machine. For more details on this topic, please refer to the NXP documentation on this BSP, i.e., the i.MX Yocto Project User's Guide, which talks about the host setup for the Yocto build system

Initialize the build environment[edit | edit source]

200px-Emblem-important.svg.png

DESK-MX9-L-6.x.x Yocto build system uses the kas container feature to ensure reproducible Yocto builds across different development hosts

Before running the build, the KAS environment must be initialized properly.

dvdk@vagrant:~/yocto/desk-mx9-l$ virtualenv -p /usr/bin/python3 venv
created virtual environment CPython3.9.5.final.0-64 in 486ms
  creator CPython3Posix(dest=/home/dvdk/yocto/desk-mx9-l/venv, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, pkg_resources=latest, via=copy, app_data_dir=/home/dvdk/.local/share/virtualenv/seed-app-data/v1.0.1.debian.1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
dvdk@vagrant:~/yocto/desk-mx9-l$ source venv/bin/activate
(venv) dvdk@vagrant:~/yocto/desk-mx9-l$ pip3 install kas==4.7
Collecting kas==4.7
  Downloading kas-4.7.tar.gz (63 kB)
     |████████████████████████████████| 63 kB 567 kB/s 
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Collecting GitPython<4,>=3.1.0
  Downloading gitpython-3.1.46-py3-none-any.whl (208 kB)
     |████████████████████████████████| 208 kB 8.4 MB/s 
Collecting jsonschema<5,>=2.5.0
  Downloading jsonschema-4.25.1-py3-none-any.whl (90 kB)
     |████████████████████████████████| 90 kB 1.9 MB/s 
Collecting kconfiglib<15,>=14.1.0
  Using cached kconfiglib-14.1.0-py2.py3-none-any.whl (145 kB)
Collecting distro<2,>=1.0.0
  Using cached distro-1.9.0-py3-none-any.whl (20 kB)
Collecting PyYAML<7,>=3.0
  Downloading pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (750 kB)
     |████████████████████████████████| 750 kB 19.3 MB/s 
Collecting typing-extensions>=3.10.0.2; python_version < "3.10"
  Downloading typing_extensions-4.15.0-py3-none-any.whl (44 kB)
     |████████████████████████████████| 44 kB 479 kB/s 
Collecting gitdb<5,>=4.0.1
  Downloading gitdb-4.0.12-py3-none-any.whl (62 kB)
     |████████████████████████████████| 62 kB 333 kB/s 
Collecting rpds-py>=0.7.1
  Downloading rpds_py-0.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (384 kB)
     |████████████████████████████████| 384 kB 23.6 MB/s 
Collecting attrs>=22.2.0
  Using cached attrs-25.4.0-py3-none-any.whl (67 kB)
Collecting jsonschema-specifications>=2023.03.6
  Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl (18 kB)
Collecting referencing>=0.28.4
  Downloading referencing-0.36.2-py3-none-any.whl (26 kB)
Collecting smmap<6,>=3.0.1
  Downloading smmap-5.0.2-py3-none-any.whl (24 kB)
Building wheels for collected packages: kas
  Building wheel for kas (PEP 517) ... done
  Created wheel for kas: filename=kas-4.7-py3-none-any.whl size=73763 sha256=465037fdc498832861647c9b7f8cb8a74e536b1e82e3e1589c9c10646ab66a5c
  Stored in directory: /home/dvdk/.cache/pip/wheels/cd/22/ee/45fb0ed04ab9306290a461c24882526bee2f93b76a75255fab
Successfully built kas
Installing collected packages: typing-extensions, smmap, gitdb, GitPython, rpds-py, attrs, referencing, jsonschema-specifications, jsonschema, kconfiglib, distro, PyYAML, kas
Successfully installed GitPython-3.1.46 PyYAML-6.0.3 attrs-25.4.0 distro-1.9.0 gitdb-4.0.12 jsonschema-4.25.1 jsonschema-specifications-2025.9.1 kas-4.7 kconfiglib-14.1.0 referencing-0.36.2 rpds-py-0.27.1 smmap-5.0.2 typing-extensions-4.15.0
(venv) dvdk@vagrant:~/yocto/desk-mx9-l$ 

then, fetch the meta-desk-mx repositories with the proper branch:

(venv) dvdk@vagrant:~/yocto/desk-mx9-l$ git clone git@git.dave.eu:desk-mx-l/meta-desk-mx.git -b desk-mx9-l-6.0.0

Running the build[edit | edit source]

Please note that even the basic root file system requires a few hours to build on a mid/hi range desktop (4-6 cores, 8-12 GiB RAM) also depending on your Internet connection speed (all sources are fetched from the network). Nearly 200GiB of disk space is required for the build; this means that an external VDI disk should be created and mounted for a complete Yocto build. The process may be slowed down significantly since the performances of a virtual machine are reduced if compared to the physical hardware. Thus, it's recommended to check the hardware capabilities of the host system and, when building with Yocto is required, to consider the following options:

  • Migrating the build system to a physical machine
  • Assuming that the host system has the required resources, extending the hardware capabilities of the default MVM (e.g. adding more cores and disk space).

Once completed the initialization phase, developers can launch the Yocto image build with KAS, with the following commands:

  • for build dave-image-minimal image with DESK-MX9-L machine
(venv) dvdk@vagrant:~/yocto/desk-mx9-l$ cd meta-desk-mx/
(venv) dvdk@vagrant:~/yocto/desk-mx9-l/meta-desk-mx$ kas-container --repo-rw --runtime-args "--security-opt seccomp=unconfined" build ci/desk-mx93-rev1.yml:ci/fsl-imx-wayland.yml:ci/dave-image-minimal.yml
Unable to find image 'ghcr.io/siemens/kas/kas:4.7' locally
4.7: Pulling from siemens/kas/kas
af302e5c37e9: Pull complete 
2177270d2942: Pull complete 
7430531eee33: Pull complete 
1a664f7db5bd: Pull complete 
a9153c69d46e: Pull complete 
9871fdce1dd1: Pull complete 
Digest: sha256:d989add57fc441fe9e27bb2dd6ed98c5597b44c807928e35a72dc1cfbdda9abe
Status: Downloaded newer image for ghcr.io/siemens/kas/kas:4.7
2026-02-17 14:36:35 - INFO     - kas 4.7 started
2026-02-17 14:36:35 - INFO     - Using /repo as root for repository meta-desk-mx
2026-02-17 14:36:35 - INFO     - Cloning repository meta-dave
2026-02-17 14:36:35 - INFO     - Cloning repository meta-flutter
2026-02-17 14:36:35 - INFO     - Cloning repository poky
...
...
...
  • in case of error due to the downloads path, please use the command below in the repository directory
export DL_DIR=./downloads

Once the build process is completed, the resulting files (the U-Boot binaries, the Linux kernel image, the device tree blob, the .tar.gz compressed root file system image, etc.) will be available in build/tmp/deploy/images/<machine_name>.

Generating the SDKs[edit | edit source]

200px-Emblem-important.svg.png

Yocto SDK system uses the core-image-minimal target

(venv) dvdk@vagrant:~/yocto/desk-mx9-l/meta-desk-mx$ KAS_TASK="populate_sdk" kas-container --repo-rw --runtime-args "--security-opt seccomp=unconfined" build ci/desk-mx93-rev1.yml:ci/fsl-imx-wayland.yml:ci/core-image-minimal.yml

Generating the Toolchain[edit | edit source]

Toolchain can be created by the following command:

  • for DESK-MX9-L machine
(venv) dvdk@vagrant:~/desk-mx-l/yocto/meta-desk-mx$ KAS_TASK="meta_toolchain" kas-container --repo-rw --runtime-args "--security-opt seccomp=unconfined" build ci/desk-mx93-rev1.yml:ci/fsl-imx-wayland.yml:ci/dave-image-minimal.yml

Building additional packages[edit | edit source]

To build additional packages, for example memtester the user need to perform the following command

(venv) dvdk@vagrant:~/desk-mx-l/yocto/meta-desk-mx$ KAS_TARGET="memtester" kas-container --repo-rw --runtime-args "--security-opt seccomp=unconfined" build ci/desk-mx93-rev1.yml:ci/fsl-imx-wayland.yml:ci/dave-image-minimal.yml

The resulting packages (the default format is deb) can be found inside build/tmp/deploy/deb.

Building with bitbake[edit | edit source]

To use the traditional bitbake instead of kas, it is possible to invoke a kas shell where using it:

(venv) dvdk@vagrant:~/yocto/desk-mx9-l/meta-desk-mx$ kas-container --repo-rw --runtime-args "--security-opt seccomp=unconfined" shell ci/desk-mx93-rev1.yml:ci/fsl-imx-wayland.yml:ci/dave-image-minimal.yml
2026-02-17 14:56:27 - INFO     - kas 4.7 started
2026-02-17 14:56:27 - INFO     - Using /repo as root for repository meta-desk-mx
2026-02-17 14:56:28 - INFO     - Repository meta-dave already contains 988f0475300d2f5ff4cea89df5eebfb16e8ad28d as commit
2026-02-17 14:56:28 - INFO     - Repository meta-flutter already contains 545eda504de8d9e7b7d2911898e891cb016b6693 as commit
2026-02-17 14:56:28 - INFO     - Repository poky already contains 200d12b6a58ad961d60a7774ca0f7a9d29498724 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-openembedded already contains 72018ca1b1a471226917e8246e8bbf9a374ccf97 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-clang already contains 2b7433611d80f6d0ee1b04156fa91fc73d3c2665 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-freescale already contains 0627128b341cfb2bef7a0832ce8cac0ce1127f13 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-freescale-3rdparty already contains 6c063450d464eb2f380443c7d9af1b94ce9b9d75 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-freescale-distro already contains b9d6a5d9931922558046d230c1f5f4ef6ee72345 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-arm already contains 950a4afce46a359def2958bd9ae33fc08ff9bb0d as commit
2026-02-17 14:56:28 - INFO     - Repository meta-qt6 already contains 586a6cb5aec755803a3be3cec359baafe89d6432 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-security already contains 459d837338ca230254baa2994f870bf6eb9d0139 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-timesys already contains 4dc3f4bdfde4a86904b6e1a3d58df4696e7a63fa as commit
2026-02-17 14:56:28 - INFO     - Repository meta-virtualization already contains 6f3c1d8f90947408a6587be222fec575a1ca5195 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-imx already contains e83d4402acde050d2b2761995761c81c797b5b03 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-nxp-connectivity already contains f58365ec75a5768ff3e8e8bcd64f237738c93160 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-nxp-demo-experience already contains e8e646e22b1f926aac83bb7ad522efa9cd8ccc45 as commit
2026-02-17 14:56:28 - INFO     - Repository meta-dave checked out to 988f0475300d2f5ff4cea89df5eebfb16e8ad28d
2026-02-17 14:56:28 - INFO     - Repository meta-flutter checked out to 545eda504de8d9e7b7d2911898e891cb016b6693
2026-02-17 14:56:28 - INFO     - Repository poky checked out to 200d12b6a58ad961d60a7774ca0f7a9d29498724
2026-02-17 14:56:28 - INFO     - Repository meta-openembedded checked out to 72018ca1b1a471226917e8246e8bbf9a374ccf97
2026-02-17 14:56:28 - INFO     - Repository meta-clang checked out to 2b7433611d80f6d0ee1b04156fa91fc73d3c2665
2026-02-17 14:56:28 - INFO     - Repository meta-freescale checked out to 0627128b341cfb2bef7a0832ce8cac0ce1127f13
2026-02-17 14:56:28 - INFO     - Repository meta-freescale-3rdparty checked out to 6c063450d464eb2f380443c7d9af1b94ce9b9d75
2026-02-17 14:56:28 - INFO     - Repository meta-freescale-distro checked out to b9d6a5d9931922558046d230c1f5f4ef6ee72345
2026-02-17 14:56:28 - INFO     - Repository meta-arm checked out to 950a4afce46a359def2958bd9ae33fc08ff9bb0d
2026-02-17 14:56:28 - INFO     - Repository meta-qt6 checked out to 586a6cb5aec755803a3be3cec359baafe89d6432
2026-02-17 14:56:28 - INFO     - Repository meta-security checked out to 459d837338ca230254baa2994f870bf6eb9d0139
2026-02-17 14:56:28 - INFO     - Repository meta-timesys checked out to 4dc3f4bdfde4a86904b6e1a3d58df4696e7a63fa
2026-02-17 14:56:28 - INFO     - Repository meta-virtualization checked out to 6f3c1d8f90947408a6587be222fec575a1ca5195
2026-02-17 14:56:28 - INFO     - Repository meta-imx checked out to e83d4402acde050d2b2761995761c81c797b5b03
2026-02-17 14:56:28 - INFO     - Repository meta-nxp-connectivity checked out to f58365ec75a5768ff3e8e8bcd64f237738c93160
2026-02-17 14:56:28 - INFO     - Repository meta-nxp-demo-experience checked out to e8e646e22b1f926aac83bb7ad522efa9cd8ccc45
2026-02-17 14:56:28 - INFO     - To start the default build, run: bitbake -c build dave-image-minimal
builder@ddc9da079514:/build$ 

and then it is possible to run a typical bitbake command, like:

builder@ddc9da079514:/build$ export DL_DIR=./downloads
builder@ddc9da079514:/build$ bitbake memtester
Loading cache: 100% |#########################################################################################################################################################| Time: 0:00:13
Loaded 5981 entries from dependency cache.
Parsing recipes: 100% |#######################################################################################################################################################| Time: 0:00:01
Parsing of 3896 .bb files complete (3894 cached, 2 parsed). 5983 targets, 633 skipped, 3 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "2.8.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "aarch64-poky-linux"
MACHINE              = "desk-mx93-rev1"
DISTRO               = "fsl-imx-wayland"
DISTRO_VERSION       = "6.6-scarthgap"
TUNE_FEATURES        = "aarch64 armv8a crc crypto"
TARGET_FPU           = ""
meta-arm             
meta-arm-toolchain   = "scarthgap:950a4afce46a359def2958bd9ae33fc08ff9bb0d"
meta-clang           = "scarthgap:2b7433611d80f6d0ee1b04156fa91fc73d3c2665"
meta-dave            = "scarthgap:988f0475300d2f5ff4cea89df5eebfb16e8ad28d"
meta-desk-mx-app     
meta-desk-mx-bsp     
meta-desk-mx-distro  = "HEAD:20fb3dbd8a525a546dbc7e72720c510a2ddde43f"
meta-flutter         
meta-flutter-apps    = "scarthgap:545eda504de8d9e7b7d2911898e891cb016b6693"
meta-freescale       = "scarthgap:0627128b341cfb2bef7a0832ce8cac0ce1127f13"
meta-freescale-3rdparty = "scarthgap:6c063450d464eb2f380443c7d9af1b94ce9b9d75"
meta-freescale-distro = "scarthgap:b9d6a5d9931922558046d230c1f5f4ef6ee72345"
meta-imx-bsp         
meta-imx-ml          
meta-imx-sdk         
meta-imx-v2x         = "HEAD:e83d4402acde050d2b2761995761c81c797b5b03"
meta-nxp-matter-baseline 
meta-nxp-openthread  = "HEAD:f58365ec75a5768ff3e8e8bcd64f237738c93160"
meta-nxp-demo-experience = "HEAD:e8e646e22b1f926aac83bb7ad522efa9cd8ccc45"
meta-filesystems     
meta-gnome           
meta-multimedia      
meta-networking      
meta-oe              
meta-python          = "scarthgap:72018ca1b1a471226917e8246e8bbf9a374ccf97"
meta-qt6             = "6.8:586a6cb5aec755803a3be3cec359baafe89d6432"
meta-parsec          
meta-tpm             = "scarthgap:459d837338ca230254baa2994f870bf6eb9d0139"
meta-timesys         = "scarthgap:4dc3f4bdfde4a86904b6e1a3d58df4696e7a63fa"
meta-virtualization  = "scarthgap:6f3c1d8f90947408a6587be222fec575a1ca5195"
meta                 
meta-poky            = "scarthgap:200d12b6a58ad961d60a7774ca0f7a9d29498724"

Checking sstate mirror object availability: 100% |############################################################################################################################| Time: 0:00:48
Sstate summary: Wanted 533 Local 0 Mirrors 523 Missed 10 Current 33 (98% match, 98% complete)
NOTE: Executing Tasks
...
...


How to create a bootable SD card[edit | edit source]

This article shows how to (re)create the bootable SD card, from the binary images produced by the DESK-MX-L Yocto build, using a standard SD image flasher like balenaEtcher

The process is relatively straightforward: it consists of writing the WIC file of interest generated by Yocto onto the SD card. The following instruction explains how to use balenaEtcher on a Windows host. The procedure is similar when working with a Linux host.

  • download the desired binary image to flash (*.wic or *.wic.bz2) from the mirror binary server selecting the proper DESK-MX9-L release
    • among the binaries made available in the mirror there are several *.wic.bz2 files for the available releases. In particular, there is the dave-image-devel-desk-mx9.wic.bz2 (for AURA) file. This image is the one used to program the microSD card delivered along with the evaluation kit.
  • connect the microSD card to the PC Host
  • open balenaEtcher tool
  • once the tool is open:
    • select the binary to flash by clicking on Flash from file
    • select the microSD to flash by clicking on Select target
    • flash the uSD by clicking o Flash
Unpacking
Flashing
Validating

SD card structure[edit | edit source]

The created SD card has the following structure:

  • raw sectors for the bootloader storage: typically this is an 8MB raw part that stores the bootloader binaries (like imx9_flash.bin) for the bootrom startup
  • FAT32 first partition: this will be mapped to the /dev/mmcblk1p1 device in Linux
    • usually this partition contains the Linux kernel binary and the device tree blob
    • splash screen image is stored in this partition too for a splash image showing during U-Boot startup
  • ext4 second partition: this will be mapped to the /dev/mmcblk1p2 device in Linux
    • this partition contains the Linux root file system

Creating the SD card from binary artifacts[edit | edit source]

Even if the overall binary artifacts have been created by the Yocto build, it is highly discouraged to manually create the SD card starting from them.

The Yocto build takes care of the overall binary consistency (like kernel modules and so on) avoiding mismatching different versions.

Moreover, the SD card is intended to be used during the development process and not for the production phase (where other deployment specifications and details have to be taken into account).



Hello word example[edit | edit source]

Here below is an example on C code displaying the classic Hello World! message on the target serial console.

This example shows how to use the arm cross-compiler using the environment configured for this purpose.

Setting the cross-compiler[edit | edit source]

  • start the Linux development VM and login into the system
  • open a terminal window and cd into your source code directory
dvdk@vagrant:~$ mkdir myproject
dvdk@vagrant:~$ cd myproject/
dvdk@vagrant:~/myproject$ vi hello.c
dvdk@vagrant:~/myproject$ cat hello.c
#include <stdio.h>

int main(){
	printf("Hello, World!\n");
	return 0;
}
  • configure the build environment
dvdk@vagrant:~/myproject$ source /home/dvdk/desk-mx-l/desk-mx9-l-5.0.0_env.sh 
  • as you can see here below, the $CC environment variable has been properly configured for using the SDK sysroot parameter:
dvdk@vagrant:~/myproject$ echo $CC
aarch64-poky-linux-gcc -march=armv8-a+crc+crypto -mbranch-protection=standard -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/opt/yocto/sdk/desk-mx9-l/desk-mx9-l-5.0.0/sysroots/armv8a-poky-linux
dvdk@vagrant:~/myproject$ 
  • invoke the cross-compiler for compiling your source code example: the object file obtained, is a proper ELF 64-bit for the target microprocessor
dvdk@vagrant:~/myproject$ $CC hello.c -o hello
dvdk@vagrant:~/myproject$ file hello
hello: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=c64beb8181cc5a2fe6290f8b61b217a25041b429, for GNU/Linux 3.14.0, with debug_info, not stripped
dvdk@vagrant:~/myproject$ 

Running the example on the target[edit | edit source]

Now it is enough to copy the object file in the /home/root rfs directory and boot from nfs:

dvdk@vagrant:~/myproject$ sudo cp hello /home/dvdk/desk-mx-l/rfs/desk-mx9-l/home/root/
dvdk@vagrant:~/myproject$ sudo ls -la /home/dvdk/desk-mx-l/rfs/desk-mx9-l/home/root/
total 32
drwx------ 3 root root  4096 Jan 31 10:46 .
drwxr-xr-x 4 root root  4096 Mar  9  2018 ..
-rwxr-xr-x 1 root root 75624 Jan 31 10:46 hello
-rw-r--r-- 1 root root  1011 Mar  9  2018 .profile
dvdk@vagrant:~/myproject$ 

on the target:

...
[  OK  ] Mounted /run/media/root-mmcblk1p2.
[  OK  ] Started Weston, a Wayland …mpositor, as a system service.
[  OK  ] Reached target Graphical Interface.
         Starting Record Runlevel Change in UTMP...
[  OK  ] Finished Record Runlevel Change in UTMP.

NXP i.MX Release Distro 6.1-mickledore desk-mx93 ttyLP0

desk-mx93 login: root
root@desk-mx93:~# ls -la
total 32
drwx------ 3 root root  4096 Jan 31  2024 .
drwxr-xr-x 4 root root  4096 Mar  9  2018 ..
-rw-r--r-- 1 root root  1011 Mar  9  2018 .profile
-rwxr-xr-x 1 root root 75624 Jan 31  2024 hello
root@desk-mx93:~# ./hello
Hello, World!
root@desk-mx93:~#



Package management with apt-get[edit | edit source]

During the development of custom applications, developers generally realize that they need to add libraries and other software packages to the root file systems to make their code run properly. If these packages are prebuilt, developers can install them onto the root file system very easily. By configuring the target as described in this document, they achieve a user experience similar to the one you have with a desktop Linux distro such as Ubuntu. desk-mx93-L uses by default the deb package format. As such, apt commands can be used for package management. Prebuilt packages are provided by this repository that DAVE Embedded Systems makes available for its customers.

apt-get[edit | edit source]

The following instructions detail how to use apt-get for installing packages with Yocto repositories created by DAVE's build system for desk-mx93-L.

Configuring apt[edit | edit source]

Edit the file /etc/apt/apt.conf like this:

root@desk-mx93-rev1:~# cat /etc/apt/apt.conf
APT::Architecture "arm64";
APT::Get::AllowUnauthenticated "true";
Acquire::Languages "none";

Edit the file /etc/apt/sources.list.d/debian-10.list like this:

root@desk-mx93-rev1:~# cat /etc/apt/sources.list.d/debian-10.list
deb [trusted=yes] http://yocto.dave.eu/desk-mx9-l-5.1.0/ all/
deb [trusted=yes] http://yocto.dave.eu/desk-mx9-l-5.1.0/ armv8a-mx93/
deb [trusted=yes] http://yocto.dave.eu/desk-mx9-l-5.1.0/ armv8a/
deb [trusted=yes] http://yocto.dave.eu/desk-mx9-l-5.1.0/ desk_mx93_rev1/

Execute the following commands in order to re-create the apt cache based on the new server's list:

rm -rf /var/lib/apt/lists/*
apt-get clean
apt-get update
root@desk-mx93-rev1:~# rm -rf /var/lib/apt/lists/*
root@desk-mx93-rev1:~# apt-get clean
root@desk-mx93-rev1:~# apt-get update
Ign:1 http://yocto.dave.eu/desk-mx9-l-5.1.0 all/ InRelease
Ign:2 http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a-mx93/ InRelease
Ign:3 http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a/ InRelease
Ign:4 http://yocto.dave.eu/desk-mx9-l-5.1.0 desk_mx93_rev1/ InRelease
Get:5 http://yocto.dave.eu/desk-mx9-l-5.1.0 all/ Release [1215 B]
Get:6 http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a-mx93/ Release [1223 B]
Get:7 http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a/ Release [1218 B]
Get:8 http://yocto.dave.eu/desk-mx9-l-5.1.0 desk_mx93_rev1/ Release [1226 B]
Ign:9 http://yocto.dave.eu/desk-mx9-l-5.1.0 all/ Release.gpg
Ign:10 http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a-mx93/ Release.gpg
Ign:11 http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a/ Release.gpg
Ign:12 http://yocto.dave.eu/desk-mx9-l-5.1.0 desk_mx93_rev1/ Release.gpg
Get:13 http://yocto.dave.eu/desk-mx9-l-5.1.0 all/ Packages [182 kB]
Get:14 http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a-mx93/ Packages [105 kB]
Get:15 http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a/ Packages [4319 kB]
Get:16 http://yocto.dave.eu/desk-mx9-l-5.1.0 desk_mx93_rev1/ Packages [278 kB]                                                                                                                                                             
Fetched 4889 kB in 7s (732 kB/s)                                                                                                                                                                                                           
Reading package lists... Done
W: Conflicting distribution: http://yocto.dave.eu/desk-mx9-l-5.1.0 all/ Release (expected all/ but got )
W: Conflicting distribution: http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a-mx93/ Release (expected armv8a-mx93/ but got )
W: Conflicting distribution: http://yocto.dave.eu/desk-mx9-l-5.1.0 armv8a/ Release (expected armv8a/ but got )
W: Conflicting distribution: http://yocto.dave.eu/desk-mx9-l-5.1.0 desk_mx93_rev1/ Release (expected desk_mx93_rev1/ but got )
root@desk-mx93-rev1:~#

Then, modify the cached package list due to the proper DAVE's server configuration:

sed -i 's/\.\//all\//g' /var/lib/apt/lists/yocto.dave.eu_desk-mx9-l-5.1.0_all_Packages
sed -i 's/\.\//armv8a-mx93\//g' /var/lib/apt/lists/yocto.dave.eu_desk-mx9-l-5.1.0_armv8a-mx93_Packages
sed -i 's/\.\//armv8a\//g' /var/lib/apt/lists/yocto.dave.eu_desk-mx9-l-5.1.0_armv8a_Packages
sed -i 's/\.\//desk_mx93_rev1\//g' /var/lib/apt/lists/yocto.dave.eu_desk-mx9-l-5.1.0_desk%5fmx93%5frev1_Packages

Installing packages on target[edit | edit source]

We assume that network interface has been already configured for Internet access. In any case, a simple network configuration can be done according to the How to configure the network interfaces wiki page.


The target is finally ready to install new packages. The following example shows for instance the installation of autoconf-archive:

root@desk-mx93-rev1:~# apt-get install autoconf-archive
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  autoconf-archive
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 316 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://yocto.dave.eu/desk-mx9-l-5.1.0 all/ autoconf-archive 2023.02.20-r0 [316 kB]
Fetched 316 kB in 0s (803 kB/s)          
Selecting previously unselected package autoconf-archive.
(Reading database ... 61836 files and directories currently installed.)
Preparing to unpack .../autoconf-archive_2023.02.20-r0_all.deb ...
Unpacking autoconf-archive (2023.02.20-r0) ...
Setting up autoconf-archive (2023.02.20-r0) ...
root@desk-mx93-rev1:~#

Other useful apt commands[edit | edit source]

List of configured software repositories[edit | edit source]

As shown before, the target is configured for accessing the Yocto repositories as listed in the /etc/apt/sources.list.d apt configuration directory:

root@desk-mx93-rev1:~# cat /etc/apt/sources.list.d/debian-10.list
deb [trusted=yes] http://yocto.dave.eu/desk-mx9-l-5.1.0/ all/
deb [trusted=yes] http://yocto.dave.eu/desk-mx9-l-5.1.0/ armv8a-mx93/
deb [trusted=yes] http://yocto.dave.eu/desk-mx9-l-5.1.0/ armv8a/
deb [trusted=yes] http://yocto.dave.eu/desk-mx9-l-5.1.0/ desk_mx93_rev1/

Search for packages[edit | edit source]

To search for an available package into the current configured channels use apt-cache search

Please note that this will show all packages, it's usually more useful to grep for a pattern, e.g.:

root@desk-mx93-rev1:~# apt-cache search vim
vim-common - Vi IMproved - enhanced vi editor
vim-dev - Vi IMproved - enhanced vi editor - Development files
vim-doc - Vi IMproved - enhanced vi editor - Documentation files
vim-help - Vi IMproved - enhanced vi editor
vim-src - Vi IMproved - enhanced vi editor - Source files
vim-syntax - Vi IMproved - enhanced vi editor
vim-tiny-dev - Vi IMproved - enhanced vi editor  (with tiny features) - Development files
vim-tiny-src - Vi IMproved - enhanced vi editor  (with tiny features) - Source files
vim-tiny - Vi IMproved - enhanced vi editor  (with tiny features)
vim-tools - Vi IMproved - enhanced vi editor
vim-tutor - Vi IMproved - enhanced vi editor
vim-vimrc - Vi IMproved - enhanced vi editor
vim-xxd - Vi IMproved - enhanced vi editor
vim - Vi IMproved - enhanced vi editor
root@desk-mx93-rev1:~#

List of installed packages[edit | edit source]

User can see the list of installed packages with dpkg --get-selections | sed 's:install$::' (sed removes the install string from the output list)

acl
acl-dev
adwaita-icon-theme-symbolic
alsa-conf
alsa-plugins-pulseaudio-conf
alsa-state
alsa-states
alsa-tools
alsa-topology-conf
alsa-ucm-conf
alsa-utils
alsa-utils-aconnect
alsa-utils-alsactl
alsa-utils-alsaloop
alsa-utils-alsamixer
alsa-utils-alsatplg
alsa-utils-alsaucm
alsa-utils-amixer
alsa-utils-aplay
alsa-utils-aseqdump
alsa-utils-aseqnet
...
[snip]
...
wpa-supplicant-cli
wpa-supplicant-passphrase
wpa-supplicant-plugins
xinetd
xkeyboard-config
xkeyboard-config-dev
xkeyboard-config-locale-en-gb
xxhash
xz
xz-dev
zstd
zstd-dev
root@desk-mx93-rev1:~#

Deployment[edit | edit source]

Boot from different storage devices[edit | edit source]

AURA SOM is designed to support different bootable storage devices.

The i.MX93 SoC supports different boot modes. DAVE Embedded Systems SOM designs simplify and provide the following boot mode options, see AURA boot modes

The usage of NOR flash memories, NAND devices and eMMC or SD devices can be chosen with regard to the reliability. This is especially true when the NAND flash is used as the boot device. Several techniques such as wear leveling and bad block management have to be implemented to achieve an acceptable reliability.

Please check the AURA P/N composition page for the storage devices available on the SOMs or contact our technical support for more information.

Storage devices support[edit | edit source]



How to configure the network interfaces[edit | edit source]

For deploying an Embedded System, one of the most important configuration is the Network Interface configuration.

Once the Embedded Device is finally configured for stand-alone bootstrap, the network interface should be configured for reaching the device remotely via network connections like ssh, telnet, ftp, http, etc.

This Application Note briefly describes how it is possible to simply configure the network interfaces on systemd

Resources[edit | edit source]

For further details on network configuration, please refer - for example - to:

Examples[edit | edit source]

The following configuration assumptions are used in the paragraphs shown below:

  • IP address range of the LAN network 192.168.0.0 - 192.168.0.255
  • IP address of the gateway 192.168.0.254
  • IP address of the device 192.168.0.144

systemd[edit | edit source]

The network configuration for systemd are basically found in the /etc/systemd/network/ directory.

The most simply way for configuring the network interface is to create/edit the file /etc/systemd/network/1-eth0.network as per the following paragraphs. For more example and usage hints on systemd, please refer to our wiki page.

Static IP address[edit | edit source]

SBCX AURA has one network interfaces, below is shown how to configureit through a static IP.

Example:

[Match]
Name=eth0

# Prevent the interface loading if the kernel boots from nfs
KernelCommandLine=!nfsroot

[Network]
Address=192.168.0.89/24
Gateway=192.168.0.254
DNS=192.168.0.1

Once modified, the networkd service should be resarted:

systemctl restart systemd-networkd

Dynamic IP addres (DHCP)[edit | edit source]

[Match]
Name=eth0

# Prevent the interface loading if the kernel boots from nfs
KernelCommandLine=!nfsroot

[Network]
DHCP=yes

When systemd network starts, it tries to use a DHCP server present in the network to configure the interface.

DNS[edit | edit source]

The DNS key (in the configuration file) is used only if the systemd-resolved service is enabled and the /etc/resolv.conf has a symbolic link to /run/systemd/resolve/stub-resolv.conf

ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Once modified, the resolved service should be resarted:

systemctl restart systemd-resolved

loopback network interface[edit | edit source]

systemd contains native implementations of various tasks that need to be executed as part of the boot process.

For example, it sets the hostname or configures the loopback network device.

Apply configuration changes[edit | edit source]

After editing the above files, changes are applied after reboot or by restarting systemd-networkd.service:

root@desk-mx93:~# systemctl restart systemd-networkd.service



TBD.png

MAC Address programming[edit | edit source]

Every network adapter has a Media Access Control address (usually shortened to MAC address). A MAC address is a six-byte identifying number permanently embedded in the firmware of the adapter, and is readable by the network and the operating system of the device on which the adapter is installed.

The address must follow the standards set by the Institute of Electrical and Electronics Engineers (IEEE), which sets computer networking standards.

The MAC address is a six-pair set of hexadecimal numbers, for example a1-c2-e3-44-5f-6d. Specifically, in Ethernet, the MAC address is known as the Ethernet Address, which is the unique ID serial number of the Ethernet device in one's computer. MAC Addresses are used in a Local Area Network (LAN) by computers to communicate with each other. Every adapter has a unique MAC address.

Platform supported[edit | edit source]

In this Application Note, we will describe how to use the i.MX93x eFuse for programming and using the MAC address(es).


200px-Emblem-important.svg.png

This Application Note has been validated in the AURA SOM. The commands used have been not validated in the other platform yet.

Obtaining a MAC address[edit | edit source]

To obtain a MAC address for your organization, please refer to our Setting the MAC address wiki page with the overall information about this topic.

Permanent storage areas[edit | edit source]

Some SOCs provide programmable OTPs for security, MAC addresses, boot modes, etc. Usually, some of these are general-purpose registers and can be managed by the user.

In other cases, an external permanent storage device can be used for storing permanent settings like the MAC address: for the i.MX93x product family, DAVE proposes to use the General Purposes eFuses (OTP blocks) on SoC itself for storing permanently the MAC address(es).

MAC address programming on i.MX93x family[edit | edit source]

MAC address configuration in u-boot[edit | edit source]

If the MAC address is not already programmed in the OTPs and the ethaddr u-boot variable is not set, u-boot assignes a random value (different at every power on cycle):

Net:   
Warning: ethernet@428a0000 (eth1) using random MAC address - 56:ea:aa:42:d2:0e
eth1: ethernet@428a0000 [PRIME]

If the ethaddr is set and saved in the u-boot environment, its value is used as the MAC Address:

u-boot=> setenv ethaddr 00:50:c2:1e:af:a8
u-boot=> saveenv
Saving Environment to MMC... Writing to MMC(1)... OK
u-boot=>

eFuse bank registers[edit | edit source]

i.MX93x family uses the Bank39 Word3, Word4, and Word5 (if the SoC has two ethernet interfaces) for storing the MAC addresses. The MAC values should be properly divided into the three registers for correct programming.


200px-Emblem-important.svg.png

Warning!! eFuse programming is a permanent and non-reversible action. Pay attention to the values and commands used during MAC programming.

eth0 eFuse programming[edit | edit source]

U-Boot uses the fuse prog command for writing the MAC address into the eFuse. The MAC address should be divided into high 16 bits and low 32 bits. For example MAC address AB:CD:12:34:56:78 for eth0 is then divided into:

fuse prog -y 39 3 0x12345678
fuse prog -y 39 4 0xABCD

In the following example the MAC address 00:50:c2:1e:af:a8 is stored in the SOC:

  • (in case of presence) clear the ethaddr u-boot variable
u-boot=> setenv ethaddr
u-boot=> saveenv
Saving Environment to MMC... Writing to MMC(1)... OK
  • program the MAC address in the OPTs with the following commands:
u-boot=> fuse prog 39 3 c21eafa8
Programming bank 9 word 0x00000000 to 0xc21eafa8...
Warning: Programming fuses is an irreversible operation!
         This may brick your system.
         Use this command only if you are sure of what you are doing!

Really perform this fuse programming? <y/N>
y
u-boot=> fuse prog 39 4 0050
Programming bank 9 word 0x00000001 to 0x00000050...
Warning: Programming fuses is an irreversible operation!
         This may brick your system.
         Use this command only if you are sure of what you are doing!

Really perform this fuse programming? <y/N>
y
u-boot=>

If you want to write the eFuse value directly without confirmation, uses the -y parameter with the fuse prog command, as per the previous example:

u-boot=> fuse prog -y 39 3 c21eafa8
u-boot=> fuse prog -y 39 4 0050

At the next boot, the ethaddr value wil be read from the OPTs:

Warning: ethernet@428a0000 using MAC address from ROM
eth0: ethernet@428a0000
Fastboot: Normal
Normal Boot
Hit any key to stop autoboot:  0
u-boot=> print ethaddr
ethaddr=00:50:c2:1e:af:a8
u-boot=>

The warning message informs that the ethaddr is not present in the u-boot environment and it has been set using the value read from the OTPs. For clearing the warning, it is enough to save the environment with saveenv.

u-boot=> saveenv

eFuse locking[edit | edit source]

The OTP eFuse registers should be locked to avoid unwanted registers (and then MAC addresses) modifications. OTP lock grants that the MAC values cannot be modified anymore.


200px-Emblem-important.svg.png

If not locked yet, OTP bits can be set to '1' but not reversed to '0' value, so some modifications can be applied if the eFuse registers are not locked.

TBD.png

eFuse reading[edit | edit source]

The eFuse registers can be read - after programming - for checking the written values:

u-boot=> fuse read 39 3
Reading bank 39:

Word 0x00000003: c21eafa8
u-boot=> fuse read 39 4
Reading bank 39:

Word 0x00000004: 00000050
u-boot=> fuse read 39 5
Reading bank 39:

Word 0x00000005: 0050c21e
u-boot=>

Linux kernel MAC address[edit | edit source]

The MAC Address configured in u-boot is passed to the kernel which configures the eth0 and eth1 peripherals with the correct values:

root@desk-mx93:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:c2:1e:af:a8
          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:82 errors:0 dropped:0 overruns:0 frame:0
          TX packets:82 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6220 (6.0 KiB)  TX bytes:6220 (6.0 KiB)

root@desk-mx93:~#



Target: AURA SoM family[edit | edit source]

Power Manager[edit | edit source]

This section outlines operational details for accessing the different consumption modes provided for the i.MX93 SoC, as described by NXP in AN14022 and AN13917. An explanation and measurement of consumption in some real use cases is proposed here.

For convenience, the description below is divided into the two groups as per NXP nomenclature: run mode and low-power mode.

Run mode[edit | edit source]

As described in AN14022, NXP i.MX93 SoC features a basic support for voltage and frequency dynamic scaling. As such, its Linux BSP does not provide the well-known CPUFreq subsystem. Instead, it provides an alternative, NXP-specific implementation, which is based on the lpm driver. Please note that selection and configuration of the run modes may require modifying the Device Tree (DT) too as explained in the following sections.

In regard to run mode, NXP defines four operating modes:

  • Over drive
  • Nominal drive
  • Low drive
  • Low drive with SWFFC

By default, not all of them are available in DESK-MX9-L. Over drive and Nominal drive are selectable only. This choice is due to the fact that Low drive and Low drive with SWFFC entails to change the clock frequency of some buses too. A conservative approach was preferred, leaving it up to the developer to modify the DT as shown below in case the other two modes need to be used as well.

Mode VDD SOC

[V]

A55 Max Frequency

[MHz]

DRAM Max Frequency

[MHz / MT/s]

Notes
Over drive (OD Mode, default) 0.9 1700 1866 / 3733 (1)
Nominal drive (ND Mode) 0.85 1400 1400 / 2800
Low drive (LD Mode) 0.8 933 933 1866 (2)
Low drive with SWFFC

(Software Fast Frequency Change)

(LD SWFFC Mode)

0.8 933 312.5 / 625 (2)

Note:

  • (1): Over drive is the default operating mode
  • (2): To enable Low drive and Low drive with SWFFC modes, DT must be modified. See here for more details.
Selecting over drive/nominal mode[edit | edit source]

The driver/imx/soc/imx93_lpm.c driver uses imx-atf to manage the operating mode and can be controlled using a sysfs interface.

To select the Nominal drive mode, issue the following command:

root@desk-mx93-rev1:~# echo 1 > /sys/devices/platform/imx93-lpm/mode
[ 9557.112015] System switching to ND mode...
root@desk-mx93-rev1:~# cat /sys/devices/platform/imx93-lpm/mode
System is in ND mode with DDR 1866 MTS!
root@desk-mx93-rev1:~# mhz
1398 MHz, 0.7153 nanosec clock

To select the Over drive mode (which is enabled by default), execute the following command:

root@desk-mx93-rev1:~# echo 0 > /sys/devices/platform/imx93-lpm/mode
[ 9456.025419] System switching to OD mode...
root@desk-mx93-rev1:~# cat /sys/devices/platform/imx93-lpm/mode
System is in OD mode with DDR 3733 MTS!
root@desk-mx93-rev1:~# mhz
1690 MHz, 0.5917 nanosec clock

To have Nominal drive mode as default at power up, it is necessary to add the property no-od-mode on lpm node of the device tree. In other words, modify the DT as follows (specifically, the file arch/arm64/boot/dts/freescale/imx93-aura.dtsi):

&lpm {
	soc-supply = <&buck1>;
	status = "okay";
+	no-od-mode;
};

For the sake of completeness, other operating mode-related useful commands are listed.

To read the current mode:

root@desk-mx93-rev0:~# cat /sys/devices/platform/imx93-lpm/mode
System is in OD mode with DDR 3733 MTS!

To read the current cores' frequency clock:

root@desk-mx93-rev1:~# mhz
1690 MHz, 0.5917 nanosec clock
Enabling low drive mode[edit | edit source]

To enable the two Low drive modes, add the property ld-mode-enabled on lpm node of the device tree. Please modify the DT as follows (again, the file arch/arm64/boot/dts/freescale/imx93-aura.dtsi):

&lpm {
	soc-supply = <&buck1>;
	status = "okay";
+	ld-mode-enabled;
};


200px-Emblem-important.svg.png

If you want to add these modalities, verify if you need to change the clock rate for other peripherals as NXP shows in the DT of the official i.MX93 Evaluation Kit (EVK):arch/arm64/boot/dts/freescale/imx93-11x11-evk-ld.dts:

&lpm {
        ld-mode-enabled;
};

&flexspi1 {
	assigned-clocks = <&clk IMX93_CLK_FLEXSPI1>;
	assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1>;
	assigned-clock-rates = <266000000>;
};

&usdhc1 {
	assigned-clocks = <&clk IMX93_CLK_USDHC1>;
	assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1>;
	assigned-clock-rates = <266000000>;
};

&usdhc2 {
	assigned-clocks = <&clk IMX93_CLK_USDHC2>;
	assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1>;
	assigned-clock-rates = <266000000>;
};

&usdhc3 {
	assigned-clocks = <&clk IMX93_CLK_USDHC3>;
	assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1>;
	assigned-clock-rates = <266000000>;
};
Selecting low drive modes[edit | edit source]

Once the target has booted with the modified DT, you can select Low drive Mode by issuing the following command:

root@desk-mx93-rev1:~# echo 2 > /sys/devices/platform/imx93-lpm/mode
[ 9623.164150] System switching to LD/SWFFC mode...
root@desk-mx93-rev1:~# cat /sys/devices/platform/imx93-lpm/mode
System is in LD mode with DDR 1866 MTS!
root@desk-mx93-rev1:~# mhz
898 MHz, 1.1136 nanosec clock

To select the Low drive with SWFFC mode, execute the following command instead:

root@desk-mx93-rev1:~# echo 3 > /sys/devices/platform/imx93-lpm/mode
[ 9648.546368] System switching to LD/SWFFC mode...
root@desk-mx93-rev1:~# cat /sys/devices/platform/imx93-lpm/mode
System is in LD mode with DDR 625 MTS!
root@desk-mx93-rev1:~# mhz
898 MHz, 1.1136 nanosec clock

Low-power mode[edit | edit source]

In this mode all unnecessary power domains (MIX) can be off. The AONMIX and internal modules, such as OSC24M/PLL, are an exception in this mode. The Cortex CPU in AONMIX handles all the computing and data processing. Cortex-A55 is powered down and DRAM can be in self-refresh/retention mode. NXP provides three low-power modes:

Idle mode[edit | edit source]

In this mode the CPU can be put into a power-gated state, but with L3 data retained, DRAM, and bus clocks are reduced. Most of the internal logic is clock-gated, all the external power from PMIC remains the same and most IPs remain in their state: therefore, the interrupt response in this mode is quick compared to the Run mode.

In the following example, the RTC with a timeout of one minute is set as the wakeup source, then the system is placed in idle mode.

root@desk-mx93-rev1:~# sudo sh -c "echo `date '+%s' -d '+ 1 minutes'` > /sys/class/rtc/rtc0/wakealarm"
root@desk-mx93-rev1:~# echo freeze > /sys/power/state

Suspend mode[edit | edit source]

This mode is defined as the most power-saving mode since it shuts off all the clocks and all the unnecessary power supplies. Compared to idle, this mode takes a longer time to exit, but it also uses far less energy.

In the following example, the RTC with a timeout of one minute is set as the wakeup source, then the system is placed in suspend mode.

root@desk-mx93-rev1:~# sudo sh -c "echo `date '+%s' -d '+ 1 minutes'` > /sys/class/rtc/rtc0/wakealarm"
root@desk-mx93-rev1:~# echo mem > /sys/power/state

BBSM mode[edit | edit source]

This mode is also called RTC mode. In this mode only the power for the BBSM domain remains on to keep RTC and BBSM logic alive.

  • Switching to this mode requires shutting down the system:
    • via software with the shutdown command
    • via hardware by bringing the ONOFF line low. The system can detect the duration of the low ONOFF line assertion, being able to define different behaviors for short and long periods by modifiying the properties HandlePowerKey and HandlePowerKeyLongPress in the file /etc/systemd/logind.conf, respectively. To cause shutdown set a property to poweroff. For more details see https://www.freedesktop.org/software/systemd/man/latest/logind.conf.html.
  • To switch from this mode to run mode:
    • via hardware by assert the ONOFF line low for a few seconds
    • via software by defining an RTC event before shutdown, for example by setting a startup after two minutes: sudo sh -c "echo `date '+%s' -d '+ 2 minutes'` > /sys/class/rtc/rtc0/wakealarm"


Peripherals[edit | edit source]

Peripheral CAN[edit | edit source]

Device tree configuration[edit | edit source]

Here below is an example of device tree configuration used on standard DAVE's kit for the AURA SOM:

From imx93-aura.dtsi:

...
&flexcan2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_flexcan2>;
	status = "okay";
};
...
&iomuxc {
...
    pinctrl_flexcan2: flexcan2grp {
		fsl,pins = <
			MX93_PAD_GPIO_IO25__CAN2_TX	0x139e
			MX93_PAD_GPIO_IO27__CAN2_RX	0x139e
		>;
	};
...
};

Accessing the peripheral[edit | edit source]

Linux messages at boot time[edit | edit source]

...
[    1.527184] can: controller area network core
[    1.536411] can: raw protocol
[    1.539420] can: broadcast manager protocol
[    1.543646] can: netlink gateway - max_hops=1
...

Enable the interface and check status[edit | edit source]

root@desk-mx93-rev1:~# ip link set can0 type can bitrate 500000
root@desk-mx93-rev1:~# ifconfig can0 up
root@desk-mx93-rev1:~# ifconfig can0
can0: flags=193<UP,RUNNING,NOARP>  mtu 16
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 22

Usage with can-utils[edit | edit source]

root@desk-mx93-rev1:~# ifconfig can0 down
root@desk-mx93-rev1:~# ip link set can0 type can bitrate 500000 triple-sampling on loopback on
root@desk-mx93-rev1:~# ifconfig can0 up
root@desk-mx93-rev1:~# candump can0 &
[1] 312
interface = can0, family = 29, type = 3, proto = 1
root@desk-mx93-rev1:~# cansend can0 -i 0x7ff 00 01 02 03 04 05 06 07
<0x7ff> [8] 00 01 02 03 04 05 06 07 
<0x000> [8] ff fe fd fc fb fa f9 f8 

Additional information[edit | edit source]

Each CAN port appears like a networking interface in the form canX where X is the port number.

Information about programming the CAN socket interface is given in the kernel tree under Documentation/networking/can.rst


Peripheral Ethernet[edit | edit source]

The ethernet interface is made available through the i.MX93 eqos interface which should be initialized on the device tree.

Device tree configuration[edit | edit source]

Here below is an example of device tree configuration used on standard DAVE's kit for the AURA SOM:

From imx93-aura.dtsi :

&eqos {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_eqos>;
	phy-mode = "rgmii-id";
	phy-handle = <&ethphy1>;
	status = "okay";

	mdio {
		compatible = "snps,dwmac-mdio";
		#address-cells = <1>;
		#size-cells = <0>;
		clock-frequency = <5000000>;

		ethphy1: ethernet-phy@7 {
			compatible = "ethernet-phy-ieee802.3-c22";
			reg = <7>;
			eee-broken-1000t;
		};
	};
};
...
...

&iomuxc {
...
	pinctrl_eqos: eqosgrp {
		fsl,pins = <
			MX93_PAD_ENET1_MDC__ENET_QOS_MDC			0x57e
			MX93_PAD_ENET1_MDIO__ENET_QOS_MDIO			0x57e
			MX93_PAD_ENET1_RD0__ENET_QOS_RGMII_RD0			0x57e
			MX93_PAD_ENET1_RD1__ENET_QOS_RGMII_RD1			0x57e
			MX93_PAD_ENET1_RD2__ENET_QOS_RGMII_RD2			0x57e
			MX93_PAD_ENET1_RD3__ENET_QOS_RGMII_RD3			0x57e
			MX93_PAD_ENET1_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK	0x5fe
			MX93_PAD_ENET1_RX_CTL__ENET_QOS_RGMII_RX_CTL		0x57e
			MX93_PAD_ENET1_TD0__ENET_QOS_RGMII_TD0			0x57e
			MX93_PAD_ENET1_TD1__ENET_QOS_RGMII_TD1			0x57e
			MX93_PAD_ENET1_TD2__ENET_QOS_RGMII_TD2			0x57e
			MX93_PAD_ENET1_TD3__ENET_QOS_RGMII_TD3			0x57e
			MX93_PAD_ENET1_TXC__CCM_ENET_QOS_CLOCK_GENERATE_TX_CLK	0x5fe
			MX93_PAD_ENET1_TX_CTL__ENET_QOS_RGMII_TX_CTL		0x57e
		>;
	};
...
};
...


Accessing the peripheral[edit | edit source]

AURA SOM provides the network interface mapped as eth0.

Linux messages at boot time[edit | edit source]

[    1.529235] 8021q: 802.1Q VLAN Support v1.8
...
[    1.654828] imx-dwmac 428a0000.ethernet: IRQ eth_lpi not found
[    1.660956] imx-dwmac 428a0000.ethernet: User ID: 0x10, Synopsys ID: 0x52
[    1.667758] imx-dwmac 428a0000.ethernet:     DWMAC4/5
[    1.672591] imx-dwmac 428a0000.ethernet: DMA HW capability register supported
[    1.679716] imx-dwmac 428a0000.ethernet: RX Checksum Offload Engine supported
[    1.686866] imx-dwmac 428a0000.ethernet: TX Checksum insertion supported
[    1.693562] imx-dwmac 428a0000.ethernet: Wake-Up On Lan supported
[    1.699702] imx-dwmac 428a0000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[    1.707351] imx-dwmac 428a0000.ethernet: Enabled L3L4 Flow TC (entries=8)
[    1.714128] imx-dwmac 428a0000.ethernet: Enabled RFS Flow TC (entries=10)
[    1.720911] imx-dwmac 428a0000.ethernet: Enabling HW TC (entries=256, max_off=256)
[    1.728472] imx-dwmac 428a0000.ethernet: Using 32/32 bits DMA host/device width
[    8.332289] imx-dwmac 428a0000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[    8.402295] imx-dwmac 428a0000.ethernet eth0: PHY [stmmac-0:07] driver [Microchip LAN8841 Gigabit PHY] (irq=POLL)
[    8.410904] imx-dwmac 428a0000.ethernet eth0: No Safety Features support found
[    8.410936] imx-dwmac 428a0000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
[    8.412050] imx-dwmac 428a0000.ethernet eth0: registered PTP clock
[    8.416468] imx-dwmac 428a0000.ethernet eth0: FPE workqueue start
[    8.416490] imx-dwmac 428a0000.ethernet eth0: configuring for phy/rgmii-id link mode
...
[    8.417065] 8021q: adding VLAN 0 to HW filter on device eth0
...

Cable connection:

...
[   60.417963] imx-dwmac 428a0000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
...

Check the interface with ifconfig[edit | edit source]

root@desk-mx93-rev1:~# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.89  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::58dd:eff:fe59:b5d8  prefixlen 64  scopeid 0x20<link>
        ether 5a:dd:0e:59:b5:d8  txqueuelen 1000  (Ethernet)
        RX packets 431  bytes 32534 (31.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39  bytes 4840 (4.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 101

root@desk-mx93-rev1:~#

Test with iperf3[edit | edit source]

root@desk-mx93-rev1:~# iperf3 -t 5 -c 192.168.0.167
Connecting to host 192.168.0.167, port 5201
[  5] local 192.168.0.89 port 33840 connected to 192.168.0.167 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   114 MBytes   956 Mbits/sec    1    406 KBytes
[  5]   1.00-2.00   sec   110 MBytes   927 Mbits/sec    0    455 KBytes
[  5]   2.00-3.00   sec   113 MBytes   945 Mbits/sec    0    457 KBytes
[  5]   3.00-4.00   sec   112 MBytes   943 Mbits/sec    0    465 KBytes
[  5]   4.00-5.00   sec   112 MBytes   937 Mbits/sec    0    475 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-5.00   sec   562 MBytes   942 Mbits/sec    1             sender
[  5]   0.00-5.01   sec   560 MBytes   938 Mbits/sec                  receiver

iperf Done.
root@desk-mx93-rev1:~#

MAC Address[edit | edit source]

For the MAC Address programming, refers to the following wiki page



Peripheral LVDS[edit | edit source]

Device tree configuration[edit | edit source]

Here below an example of device tree modification on standard DAVE's kit for the AURA SOM:

...
/ {
...
	regulators {
...
		reg_lvds_en: regulator_lcd_3V3_en {
			compatible = "regulator-fixed";
			regulator-name = "lvds_enable";
			pinctrl-names = "default";
			pinctrl-0 = <&pinctrl_lcd_3v3_enable>;
			gpio = <&gpio1 10 GPIO_ACTIVE_HIGH>;
			enable-active-high;
		};
...
	};
...
	backlight: backlight {
		pinctrl-names = "default";
		gpios = <&gpio2 24 GPIO_ACTIVE_HIGH>;
		pinctrl-0 = <&pinctrl_lcd_bl>;
		compatible = "gpio-backlight";
		default-on;
	};
...
	lvds_panel {
		compatible = "panel-lvds";
		power-supply = <&reg_lvds_en>;
		backlight = <&backlight>;
		width-mm = <154>;
		height-mm = <87>;
		label = "am800480btmqw-tg0h-c";
		data-mapping = "vesa-24";
		status = "okay";

		panel-timing {
			clock-frequency = <35000000>;
			hactive = <800>;
			vactive = <480>;
			hback-porch = <88>;
			hfront-porch = <40>;
			vback-porch = <32>;
			vfront-porch = <13>;
			hsync-len = <48>;
			vsync-len = <3>;
			hsync-active = <0>;
			vsync-active = <0>;
			de-active = <1>;
		};

		port {
			panel_lvds_in: endpoint {
				remote-endpoint = <&lvds_out>;
			};
		};
	};
...
};
...

&lcdif {
	status = "okay";
	assigned-clock-rates = <498000000>, <71142857>, <400000000>, <133333333>;
};

&ldb {
	status = "okay";

	lvds-channel@0 {
		status = "okay";

		port@1 {
			reg = <1>;

			lvds_out: endpoint {
				remote-endpoint = <&panel_lvds_in>;
			};
		};
	};
};

&ldb_phy {
	status = "okay";
};
...
&iomuxc {
...
	pinctrl_lcd_3v3_enable: lcd_3v3_en {
		fsl,pins = <
			MX93_PAD_PDM_BIT_STREAM1__GPIO1_IO10		0x31e
		>;
	};
...
	pinctrl_lcd_bl: lcd_bl {
		fsl,pins = <
			MX93_PAD_GPIO_IO24__GPIO2_IO24			0x31e
		>;
	};
...
};

Accessing the peripheral[edit | edit source]

Linux messages at boot time[edit | edit source]

...

[    0.893168] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops lcdifv3_crtc_ops)
[    1.659083] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops lcdifv3_crtc_ops)
[    1.822975] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops lcdifv3_crtc_ops)
[    1.831218] imx-drm display-subsystem: bound ldb-display-controller (ops imx93_ldb_ops)
[    1.839543] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 0
[    1.912044] imx-drm display-subsystem: [drm] fb0: imx-drmdrmfb frame buffer device
...

DRM access[edit | edit source]

DRM framework can be accessed using the modetest DRM utility.

root@desk-mx93-rev1:~# modetest -M imx-drm
Encoders:
id      crtc    type    possible crtcs  possible clones
34      33      LVDS    0x00000001      0x00000001

Connectors:
id      encoder status          name            size (mm)       modes   encoders
35      34      connected       LVDS-1          154x87          1       34
  modes:
        index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
  #0 800x480 67.92 800 840 888 976 480 493 496 528 35000 flags: nhsync, nvsync; type: preferred, driver
  props:
        1 EDID:
                flags: immutable blob
                blobs:

                value:
        2 DPMS:
                flags: enum
                enums: On=0 Standby=1 Suspend=2 Off=3
                value: 0
        5 link-status:
                flags: enum
                enums: Good=0 Bad=1
                value: 0
        6 non-desktop:
                flags: immutable range
                values: 0 1
                value: 0
        4 TILE:
                flags: immutable blob
                blobs:

                value:

CRTCs:
id      fb      pos     size
33      39      (0,0)   (800x480)
  #0 800x480 67.92 800 840 888 976 480 493 496 528 35000 flags: nhsync, nvsync; type: preferred, driver
  props:
        24 VRR_ENABLED:
                flags: range
                values: 0 1
                value: 0

Planes:
id      crtc    fb      CRTC x,y        x,y     gamma size      possible crtcs
31      33      39      0,0             0,0     0               0x00000001
  formats: XR24 AR24 RG16 XB24 AB24 AR15 XR15
  props:
        8 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 1
        32 zpos:
                flags: immutable range
                values: 0 0
                value: 0

Frame buffers:
id      size    pitch

root@desk-mx93-rev1:~#

Additional information[edit | edit source]

For some information on DRM/KMS framework, see the DRM-KMS kernel documentation.



Peripheral MIPI[edit | edit source]

Device tree configuration[edit | edit source]

Here below is an example of device tree configuration used on standard DAVE's kit for the AURA SOM:

From imx93-aura-cb2001.dts:

...
/ {
...
	regulators {
...
		ov5640_reg_2v8: ov5640_reg_2v8 {
			compatible = "regulator-fixed";
			regulator-name = "ov5640_reg_2v8";
			regulator-min-microvolt = <2800000>;
			regulator-max-microvolt = <2800000>;
			regulator-always-on;
		};

		ov5640_reg_1v8: ov5640_reg_1v8 {
			compatible = "regulator-fixed";
			regulator-name = "ov5640_reg_1v8";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-always-on;
		};

		ov5640_reg_1v5: ov5640_reg_1v5 {
			compatible = "regulator-fixed";
			regulator-name = "ov5640_reg_1v5";
			regulator-min-microvolt = <1500000>;
			regulator-max-microvolt = <1500000>;
			regulator-always-on;
		};
...
	};
...
};
...
&lpi2c3 {
...
	ov5640_mipi: ov5640_mipi@3c {
		compatible = "ovti,ov5640";
		reg = <0x3c>;
		clocks = <&clk IMX93_CLK_CCM_CKO3>;
		assigned-clocks = <&clk IMX93_CLK_CCM_CKO3>;
		assigned-clock-rates = <24000000>;
		clock-names = "xclk";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_mipi_cam>;
		reset-gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;

		csi_id = <0>;
		mclk = <24000000>;
		mclk_source = <0>;
		mipi_csi;

		DOVDD-supply = <&ov5640_reg_1v8>;
		AVDD-supply = <&ov5640_reg_2v8>;
		DVDD-supply = <&ov5640_reg_1v5>;
		status = "okay";

		port {
			ov5640_mipi1_ep: endpoint {
				remote-endpoint = <&mipi_csi_ep>;
				data-lanes = <2>;
				cfg-clk-range = <28>;
				hs-clk-range = <0x16>;
			};
		};
	};
...
};
...
&mipi_csi {
	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";

	port@0 {
		reg = <0>;
		mipi_csi_ep: endpoint {
			remote-endpoint = <&ov5640_mipi1_ep>;
			data-lanes = <2>;
			cfg-clk-range = <28>;
			hs-clk-range = <0x16>;
			bus-type = <4>;
		};
	};
};
...
&iomuxc {
...
	pinctrl_mipi_cam: mipi_cam {
		fsl,pins = <
			MX93_PAD_SAI1_TXFS__GPIO1_IO11			0x31e
		>;
	};
...
};

Accessing the peripheral[edit | edit source]

Linux messages at boot time[edit | edit source]

MIPI CSI driver initialized and if a MIPI camera is inserted, it has been recognized and its video driver is loaded:

...
[    1.877299] i2c 2-003c: Fixed dependency cycle(s) with /soc@0/bus@42800000/camera/csi@4ae00000/port@0/endpoint
[    1.888225] ov5640 2-003c: ov5640_write_reg: error: reg=3008, val=82
[    2.064939] mxc-md 42800000.bus:camera: deferring csi device registration
[    2.072752] dwc-mipi-csi2-host 4ae00000.csi: lanes: 2, name: mxc-mipi-csi2.0
[    2.109933] mx8-img-md: Registered sensor subdevice: ov5640 2-003c (1)
[    2.123066] mx8-img-md: created link [mxc-mipi-csi2.0] => [mxc_isi.0]
[    2.129497] mx8-img-md: created link [ov5640 2-003c] => [mxc-mipi-csi2.0]
...

Then, check if the camera is correctly recognized.

root@desk-mx93:~# ls -la /dev/video0 
crw-rw---- 1 root video 81, 0 Mar  3 11:31 /dev/video0
root@desk-mx93:~#

Usage with gstreamer[edit | edit source]

Video capture and display using Pcam 5C OV5640 MIPI camera:


200px-Emblem-important.svg.png

At every power-on cycle the first camera usage is not working. Run gstreamer, wait for some seconds then close it with Ctrl+C and restart the application again

root@desk-mx93:~# gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480 ! waylandsink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
[ 1864.940941] mxc-mipi-csi2.0: format: 0x2008
[ 1864.950148] bypass csc
[ 1864.952512] input fmt YUV4
[ 1864.955219] output fmt YUYV
[ 1865.066804] dwc-mipi-csi2-host 4ae00000.csi: enter enable=1
Redistribute latency...
handling interrupt.:99.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:06.73270[ 1871.190805] dwc-mipi-csi2-host 4ae00000.csi: enter enable=0
5712
Setting pipeline to NULL ...
Total showed frames (137), playing for (0:00:06.732670920), fps (20.349).
Freeing pipeline ...
root@desk-mx93:~#

Additional information[edit | edit source]

More information about gstreamer on its web site.

More information about i.MX gstreamer plugin on the gstreamer-imx web site



Peripheral SD[edit | edit source]

Device tree configuration[edit | edit source]

N.B. The USDHC interface is re-configured on the carrier device tree because of the Card Detect pin (which is related to the real board hardware implementation).

Here below is an example of device tree configuration used on standard DAVE's kit for the AURA SOM:

From imx93-aura-sbcx.dtsi:

...
&usdhc2 {
	status = "okay";
};
...

From imx93-aura.dtsi:

...
&usdhc2 {
	pinctrl-names = "default", "state_100mhz", "state_200mhz";
	pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
	pinctrl-1 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
	pinctrl-2 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
	cd-gpios = <&gpio3 00 GPIO_ACTIVE_LOW>;
	bus-width = <4>;
	no-sdio;
	no-mmc;
	disable-wp;
	no-1-8-v;
	status = "disabled";
};
...
&iomuxc {
...
	pinctrl_usdhc2_gpio: usdhc2gpiogrp {
		fsl,pins = <
			MX93_PAD_SD2_CD_B__GPIO3_IO00		0x31e
		>;
	};

	pinctrl_usdhc2: usdhc2grp {
		fsl,pins = <
			MX93_PAD_SD2_CLK__USDHC2_CLK		0x17fe
			MX93_PAD_SD2_CMD__USDHC2_CMD		0x13fe
			MX93_PAD_SD2_DATA0__USDHC2_DATA0	0x13fe
			MX93_PAD_SD2_DATA1__USDHC2_DATA1	0x13fe
			MX93_PAD_SD2_DATA2__USDHC2_DATA2	0x13fe
			MX93_PAD_SD2_DATA3__USDHC2_DATA3	0x13fe
			MX93_PAD_SD2_VSELECT__USDHC2_VSELECT	0x51e
		>;
	};
...
};

Accessing the peripheral[edit | edit source]

Once initialized, the SD device is mapped to the standard /dev/mmcblk1pX block device, depending on how many partitions are created on the SD card.

Linux messages at boot time[edit | edit source]

If the microSD card is inserted at boot time, the kernel - once the USDHC interface has been initialized - prints the device information and the partitions detected like p1, p2, etc.:

...
...
[    1.303467] sdhci: Secure Digital Host Controller Interface driver
[    1.309666] sdhci: Copyright(c) Pierre Ossman
[    1.320730] sdhci-pltfm: SDHCI platform and OF driver helper
...
[    1.363406] mmc0: SDHCI controller on 42850000.mmc [42850000.mmc] using ADMA
[    1.477426] mmc0: new high speed MMC card at address 0001
[    1.485815] mmcblk0: mmc0:0001 DG4008 7.28 GiB
[    1.494390]  mmcblk0: p1 p2
[    1.500131] mmcblk0boot0: mmc0:0001 DG4008 4.00 MiB
[    1.509887] mmcblk0boot1: mmc0:0001 DG4008 4.00 MiB
[    1.519576] mmcblk0rpmb: mmc0:0001 DG4008 4.00 MiB, chardev (234:0)
[    1.800705] mmc1: SDHCI controller on 42860000.mmc [42860000.mmc] using ADMA
[    1.890603] mmc1: new high speed SDHC card at address aaaa
[    1.891148] mmcblk1: mmc1:aaaa SA16G 14.8 GiB
[    1.893100]  mmcblk1: p1 p2
[    2.220828] EXT4-fs (mmcblk1p2): mounted filesystem 268c3a14-dc3b-4fad-a775-da3efccc80c1 r/w with ordered data mode. Quota mode: none.
[    4.529132] EXT4-fs (mmcblk1p2): re-mounted 268c3a14-dc3b-4fad-a775-da3efccc80c1 r/w. Quota mode: none.
...

Additional information[edit | edit source]

If booting from NFS, the file system configuration automatically mounts the uSD partitions.

root@desk-mx93-rev1:~# lsblk /dev/mmcblk1
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk1     179:96   0  14.8G  0 disk
|-mmcblk1p1 179:97   0 332.8M  0 part
`-mmcblk1p2 179:98   0   4.1G  0 part



Peripheral UART[edit | edit source]

Device tree configuration[edit | edit source]

Here below is an example of device tree modifications to standard DAVE's kit for the AURA SOM:

From imx93-aura-sbcx.dtsi:

...
...
&lpuart4 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart4>;
	status = "okay";
};
...
&iomuxc {
...
	pinctrl_uart4: uart4grp{
		fsl,pins = <
			MX93_PAD_GPIO_IO14__LPUART4_TX			0x31e
			MX93_PAD_GPIO_IO15__LPUART4_RX			0x31e
		>;
	};
...

Accessing the peripheral[edit | edit source]

Linux messages at boot time[edit | edit source]

...
[    0.820934] 44380000.serial: ttyLP0 at MMIO 0x44380010 (irq = 17, base_baud = 1500000) is a FSL_LPUART
[    0.830243] printk: console [ttyLP0] enabled
[    0.853129] 44390000.serial: ttyLP1 at MMIO 0x44390010 (irq = 18, base_baud = 1500000) is a FSL_LPUART
[    0.863181] 42580000.serial: ttyLP3 at MMIO 0x42580010 (irq = 19, base_baud = 1500000) is a FSL_LPUART
[    0.873162] 42690000.serial: ttyLP2 at MMIO 0x42690010 (irq = 20, base_baud = 1500000) is a FSL_LPUART
...

Usage with stty[edit | edit source]

N.B. UART mapping respect to ttyLPX is the following one:

LPUART1 <-> ttyLP0
LPUART2 <-> ttyLP1
LPUART3 <-> ttyLP2
LPUART4 <-> ttyLP3
...
root@desk-mx93-rev1:~# stty -F /dev/ttyLP1 115200 -echo -raw
root@desk-mx93-rev1:~# cat /dev/ttyLP1 > test_ttyLP1.log &
[1] 716
root@desk-mx93-rev1:~# echo "Test loopback" > /dev/ttyLP1
root@desk-mx93-rev1:~# cat test_ttyLP1.log
Test loopback

root@desk-mx93-rev1:~#

Additional information[edit | edit source]

Serial ports can be used through the standard serial programming API.

For detailed information, please refer to the Serial Programming HOWTO at Serial-Programming-HOWTO



Peripheral USB1 OTG[edit | edit source]

AURA SOM supports OTG/Host/Peripheral modes: on AURA Evaluation Kit the USB1 OTG port is configured as peripheral.

Device tree configuration[edit | edit source]

Here below is an example of device tree configuration used on standard DAVE's kit for the AURA SOM:

From kernel device tree imx93-aura.dtsi:

...
&usbotg1 {
	dr_mode = "peripheral";
	hnp-disable;
	srp-disable;
	adp-disable;
	disable-over-current;
	samsung,picophy-pre-emp-curr-control = <3>;
	samsung,picophy-dc-vol-level-adjust = <7>;
	status = "disabled";
};
...

From kernel device tree imx93-aura-sbcx.dtsi:

/ {
...
&usbotg1 {
	dr_mode = "peripheral";
	status = "okay";
};
...

Accessing the peripheral[edit | edit source]

Usage with mass-storage[edit | edit source]

root@desk-mx93-rev1:~# dd if=/dev/zero of=mass_storage count=256 bs=1M
256+0 records in
256+0 records out
268435456 bytes (268 MB, 256 MiB) copied, 0.583141 s, 460 MB/s
root@desk-mx93-rev1:~# mkfs.msdos mass_storage
mkfs.fat 4.2 (2021-01-31)
root@desk-mx93-rev1:~#
root@desk-mx93-rev1:~# mkdir loop
root@desk-mx93-rev1:~# mount -o loop mass_storage loop
root@desk-mx93-rev1:~# echo "Test USB OTG with mass storage device" > loop/usb.txt
root@desk-mx93-rev1:~# umount loop
root@desk-mx93-rev1:~#

then insert the g_mass_storage kernel module driver enabling an Windows PC to see it as a removable device

root@desk-mx93-rev1:~# modprobe g_mass_storage removable=y file=mass_storage
[  956.067086] Mass Storage Function, version: 2009/09/11
[  956.072249] LUN: removable file: (no medium)
[  956.077037] LUN: removable file: /root/mass_storage
[  956.082066] Number of LUNs=1
[  956.085113] g_mass_storage gadget.0: Mass Storage Gadget, version: 2009/09/11
[  956.092277] g_mass_storage gadget.0: userspace failed to provide iSerialNumber
[  956.099516] g_mass_storage gadget.0: g_mass_storage ready

Once the USB cable is connected to the PC, the kernel prints the following messages:

[10029.505852] usb 1-1.1: USB disconnect, device number 6
[10031.752740] usb 1-1.1: new high-speed USB device number 7 using xhci_hcd
[10031.842231] usb 1-1.1: New USB device found, idVendor=0525, idProduct=a4a5, bcdDevice= 6.06
[10031.842259] usb 1-1.1: New USB device strings: Mfr=3, Product=4, SerialNumber=0
[10031.842274] usb 1-1.1: Product: Mass Storage Gadget
[10031.842287] usb 1-1.1: Manufacturer: Linux 6.6.52-desk-mx9-l-6.0.0-lts-next-lts-next-gf90bc32626fe with 4c100000.usb
[10031.844420] usb-storage 1-1.1:1.0: USB Mass Storage device detected
[10031.845248] usb-storage 1-1.1:1.0: Quirks match for vid 0525 pid a4a5: 10000
[10031.845454] scsi host0: usb-storage 1-1.1:1.0
[10032.865376] scsi 0:0:0:0: Direct-Access     Linux    File-Stor Gadget 0606 PQ: 0 ANSI: 2
[10032.867719] sd 0:0:0:0: Power-on or device reset occurred
[10032.871739] sd 0:0:0:0: [sda] 524288 512-byte logical blocks: (268 MB/256 MiB)
[10032.910957] sd 0:0:0:0: Attached scsi generic sg0 type 0
[10032.977486] sd 0:0:0:0: [sda] Write Protect is off
[10032.977517] sd 0:0:0:0: [sda] Mode Sense: 0f 00 00 00
[10033.085505] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[10033.333543]  sda:
[10033.333718] sd 0:0:0:0: [sda] Attached SCSI removable disk



Peripheral USB2 OTG[edit | edit source]

AURA SOM supports OTG/Host/Peripheral modes: on AURA Evaluation Kit the USB2 OTG port is configured as USB Host.

Device tree configuration[edit | edit source]

Here below an example of device tree configuration used on standard DAVE's kit for the AURA SOM:

From kernel device tree imx93-aura.dtsi:

...
&usbotg2 {
	dr_mode = "otg";
	hnp-disable;
	srp-disable;
	adp-disable;
	disable-over-current;
	samsung,picophy-pre-emp-curr-control = <3>;
	samsung,picophy-dc-vol-level-adjust = <7>;
	status = "disabled";
};
...

From kernel device tree imx93-aura-sbcx.dtsi:

/ {
...
	regulators {
...
		reg_usb_pwr: usb_pwr {
			compatible = "regulator-fixed";
			regulator-name = "usb_pwr_en";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio1 8 GPIO_ACTIVE_HIGH>;
			enable-active-high;
		};
...
	};
...
};
...
&usbotg2 {
	dr_mode = "host";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usb_pwr>;
	vbus-supply = <&reg_usb_pwr>;
	status = "okay";
};
...
&iomuxc {
...
	pinctrl_usb_pwr: usbpwrgrp {
		fsl,pins = <
			MX93_PAD_PDM_CLK__GPIO1_IO08			0x31e
		>;
	};
...
};

Accessing the peripheral[edit | edit source]

Linux messages at boot time[edit | edit source]

When a USB peripheral is inserted, in the following example a memory mass storage device, the kernel recognizes the device (i.e. xlass, vendor id, product id, etc.)

[ 1289.187877] usb 1-1: new high-speed USB device number 3 using ci_hdrc
[ 1289.352090] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 1289.364286] scsi host0: usb-storage 1-1:1.0
[ 1290.398162] scsi 0:0:0:0: Direct-Access      USB      SanDisk 3.2Gen1 1.00 PQ: 0 ANSI: 6
[ 1290.417217] sd 0:0:0:0: [sda] 240353280 512-byte logical blocks: (123 GB/115 GiB)
[ 1290.425417] sd 0:0:0:0: [sda] Write Protect is off
[ 1290.431801] sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00
[ 1290.438296] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 1290.456304]  sda: sda1
[ 1290.459031] sd 0:0:0:0: [sda] Attached SCSI removable disk

Additional information[edit | edit source]

The root file system configuration automatically mounts the partition:

root@desk-mx93-rev1:~# lsblk /dev/sda
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    1 114.6G  0 disk
`-sda1   8:1    1 114.6G  0 part

The mount point directory name depends on the USB partition name.



Peripheral GPIOs[edit | edit source]

i.MX93 can handle external pins in many different ways and most of them can be configured as GPIOs. When a pin is set as a GPIO, it is possible to read its value, change its direction or change output value directly from the shell.

Accessing the peripheral[edit | edit source]

Usage with libgpiod[edit | edit source]

The gpio utilities are available in the target:

root@desk-mx93-rev1:~# gpio
gpiodetect  gpioget     gpioinfo    gpiomon     gpionotify  gpioset
gpiomon example[edit | edit source]

If a push button, with proper pull-up, is connected to a GPIO line available - for example using the J33.28 pin available on SBC AXEL Lite WIDE connector - the related GPIO can be used as an interrupt:

  • J33.28 is connected to J10.191 SO-DIMM pin
    • J33 connector is the WIDE connector in the AURA Evaluation Kit
    • J10 connector is the SO-DIMM connector in the AURA Evaluation Kit
    • ALT-0 alternate function for this pin is GPIO2_IO12
  • the corresponding pin number is associated to gpiochip0 line 12
  • gpiomon utility can be used for monitor the pin status and triggering, for example, the falling-edge event:
root@desk-mx93-rev1:~# gpiomon -e falling -c 0 12
19.196239257    falling gpiochip0 12
19.413192549    falling gpiochip0 12
19.413339466    falling gpiochip0 12
19.413361966    falling gpiochip0 12
19.413423049    falling gpiochip0 12
gpioset example[edit | edit source]

For changing a GPIO output status, the gpioset utility can be used:

  • the following example set to High the pin GPIO_IO00 connected to J10.179 SO-DIMM pin
root@desk-mx93-rev1:~# gpioset -c 0 0=1