DESK-MX6UL-L/pdf
History[edit | edit source]
DESK-MX6UL-L History | |||
---|---|---|---|
Version | Issue Date | Notes | Refers to |
Jun 2021 | First DESK release | AXEL ULite SOM | |
SDV04 | |||
SBC Lynx SBC | |||
Mar 2022 | Update to NXP 5.10.35 | AXEL ULite SOM | |
SDV04 | |||
SBC Lynx SBC | |||
Mar 2023 | Update to NXP 5.15.71 | AXEL ULite SOM | |
SDV04 | |||
SBC Lynx SBC | |||
Jun 2023 | Minor update | AXEL ULite SOM | |
SDV04 | |||
SBC Lynx SBC | |||
4.1.0 | Jul 2024 | LTS Kernel update | AXEL ULite SOM |
SDV04 | |||
4.2.1 | Oct 2024 | RIALTO support and CVE fixes | AXEL ULite SOM |
RIALTO SBC |
General Information[edit | edit source]
Release Notes[edit | edit source]
DAVE Embedded Systems adds to the 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 | 4.2.1 |
Release type | Minor |
Status | Released |
Release date | Oct 2024 |
Release notes | Ver 4.2.1 |
Product support | AXEL ULite, RIALTO SBC |
MVM (distro version) | Ubuntu 20.04 |
U-Boot version | 2022.04-desk-mx6ul-l-4.2.0 |
Linux version | 5.15.71-desk-mx6ul-l-4.2.0 |
Drivers |
SPI NOR Flash (boot) RTC |
Manufacturer BSP version | lf-5.15.71-2.2.2 |
Graphic libraries | Qt 6.3.3 |
Build System | Yocto Kirkstone (4.0) |
DESK-MX6UL-L 4.2.1[edit | edit source]
Release notes:
- add support to RIALTO SBC
- update u-boot and linux to desk-mx6ul-l-4.2.0
- add public repo to bluez
- disable splash variable
- update the following meta-layer to the latest version of Kirkstone. With this update, we include CVE fixes
- Poky to the version 4.0.20
- meta-openembedded
- meta-browser
- meta-java
- meta-timesys
- meta-clang
- meta-virtualization
Known Issues[edit | edit source]
The limitations are the same of DESK-MX6UL-L-4.0.0
Downloadable binary images[edit | edit source]
All binary images for DESK-MX6UL-L are hosted on DAVE Embedded System mirror server. There is a sub-directory for each version of this development kit.
U-Boot performs a 2-stage bootloader providing two files: SPL
and u-boot.img
. Both files must be stored on an SD card using the dd
command.
A summary of images with a brief description can be found in the table below:
Image | DESK-MX6UL-L 4.2.1 | |
---|---|---|
Platform | SDV04 - SDV0400011C2R | RIALTO SBC - DVRTA00330D2R |
Carrier Board ConfigID | 003a | 0090 |
LCD panel | Ampire 800 x 480 7" LVDS 262K colors | |
SPL | SPL | SPL |
u-boot.img | u-boot.img | u-boot.img |
Linux kernel | uImage | uImage |
Device tree | imx6ul-axelulite-cb003a.dtb | imx6ul-lynx-som0022-cb0090.dtb |
root file system | dave-image-devel-desk-mx6ul-axelulite | dave-image-devel-desk-mx6ul-rialto |
Yocto images and built-in packages[edit | edit source]
Yocto target images for DESK-MX6UL-L are hosted on DAVE Embedded System mirror server. More build targets include a list of built and installed packages in the root file system image.
A summary of built images and their included packages can be found in the table below:
Image | DESK-MX6UL-L version 4.2.1 | |
---|---|---|
SD card image | rootfs packages list | |
devel AxelULite | desk-image-devel.bz2 | image-devel_installed-packages.txt |
qt6 FB AxelULite | desk-image-qt6-fb.bz2 | image-qt6-fb_installed-packages.txt |
devel RIALTO SBC | desk-image-devel.bz2 | image-devel_installed-packages.txt |
DESK-MX6UL-L 4.1.0[edit | edit source]
Release notes:
- drop support for Lynx platform
- introduced KAS support for building system
- update to NXP lf-5.15.71-2.2.2
- remove some kernel runtime warnings/error
Known Issues[edit | edit source]
The limitations are the same of DESK-MX6UL-L-4.0.0
Downloadable binary images[edit | edit source]
All binary images for DESK-MX6UL-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.
U-Boot performs 2-stage bootloader providing two files: SPL
and u-boot.img
. Both two files must be stored into SD card using dd
command.
A summary of images with a brief description can be found into the table below:
Image | DESK-MX6UL-L 4.1.0 | |
---|---|---|
Platform | SDV04 - SDV0400011C2R | |
Carrier Board ConfigID | 003a | |
LCD panel | Ampire 800 x 480 7" LVDS 262K colors | |
SPL | SPL | |
u-boot.img | u-boot.img | |
Linux kernel | uImage | |
Device tree | imx6ul-axelulite-cb003a.dtb | |
root file system | dave-image-devel-desk-mx6ul-axelulite |
Yocto images and built-in packages[edit | edit source]
Yocto target images for DESK-MX6UL-L are hosted on DAVE Embedded System mirror server. There are more build targets which include a list of built and installed packages in the root file system image.
A summary of built images and their included packages can be found in the table below:
Image | DESK-MX6UL-L version 4.1.0 | |
---|---|---|
root file system | packages list | |
devel | desk-image-devel.bz2 | image-devel_installed-packages.txt |
qt6 fb | desk-image-qt6-fb.bz2 | image-qt6-fb_installed-packages.txt |
DESK-MX6UL-L 4.0.1[edit | edit source]
Release notes:
- Minor change to DESK-MX6UL-L-4.0.0
- add missing
linuxfb
platform for iMX6UL - add missing fonts and Qt6 examples
Known Issues[edit | edit source]
The limitations are the same of DESK-MX6UL-L-4.0.0
Downloadable binary images[edit | edit source]
All binary images for DESK-MX6UL-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.
U-Boot performs 2-stage bootloader providing two files: SPL
and u-boot.img
. Both two files must be stored into SD card using dd
command.
A summary of images with a brief description can be found into the table below:
Image | DESK-MX6UL-L 4.0.1 | |
---|---|---|
Platform | SDV04 - SDV0400011C2R | SBC Lynx - SXUB4000I3R |
Carrier Board ConfigID | 003a | 002f |
LCD panel | Ampire 800 x 480 7" LVDS 262K colors | N.A. |
SPL | SPL | SPL |
u-boot.img | u-boot.img | u-boot.img |
Linux kernel | uImage | |
Device tree | imx6ul-axelulite-cb003a.dtb | imx6ul-lynx-som0013-cb002f.dtb |
root file system | dave-image-devel-desk-mx6ul-axelulite | dave-image-devel-desk-mx6ul-lynx |
DESK-MX6UL-L 4.0.0[edit | edit source]
New MVM must be installed for using |
Release notes:
- Major change to NXP BSP 5.15.71
- Updated U-Boot and kernel versions
- Updated Yocto version
- Updated Qt version
Known Issues[edit | edit source]
The following table reports the known limitations of this DESK release:
Issue | Description |
---|---|
Linux kernel xconfig
|
make xconfig does not work
|
Downloadable binary images[edit | edit source]
All binary images for DESK-MX6UL-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.
U-Boot performs 2-stage bootloader providing two files: SPL
and u-boot.img
. Both two files must be stored into SD card using dd
command.
A summary of images with a brief description can be found into the table below:
Image | DESK-MX6UL-L 4.0.0 | |
---|---|---|
Platform | SDV04 - SDV0400011C2R | SBC Lynx - SXUB4000I3R |
Carrier Board ConfigID | 003a | 002f |
LCD panel | Ampire 800 x 480 7" LVDS 262K colors | N.A. |
SPL | SPL | SPL |
u-boot.img | u-boot.img | u-boot.img |
Linux kernel | uImage | |
Device tree | imx6ul-axelulite-cb003a.dtb | imx6ul-lynx-som0013-cb002f.dtb |
root file system | dave-image-devel |
DESK-MX6UL-L 3.0.0[edit | edit source]
New MVM must be installed for using |
Release notes:
- Major change to NXP BSP 5.10.35
- Updated U-Boot and kernel versions
- Updated Yocto version
- Updated Qt version
Known Issues[edit | edit source]
The following table reports the known limitations of this DESK release:
Issue | Description |
---|---|
Qt5 linuxfb not working | platform linuxfb is not present on desk-image-qt5 image target
|
Linux kernel xconfig
|
make xconfig does not work
|
Downloadable binary images[edit | edit source]
All binary images for DESK-MX6UL-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.
U-Boot performs 2-stage bootloader providing two files: SPL
and u-boot.img
. Both two files must be stored into SD card using dd
command.
A summary of images with a brief description can be found into the table below:
Image | DESK-MX6UL-L 3.0.0 | |
---|---|---|
Platform | SDV04 - SDV0400011C2R | SBC Lynx - SXUB4000I3R |
Carrier Board ConfigID | 003a | 002f |
LCD panel | Ampire 800 x 480 7" LVDS 262K colors | N.A. |
SPL | SPL | SPL |
u-boot.img | u-boot.img | u-boot.img |
Linux kernel | uImage | |
Device tree | imx6ul-axelulite-cb003a.dtb | imx6ul-lynx-som0013-cb002f.dtb |
root file system | dave-image-devel |
DESK-MX6UL-L 1.0.1[edit | edit source]
New MVM must be installed for using |
Release notes:
- Major change to NXP BSP 4.14.98
- Updated U-Boot and kernel versions
- Updated Yocto version
- Updated Qt version
Known Issues[edit | edit source]
The following table reports the known limitations of this DESK release:
Issue | Description |
---|---|
Qt5 linuxfb not working | platform linuxfb is not present on desk-image-qt5 image target
|
Linux kernel xconfig
|
make xconfig does not work
|
Downloadable binary images[edit | edit source]
All binary images for DESK-MX6UL-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.
U-Boot performs 2-stage bootloader providing two files: SPL
and u-boot.img
. Both two files must be stored into SD card using dd
command.
A summary of images with a brief description can be found into the table below:
Image | DESK-MX6UL-L 1.0.1 | |
---|---|---|
Platform | SDV04 - SDV0400011C2R | SBC Lynx - SXUB4000I3R |
Carrier Board ConfigID | 003a | 002f |
LCD panel | Ampire 800 x 480 7" LVDS 262K colors | N.A. |
bootscript | boot.scr | |
SPL | SPL | SPL |
u-boot.img | u-boot.img | u-boot.img |
Linux kernel | uImage | |
Device tree | imx6ul-axelulite-cb003a.dtb | imx6ul-lynx-som0013-cb002f.dtb |
root file system | dave-image-devel |
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 Lynx | Single Board Computer using the i.MX6UL SOC |
SDV04 | Single Board Computer using AXEL_ULite SOM as Evaluation Kit |
Virtual Machine[edit | edit source]
DESK-MX6UL-L contains all the required software and documentation to start developing Linux application on the AXEL ULite platform. In particular, DESK-MX6UL-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
/srv/tftp/
- NFS: configured through the
/etc/exports
file
- TFTP: with base directory
- secondary 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 AXEL ULite 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 AXEL ULite SOM.
Guest Addictions[edit | edit source]
Guest Addictions installation may fail if the VirtualBox version is different from the VM linux kernel version.
In case of VBox error message:
Error: kernel headers not found
as suggested here, install the correct kernel header using the following command:
sudo apt-get install linux-headers-`uname -r`
and the run the Guest Addictions install
dvdk@vagrant:/media/dvdk/VBox_GAs_6.1.18$ sudo ./VBoxLinuxAdditions.run Verifying archive integrity... All good. Uncompressing VirtualBox 6.1.18 Guest Additions for Linux........ VirtualBox Guest Additions installer Removing installed version 6.1.16 of VirtualBox Guest Additions... update-initramfs: Generating /boot/initrd.img-4.4.0-197-generic Copying additional installer modules ... Installing additional modules ... VirtualBox Guest Additions: Starting. VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules. This may take a while. VirtualBox Guest Additions: To build modules for other installed kernels, run VirtualBox Guest Additions: /sbin/rcvboxadd quicksetup <version> VirtualBox Guest Additions: or VirtualBox Guest Additions: /sbin/rcvboxadd quicksetup all VirtualBox Guest Additions: Building the modules for kernel 4.4.0-197-generic. update-initramfs: Generating /boot/initrd.img-4.4.0-197-generic W: mdadm: /etc/mdadm/mdadm.conf defines no arrays. VirtualBox Guest Additions: Running kernel modules will not be replaced until the system is restarted dvdk@vagrant:/media/dvdk/VBox_GAs_6.1.18$
Host setup[edit | edit source]
Since your OS, where VirtualBox is running, can be different compared to the version that we using, in case of an error we suggest updating VirtualBox to the latest release patch. For example, if we used |
As stated previously, AXEL ULite SOM host tools are based on a Managed Virtual Machine, we used virtualbox-6.1_6.1.18-142142
to perform virtual machine. MVM OVA files can be downloaded here. For accessing DESK Reserved area please contact our helpdesk support channel
To install it, please refer to this page.
It is worth remembering that access to git repositories is required to download target source code. To enable it, please refer to this page.
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.
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:
- OTPs
- example: AXEL family processor (i.MX6) implements ConfigID using processor's OTP
- AXEL uses GP1 eFuse register to store ConfigID
- NOR Flash SPI
- example: DIVA family processor (AM335x) implements ConfigID using NOR SPI (if present)
- DIVA and BORA use the first 32bytes OTP block on NOR SPI to store ConfigID (and its CRC32), UniqueID (and its CRC32)
- I2C Eeprom
- 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)
- DIVA and BORA Lite use the first 32bytes on I2C EPROM to store ConfigID (and its CRC32), UniqueID (and its CRC32)
- 1-wire
- 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.
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:
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:
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-MX6UL-L Linux Kit.
AXEL ULite[edit | edit source]
As AXEL ULite 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#: 00000014 SOM UniqueID#: ee6ac309:171411d4 CB ConfigID#: 0000003a CB UniqueID#: 00000000:00000000 Board: MX6UL AXEL ULite rev.A on SDV04 ...
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.
NXP silicon manufacturer guarantees that processors UIDs (a.k.a. SOM UniqueID# on DESK-MX6UL-L) to be unique over the whole MX6UL 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-MX6UL-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-MX6UL-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
)
=> setenv serverip 192.168.0.125 => setenv ipaddr 192.168.0.90
serverip
is the IP address of the host machine running the tftp/nfs serveripaddr
is the IP address of the target
The kernel and device tree files has to be selected
=> setenv bootfile desk-mx-l/uImage => setenv fdtfile desk-mx-l/imx6ul-lynx-som0013-cb002f.dtb
finally, the root file system directory on the Virtual Machine should be configured for let the kernel to find the INIT
=> setenv rootpath /home/dvdk/desk-mx-l/rfs/desk-mx6ul-l/
To run this configuration just issue the net_nfs command which firstly download the kernel and device tree using the tftp protocol
U-Boot SPL 2022.04-desk-mx6ul-l-4.0.0 (Apr 14 2023 - 10:13:15 +0200) SOM ConfigID#: 00000014 Trying to boot from MMC1 U-Boot 2022.04-desk-mx6ul-l-4.0.0 (Apr 14 2023 - 10:13:15 +0200) CPU: Freescale i.MX6UL rev1.2 528 MHz (running at 396 MHz) CPU: Industrial temperature grade (-40C to 105C) at 58C Reset cause: WDOG I2C: ready DRAM: 256 MiB Relocating to 8ff57000, new gd at 8fb56ec0, sp at 8fb56ea0 Core: 2 devices, 2 uclasses PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11 NAND: 128 MiB MMC: FSL_SDHC: 0 Loading Environment from MMC... *** Warning - bad CRC, using default environment No panel detected: default to MI0700AJT-30 Display: MI0700AJT-30 (800x480) Video: 800x480x18 In: serial Out: serial Err: serial switch to partitions #0, OK mmc0 is current device (SD) SOM ConfigID#: 00000014 SOM UniqueID#: ee6ac309:2f3211d4 CB ConfigID#: 0000003a CB UniqueID#: 00000000:00000000 Board: MX6UL AXEL ULite rev.A on SDV04 Net: FEC0 Warning: FEC0 (eth0) using random MAC address - 12:bd:8b:55:c9:fd Normal Boot Hit any key to stop autoboot: 3 ��� 0 => run net_nfs Using FEC0 device TFTP from server 192.168.0.125; our IP address is 192.168.0.90 Filename 'desk-mx6ul-l/uImage'. Load address: 0x80800000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ###### 1.9 MiB/s done Bytes transferred = 8016520 (7a5288 hex) Using FEC0 device TFTP from server 192.168.0.167; our IP address is 192.168.0.165 Filename 'desk-mx6ul-l/imx6ul-axelulite-cb003a.dtb'. Load address: 0x83000000 Loading: ####### 1.5 MiB/s done Bytes transferred = 32964 (80c4 hex) FDT: override 'som_uniqueid' with 'ee6ac309:2f3211d4' FDT: override 'cb_uniqueid' with '00000000:00000000' ## Booting kernel from Legacy Image at 80800000 ... Image Name: Linux-5.15.71-desk-mx6ul-l-4.0.0 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 8016456 Bytes = 7.6 MiB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK ## Flattened Device Tree blob at 83000000 Booting using the fdt blob at 0x83000000 Loading Kernel Image Using Device Tree in place at 83000000, end 8300bfff Starting kernel ... [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.15.71-desk-mx6ul-l-4.0.0 (jenkins@focalbakery) (arm-poky-linux-gnueabi-gcc (GCC) 11.3.0, GNU ld (GNU Binutils) 2.38.20220708) #1 SMP PREEMPT Mon Apr 3 18:11:32 CEST 2023 [ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d [ 0.000000] CPU: div instructions available: patching division code [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] OF: fdt: Machine model: AxelULite on SFCZG [ 0.000000] Memory policy: Data cache writealloc [ 0.000000] Zone ranges: [ 0.000000] Normal [mem 0x0000000080000000-0x000000008fffffff] [ 0.000000] HighMem empty [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000080000000-0x000000008fffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x000000008fffffff] [ 0.000000] percpu: Embedded 12 pages/cpu s17036 r8192 d23924 u49152 [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 65024 [ 0.000000] Kernel command line: root=/dev/nfs rw nfsroot=192.168.0.167:/home/dvdk/desk-mx-l/rfs/desk-mx6ul-l,v3,tcp ip=192.168.0.165:192.168.0.167::255.255.255.0:lynx:eth0:off panic=1 fec_mac=12:bd:8b:55:c9:fd console=ttymxc0,115200 vmalloc=400M mtdparts=gpmi-nand:2M(nand-SPL),6M(nand-uboot),1M(nand-env1),1M(nand-env2),1M(nand-fdt),1M(nand-spare),8M(nand-kernel),4M(nand-splash),-(nand-ubi);spi0.0:64k(spi-SPL),960k(spi-uboot),256k(spi-env1),256k(spi-env2),512k(spi-dtb),8M(spi-kernel),4M(spi-splash),-(spi-free) [ 0.000000] Unknown kernel command line parameters "fec_mac=12:bd:8b:55:c9:fd", will be passed to user space. [ 0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes, linear) [ 0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes, linear) [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] Memory: 241540K/262144K available (12288K kernel code, 1353K rwdata, 2332K rodata, 1024K init, 407K bss, 20604K reserved, 0K cma-reserved, 0K highmem) [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, 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=4 to nr_cpu_ids=1. [ 0.000000] Trampoline variant of Tasks RCU enabled. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies. [ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1 [ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 [ 0.000000] Switching to timer-based delay loop, resolution 41ns [ 0.000003] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns [ 0.000056] clocksource: mxc_timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns [ 0.002940] Console: colour dummy device 80x30 [ 0.003055] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000) [ 0.003114] pid_max: default: 32768 minimum: 301 [ 0.003496] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.003561] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.005206] CPU: Testing write buffer coherency: ok [ 0.005901] CPU0: update cpu_capacity 1024 [ 0.005957] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000 [ 0.008385] Setting up static identity map for 0x80100000 - 0x80100060 [ 0.008814] rcu: Hierarchical SRCU implementation. [ 0.011506] smp: Bringing up secondary CPUs ... [ 0.011557] smp: Brought up 1 node, 1 CPU [ 0.011592] SMP: Total of 1 processors activated (48.00 BogoMIPS). [ 0.011623] CPU: All CPU(s) started in SVC mode. [ 0.012672] devtmpfs: initialized [ 0.025295] Duplicate name in lcdif@21c8000, renamed to "display#1" [ 0.029731] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5 [ 0.030464] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.030541] futex hash table entries: 256 (order: 2, 16384 bytes, linear) [ 0.030796] pinctrl core: initialized pinctrl subsystem [ 0.034466] NET: Registered PF_NETLINK/PF_ROUTE protocol family [ 0.035249] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.038239] thermal_sys: Registered thermal governor 'step_wise' [ 0.038271] thermal_sys: Registered thermal governor 'user_space' [ 0.039142] cpuidle: using governor menu [ 0.039595] CPU identified as i.MX6UL, silicon rev 1.2 [ 0.039637] Use WDOG1 as reset source [ 0.067130] vdd3p0: supplied by regulator-dummy [ 0.068251] cpu: supplied by regulator-dummy [ 0.069846] vddsoc: supplied by regulator-dummy [ 0.104132] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers. [ 0.104200] hw-breakpoint: maximum watchpoint size is 8 bytes. [ 0.107255] imx6ul-pinctrl 20e0000.pinctrl: initialized IMX pinctrl driver [ 0.110386] imx mu driver is registered. [ 0.111452] imx rpmsg driver is registered. [ 0.195510] vgaarb: loaded [ 0.196988] SCSI subsystem initialized [ 0.198278] usbcore: registered new interface driver usbfs [ 0.198431] usbcore: registered new interface driver hub [ 0.198569] usbcore: registered new device driver usb [ 0.201260] i2c i2c-0: IMX I2C adapter registered [ 0.203230] i2c i2c-1: IMX I2C adapter registered [ 0.204124] mc: Linux media interface: v0.10 [ 0.204248] videodev: Linux video capture interface: v2.00 [ 0.204463] pps_core: LinuxPPS API ver. 1 registered [ 0.204496] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it> [ 0.204559] PTP clock support registered [ 0.206556] MIPI CSI2 driver module loaded [ 0.206704] Advanced Linux Sound Architecture Driver Initialized. [ 0.208560] Bluetooth: Core ver 2.22 [ 0.208720] NET: Registered PF_BLUETOOTH protocol family [ 0.208750] Bluetooth: HCI device and connection manager initialized [ 0.208805] Bluetooth: HCI socket layer initialized [ 0.208840] Bluetooth: L2CAP socket layer initialized [ 0.208945] Bluetooth: SCO socket layer initialized [ 0.210477] clocksource: Switched to clocksource mxc_timer1 [ 0.210925] VFS: Disk quotas dquot_6.6.0 [ 0.211118] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.233278] NET: Registered PF_INET protocol family [ 0.233839] IP idents hash table entries: 4096 (order: 3, 32768 bytes, linear) [ 0.235590] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear) [ 0.235700] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear) [ 0.235747] TCP established hash table entries: 2048 (order: 1, 8192 bytes, linear) [ 0.235829] TCP bind hash table entries: 2048 (order: 2, 16384 bytes, linear) [ 0.235936] TCP: Hash tables configured (established 2048 bind 2048) [ 0.236145] UDP hash table entries: 256 (order: 1, 8192 bytes, linear) [ 0.236232] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear) [ 0.236660] NET: Registered PF_UNIX/PF_LOCAL protocol family [ 0.238380] RPC: Registered named UNIX socket transport module. [ 0.238438] RPC: Registered udp transport module. [ 0.238466] RPC: Registered tcp transport module. [ 0.238491] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 0.240914] PCI: CLS 0 bytes, default 64 [ 0.242146] hw perfevents: enabled with armv7_cortex_a7 PMU driver, 5 counters available [ 0.245880] Bus freq driver module loaded [ 0.248247] Initialise system trusted keyrings [ 0.249569] workingset: timestamp_bits=30 max_order=16 bucket_order=0 [ 0.263190] NFS: Registering the id_resolver key type [ 0.263347] Key type id_resolver registered [ 0.263378] Key type id_legacy registered [ 0.263496] ntfs: driver 2.1.32 [Flags: R/W]. [ 0.264336] fuse: init (API version 7.34) [ 0.497238] Key type asymmetric registered [ 0.497298] Asymmetric key parser 'x509' registered [ 0.497468] io scheduler mq-deadline registered [ 0.497506] io scheduler kyber registered [ 0.512527] imx-sdma 20ec000.sdma: Direct firmware load for imx/sdma/sdma-imx6q.bin failed with error -2 [ 0.512600] imx-sdma 20ec000.sdma: Falling back to sysfs fallback for: imx/sdma/sdma-imx6q.bin [ 0.517038] mxs-dma 1804000.dma-apbh: initialized [ 0.527760] pfuze100-regulator 0-0008: Full layer: 1, Metal layer: 1 [ 0.528598] pfuze100-regulator 0-0008: FAB: 0, FIN: 0 [ 0.528644] pfuze100-regulator 0-0008: pfuze3000 found. [ 0.556142] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled [ 0.561409] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 30, base_baud = 5000000) is a IMX [ 1.351768] printk: console [ttymxc0] enabled [ 1.358703] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 65, base_baud = 5000000) is a IMX [ 1.371437] imx sema4 driver is registered. [ 1.401639] brd: module loaded [ 1.421792] loop: module loaded [ 1.426809] imx ahci driver is registered. [ 1.436066] nand: device found, Manufacturer ID: 0xef, Chip ID: 0xf1 [ 1.442574] nand: Winbond W29N01HV [ 1.446004] nand: 128 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 [ 1.454321] Scanning device for bad blocks [ 1.562971] 9 cmdlinepart partitions found on MTD device gpmi-nand [ 1.569208] Creating 9 MTD partitions on "gpmi-nand": [ 1.574349] 0x000000000000-0x000000200000 : "nand-SPL" [ 1.583269] 0x000000200000-0x000000800000 : "nand-uboot" [ 1.592447] 0x000000800000-0x000000900000 : "nand-env1" [ 1.601383] 0x000000900000-0x000000a00000 : "nand-env2" [ 1.610260] 0x000000a00000-0x000000b00000 : "nand-fdt" [ 1.619181] 0x000000b00000-0x000000c00000 : "nand-spare" [ 1.628426] 0x000000c00000-0x000001400000 : "nand-kernel" [ 1.637659] 0x000001400000-0x000001800000 : "nand-splash" [ 1.646905] 0x000001800000-0x000008000000 : "nand-ubi" [ 1.656711] gpmi-nand 1806000.nand-controller: driver registered. [ 1.664474] SPI driver spidev has no spi_device_id for spidev [ 1.672200] spinor@0 enforce active low on chipselect handle [ 1.681402] spi-nor spi0.0: is25lp128 (16384 Kbytes) [ 1.686458] 8 cmdlinepart partitions found on MTD device spi0.0 [ 1.692531] Creating 8 MTD partitions on "spi0.0": [ 1.697362] 0x000000000000-0x000000010000 : "spi-SPL" [ 1.706315] 0x000000010000-0x000000100000 : "spi-uboot" [ 1.715406] 0x000000100000-0x000000140000 : "spi-env1" [ 1.724389] 0x000000140000-0x000000180000 : "spi-env2" [ 1.733394] 0x000000180000-0x000000200000 : "spi-dtb" [ 1.742250] 0x000000200000-0x000000a00000 : "spi-kernel" [ 1.751430] 0x000000a00000-0x000000e00000 : "spi-splash" [ 1.760849] 0x000000e00000-0x000001000000 : "spi-free" [ 1.775112] CAN device driver interface [ 1.783237] pps pps0: new PPS source ptp0 [ 1.793611] fec 2188000.ethernet eth0: registered PHC device 0 [ 1.802098] usbcore: registered new interface driver asix [ 1.807657] usbcore: registered new interface driver ax88179_178a [ 1.814196] usbcore: registered new interface driver cdc_ether [ 1.820193] usbcore: registered new interface driver cdc_eem [ 1.826165] usbcore: registered new interface driver net1080 [ 1.832060] usbcore: registered new interface driver cdc_subset [ 1.838095] usbcore: registered new interface driver zaurus [ 1.844061] usbcore: registered new interface driver cdc_ncm [ 1.849846] usbcore: registered new interface driver cdc_mbim [ 1.855875] usbcore: registered new interface driver r8153_ecm [ 1.861821] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.868428] ehci-pci: EHCI PCI platform driver [ 1.873300] usbcore: registered new interface driver cdc_wdm [ 1.879123] usbcore: registered new interface driver usb-storage [ 1.894801] snvs_rtc 20cc000.snvs:snvs-rtc-lp: registered as rtc0 [ 1.901156] snvs_rtc 20cc000.snvs:snvs-rtc-lp: setting system clock to 1970-01-01T00:08:16 UTC (496) [ 1.910853] i2c_dev: i2c /dev entries driver [ 1.917875] pwm-backlight backlight: supply power not found, using dummy regulator [ 1.933187] mxsfb 21c8000.lcdif: supply lcd not found, using dummy regulator [ 2.031501] sii902x bound to mxs-lcdif from 21c8000.lcdif [ 2.360531] mxsfb 21c8000.lcdif: initialized [ 2.367599] pxp-v4l2 pxp_v4l2: initialized [ 2.375281] Bluetooth: HCI UART driver ver 2.3 [ 2.379781] Bluetooth: HCI UART protocol H4 registered [ 2.385053] Bluetooth: HCI UART protocol BCSP registered [ 2.390527] Bluetooth: HCI UART protocol LL registered [ 2.396675] sdhci: Secure Digital Host Controller Interface driver [ 2.402978] sdhci: Copyright(c) Pierre Ossman [ 2.407357] sdhci-pltfm: SDHCI platform and OF driver helper [ 2.415527] sdhci-esdhc-imx 2190000.mmc: Got CD GPIO [ 2.424029] caam 2140000.crypto: Entropy delay = 3200 [ 2.441655] caam 2140000.crypto: Instantiated RNG4 SH0 [ 2.454128] caam 2140000.crypto: Instantiated RNG4 SH1 [ 2.459322] caam 2140000.crypto: device ID = 0x0a16030000000000 (Era 8) [ 2.466378] caam 2140000.crypto: job rings = 3, qi = 0 [ 2.471959] mmc0: SDHCI controller on 2190000.mmc [2190000.mmc] using ADMA [ 2.514454] caam algorithms registered in /proc/crypto [ 2.522658] mmc0: host does not support reading read-only switch, assuming write-enable [ 2.535086] caam 2140000.crypto: caam pkc algorithms registered in /proc/crypto [ 2.543250] mmc0: new high speed SDHC card at address aaaa [ 2.550792] mmcblk0: mmc0:aaaa SA32G 29.7 GiB [ 2.556994] caam 2140000.crypto: rng crypto API alg registered prng-caam [ 2.566576] caam 2140000.crypto: registering rng-caam [ 2.572162] mmcblk0: p1 p2 [ 2.579021] Device caam-keygen registered [ 2.591251] caam-snvs 20cc000.caam-snvs: violation handlers armed - non-secure state [ 2.600369] usbcore: registered new interface driver usbhid [ 2.606441] usbhid: USB HID core driver [ 2.613201] random: crng init done [ 2.631392] NET: Registered PF_INET6 protocol family [ 2.639064] Segment Routing with IPv6 [ 2.643116] In-situ OAM (IOAM) with IPv6 [ 2.647271] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver [ 2.654938] NET: Registered PF_PACKET protocol family [ 2.660072] can: controller area network core [ 2.664822] NET: Registered PF_CAN protocol family [ 2.669658] can: raw protocol [ 2.672817] can: broadcast manager protocol [ 2.677053] can: netlink gateway - max_hops=1 [ 2.682148] Bluetooth: RFCOMM TTY layer initialized [ 2.687108] Bluetooth: RFCOMM socket layer initialized [ 2.692597] Bluetooth: RFCOMM ver 1.11 [ 2.696443] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 2.701937] Bluetooth: BNEP filters: protocol multicast [ 2.707221] Bluetooth: BNEP socket layer initialized [ 2.712261] Bluetooth: HIDP (Human Interface Emulation) ver 1.2 [ 2.718221] Bluetooth: HIDP socket layer initialized [ 2.723364] 8021q: 802.1Q VLAN Support v1.8 [ 2.727620] lib80211: common routines for IEEE802.11 drivers [ 2.733983] Key type dns_resolver registered [ 2.764709] Registering SWP/SWPB emulation handler [ 2.770398] Loading compiled-in X.509 certificates [ 2.822772] ci_hdrc ci_hdrc.0: EHCI Host Controller [ 2.827751] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1 [ 2.860763] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00 [ 2.867185] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15 [ 2.875925] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 2.883520] usb usb1: Product: EHCI Host Controller [ 2.888423] usb usb1: Manufacturer: Linux 5.15.71-desk-mx6ul-l-4.0.0 ehci_hcd [ 2.895627] usb usb1: SerialNumber: ci_hdrc.0 [ 2.901330] hub 1-0:1.0: USB hub found [ 2.905212] hub 1-0:1.0: 1 port detected [ 2.916959] ci_hdrc ci_hdrc.1: EHCI Host Controller [ 2.922094] ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 2 [ 2.950560] ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00 [ 2.956510] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15 [ 2.964895] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 2.972186] usb usb2: Product: EHCI Host Controller [ 2.977083] usb usb2: Manufacturer: Linux 5.15.71-desk-mx6ul-l-4.0.0 ehci_hcd [ 2.984288] usb usb2: SerialNumber: ci_hdrc.1 [ 2.989889] hub 2-0:1.0: USB hub found [ 2.993924] hub 2-0:1.0: 1 port detected [ 3.001639] imx_thermal 20c8000.anatop:tempmon: Industrial CPU temperature grade - max:105C critical:100C passive:95C [ 3.015050] input: gpio-power-fail as /devices/platform/gpio-power-fail/input/input0 [ 3.103349] Micrel KSZ8081 or KSZ8091 2188000.ethernet-1:03: attached PHY driver (mii_bus:phy_addr=2188000.ethernet-1:03, irq=POLL) [ 6.251258] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx [ 6.259389] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 6.280651] IP-Config: Complete: [ 6.283964] device=eth0, hwaddr=12:bd:8b:55:c9:fd, ipaddr=192.168.0.165, mask=255.255.255.0, gw=255.255.255.255 [ 6.295060] host=lynx, domain=, nis-domain=(none) [ 6.300335] bootserver=192.168.0.167, rootserver=192.168.0.167, rootpath= [ 6.301393] cfg80211: Loading compiled-in X.509 certificates for regulatory database [ 6.322125] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7' [ 6.328965] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2 [ 6.338227] ALSA device list: [ 6.341409] No soundcards found. [ 6.346528] platform regulatory.0: Falling back to sysfs fallback for: regulatory.db [ 6.422692] VFS: Mounted root (nfs filesystem) on device 0:13. [ 6.430250] devtmpfs: mounted [ 6.436107] Freeing unused kernel image (initmem) memory: 1024K [ 6.451127] Run /sbin/init as init process [ 7.321198] systemd[1]: System time before build time, advancing clock. [ 7.402408] systemd[1]: systemd 250.5+ 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 -BZIP2 -LZ4 -XZ -ZLIB +ZSTD -BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=hybrid) [ 7.435349] systemd[1]: Detected architecture arm. Welcome to NXP i.MX Release Distro 5.15-kirkstone (kirkstone)! [ 7.496555] systemd[1]: Hostname set to <desk-mx6ul-axelulite>. [ 7.518512] systemd[1]: Initializing machine ID from random generator. [ 8.134086] systemd[159]: /lib/systemd/system-generators/systemd-gpt-auto-generator failed with exit status 1. [ 8.157430] systemd-sysv-generator[168]: SysV service '/etc/init.d/single' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.189714] systemd-sysv-generator[168]: SysV service '/etc/init.d/halt' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.241994] systemd-sysv-generator[168]: SysV service '/etc/init.d/sendsigs' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.270763] systemd-sysv-generator[168]: SysV service '/etc/init.d/umountfs' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.311128] systemd-sysv-generator[168]: SysV service '/etc/init.d/alignment.sh' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.350093] systemd-sysv-generator[168]: SysV service '/etc/init.d/reboot' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.382027] systemd-sysv-generator[168]: SysV service '/etc/init.d/umountnfs.sh' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.410658] systemd-sysv-generator[168]: SysV service '/etc/init.d/save-rtc.sh' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 10.404113] systemd[1]: Queued start job for default target Multi-User System. [ 10.418814] systemd[1]: Created slice Slice /system/getty. [ OK ] Created slice Slice /system/getty. [ 10.463702] systemd[1]: Created slice Slice /system/modprobe. [ OK ] Created slice Slice /system/modprobe. [ 10.503539] systemd[1]: Created slice Slice /system/serial-getty. [ OK ] Created slice Slice /system/serial-getty. [ 10.542401] systemd[1]: Created slice User and Session Slice. [ OK ] Created slice User and Session Slice. [ 10.581713] systemd[1]: Started Dispatch Password Requests to Console Directory Watch. [ OK ] Started Dispatch Password …ts to Console Directory Watch. [ 10.621727] systemd[1]: Started Forward Password Requests to Wall Directory Watch. [ OK ] Started Forward Password R…uests to Wall Directory Watch. [ 10.661786] systemd[1]: Reached target Path Units. [ OK ] Reached target Path Units. [ 10.691117] systemd[1]: Reached target Remote File Systems. [ OK ] Reached target Remote File Systems. [ 10.731065] systemd[1]: Reached target Slice Units. [ OK ] Reached target Slice Units. [ 10.761209] systemd[1]: Reached target Swaps. [ OK ] Reached target Swaps. [ 10.797029] systemd[1]: Listening on RPCbind Server Activation Socket. [ OK ] Listening on RPCbind Server Activation Socket. [ 10.831138] systemd[1]: Reached target RPC Port Mapper. [ OK ] Reached target RPC Port Mapper. [ 10.878019] systemd[1]: Listening on Syslog Socket. [ OK ] Listening on Syslog Socket. [ 10.911798] systemd[1]: Listening on initctl Compatibility Named Pipe. [ OK ] Listening on initctl Compatibility Named Pipe. [ 11.065417] systemd[1]: Journal Audit Socket was skipped because of a failed condition check (ConditionSecurity=audit). [ 11.080009] systemd[1]: Listening on Journal Socket (/dev/log). [ OK ] Listening on Journal Socket (/dev/log). [ 11.123853] systemd[1]: Listening on Journal Socket. [ OK ] Listening on Journal Socket. [ 11.165305] systemd[1]: Listening on Network Service Netlink Socket. [ OK ] Listening on Network Service Netlink Socket. [ 11.209587] systemd[1]: Listening on udev Control Socket. [ OK ] Listening on udev Control Socket. [ 11.254725] systemd[1]: Listening on udev Kernel Socket. [ OK ] Listening on udev Kernel Socket. [ 11.296977] systemd[1]: Listening on User Database Manager Socket. [ OK ] Listening on User Database Manager Socket. [ 11.334158] systemd[1]: Huge Pages File System was skipped because of a failed condition check (ConditionPathExists=/sys/kernel/mm/hugepages). [ 11.350012] systemd[1]: POSIX Message Queue File System was skipped because of a failed condition check (ConditionPathExists=/proc/sys/fs/mqueue). [ 11.376329] systemd[1]: Mounting Kernel Debug File System... Mounting Kernel Debug File System... [ 11.422770] systemd[1]: Kernel Trace File System was skipped because of a failed condition check (ConditionPathExists=/sys/kernel/tracing). [ 11.465477] systemd[1]: Mounting Temporary Directory /tmp... Mounting Temporary Directory /tmp... [ 11.503822] systemd[1]: Create List of Static Device Nodes was skipped because of a failed condition check (ConditionFileNotEmpty=/lib/modules/5.15.71-desk-mx6ul-l-4.0.0/modules.devname). [ 11.529298] systemd[1]: Starting Load Kernel Module configfs... Starting Load Kernel Module configfs... [ 11.578800] systemd[1]: Starting Load Kernel Module drm... Starting Load Kernel Module drm... [ 11.621669] systemd[1]: Starting Load Kernel Module fuse... Starting Load Kernel Module fuse... [ 11.681748] systemd[1]: Starting RPC Bind... Starting RPC Bind... [ 11.724991] systemd[1]: File System Check on Root Device was skipped because of a failed condition check (ConditionPathIsReadWrite=!/). [ 11.748030] systemd[1]: systemd-journald.service: unit configures an IP firewall, but the local system does not support BPF/cgroup firewalling. [ 11.762009] systemd[1]: (This warning is only shown for the first unit using IP firewalling.) [ 11.794737] systemd[1]: Starting Journal Service... Starting Journal Service... [ 11.881169] systemd[1]: Load Kernel Modules was skipped because all trigger condition checks failed. [ 11.960921] systemd[1]: Starting Generate network units from Kernel command line... Starting Generate network …ts from Kernel command line... [ 12.035818] systemd[1]: Starting Remount Root and Kernel File Systems... Starting Remount Root and Kernel File Systems... [ 12.132462] systemd[1]: Starting Apply Kernel Variables... Starting Apply Kernel Variables... [ 12.198301] systemd[1]: Starting Coldplug All udev Devices... Starting Coldplug All udev Devices... [ 12.394088] systemd[1]: Started RPC Bind. [ OK ] Started RPC Bind. [ 12.497681] systemd[1]: Mounted Kernel Debug File System. [ OK ] Mounted Kernel Debug File System. [ 12.564197] systemd[1]: Mounted Temporary Directory /tmp. [ OK ] Mounted Temporary Directory /tmp. [ 12.605490] systemd[1]: modprobe@configfs.service: Deactivated successfully. [ 12.643402] systemd[1]: Finished Load Kernel Module configfs. [ OK ] Finished Load Kernel Module configfs. [ 12.664641] systemd[1]: modprobe@drm.service: Deactivated successfully. [ 12.702982] systemd[1]: Finished Load Kernel Module drm. [ OK ] Finished Load Kernel Module drm. [ 12.724595] systemd[1]: modprobe@fuse.service: Deactivated successfully. [ 12.763178] systemd[1]: Finished Load Kernel Module fuse. [ OK ] Finished Load Kernel Module fuse. [ 12.803652] systemd[1]: Finished Generate network units from Kernel command line. [ OK ] Finished Generate network units from Kernel command line. [ 12.863898] systemd[1]: Finished Remount Root and Kernel File Systems. [ OK ] Finished Remount Root and Kernel File Systems. [ 12.923922] systemd[1]: Finished Apply Kernel Variables. [ OK ] Finished Apply Kernel Variables. [ 12.981956] systemd[1]: Mounting FUSE Control File System... Mounting FUSE Control File System... [ 13.038665] systemd[1]: Mounting Kernel Configuration File System... Mounting Kernel Configuration File System... [ 13.133432] systemd[1]: Rebuild Hardware Database was skipped because all trigger condition checks failed. [ 13.171701] systemd[1]: Platform Persistent Storage Archival was skipped because of a failed condition check (ConditionDirectoryNotEmpty=/sys/fs/pstore). [ 13.245498] systemd[1]: Starting Create System Users... Starting Create System Users... [ 13.366841] systemd[1]: Mounted FUSE Control File System. [ OK ] Mounted FUSE Control File System. [ 13.432182] systemd[1]: Mounted Kernel Configuration File System. [ OK ] Mounted Kernel Configuration File System. [ 13.688577] systemd[1]: Started Journal Service. [ OK ] Started Journal Service. [ OK ] Finished Create System Users. Starting Flush Journal to Persistent Storage... Starting Create Static Device Nodes in /dev... [ 13.993774] systemd-journald[176]: Received client request to flush runtime journal. [ OK ] Finished Flush Journal to Persistent Storage. [ OK ] Finished Create Static Device Nodes in /dev. [ OK ] Reached target Preparation for Local File Systems. Mounting /var/volatile... Starting Rule-based Manage…for Device Events and Files... [ OK ] Mounted /var/volatile. Starting Load/Save Random Seed... [ OK ] Reached target Local File Systems. Starting Rebuild Dynamic Linker Cache... Starting Create Volatile Files and Directories... [ OK ] Finished Load/Save Random Seed. [ OK ] Started Rule-based Manager for Device Events and Files. [ OK ] Finished Create Volatile Files and Directories. Starting Rebuild Journal Catalog... [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Reached target System Time Set. Starting Record System Boot/Shutdown in UTMP... [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Finished Record System Boot/Shutdown in UTMP. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Finished Rebuild Journal Catalog. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Finished Coldplug All udev Devices. [ OK ] Created slice Slice /system/systemd-backlight. Starting Load/Save Screen …ness of backlight:backlight... [ 22.835294] mtdblock: MTD device 'nand-SPL' is NAND, please consider using UBI block devices instead. [ 22.855168] mtdblock: MTD device 'nand-uboot' is NAND, please consider using UBI block devices instead. [ 22.953822] mtdblock: MTD device 'nand-env1' is NAND, please consider using UBI block devices instead. [ 23.066964] mtdblock: MTD device 'nand-env2' is NAND, please consider using UBI block devices instead. [ OK ] Finished Load/Save Screen …htness[ 23.215382] mtdblock: MTD device 'nand-fdt' is NAND, please consider using UBI block devices instead. of backlight:backlight. [ 23.363765] mtdblock: MTD device 'nand-spare' is NAND, please consider using UBI block devices instead. [ 23.471561] mtdblock: MTD device 'nand-kernel' is NAND, please consider using UBI block devices instead. [ 23.551389] mtdblock: MTD device 'nand-splash' is NAND, please consider using UBI block devices instead. [ 23.661672] mtdblock: MTD device 'nand-ubi' is NAND, please consider using UBI block devices instead. [ OK ] Finished Rebuild Dynamic Linker Cache. [ OK ] Listening on Load/Save RF …itch Status /dev/rfkill Watch. 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. [ OK ] Listening on dropbear.socket. [ OK ] Reached target Socket Units. [ OK ] Reached target Basic System. [ OK ] Started Job spooling tools. [ OK ] Started Periodic Command Scheduler. Starting D-Bus System Message Bus... [ OK ] Started Getty on tty1. Starting IPv6 Packet Filtering Framework... Starting IPv4 Packet Filtering Framework... Starting Network Time Service (one-shot ntpdate mode)... Starting Telephony service... [ OK ] Started Serial Getty on ttymxc0. [ OK ] Reached target Login Prompts. [ OK ] Started System Logging Service. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. syslogd[243]: Error opening log file: /var/log/auth.log: No such file or directory syslogd[243]: Error opening log file: /var/log/syslog: No such file or directory syslogd[243]: Error opening log file: /var/log/kern.log: No such file or directory [ OK ] Finished IPv6 Packet Filtering Framework. syslogd[243]: Error opening log file: /var/log/mail.log: No such file or directory syslogd[243]: Error opening log file: /var/log/mail.err: No such file or directory syslogd[243]: Error opening log file: /var/log/messages: No such file or directory [ OK ] Started D-Bus System Message Bus. [ OK ] Finished IPv4 Packet Filtering Framework. [ OK ] Finished Network Time Service (one-shot ntpdate mode). [ OK ] Reached target Preparation for Network. [ OK ] Stopped User Login Management. Starting Load Kernel Module drm... Starting Network Configuration... [ OK ] Started Telephony service. [ OK ] Finished Load Kernel Module drm. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. [ OK ] Stopped User Login Management. 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 ] Stopped User Login Management. 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 ] Stopped User Login Management. 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 ] Stopped User Login Management. Starting Load Kernel Module drm... [ OK ] Started Network Configuration. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Reached target Network. [ OK ] Reached target Host and Network Name Lookups. Starting Avahi mDNS/DNS-SD Stack... [ OK ] Started NFS status monitor for NFSv2/3 locking.. [FAILED] Failed to start Respond to IPv6 Node Information Queries. See 'systemctl status ninfod.service' for details. [FAILED] Failed to start Network Router Discovery Daemon. See 'systemctl status rdisc.service' for details. Starting Target Communication Framework agent... [ OK ] Started Xinetd A Powerful Replacement For Inetd. [ OK ] Finished Load Kernel Module drm. [ OK ] Started Avahi mDNS/DNS-SD Stack. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Started Target Communication Framework agent. [ OK ] Reached target Multi-User System. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. Starting Record Runlevel Change in UTMP... [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Finished Record Runlevel Change in UTMP. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. NXP i.MX Release Distro 5.15-kirkstone desk-mx6ul-axelulite ttymxc0 desk-mx6ul-axelulite login: root root@desk-mx6ul-axelulite:~# uname -a Linux desk-mx6ul-axelulite 5.15.71-desk-mx6ul-l-4.0.0 #1 SMP PREEMPT Mon Apr 3 18:11:32 CEST 2023 armv7l armv7l armv7l GNU/Linux root@desk-mx6ul-axelulite:~# ls -l /lib/modules/$(uname -r) total 296 lrwxrwxrwx 1 541 502 65 Apr 3 2023 build -> /home/jenkins/workspace/workspace/DESK-MX6UL-L-4.x.x_Linux-kernel drwxr-xr-x 6 541 502 4096 Apr 3 2023 kernel -rw-r--r-- 1 541 502 2718 Apr 3 2023 modules.alias -rw-r--r-- 1 541 502 4768 Apr 3 2023 modules.alias.bin -rw-r--r-- 1 541 502 14878 Apr 3 2023 modules.builtin -rw-r--r-- 1 541 502 34704 Apr 3 2023 modules.builtin.alias.bin -rw-r--r-- 1 541 502 17778 Apr 3 2023 modules.builtin.bin -rw-r--r-- 1 541 502 105373 Apr 3 2023 modules.builtin.modinfo -rw-r--r-- 1 541 502 10689 Apr 3 2023 modules.dep -rw-r--r-- 1 541 502 21666 Apr 3 2023 modules.dep.bin -rw-r--r-- 1 541 502 0 Apr 3 2023 modules.devname -rw-r--r-- 1 541 502 8657 Apr 3 2023 modules.order -rw-r--r-- 1 541 502 85 Apr 3 2023 modules.softdep -rw-r--r-- 1 541 502 16970 Apr 3 2023 modules.symbols -rw-r--r-- 1 541 502 23964 Apr 3 2023 modules.symbols.bin lrwxrwxrwx 1 541 502 65 Apr 3 2023 source -> /home/jenkins/workspace/workspace/DESK-MX6UL-L-4.x.x_Linux-kernel root@desk-mx6ul-axelulite:~# reboot root@desk-mx6ul-axelulite:~# [ OK ] Removed slice Slice /system/modprobe. [ OK ] Stopped target Multi-User System. [ OK ] Stopped target Login Prompts. [ OK ] Stopped target Remote File Systems. [ OK ] Stopped target RPC Port Mapper. [ OK ] Stopped target Timer Units. [ OK ] Stopped Daily rotation of log files. [ OK ] Stopped Daily Cleanup of Temporary Directories. [ OK ] Stopped target System Time Set. [ OK ] Closed Load/Save RF Kill Switch Status /dev/rfkill Watch. Stopping Job spooling tools... Stopping Avahi mDNS/DNS-SD Stack... Stopping Periodic Command Scheduler... Stopping D-Bus System Message Bus... Stopping Getty on tty1... Stopping NFS status monitor for NFSv2/3 locking.... [ OK ] Stopped Network Time Service (one-shot ntpdate mode). Stopping Telephony service... Stopping Serial Getty on ttymxc0... Stopping System Logging Service... Stopping Load/Save Random Seed... Stopping Target Communication Framework agent... Stopping Xinetd A Powerful Replacement For Inetd... [ OK ] Stopped Job spooling tools. [ OK ] Stopped Periodic Command Scheduler. [ OK ] Stopped D-Bus System Message Bus. [ OK ] Stopped Getty on tty1. [ OK ] Stopped Telephony service. [ OK ] Stopped Serial Getty on ttymxc0. [ OK ] Stopped System Logging Service. [ OK ] Stopped Avahi mDNS/DNS-SD Stack. [ OK ] Stopped NFS status monitor for NFSv2/3 locking.. [ OK ] Stopped Xinetd A Powerful Replacement For Inetd. [ OK ] Stopped Target Communication Framework agent. [ OK ] Stopped Load/Save Random Seed. [ OK ] Removed slice Slice /system/getty. [ OK ] Removed slice Slice /system/serial-getty. [ OK ] Stopped target Network. [ OK ] Stopped target Host and Network Name Lookups. Stopping Network Configuration... [ OK ] Stopped Network Configuration. [ OK ] Stopped target Preparation for Network. [ OK ] Stopped IPv6 Packet Filtering Framework. [ OK ] Stopped IPv4 Packet Filtering Framework. [ OK ] Stopped target Basic System. [ OK ] Stopped target Path Units. [ OK ] Stopped Dispatch Password …ts to Console Directory Watch. [ OK ] Stopped Forward Password R…uests to Wall Directory Watch. [ OK ] Stopped target Slice Units. [ OK ] Removed slice User and Session Slice. [ OK ] Stopped target Socket Units. [ OK ] Closed Avahi mDNS/DNS-SD Stack Activation Socket. [ OK ] Closed D-Bus System Message Bus Socket. [ OK ] Closed dropbear.socket. [ OK ] Stopped target System Initialization. [ OK ] Closed Syslog Socket. [ OK ] Closed Network Service Netlink Socket. Stopping Load/Save Screen …ness of backlight:backlight... [ OK ] Stopped Apply Kernel Variables. [ OK ] Stopped Update is Completed. [ OK ] Stopped Rebuild Dynamic Linker Cache. [ OK ] Stopped Rebuild Journal Catalog. Stopping Record System Boot/Shutdown in UTMP... [ OK ] Stopped Load/Save Screen B…htness of backlight:backlight. [ OK ] Removed slice Slice /system/systemd-backlight. [ OK ] Stopped Record System Boot/Shutdown in UTMP. [ OK ] Stopped Create Volatile Files and Directories. [ OK ] Stopped target Local File Systems. Unmounting /run/credentials/systemd-sysusers.service... Unmounting Temporary Directory /tmp... Unmounting /var/volatile... [ OK ] Unmounted /run/credentials/systemd-sysusers.service. [ OK ] Unmounted Temporary Directory /tmp. [ OK ] Unmounted /var/volatile. [ OK ] Stopped target Preparation for Local File Systems. [ OK ] Stopped target Swaps. [ OK ] Reached target Unmount All Filesystems. [ OK ] Stopped Create Static Device Nodes in /dev. [ OK ] Stopped Create System Users. [ OK ] Stopped Remount Root and Kernel File Systems. [ OK ] Reached target System Shutdown. [ OK ] Reached target Late Shutdown Services. [ OK ] Finished System Reboot. [ OK ] Reached target System Reboot. [ 103.985305] watchdog: watchdog0: watchdog did not stop! [ 104.067255] systemd-shutdown[1]: Using hardware watchdog 'imx2+ watchdog', version 0, device /dev/watchdog0 [ 104.077397] systemd-shutdown[1]: Watchdog running with a timeout of 10min. [ 104.141355] systemd-shutdown[1]: Syncing filesystems and block devices. [ 104.152642] systemd-shutdown[1]: Sending SIGTERM to remaining processes... [ 104.186727] systemd-journald[176]: Received SIGTERM from PID 1 (systemd-shutdow). [ 104.228075] systemd-shutdown[1]: Sending SIGKILL to remaining processes... [ 104.275358] systemd-shutdown[1]: Unmounting file systems. [ 104.296546] systemd-shutdown[1]: All filesystems unmounted. [ 104.302430] systemd-shutdown[1]: Deactivating swaps. [ 104.307714] systemd-shutdown[1]: All swaps deactivated. [ 104.313212] systemd-shutdown[1]: Detaching loop devices. [ 104.334990] systemd-shutdown[1]: All loop devices detached. [ 104.341195] systemd-shutdown[1]: Stopping MD devices. [ 104.350769] systemd-shutdown[1]: All MD devices stopped. [ 104.356167] systemd-shutdown[1]: Detaching DM devices. [ 104.365560] systemd-shutdown[1]: All DM devices detached. [ 104.371271] systemd-shutdown[1]: All filesystems, swaps, loop devices, MD devices and DM devices detached. [ 104.394367] systemd-shutdown[1]: Syncing filesystems and block devices. [ 104.404364] systemd-shutdown[1]: Rebooting. [ 104.434360] ci_hdrc ci_hdrc.1: remove, state 4 [ 104.438874] usb usb2: USB disconnect, device number 1 [ 104.445944] ci_hdrc ci_hdrc.1: USB bus 2 deregistered [ 104.455184] ci_hdrc ci_hdrc.0: remove, state 4 [ 104.459691] usb usb1: USB disconnect, device number 1 [ 104.466749] ci_hdrc ci_hdrc.0: USB bus 1 deregistered [ 104.487834] imx2-wdt 20bc000.watchdog: Device shutdown: Expect reboot! [ 104.496743] reboot: Restarting system U-Boot SPL 2022.04-desk-mx6ul-l-4.0.0 (Apr 14 2023 - 10:13:15 +0200) SOM ConfigID#: 00000014 Trying to boot from MMC1 U-Boot 2022.04-desk-mx6ul-l-4.0.0 (Apr 14 2023 - 10:13:15 +0200) CPU: Freescale i.MX6UL rev1.2 528 MHz (running at 396 MHz) CPU: Industrial temperature grade (-40C to 105C) at 51C Reset cause: POR I2C: ready DRAM: 256 MiB Relocating to 8ff57000, new gd at 8fb56ec0, sp at 8fb56ea0 Core: 2 devices, 2 uclasses PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11 NAND: 128 MiB MMC: FSL_SDHC: 0 Loading Environment from MMC... *** Warning - bad CRC, using default environment No panel detected: default to MI0700AJT-30 Display: MI0700AJT-30 (800x480) Video: 800x480x18 In: serial Out: serial Err: serial switch to partitions #0, OK mmc0 is current device (SD) SOM ConfigID#: 00000014 SOM UniqueID#: ee6ac309:2f3211d4 CB ConfigID#: 0000003a CB UniqueID#: 00000000:00000000 Board: MX6UL AXEL ULite rev.A on SDV04 Net: FEC0 Warning: FEC0 (eth0) using random MAC address - 36:ac:92:f4:c0:77 Normal Boot Hit any key to stop autoboot: 3 ��� 0 => => => => edit serverip edit: 192.168.0.13� �� �167 => edit ipaddr edit: 192.168.0.89� �� �165 => run net_nfs Using FEC0 device TFTP from server 192.168.0.167; our IP address is 192.168.0.165 Filename 'desk-mx6ul-l/uImage'. Load address: 0x80800000 Loading: *�################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ###### 1.9 MiB/s done Bytes transferred = 8016520 (7a5288 hex) Using FEC0 device TFTP from server 192.168.0.167; our IP address is 192.168.0.165 Filename 'desk-mx6ul-l/imx6ul-axelulite-cb003a.dtb'. Load address: 0x83000000 Loading: *�####### 1.8 MiB/s done Bytes transferred = 32964 (80c4 hex) FDT: override 'som_uniqueid' with 'ee6ac309:2f3211d4' FDT: override 'cb_uniqueid' with '00000000:00000000' ## Booting kernel from Legacy Image at 80800000 ... Image Name: Linux-5.15.71-desk-mx6ul-l-4.0.0 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 8016456 Bytes = 7.6 MiB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK ## Flattened Device Tree blob at 83000000 Booting using the fdt blob at 0x83000000 Loading Kernel Image Using Device Tree in place at 83000000, end 8300bfff Starting kernel ... [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.15.71-desk-mx6ul-l-4.0.0 (jenkins@focalbakery) (arm-poky-linux-gnueabi-gcc (GCC) 11.3.0, GNU ld (GNU Binutils) 2.38.20220708) #1 SMP PREEMPT Mon Apr 3 18:11:32 CEST 2023 [ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d [ 0.000000] CPU: div instructions available: patching division code [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] OF: fdt: Machine model: AxelULite on SFCZG [ 0.000000] Memory policy: Data cache writealloc [ 0.000000] Zone ranges: [ 0.000000] Normal [mem 0x0000000080000000-0x000000008fffffff] [ 0.000000] HighMem empty [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000080000000-0x000000008fffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x000000008fffffff] [ 0.000000] percpu: Embedded 12 pages/cpu s17036 r8192 d23924 u49152 [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 65024 [ 0.000000] Kernel command line: root=/dev/nfs rw nfsroot=192.168.0.167:/home/dvdk/desk-mx-l/rfs/desk-mx6ul-l,v3,tcp ip=192.168.0.165:192.168.0.167::255.255.255.0:lynx:eth0:off panic=1 fec_mac=36:ac:92:f4:c0:77 console=ttymxc0,115200 vmalloc=400M mtdparts=gpmi-nand:2M(nand-SPL),6M(nand-uboot),1M(nand-env1),1M(nand-env2),1M(nand-fdt),1M(nand-spare),8M(nand-kernel),4M(nand-splash),-(nand-ubi);spi0.0:64k(spi-SPL),960k(spi-uboot),256k(spi-env1),256k(spi-env2),512k(spi-dtb),8M(spi-kernel),4M(spi-splash),-(spi-free) [ 0.000000] Unknown kernel command line parameters "fec_mac=36:ac:92:f4:c0:77", will be passed to user space. [ 0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes, linear) [ 0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes, linear) [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] Memory: 241540K/262144K available (12288K kernel code, 1353K rwdata, 2332K rodata, 1024K init, 407K bss, 20604K reserved, 0K cma-reserved, 0K highmem) [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, 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=4 to nr_cpu_ids=1. [ 0.000000] Trampoline variant of Tasks RCU enabled. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies. [ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1 [ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 [ 0.000000] Switching to timer-based delay loop, resolution 41ns [ 0.000003] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns [ 0.000054] clocksource: mxc_timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns [ 0.002931] Console: colour dummy device 80x30 [ 0.003048] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000) [ 0.003105] pid_max: default: 32768 minimum: 301 [ 0.003488] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.003551] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.005195] CPU: Testing write buffer coherency: ok [ 0.005878] CPU0: update cpu_capacity 1024 [ 0.005932] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000 [ 0.008375] Setting up static identity map for 0x80100000 - 0x80100060 [ 0.008816] rcu: Hierarchical SRCU implementation. [ 0.011515] smp: Bringing up secondary CPUs ... [ 0.011566] smp: Brought up 1 node, 1 CPU [ 0.011602] SMP: Total of 1 processors activated (48.00 BogoMIPS). [ 0.011634] CPU: All CPU(s) started in SVC mode. [ 0.012685] devtmpfs: initialized [ 0.025285] Duplicate name in lcdif@21c8000, renamed to "display#1" [ 0.029713] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5 [ 0.030455] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.030530] futex hash table entries: 256 (order: 2, 16384 bytes, linear) [ 0.030790] pinctrl core: initialized pinctrl subsystem [ 0.034458] NET: Registered PF_NETLINK/PF_ROUTE protocol family [ 0.035245] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.038222] thermal_sys: Registered thermal governor 'step_wise' [ 0.038256] thermal_sys: Registered thermal governor 'user_space' [ 0.039122] cpuidle: using governor menu [ 0.039579] CPU identified as i.MX6UL, silicon rev 1.2 [ 0.039620] Use WDOG1 as reset source [ 0.067128] vdd3p0: supplied by regulator-dummy [ 0.068249] cpu: supplied by regulator-dummy [ 0.069844] vddsoc: supplied by regulator-dummy [ 0.103986] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers. [ 0.104053] hw-breakpoint: maximum watchpoint size is 8 bytes. [ 0.107121] imx6ul-pinctrl 20e0000.pinctrl: initialized IMX pinctrl driver [ 0.110258] imx mu driver is registered. [ 0.111334] imx rpmsg driver is registered. [ 0.195129] vgaarb: loaded [ 0.196592] SCSI subsystem initialized [ 0.197880] usbcore: registered new interface driver usbfs [ 0.198035] usbcore: registered new interface driver hub [ 0.198171] usbcore: registered new device driver usb [ 0.200866] i2c i2c-0: IMX I2C adapter registered [ 0.202890] i2c i2c-1: IMX I2C adapter registered [ 0.203774] mc: Linux media interface: v0.10 [ 0.203899] videodev: Linux video capture interface: v2.00 [ 0.204112] pps_core: LinuxPPS API ver. 1 registered [ 0.204145] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it> [ 0.204209] PTP clock support registered [ 0.206212] MIPI CSI2 driver module loaded [ 0.206359] Advanced Linux Sound Architecture Driver Initialized. [ 0.208224] Bluetooth: Core ver 2.22 [ 0.208384] NET: Registered PF_BLUETOOTH protocol family [ 0.208416] Bluetooth: HCI device and connection manager initialized [ 0.208467] Bluetooth: HCI socket layer initialized [ 0.208508] Bluetooth: L2CAP socket layer initialized [ 0.208614] Bluetooth: SCO socket layer initialized [ 0.210148] clocksource: Switched to clocksource mxc_timer1 [ 0.210590] VFS: Disk quotas dquot_6.6.0 [ 0.210781] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.232937] NET: Registered PF_INET protocol family [ 0.233495] IP idents hash table entries: 4096 (order: 3, 32768 bytes, linear) [ 0.235230] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear) [ 0.235343] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear) [ 0.235392] TCP established hash table entries: 2048 (order: 1, 8192 bytes, linear) [ 0.235476] TCP bind hash table entries: 2048 (order: 2, 16384 bytes, linear) [ 0.235582] TCP: Hash tables configured (established 2048 bind 2048) [ 0.235792] UDP hash table entries: 256 (order: 1, 8192 bytes, linear) [ 0.235878] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear) [ 0.236299] NET: Registered PF_UNIX/PF_LOCAL protocol family [ 0.238017] RPC: Registered named UNIX socket transport module. [ 0.238079] RPC: Registered udp transport module. [ 0.238107] RPC: Registered tcp transport module. [ 0.238133] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 0.240548] PCI: CLS 0 bytes, default 64 [ 0.241790] hw perfevents: enabled with armv7_cortex_a7 PMU driver, 5 counters available [ 0.245496] Bus freq driver module loaded [ 0.247867] Initialise system trusted keyrings [ 0.249143] workingset: timestamp_bits=30 max_order=16 bucket_order=0 [ 0.262699] NFS: Registering the id_resolver key type [ 0.262853] Key type id_resolver registered [ 0.262885] Key type id_legacy registered [ 0.263007] ntfs: driver 2.1.32 [Flags: R/W]. [ 0.263842] fuse: init (API version 7.34) [ 0.502750] Key type asymmetric registered [ 0.502808] Asymmetric key parser 'x509' registered [ 0.502978] io scheduler mq-deadline registered [ 0.503016] io scheduler kyber registered [ 0.517827] imx-sdma 20ec000.sdma: Direct firmware load for imx/sdma/sdma-imx6q.bin failed with error -2 [ 0.517900] imx-sdma 20ec000.sdma: Falling back to sysfs fallback for: imx/sdma/sdma-imx6q.bin [ 0.522587] mxs-dma 1804000.dma-apbh: initialized [ 0.533692] pfuze100-regulator 0-0008: Full layer: 1, Metal layer: 1 [ 0.534525] pfuze100-regulator 0-0008: FAB: 0, FIN: 0 [ 0.534573] pfuze100-regulator 0-0008: pfuze3000 found. [ 0.561492] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled [ 0.566464] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 30, base_baud = 5000000) is a IMX [ 1.356961] printk: console [ttymxc0] enabled [ 1.363931] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 65, base_baud = 5000000) is a IMX [ 1.376433] imx sema4 driver is registered. [ 1.406612] brd: module loaded [ 1.426717] loop: module loaded [ 1.431869] imx ahci driver is registered. [ 1.441094] nand: device found, Manufacturer ID: 0xef, Chip ID: 0xf1 [ 1.447507] nand: Winbond W29N01HV [ 1.451110] nand: 128 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 [ 1.459289] Scanning device for bad blocks [ 1.567957] 9 cmdlinepart partitions found on MTD device gpmi-nand [ 1.574246] Creating 9 MTD partitions on "gpmi-nand": [ 1.579332] 0x000000000000-0x000000200000 : "nand-SPL" [ 1.588134] 0x000000200000-0x000000800000 : "nand-uboot" [ 1.597350] 0x000000800000-0x000000900000 : "nand-env1" [ 1.606262] 0x000000900000-0x000000a00000 : "nand-env2" [ 1.615282] 0x000000a00000-0x000000b00000 : "nand-fdt" [ 1.624181] 0x000000b00000-0x000000c00000 : "nand-spare" [ 1.633429] 0x000000c00000-0x000001400000 : "nand-kernel" [ 1.642653] 0x000001400000-0x000001800000 : "nand-splash" [ 1.651899] 0x000001800000-0x000008000000 : "nand-ubi" [ 1.661693] gpmi-nand 1806000.nand-controller: driver registered. [ 1.669330] SPI driver spidev has no spi_device_id for spidev [ 1.677051] spinor@0 enforce active low on chipselect handle [ 1.686455] spi-nor spi0.0: is25lp128 (16384 Kbytes) [ 1.691626] 8 cmdlinepart partitions found on MTD device spi0.0 [ 1.697585] Creating 8 MTD partitions on "spi0.0": [ 1.702477] 0x000000000000-0x000000010000 : "spi-SPL" [ 1.711496] 0x000000010000-0x000000100000 : "spi-uboot" [ 1.720570] 0x000000100000-0x000000140000 : "spi-env1" [ 1.729401] 0x000000140000-0x000000180000 : "spi-env2" [ 1.738355] 0x000000180000-0x000000200000 : "spi-dtb" [ 1.747181] 0x000000200000-0x000000a00000 : "spi-kernel" [ 1.756295] 0x000000a00000-0x000000e00000 : "spi-splash" [ 1.765694] 0x000000e00000-0x000001000000 : "spi-free" [ 1.779960] CAN device driver interface [ 1.788085] pps pps0: new PPS source ptp0 [ 1.798323] fec 2188000.ethernet eth0: registered PHC device 0 [ 1.806736] usbcore: registered new interface driver asix [ 1.812612] usbcore: registered new interface driver ax88179_178a [ 1.818843] usbcore: registered new interface driver cdc_ether [ 1.825029] usbcore: registered new interface driver cdc_eem [ 1.830935] usbcore: registered new interface driver net1080 [ 1.836715] usbcore: registered new interface driver cdc_subset [ 1.842899] usbcore: registered new interface driver zaurus [ 1.848719] usbcore: registered new interface driver cdc_ncm [ 1.854650] usbcore: registered new interface driver cdc_mbim [ 1.860628] usbcore: registered new interface driver r8153_ecm [ 1.866490] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.873142] ehci-pci: EHCI PCI platform driver [ 1.877941] usbcore: registered new interface driver cdc_wdm [ 1.883834] usbcore: registered new interface driver usb-storage [ 1.899399] snvs_rtc 20cc000.snvs:snvs-rtc-lp: registered as rtc0 [ 1.905747] snvs_rtc 20cc000.snvs:snvs-rtc-lp: setting system clock to 1970-01-01T00:10:24 UTC (624) [ 1.915401] i2c_dev: i2c /dev entries driver [ 1.922695] pwm-backlight backlight: supply power not found, using dummy regulator [ 1.937734] mxsfb 21c8000.lcdif: supply lcd not found, using dummy regulator [ 2.036077] sii902x bound to mxs-lcdif from 21c8000.lcdif [ 2.360197] mxsfb 21c8000.lcdif: initialized [ 2.367239] pxp-v4l2 pxp_v4l2: initialized [ 2.374896] Bluetooth: HCI UART driver ver 2.3 [ 2.379396] Bluetooth: HCI UART protocol H4 registered [ 2.384668] Bluetooth: HCI UART protocol BCSP registered [ 2.390089] Bluetooth: HCI UART protocol LL registered [ 2.396335] sdhci: Secure Digital Host Controller Interface driver [ 2.402630] sdhci: Copyright(c) Pierre Ossman [ 2.407007] sdhci-pltfm: SDHCI platform and OF driver helper [ 2.415169] sdhci-esdhc-imx 2190000.mmc: Got CD GPIO [ 2.423672] caam 2140000.crypto: Entropy delay = 3200 [ 2.441297] caam 2140000.crypto: Instantiated RNG4 SH0 [ 2.453770] caam 2140000.crypto: Instantiated RNG4 SH1 [ 2.458964] caam 2140000.crypto: device ID = 0x0a16030000000000 (Era 8) [ 2.466008] caam 2140000.crypto: job rings = 3, qi = 0 [ 2.471595] mmc0: SDHCI controller on 2190000.mmc [2190000.mmc] using ADMA [ 2.514007] caam algorithms registered in /proc/crypto [ 2.522167] mmc0: host does not support reading read-only switch, assuming write-enable [ 2.534408] caam 2140000.crypto: caam pkc algorithms registered in /proc/crypto [ 2.542638] mmc0: new high speed SDHC card at address aaaa [ 2.549915] mmcblk0: mmc0:aaaa SA32G 29.7 GiB [ 2.555438] caam 2140000.crypto: rng crypto API alg registered prng-caam [ 2.565905] caam 2140000.crypto: registering rng-caam [ 2.571501] mmcblk0: p1 p2 [ 2.578358] Device caam-keygen registered [ 2.590581] caam-snvs 20cc000.caam-snvs: violation handlers armed - non-secure state [ 2.599702] usbcore: registered new interface driver usbhid [ 2.605773] usbhid: USB HID core driver [ 2.612554] random: crng init done [ 2.630804] NET: Registered PF_INET6 protocol family [ 2.638418] Segment Routing with IPv6 [ 2.642456] In-situ OAM (IOAM) with IPv6 [ 2.646608] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver [ 2.654217] NET: Registered PF_PACKET protocol family [ 2.659351] can: controller area network core [ 2.664100] NET: Registered PF_CAN protocol family [ 2.668938] can: raw protocol [ 2.672091] can: broadcast manager protocol [ 2.676325] can: netlink gateway - max_hops=1 [ 2.681409] Bluetooth: RFCOMM TTY layer initialized [ 2.686365] Bluetooth: RFCOMM socket layer initialized [ 2.691858] Bluetooth: RFCOMM ver 1.11 [ 2.695702] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 2.701194] Bluetooth: BNEP filters: protocol multicast [ 2.706472] Bluetooth: BNEP socket layer initialized [ 2.711514] Bluetooth: HIDP (Human Interface Emulation) ver 1.2 [ 2.717476] Bluetooth: HIDP socket layer initialized [ 2.722621] 8021q: 802.1Q VLAN Support v1.8 [ 2.726879] lib80211: common routines for IEEE802.11 drivers [ 2.733251] Key type dns_resolver registered [ 2.764333] Registering SWP/SWPB emulation handler [ 2.770010] Loading compiled-in X.509 certificates [ 2.822306] ci_hdrc ci_hdrc.0: EHCI Host Controller [ 2.827288] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1 [ 2.860427] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00 [ 2.866815] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15 [ 2.875552] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 2.883136] usb usb1: Product: EHCI Host Controller [ 2.888040] usb usb1: Manufacturer: Linux 5.15.71-desk-mx6ul-l-4.0.0 ehci_hcd [ 2.895248] usb usb1: SerialNumber: ci_hdrc.0 [ 2.901035] hub 1-0:1.0: USB hub found [ 2.904916] hub 1-0:1.0: 1 port detected [ 2.916678] ci_hdrc ci_hdrc.1: EHCI Host Controller [ 2.921764] ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 2 [ 2.950228] ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00 [ 2.956172] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15 [ 2.964551] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 2.971835] usb usb2: Product: EHCI Host Controller [ 2.976732] usb usb2: Manufacturer: Linux 5.15.71-desk-mx6ul-l-4.0.0 ehci_hcd [ 2.983936] usb usb2: SerialNumber: ci_hdrc.1 [ 2.989522] hub 2-0:1.0: USB hub found [ 2.993558] hub 2-0:1.0: 1 port detected [ 3.001229] imx_thermal 20c8000.anatop:tempmon: Industrial CPU temperature grade - max:105C critical:100C passive:95C [ 3.014581] input: gpio-power-fail as /devices/platform/gpio-power-fail/input/input0 [ 3.103028] Micrel KSZ8081 or KSZ8091 2188000.ethernet-1:03: attached PHY driver (mii_bus:phy_addr=2188000.ethernet-1:03, irq=POLL) [ 6.250935] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx [ 6.259066] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 6.280292] IP-Config: Complete: [ 6.283604] device=eth0, hwaddr=36:ac:92:f4:c0:77, ipaddr=192.168.0.165, mask=255.255.255.0, gw=255.255.255.255 [ 6.294681] host=lynx, domain=, nis-domain=(none) [ 6.299963] bootserver=192.168.0.167, rootserver=192.168.0.167, rootpath= [ 6.301033] cfg80211: Loading compiled-in X.509 certificates for regulatory database [ 6.321757] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7' [ 6.328594] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2 [ 6.337960] ALSA device list: [ 6.341164] No soundcards found. [ 6.346273] platform regulatory.0: Falling back to sysfs fallback for: regulatory.db [ 6.395227] VFS: Mounted root (nfs filesystem) on device 0:13. [ 6.403142] devtmpfs: mounted [ 6.408695] Freeing unused kernel image (initmem) memory: 1024K [ 6.430627] Run /sbin/init as init process [ 7.298222] systemd[1]: System time before build time, advancing clock. [ 7.380452] systemd[1]: systemd 250.5+ 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 -BZIP2 -LZ4 -XZ -ZLIB +ZSTD -BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=hybrid) [ 7.413263] systemd[1]: Detected architecture arm. Welcome to NXP i.MX Release Distro 5.15-kirkstone (kirkstone)! [ 7.476156] systemd[1]: Hostname set to <desk-mx6ul-axelulite>. [ 8.098101] systemd-sysv-generator[169]: SysV service '/etc/init.d/single' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.131653] systemd-sysv-generator[169]: SysV service '/etc/init.d/halt' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.184784] systemd-sysv-generator[169]: SysV service '/etc/init.d/sendsigs' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.212959] systemd-sysv-generator[169]: SysV service '/etc/init.d/umountfs' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.253410] systemd-sysv-generator[169]: SysV service '/etc/init.d/alignment.sh' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.290636] systemd-sysv-generator[169]: SysV service '/etc/init.d/reboot' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.322804] systemd-sysv-generator[169]: SysV service '/etc/init.d/umountnfs.sh' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.351545] systemd-sysv-generator[169]: SysV service '/etc/init.d/save-rtc.sh' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust. [ 8.458449] systemd[160]: /lib/systemd/system-generators/systemd-gpt-auto-generator failed with exit status 1. [ 10.304136] systemd[1]: Queued start job for default target Multi-User System. [ 10.318789] systemd[1]: Created slice Slice /system/getty. [ OK ] Created slice Slice /system/getty. [ 10.363281] systemd[1]: Created slice Slice /system/modprobe. [ OK ] Created slice Slice /system/modprobe. [ 10.403213] systemd[1]: Created slice Slice /system/serial-getty. [ OK ] Created slice Slice /system/serial-getty. [ 10.442128] systemd[1]: Created slice User and Session Slice. [ OK ] Created slice User and Session Slice. [ 10.481406] systemd[1]: Started Dispatch Password Requests to Console Directory Watch. [ OK ] Started Dispatch Password …ts to Console Directory Watch. [ 10.521459] systemd[1]: Started Forward Password Requests to Wall Directory Watch. [ OK ] Started Forward Password R…uests to Wall Directory Watch. [ 10.561513] systemd[1]: Reached target Path Units. [ OK ] Reached target Path Units. [ 10.590794] systemd[1]: Reached target Remote File Systems. [ OK ] Reached target Remote File Systems. [ 10.630762] systemd[1]: Reached target Slice Units. [ OK ] Reached target Slice Units. [ 10.660873] systemd[1]: Reached target Swaps. [ OK ] Reached target Swaps. [ 10.695395] systemd[1]: Listening on RPCbind Server Activation Socket. [ OK ] Listening on RPCbind Server Activation Socket. [ 10.730772] systemd[1]: Reached target RPC Port Mapper. [ OK ] Reached target RPC Port Mapper. [ 10.774690] systemd[1]: Listening on Syslog Socket. [ OK ] Listening on Syslog Socket. [ 10.811488] systemd[1]: Listening on initctl Compatibility Named Pipe. [ OK ] Listening on initctl Compatibility Named Pipe. [ 10.958378] systemd[1]: Journal Audit Socket was skipped because of a failed condition check (ConditionSecurity=audit). [ 10.973329] systemd[1]: Listening on Journal Socket (/dev/log). [ OK ] Listening on Journal Socket (/dev/log). [ 11.012261] systemd[1]: Listening on Journal Socket. [ OK ] Listening on Journal Socket. [ 11.054382] systemd[1]: Listening on Network Service Netlink Socket. [ OK ] Listening on Network Service Netlink Socket. [ 11.098757] systemd[1]: Listening on udev Control Socket. [ OK ] Listening on udev Control Socket. [ 11.142075] systemd[1]: Listening on udev Kernel Socket. [ OK ] Listening on udev Kernel Socket. [ 11.183884] systemd[1]: Listening on User Database Manager Socket. [ OK ] Listening on User Database Manager Socket. [ 11.221919] systemd[1]: Huge Pages File System was skipped because of a failed condition check (ConditionPathExists=/sys/kernel/mm/hugepages). [ 11.236182] systemd[1]: POSIX Message Queue File System was skipped because of a failed condition check (ConditionPathExists=/proc/sys/fs/mqueue). [ 11.256398] systemd[1]: Mounting Kernel Debug File System... Mounting Kernel Debug File System... [ 11.301692] systemd[1]: Kernel Trace File System was skipped because of a failed condition check (ConditionPathExists=/sys/kernel/tracing). [ 11.333108] systemd[1]: Mounting Temporary Directory /tmp... Mounting Temporary Directory /tmp... [ 11.353528] systemd[1]: Create List of Static Device Nodes was skipped because of a failed condition check (ConditionFileNotEmpty=/lib/modules/5.15.71-desk-mx6ul-l-4.0.0/modules.devname). [ 11.397234] systemd[1]: Starting Load Kernel Module configfs... Starting Load Kernel Module configfs... [ 11.438935] systemd[1]: Starting Load Kernel Module drm... Starting Load Kernel Module drm... [ 11.498419] systemd[1]: Starting Load Kernel Module fuse... Starting Load Kernel Module fuse... [ 11.545063] systemd[1]: Starting RPC Bind... Starting RPC Bind... [ 11.592786] systemd[1]: File System Check on Root Device was skipped because of a failed condition check (ConditionPathIsReadWrite=!/). [ 11.622078] systemd[1]: systemd-journald.service: unit configures an IP firewall, but the local system does not support BPF/cgroup firewalling. [ 11.635909] systemd[1]: (This warning is only shown for the first unit using IP firewalling.) [ 11.669491] systemd[1]: Starting Journal Service... Starting Journal Service... [ 11.777650] systemd[1]: Load Kernel Modules was skipped because all trigger condition checks failed. [ 11.834654] systemd[1]: Starting Generate network units from Kernel command line... Starting Generate network …ts from Kernel command line... [ 11.898579] systemd[1]: Starting Remount Root and Kernel File Systems... Starting Remount Root and Kernel File Systems... [ 11.967631] systemd[1]: Starting Apply Kernel Variables... Starting Apply Kernel Variables... [ 12.058223] systemd[1]: Starting Coldplug All udev Devices... Starting Coldplug All udev Devices... [ 12.202451] systemd[1]: Started RPC Bind. [ OK ] Started RPC Bind. [ 12.259700] systemd[1]: Mounted Kernel Debug File System. [ OK ] Mounted Kernel Debug File System. [ 12.354650] systemd[1]: Mounted Temporary Directory /tmp. [ OK ] Mounted Temporary Directory /tmp. [ 12.394586] systemd[1]: modprobe@configfs.service: Deactivated successfully. [ 12.433379] systemd[1]: Finished Load Kernel Module configfs. [ OK ] Finished Load Kernel Module configfs. [ 12.482239] systemd[1]: modprobe@drm.service: Deactivated successfully. [ 12.521323] systemd[1]: Finished Load Kernel Module drm. [ OK ] Finished Load Kernel Module drm. [ 12.563907] systemd[1]: modprobe@fuse.service: Deactivated successfully. [ 12.592799] systemd[1]: Finished Load Kernel Module fuse. [ OK ] Finished Load Kernel Module fuse. [ 12.620762] systemd[1]: Finished Generate network units from Kernel command line. [ OK ] Finished Generate network units from Kernel command line. [ 12.653714] systemd[1]: Finished Remount Root and Kernel File Systems. [ OK ] Finished Remount Root and Kernel File Systems. [ 12.714306] systemd[1]: Finished Apply Kernel Variables. [ OK ] Finished Apply Kernel Variables. [ 12.774506] systemd[1]: Mounting FUSE Control File System... Mounting FUSE Control File System... [ 12.816964] systemd[1]: Mounting Kernel Configuration File System... Mounting Kernel Configuration File System... [ 12.885527] systemd[1]: Rebuild Hardware Database was skipped because of a failed condition check (ConditionNeedsUpdate=/etc). [ 12.941340] systemd[1]: Platform Persistent Storage Archival was skipped because of a failed condition check (ConditionDirectoryNotEmpty=/sys/fs/pstore). [ 12.983612] systemd[1]: Create System Users was skipped because of a failed condition check (ConditionNeedsUpdate=/etc). [ 13.035071] systemd[1]: Starting Create Static Device Nodes in /dev... Starting Create Static Device Nodes in /dev... [ 13.111425] systemd[1]: Mounted FUSE Control File System. [ OK ] Mounted FUSE Control File System. [ 13.181975] systemd[1]: Mounted Kernel Configuration File System. [ OK ] Mounted Kernel Configuration File System. [ 13.533757] systemd[1]: Finished Create Static Device Nodes in /dev. [ OK ] Finished Create Static Device Nodes in /dev. [ 13.572532] systemd[1]: Started Journal Service. [ OK ] Started Journal Service. [ OK ] Reached target Preparation for Local File Systems. Mounting /var/volatile... Starting Flush Journal to Persistent Storage... Starting Rule-based Manage…for Device Events and Files... [ OK ] Mounted /var/volatile. [ 13.934874] systemd-journald[177]: Received client request to flush runtime journal. Starting Load/Save Random Seed... [ OK ] Reached target Local File Systems. [ OK ] Finished Flush Journal to Persistent Storage. Starting Create Volatile Files and Directories... [ OK ] Finished Load/Save Random Seed. [ OK ] Started Rule-based Manager for Device Events and Files. [ OK ] Finished Create Volatile Files and Directories. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Reached target System Time Set. Starting Record System Boot/Shutdown in UTMP... [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Finished Record System Boot/Shutdown in UTMP. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Created slice Slice /system/systemd-backlight. Starting Load/Save Screen …ness of backlight:backlight... [ 18.058436] mtdblock: MTD device 'nand-SPL' is NAND, please consider using UBI block devices instead. [ 18.076749] mtdblock: MTD device 'nand-uboot' is NAND, please consider using UBI block devices instead. [ 18.135219] mtdblock: MTD device 'nand-env1' is NAND, please consider using UBI block devices instead. [ 18.209410] mtdblock: MTD device 'nand-env2' is NAND, please consider using UBI block devices instead. [ 18.266855] mtdblock: MTD device 'nand-fdt' is NAND, please consider using UBI block devices instead. [ 18.444165] mtdblock: MTD device 'nand-kernel' is NAND, please consider using UBI block devices instead. [ 18.487187] mtdblock: MTD device 'nand-spare' is NAND, please consider using UBI block devices instead. [ OK ] Finished Coldplug All udev Devices. [ OK ] Finished Load/Save Screen …htness of backlight:backlight. [ 18.642841] mtdblock: MTD device 'nand-splash' is NAND, please consider using UBI block devices instead. [ 18.783339] mtdblock: MTD device 'nand-ubi' is NAND, please consider using UBI block devices instead. [ 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. [ OK ] Listening on dropbear.socket. [ OK ] Reached target Socket Units. [ OK ] Reached target Basic System. [ OK ] Listening on Load/Save RF …itch Status /dev/rfkill Watch. [ OK ] Started Job spooling tools. [ OK ] Started Periodic Command Scheduler. Starting D-Bus System Message Bus... [ OK ] Started Getty on tty1. Starting IPv6 Packet Filtering Framework... Starting IPv4 Packet Filtering Framework... Starting Network Time Service (one-shot ntpdate mode)... Starting Telephony service... [ OK ] Started Serial Getty on ttymxc0. [ OK ] Reached target Login Prompts. [ OK ] Started System Logging Service. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. syslogd[239]: Error opening log file: /var/log/auth.log: No such file or directory syslogd[239]: Error opening log file: /var/log/syslog: No such file or directory syslogd[239]: Error opening log file: /var/log/kern.log: No such file or directory syslogd[239]: Error opening log file: /var/log/mail.log: No such file or directory syslogd[239]: Error opening log file: /var/log/mail.err: No such file or directory syslogd[239]: Error opening log file: /var/log/messages: No such file or directory [ OK ] Finished IPv6 Packet Filtering Framework. [ OK ] Started D-Bus System Message Bus. [ OK ] Finished IPv4 Packet Filtering Framework. [ OK ] Finished Network Time Service (one-shot ntpdate mode). [ OK ] Reached target Preparation for Network. [ OK ] Stopped User Login Management. Starting Load Kernel Module drm... Starting Network Configuration... [ OK ] Finished Load Kernel Module drm. [ OK ] Started Telephony service. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. [ OK ] Stopped User Login Management. 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 ] Stopped User Login Management. 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 ] Stopped User Login Management. 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 ] Stopped User Login Management. Starting Load Kernel Module drm... [ OK ] Started Network Configuration. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Reached target Network. [ OK ] Reached target Host and Network Name Lookups. Starting Avahi mDNS/DNS-SD Stack... [ OK ] Started NFS status monitor for NFSv2/3 locking.. [FAILED] Failed to start Respond to IPv6 Node Information Queries. See 'systemctl status ninfod.service' for details. [FAILED] Failed to start Network Router Discovery Daemon. See 'systemctl status rdisc.service' for details. Starting Target Communication Framework agent... [ OK ] Started Xinetd A Powerful Replacement For Inetd. [ OK ] Finished Load Kernel Module drm. [ OK ] Started Avahi mDNS/DNS-SD Stack. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Started Target Communication Framework agent. [ OK ] Reached target Multi-User System. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. Starting Record Runlevel Change in UTMP... [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Finished Record Runlevel Change in UTMP. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. NXP i.MX Release Distro 5.15-kirkstone desk-mx6ul-axelulite ttymxc0 root@desk-mx6ul-axelulite:~#
Install Module[edit | edit source]
Host side, transfer ~/desk-mx-l/rfs/desk-mx6ul-l-4.0.0_modules.tar.gz
file on target.
Target side execute the follow command:
root@desk-mx6ul-axelulite:~# tar xvzf desk-mx6ul-l-4.0.0_modules.tar.gz -C /
To check that everything went well, run the following command:
root@desk-mx6ul-axelulite:~# ls -l /lib/modules/$(uname -r) total 296 lrwxrwxrwx 1 541 502 65 Apr 3 2023 build -> /home/jenkins/workspace/workspace/DESK-MX6UL-L-4.x.x_Linux-kernel drwxr-xr-x 6 541 502 4096 Apr 3 2023 kernel -rw-r--r-- 1 541 502 2718 Apr 3 2023 modules.alias -rw-r--r-- 1 541 502 4768 Apr 3 2023 modules.alias.bin -rw-r--r-- 1 541 502 14878 Apr 3 2023 modules.builtin -rw-r--r-- 1 541 502 34704 Apr 3 2023 modules.builtin.alias.bin -rw-r--r-- 1 541 502 17778 Apr 3 2023 modules.builtin.bin -rw-r--r-- 1 541 502 105373 Apr 3 2023 modules.builtin.modinfo -rw-r--r-- 1 541 502 10689 Apr 3 2023 modules.dep -rw-r--r-- 1 541 502 21666 Apr 3 2023 modules.dep.bin -rw-r--r-- 1 541 502 0 Apr 3 2023 modules.devname -rw-r--r-- 1 541 502 8657 Apr 3 2023 modules.order -rw-r--r-- 1 541 502 85 Apr 3 2023 modules.softdep -rw-r--r-- 1 541 502 16970 Apr 3 2023 modules.symbols -rw-r--r-- 1 541 502 23964 Apr 3 2023 modules.symbols.bin lrwxrwxrwx 1 541 502 65 Apr 3 2023 source -> /home/jenkins/workspace/workspace/DESK-MX6UL-L-4.x.x_Linux-kernel
Development[edit | edit source]
Synchronizing the repository[edit | edit source]
In DESK-MX6UL-L, the following source trees are clones of the correspondent DAVE Embedded Systems git repositories:
Component | GIT Remote |
---|---|
U-Boot | git@git.dave.eu:desk-mx-l/u-boot-imx.git
|
Linux kernel | git@git.dave.eu:desk-mx-l/linux-imx.git
|
Yocto BSP | git@git.dave.eu: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 U-Boot[edit | edit source]
Quick reference[edit | edit source]
URL | git@git.dave.eu:desk-mx-l/u-boot-imx.git |
---|---|
stable branch | desk-mx6ul-l-4.x.x |
stable tag | desk-mx6ul-l-4.2.0 |
Platform | SOM ConfigID | CB ConfigID | defconfig |
---|---|---|---|
SDV04 | - | 0x0000003a | mx6uldesk_axelulite_defconfig |
SBC Rialto | 0x00000022 | 0x00000090 | mx6uldesk_lynx_defconfig |
Instructions[edit | edit source]
It is assumed that the development environment has been set up properly as described here.
- start the Linux development VM and log into the system
- open a terminal window and cd into U-Boot source code
cd ~/desk-mx-l/u-boot
- in case of needs you can update your local repository with the following git command
git pull
- configure the build environment
source ~/desk-mx-l/desk-mx6ul-l-4.0.1_env.sh
- enter the source tree directory and run the following commands:
for the AXEL Ulite EVK
make mx6uldesk_axelulite_defconfig make
for the SBC platform:
make mx6uldesk_lynx_defconfig make
NOTE: this is the default configuration suitable for the latest <SOM> target.
The former command selects the default DESK-MX6UL-L configuration suitable for the latest <SOM> targets (for additional defconfig please refer to the U-Boot defconfigs table above), while the latter builds the U-Boot binary image files (SPL
and u-boot.img
).
Binary files can be copied to the tftp root directory /tftpboot/desk-mx-l/
with the following command:
cp SPL u-boot.img /tftpboot/desk-mx-l/
Please refer to this page for more information on how to update the bootloader on your board.
Building Linux[edit | edit source]
Quick reference[edit | edit source]
URL | git@git.dave.eu:desk-mx-l/linux-imx.git |
---|---|
stable branch | desk-mx6ul-l-4.x.x |
stable tag | desk-mx6ul-l-4.1.0 |
defconfig | imx_v7_desk_defconfig | |
---|---|---|
Kernel binary | UIMAGE_LOADADDR=0x80008000 uImage | |
Device trees | Platform | DTB |
SDV04 | imx6ul-axelulite-cb003a.dtb imx6ul-axelulite-cb006c.dtb | |
SBC Rialto | imx6ul-lynx-som0022-cb0090.dtb |
Instructions[edit | edit source]
It is assumed that the development environment has been set up properly as described here.
- start the Linux development VM and login into the system
- open a terminal window and cd into Linux kernel source code
cd ~/desk-mx-l/linux
- in case of needs you can update your local repository with the following git command
git pull
- configure the build environment
source ~/desk-mx-l/desk-mx6ul-l-4.0.1_env.sh
- enter the source tree directory and run the following commands:
make imx_v7_desk_defconfig make UIMAGE_LOADADDR=0x80008000 uImage imx6ul-axelulite-cb003a.dtb imx6ul-axelulite-cb006c.dtb imx6ul-lynx-som0022-cb0090.dtb
NOTE: this is the default configuration suitable for latest target.
- The former command selects the default DESK-MX6UL-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/uImage
file. Both this file and the kernel device tree can be copied to the tftp root directory /tftpboot/desk-mx-l/
with the following commands:
cp arch/arm/boot/uImage /tftpboot/desk-mx-l/ cp arch/arm/boot/dts/*.dtb /tftpboot/desk-mx-l/
Usually, kernel modules are installed with make modules_install
command, but this method installs the modules into the /lib/modules
directory of you 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:
make modules mkdir modules-install make INSTALL_MOD_PATH=modules-install modules_install cd modules-install && tar cvzf ../modules.tar.gz . && cd ..
Now copy modules.tar.gz
into the target root file system and install them as root with the following command
tar xvzf modules.tar.gz -C /
Building the Yocto BSP[edit | edit source]
Quick reference[edit | edit source]
Repository | Yocto BSP Layer |
---|---|
URL | git@git.dave.eu:desk-mx-l/meta-desk-mx.git |
stable branch | kirkstone |
stable tag | desk-mx6ul-l-4.1.0 |
Name | Description |
---|---|
dave-image-devel | This image include tools for development/debugging |
desk-image-qt6 | This image include a Qt6 graphic backend on framebuffer |
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-MX6UL-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 dave-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/desk-mx-l/rfs/<kit_name>
.
Besides the pre-built root file systems, DAVE also provides a rich repository containing pre-built applications and libraries. These packages can be easily installed on the target by using the dnf
tool. Please refer to this application note for more details.
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 to 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]
The following procedure requires access to the DAVE Embedded Systems' git repositories. Access to such repositories is granted to the development kit's owners only. Please refer to this page for detailed instructions on how to get it. |
This process requires a lot of hardware resources in terms of disk storage, RAM, and processing power. For this reason, it also is recommended to consider the use of 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]
Check that the following packages are installed:
dvdk@vagrant:~$ sudo apt-get update && sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool virtualenv
Before running the build, the KAS environment must be initialized properly.
dvdk@vagrant:~$ virtualenv -p /usr/bin/python3 venv created virtual environment CPython3.8.10.final.0-64 in 351ms creator CPython3Posix(dest=/home/dvdk/venv, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/dvdk/.local/share/virtualenv) added seed packages: pip==24.0, setuptools==69.1.1, wheel==0.42.0 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator dvdk@vagrant:~$ source venv/bin/activate (venv) dvdk@vagrant:~$ pip3 install kas==4.2 Collecting kas==4.2 Downloading kas-4.2.tar.gz (39 kB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Collecting PyYAML<7,>=3.0 (from kas==4.2) Using cached PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB) Collecting distro<2,>=1.0.0 (from kas==4.2) Downloading distro-1.9.0-py3-none-any.whl.metadata (6.8 kB) Collecting jsonschema<5,>=2.5.0 (from kas==4.2) Using cached jsonschema-4.21.1-py3-none-any.whl.metadata (7.8 kB) Collecting kconfiglib<15,>=14.1.0 (from kas==4.2) Downloading kconfiglib-14.1.0-py2.py3-none-any.whl.metadata (39 kB) Collecting attrs>=22.2.0 (from jsonschema<5,>=2.5.0->kas==4.2) Using cached attrs-23.2.0-py3-none-any.whl.metadata (9.5 kB) Collecting importlib-resources>=1.4.0 (from jsonschema<5,>=2.5.0->kas==4.2) Downloading importlib_resources-6.4.0-py3-none-any.whl.metadata (3.9 kB) Collecting jsonschema-specifications>=2023.03.6 (from jsonschema<5,>=2.5.0->kas==4.2) Using cached jsonschema_specifications-2023.12.1-py3-none-any.whl.metadata (3.0 kB) Collecting pkgutil-resolve-name>=1.3.10 (from jsonschema<5,>=2.5.0->kas==4.2) Using cached pkgutil_resolve_name-1.3.10-py3-none-any.whl.metadata (624 bytes) Collecting referencing>=0.28.4 (from jsonschema<5,>=2.5.0->kas==4.2) Downloading referencing-0.34.0-py3-none-any.whl.metadata (2.8 kB) Collecting rpds-py>=0.7.1 (from jsonschema<5,>=2.5.0->kas==4.2) Using cached rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB) Collecting zipp>=3.1.0 (from importlib-resources>=1.4.0->jsonschema<5,>=2.5.0->kas==4.2) Downloading zipp-3.18.1-py3-none-any.whl.metadata (3.5 kB) Downloading distro-1.9.0-py3-none-any.whl (20 kB) Using cached jsonschema-4.21.1-py3-none-any.whl (85 kB) Downloading kconfiglib-14.1.0-py2.py3-none-any.whl (145 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 145.9/145.9 kB 12.2 MB/s eta 0:00:00 Using cached PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (736 kB) Using cached attrs-23.2.0-py3-none-any.whl (60 kB) Downloading importlib_resources-6.4.0-py3-none-any.whl (38 kB) Using cached jsonschema_specifications-2023.12.1-py3-none-any.whl (18 kB) Using cached pkgutil_resolve_name-1.3.10-py3-none-any.whl (4.7 kB) Downloading referencing-0.34.0-py3-none-any.whl (26 kB) Using cached rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB) Downloading zipp-3.18.1-py3-none-any.whl (8.2 kB) Building wheels for collected packages: kas Building wheel for kas (pyproject.toml) ... done Created wheel for kas: filename=kas-4.2-py3-none-any.whl size=57786 sha256=919ab9cedc442039708d8846f9fb02e8b43d823cb54d8785737bf46361c594a6 Stored in directory: /home/dvdk/.cache/pip/wheels/5f/47/a7/e9a292a85a88f96c6b3d834d5e9aceb6927ae2e2b89b123ecb Successfully built kas Installing collected packages: zipp, rpds-py, PyYAML, pkgutil-resolve-name, kconfiglib, distro, attrs, referencing, importlib-resources, jsonschema-specifications, jsonschema, kas Successfully installed PyYAML-6.0.1 attrs-23.2.0 distro-1.9.0 importlib-resources-6.4.0 jsonschema-4.21.1 jsonschema-specifications-2023.12.1 kas-4.2 kconfiglib-14.1.0 pkgutil-resolve-name-1.3.10 referencing-0.34.0 rpds-py-0.18.0 zipp-3.18.1 (venv) dvdk@vagrant:~$
then, create an working directory and fetch the meta-desk-mx
repositories with the proper branch:
(venv) dvdk@vagrant:~$ mkdir desk-mx-l/yocto (venv) dvdk@vagrant:~$ cd desk-mx-l/yocto (venv) dvdk@vagrant:~/desk-mx-l/yocto$ git clone git@git.dave.eu:desk-mx-l/meta-desk-mx.git -b desk-mx6ul-l-4.2.1
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 20GiB of disk space is required for the 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 the initialization phase, developers can choose the Yocto image to build with KAS
- for example build of
dave-image-devel
image withDESK-MX6UL-L
AxelULite
machine andfsl-imx-fb
distro, enter the repo directory and
(venv) dvdk@vagrant:~/desk-mx-l/yocto$ cd meta-desk-mx/ (venv) dvdk@vagrant:~/desk-mx-l/yocto/meta-desk-mx$ kas build desk-mx6ul-axelulite_devel_fb.yml
- for example build of
dave-image-devel
image withDESK-MX6UL-L
SBC Rialto
machine andfsl-imx-fb
distro, enter the repo directory and
(venv) dvdk@vagrant:~/desk-mx-l/yocto$ cd meta-desk-mx/ (venv) dvdk@vagrant:~/desk-mx-l/yocto/meta-desk-mx$ kas build desk-mx6ul-rialto_devel_fb.yml
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]
In way to get the corresponding SDK for QT6, perform the following command:
(venv) dvdk@vagrant:~/desk-mx-l/yocto/meta-desk-mx$ KAS_TASK="populate_sdk" kas build desk-mx6ul-axelulite_qt6_fb.yml
Generating the Toolchain[edit | edit source]
The toolchain can be created by the following command:
(venv) dvdk@vagrant:~/desk-mx-l/yocto/meta-desk-mx$ KAS_TARGET="meta-toolchain" kas build desk-mx6ul-axelulite_devel_fb.yml
(venv) dvdk@vagrant:~/desk-mx-l/yocto/meta-desk-mx$ KAS_TARGET="meta-toolchain" kas build desk-mx6ul-rialto_devel_fb.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 build desk-mx6ul-axelulite_devel_fb.yml
(venv) dvdk@vagrant:~/desk-mx-l/yocto/meta-desk-mx$ KAS_TARGET="memtester" kas build desk-mx6ul-rialto_devel_fb.yml
How to create a bootable SD card[edit | edit source]
The procedure described here was tested with a virtual machine such as the MVM. The USB controller of the MVM should be enabled by default. If you are using Linux-based distribution and are having trouble detecting a USB device in virtual machine, please make sure your user belongs to the vboxusers group. |
This article shows how to create a bootable microSD for the DESK-MX6UL-L Release Notes kit by using a simple bash script.
Note: Note: Starting from DESK-MX6UL-L 1.0.1 release the support for the SPL has been introduced in U-Boot. Previous versions of this script will no longer produce a fully functional and bootable microSD card.
The procedure has been tested on a MVM released with DESK-MX6UL-L 4.0.1 release with
- a 32 GB microSD card [1]
- a USB SD card reader
- the binary files delivered along with the DESK-MX6UL-L 4.0.0
The resulting card is partitioned as depicted here below:
- bootable partition (mmcblk0p1, vfat) containing:
- binary images (U-Boot and kernel images)
- root file system partition (mmcblk0p2, ext3)
- root file system binaries and init scripts
The script - named mksd.sh
- can be realized with the following code:
#!/bin/bash if [[ -z $1 || -z $2 || -z $3 || -z $4 || -z $5 ]] then echo "$0 Usage:" echo " $0 <device> <u-boot.img> <SPL> <binaries directory> <rootfs tar.bz2>" echo " Example: $0 /dev/sdc u-boot.img SPL binaries/ rootfs.tar.bz2" exit fi if [ "$(whoami)" != "root" ] then echo "you must be root to run this script!" exit fi if ! [[ -b $1 ]] then echo "$1 is not a valid block device!" exit fi if ! [[ -e $2 ]] then echo "Incorrect u-boot.img location!" exit fi if ! [[ -e $3 ]] then echo "Incorrect SPL location!" exit fi if ! [[ -d $4 ]] then echo "Incorrect Binaries location!" exit fi if ! [[ -f $5 ]] then echo "Incorrect rootfs location!" exit fi DRIVE=$1 if [[ "$DRIVE" == *"mmcblk"* ]] then echo "You're using a mmc device, I need to fix partition names" PART="p" else PART="" fi UBOOT=$2 SPL=$3 BINARIES=$4 RFS=$5 echo "All data on "$DRIVE" now will be destroyed! Continue? [y/n]" read ans if ! [ $ans == 'y' ] then exit fi echo "[Partitioning $1...]" dd if=/dev/zero of=$DRIVE bs=1024 count=1024 SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'` echo DISK SIZE - $SIZE bytes CYLINDERS=`echo $SIZE/255/63/512 | bc` # check if we're running an old (e.g. 2.20.x) or new (e.g. 2.24.x) sfdisk sfdisk --help | grep -- -H if [ "$?" -eq "0" ] then { echo 40,1380,0x0c,* echo 1420,,83,- } | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE else { echo 16M,8176M,0x0c,* echo 8192M,,83,- } | sfdisk $DRIVE fi partprobe echo "[Making filesystems...]" mkfs.vfat -F 32 -n BOOT "$DRIVE$PART"1 #> /dev/null mkfs.ext3 -F -L ROOTFS "$DRIVE$PART"2 #> /dev/null # wait for the VM to recognize the uSD sleep 60 echo "[Copying files...]" binaries_dir=${BINARIES%/} mount "$DRIVE$PART"1 /mnt cp -av --no-preserve=ownership $binaries_dir/* /mnt/ umount "$DRIVE$PART"1 echo "[Extracting rfs (this may take a while...)]" mount "$DRIVE$PART"2 /mnt tar jxf $RFS -C /mnt > /dev/null chmod 755 /mnt umount "$DRIVE$PART"2 echo "[Programming SPL]" dd if=$SPL of=$DRIVE bs=512 seek=2 conv=fsync echo "[Programming u-boot.img]" dd if=$UBOOT of=$DRIVE bs=1k seek=69 conv=fsync echo "[Done]"
Here is an example that shows how to use this script. We use here files delivered with DESK-MX6UL-L 4.0.0 release. Before invoking the script, the following files has to be renamed in order to make them compatible with the default U-Boot environment variables:
- bootscript:
boot.scr
- splash image:
splash_image.bmp
- Linux kernel:
desk-mx6ul-l-4.0.0_uImage
- Device tree blob:
desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb
.
In the case of you don't have some file on MVM, please download it from mirro.dave.eu.
We will copy them into ~/desk-mx-l/desk
directory. Needed binary files can be found on MVM
in the following location:
dvdk@vagrant:~$ ll /tftpboot/desk-mx6ul-l/ total 11352 -rw-r--r-- 1 dvdk root 32964 Mar 31 11:01 desk-mx6ul-l-4.0.0-imx6ul-axelulite-cb003a.dtb -rw-r--r-- 1 dvdk root 32002 Mar 31 11:01 desk-mx6ul-l-4.0.0-imx6ul-axelulite-cb006c.dtb -rw-r--r-- 1 dvdk root 33028 Mar 31 11:01 desk-mx6ul-l-4.0.0-imx6ul-lynx-som0013-cb002f.dtb -rw-r--r-- 1 dvdk root 8017976 Mar 31 11:01 desk-mx6ul-l-4.0.0-uImage -rw-r--r-- 1 dvdk root 35840 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_axelulite_SPL -rw-r--r-- 1 dvdk root 48128 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_axelulite_spi_SPL -rw-r--r-- 1 dvdk root 552184 Mar 31 11:00 desk-mx6ul-l-4.0.0-mx6uldesk_axelulite_spi_u-boot.img -rw-r--r-- 1 dvdk root 551704 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_axelulite_u-boot.img -rw-r--r-- 1 dvdk root 35840 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_lynx_SPL -rw-r--r-- 1 dvdk root 48128 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_lynx_spi_SPL -rw-r--r-- 1 dvdk root 517248 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_lynx_spi_u-boot.img -rw-r--r-- 1 dvdk root 516776 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_lynx_u-boot.img -rw-r--r-- 1 dvdk root 1152054 Mar 31 10:59 splash_image.bmp dvdk@vagrant:~$ mkdir -p ~/desk-mx-l/desk dvdk@vagrant:~$ cp /tftpboot/desk-mx6ul-l/desk-mx6ul-l-4.0.0_uImage ~/desk-mx-l/desk/desk-mx6ul-l-4.0.0_uImage dvdk@vagrant:~$ cp /tftpboot/desk-mx6ul-l/desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb ~/desk-mx-l/desk/desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb dvdk@vagrant:~$ cp /tftpboot/desk-mx6ul-l/splash_image.bmp ~/desk-mx-l/desk/ dvdk@vagrant:~$ cp ~/desk-mx-l/boot.scr ~/desk-mx-l/desk/boot.scr dvdk@vagrant:~$ cp ~/desk-mx-l/rfs/desk-mx6ul-l-4.0.0_modules.tar.gz ~/desk-mx-l/desk/
You can now run the script, by passing the following parameters:
- Device file of the microSD card (
/dev/sdb
in the example) - U-Boot image
- SPL
- Path of the directory containing the bootscript file, the Linux kernel image, and the device tree blob files
- Archive of the target's root file system (compressed as
.tar.bz2
file).
dvdk@vagrant:~/desk-mx-l$ sudo umount /dev/sdb* dvdk@vagrant:~/desk-mx-l$ sudo ./desk-mx6ul-l-4.0.1_mksd.sh /dev/sdb /tftpboot/desk-mx6ul-l/desk-mx6ul-l-4.0.0_mx6uldesk_axelulite_u-boot.img /tftpboot/desk-mx6ul-l/desk-mx6ul-l-4.0.0_mx6uldesk_axelulite_SPL ~/desk-mx-l/desk ./rfs/desk-mx6ul-l-4.0.1_dave-image-devel-desk-mx6ul.tar.bz2 All data on /dev/sdb now will be destroyed! Continue? [y/n] y [Partitioning /dev/sdb...] 1024+0 records in 1024+0 records out 1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.262305 s, 4.0 MB/s DISK SIZE - 31002198016 bytes Checking that no-one is using this disk right now ... OK Disk /dev/sdb: 28.89 GiB, 31002198016 bytes, 60551168 sectors Disk model: Transcend Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes >>> Created a new DOS disklabel with disk identifier 0x937180d6. /dev/sdb1: Created a new partition 1 of type 'W95 FAT32 (LBA)' and of size 8 GiB. /dev/sdb2: Created a new partition 2 of type 'Linux' and of size 20.9 GiB. /dev/sdb3: Done. New situation: Disklabel type: dos Disk identifier: 0x937180d6 Device Boot Start End Sectors Size Id Type /dev/sdb1 * 32768 16777215 16744448 8G c W95 FAT32 (LBA) /dev/sdb2 16777216 60551167 43773952 20.9G 83 Linux The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. [Making filesystems...] mkfs.fat 4.1 (2017-01-24) mke2fs 1.45.5 (07-Jan-2020) /dev/sdb2 contains a ext3 file system labelled 'ROOTFS' created on Mon Apr 3 10:19:52 2023 Creating filesystem with 5471744 4k blocks and 1368064 inodes Filesystem UUID: a0208180-9d1c-47e8-a8e0-c92a63a7059a Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done [Copying files...] '/home/dvdk/desk-mx-l/desk/boot.scr' -> '/mnt/boot.scr' '/home/dvdk/desk-mx-l/desk/desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb' -> '/mnt/desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb' '/home/dvdk/desk-mx-l/desk/desk-mx6ul-l-4.0.0_uImage' -> '/mnt/desk-mx6ul-l-4.0.0_uImage' '/home/dvdk/desk-mx-l/desk/splash_image.bmp' -> '/mnt/splash_image.bmp' [Extracting rfs (this may take a while...)] [Programming SPL] 70+0 records in 70+0 records out 35840 bytes (36 kB, 35 KiB) copied, 0.0120358 s, 3.0 MB/s [Programming u-boot.img] 538+1 records in 538+1 records out 551704 bytes (552 kB, 539 KiB) copied, 0.164175 s, 3.4 MB/s [Done]
[1] In case you have a different size, you'll need to change the sfdisk
parameters accordingly.
bootscr[edit | edit source]
Once you got the new binaries compiled from your modified sources, they have to be installed on first SD partition preserving the original file names used into boot.scr U-Boot bootscript.
Here below there is an example on how to create a boot.scr
file from the bootscript.txt for booting from SD card:
echo 'bootscript generated with command "mkimage -A ARM -T script -C none -n DESK-MX6UL -d bootscript.txt boot.scr"' setenv desk_release 'desk-mx6ul-l-4.0.0' if test 0x${som_configid#} = 0x00000013 && test 0x${cb_configid#} = 0x0000002f; then setenv fdtfile ${desk_release}_imx6ul-lynx-som0013-cb002f.dtb elif test 0x${cb_configid#} = 0x0000003a then setenv fdtfile ${desk_release}_imx6ul-axelulite-cb003a.dtb elif test 0x${cb_configid#} = 0x0000006c then setenv fdtfile ${desk_release}_imx6ul-axelulite-cb006c.dtb else echo Invalid CB! Autoreset ... sleep 30 reset fi setenv bootfile ${desk_release}_uImage setenv mmc_loadk 'fatload mmc ${mmcdev}:1 ${loadaddr} ${bootfile}' setenv mmc_loadfdt 'fatload mmc ${mmcdev}:1 ${fdtaddr} ${fdtfile}' echo Booting DESK-MX6UL via mmcboot with ${fdtfile} as device tree run mmcboot echo mmcboot FAILURE
and compile it using:
mkimage -A ARM -T script -C none -n DESK-MX6UL -d bootscript.txt boot.scr
Then copy the boot.scr into the <binaries_dir>
directories used by the script to create the SD card.
Install Module[edit | edit source]
To install kernel modules, follow the steps below.
root@desk-mx6ul-axelulite:~# sudo mount /dev/mmcblk0p1 /media root@desk-mx6ul-axelulite:~# tar xvzf /media/desk-mx6ul-l-4.0.0_modules.tar.gz -C /
After installation, run the following command to verify that the installation was successful:
root@desk-mx6ul-axelulite:~# ls -l /lib/modules/$(uname -r) total 300 lrwxrwxrwx 1 541 502 65 Apr 3 2023 build -> /home/jenkins/workspace/workspace/DESK-MX6UL-L-4.x.x_Linux-kernel drwxr-xr-x 6 541 502 4096 Apr 3 2023 kernel -rw-r--r-- 1 541 502 2718 Apr 3 2023 modules.alias -rw-r--r-- 1 541 502 4768 Apr 3 2023 modules.alias.bin -rw-r--r-- 1 541 502 14878 Apr 3 2023 modules.builtin -rw-r--r-- 1 541 502 34704 Apr 3 2023 modules.builtin.alias.bin -rw-r--r-- 1 541 502 17778 Apr 3 2023 modules.builtin.bin -rw-r--r-- 1 541 502 105373 Apr 3 2023 modules.builtin.modinfo -rw-r--r-- 1 541 502 10689 Apr 3 2023 modules.dep -rw-r--r-- 1 541 502 21666 Apr 3 2023 modules.dep.bin -rw-r--r-- 1 541 502 0 Apr 3 2023 modules.devname -rw-r--r-- 1 541 502 8657 Apr 3 2023 modules.order -rw-r--r-- 1 541 502 85 Apr 3 2023 modules.softdep -rw-r--r-- 1 541 502 16970 Apr 3 2023 modules.symbols -rw-r--r-- 1 541 502 23964 Apr 3 2023 modules.symbols.bin lrwxrwxrwx 1 541 502 65 Apr 3 2023 source -> /home/jenkins/workspace/workspace/DESK-MX6UL-L-4.x.x_Linux-kernel
Hello word example[edit | edit source]
Here below 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]
It is assumed that the development environment has been set up properly as described here.
- 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 ~/desk-mx-l/desk-mx6ul-l-1.0.1_env.sh
- as you can see here below, the
$CC
environment variable has been properly configured for using the SDKsysroot
parameter:
dvdk@vagrant:~/myproject$ echo $CC arm-poky-linux-gnueabi-gcc -march=armv7ve -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/home/dvdk/desk-mx-l/sdk/desk-mx6ul-l-1.0.1-toolchain/sysroots/cortexa7hf-neon-poky-linux-gnueabi dvdk@vagrant:~/myproject$
- invoke the cross-compiler for compiling your source code example: the object file obtained, is a proper ELF 32-bit for the target microprocessor
dvdk@vagrant:~/myproject$ $CC hello.c -o hello dvdk@vagrant:~/myproject$ file hello hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=9afa4b55f9a187d69a3a8356ea2d2afc3565cf7a, 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-mx6ul-l/home/root/ dvdk@vagrant:~/myproject$ sudo ls -la /home/dvdk/desk-mx-l/rfs/desk-mx6ul-l/home/root/ total 32 drwx------ 2 root root 4096 Jun 8 12:36 . drwxr-xr-x 3 root root 4096 Jan 28 23:54 .. -rwxr-xr-x 1 root root 16432 Jun 8 12:36 hello -rw-r--r-- 1 root root 1011 Nov 25 2020 .profile dvdk@vagrant:~/myproject$
on the target:
... ... ... [ OK ] Started Getty on tty1. [ OK ] Reached target Login Prompts. [ OK ] Started Job spooling tools. Starting Network Time Service (one-shot ntpdate mode)... Starting System Logging Service... [ OK ] Reached target Timers. [ OK ] Started RPC Bind Service. [ OK ] Started Avahi mDNS/DNS-SD Stack. [ OK ] Started Telephony service. [ OK ] Started NFS status monitor for NFSv2/3 locking.. [ OK ] Started Network Time Service (one-shot ntpdate mode). NXP i.MX Release Distro 4.14-sumo desk-mx6ul-axelulite ttymxc0 desk-mx6ul-axelulite login: root root@desk-mx6ul-axelulite:~# ls -la total 32 drwx------ 2 root root 4096 Jul 2 2021 . drwxr-xr-x 3 root root 4096 Jun 16 2021 .. -rw------- 1 root root 25 Jun 29 2021 .bash_history -rwxr-xr-x 1 root root 16436 Jul 2 2021 hello root@desk-mx6ul-axelulite:~# ./hello Hello, World! root@desk-mx6ul-axelulite:~#
Deployment[edit | edit source]
Booting from NAND flash[edit | edit source]
With respect to the NOR flash memories, NAND devices are known to be quite challenging 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.
This document provides information about the NAND device management, in order to handle it properly when it is used as the boot device on NXP i.MX6-based products.
Even though the example shown here refers to an i.MX6 UltraLite board, the approach is substantially the same across all the i.MX6 family.
The test bed used in this example consists of an i.MX6 UltraLite board equipped with a 128MB 8-bit asynchronous 1-bit ECC SLC NAND memory which is connected to the EIM bus of the SoC. The boot firmware image is the U-Boot binary files (desk-mx6ul-l-1.0.2_mx6uldesk_axelulite_nand_SPL
and desk-mx6ul-l-1.0.2_mx6uldesk_axelulite_nand_u-boot.img
). Its size is about 535 kB. From the point of view of MTD partitions, the boot partition for SPL is mtd0
is 2MB while the second stage partition mtd1
is 6MB.
Boot partition organization[edit | edit source]
The following image shows the organization of the boot partition.
The bootrom plays a major role in the boot process of any i.MX6 SoC. In case the NAND memory is the boot devices, this implies that the boot partition must be organized in order fulfill the bootrom requirements. Specifically, it contains:
- A 1MB area (named Flash Control Block, FCB) which, in turn, includes
- A data structure called NAND Control Block (NCB)
- Three addresses which indicate where are located
- The Discovered Bad Block Table (DBBT) which is the data structure used to manage the bad blocks of the NAND flash
- The first copy of the firmware to load
- The second (redundant) copy of the firmware to load
- The DBBT
- The first copy of the firmware
- The second copy of the firmware.
For more details about the bootrom e the NAND boot process, please refer to the System Boot chapter of the Reference Manual of the specific i.MX6 Application Processor.
The following section will describe how to burn the boot partition in practice.
How to burn the boot partition[edit | edit source]
The burning of the boot partition is performed by the kobs-ng
tool and the standard flash_erase
and nandwrite
flash utilities.
When the NAND flash is not burned yet, the product is usually configured in order to boot from a different device such as an SD card or through serial download mode. Once the Linux kernel is up and running, the kobs-ng
can be run as shown in the following example:
root@desk-mx6ul-axelulite:~# kobs-ng -x -v -w desk-mx6ul-l-1.0.2_mx6uldesk_axelulite_nand_SPL MTD CONFIG: chip_0_device_path = "/dev/mtd0" chip_1_device_path = "(null)" search_exponent = 2 data_setup_time = 80 data_hold_time = 60 address_setup_time = 25 data_sample_time = 6 row_address_size = 3 column_address_size = 2 read_command_code1 = 0 read_command_code2 = 48 boot_stream_major_version = 1 boot_stream_minor_version = 0 boot_stream_sub_version = 0 ncb_version = 3 boot_stream_1_address = 0 boot_stream_2_address = 0 secondary_boot_stream_off_in_MB = 64 -- We add the 1k-padding to the uboot. .tmp_kobs_ng: verifying using key '00000000000000000000000000000000' .tmp_kobs_ng: is a valid bootstream for key '00000000000000000000000000000000' mtd: use new bch layout raw access mode mtd: opening: "/dev/mtd0" NFC geometry : ECC Strength : 2 Page Size in Bytes : 2071 Metadata size : 10 ECC Chunk Size in byte : 512 ECC Chunk count : 4 Block Mark Byte Offset : 2028 Block Mark Bit Offset : 2 ==================================================== mtd: opened '/dev/mtd0' - '(null)' mtd: max_boot_stream_size_in_bytes = 524288 mtd: boot_stream_size_in_bytes = 57344 mtd: boot_stream_size_in_pages = 28 mtd: #1 0x00100000 - 0x00180000 (0x0010e000) mtd: #2 0x00180000 - 0x00200000 (0x0018e000) FCB m_u32Checksum = 0x00000000 m_u32FingerPrint = 0x20424346 m_u32Version = 0x01000000 m_NANDTiming.m_u8DataSetup = 80 m_NANDTiming.m_u8DataHold = 60 m_NANDTiming.m_u8AddressSetup = 25 m_NANDTiming.m_u8DSAMPLE_TIME = 6 m_u32PageDataSize = 2048 m_u32TotalPageSize = 2112 m_u32SectorsPerBlock = 64 m_u32NumberOfNANDs = 0 m_u32TotalInternalDie = 0 m_u32CellType = 0 m_u32EccBlockNEccType = 1 m_u32EccBlock0Size = 512 m_u32EccBlockNSize = 512 m_u32EccBlock0EccType = 1 m_u32MetadataBytes = 10 m_u32NumEccBlocksPerPage = 3 m_u32EccBlockNEccLevelSDK = 0 m_u32EccBlock0SizeSDK = 0 m_u32EccBlockNSizeSDK = 0 m_u32EccBlock0EccLevelSDK = 0 m_u32NumEccBlocksPerPageSDK = 0 m_u32MetadataBytesSDK = 0 m_u32EraseThreshold = 0 m_u32Firmware1_startingPage = 512 m_u32Firmware2_startingPage = 768 m_u32PagesInFirmware1 = 28 m_u32PagesInFirmware2 = 28 m_u32DBBTSearchAreaStartAddress = 256 m_u32BadBlockMarkerByte = 2028 m_u32BadBlockMarkerStartBit = 2 m_u32BBMarkerPhysicalOffset = 2048 m_u32BCHType = 0 m_NANDTMTiming.m_u32TMTiming2_ReadLatency = 0 m_NANDTMTiming.m_u32TMTiming2_PreambleDelay = 0 m_NANDTMTiming.m_u32TMTiming2_CEDelay = 0 m_NANDTMTiming.m_u32TMTiming2_PostambleDelay = 0 m_NANDTMTiming.m_u32TMTiming2_CmdAddPause = 0 m_NANDTMTiming.m_u32TMTiming2_DataPause = 0 m_NANDTMTiming.m_u32TMSpeed = 0 m_NANDTMTiming.m_u32TMTiming1_BusyTimeout = 0 m_u32DISBBM = 0 m_u32BBMarkerPhysicalOffsetInSpareData = 0 m_u32OnfiSyncEnable = 0 m_NANDONFITiming.m_u32ONFISpeed = 0 m_NANDONFITiming.m_u32ONFITiming_ReadLatency = 0 m_NANDONFITiming.m_u32ONFITiming_CEDelay = 0 m_NANDONFITiming.m_u32ONFITiming_PreambleDelay = 0 m_NANDONFITiming.m_u32ONFITiming_PostambleDelay = 0 m_NANDONFITiming.m_u32ONFITiming_CmdAddPause = 0 m_NANDONFITiming.m_u32ONFITiming_DataPause = 0 m_NANDONFITiming.m_u32ONFITiming_BusyTimeout = 0 m_u32DISBBSearch = 0 m_u32RandomizerEnable = 0 m_u32ReadRetryEnable = 0 m_u32ReadRetrySeqLength = 0 DBBT m_u32Checksum = 0x00000000 m_u32FingerPrint = 0x54424244 m_u32Version = 0x01000000 m_u32DBBTNumOfPages = 0 Firmware: image #0 @ 0x100000 size 0xe000 - available 0x80000 Firmware: image #1 @ 0x180000 size 0xe000 - available 0x80000 -------------- Start to write the [ FCB ] ----- mtd: erasing @0:0x0-0x20000 mtd: Writing FCB0 [ @0:0x0 ] (840) * mtd: erasing @0:0x20000-0x40000 mtd: Writing FCB1 [ @0:0x20000 ] (840) * mtd: erasing @0:0x40000-0x60000 mtd: Writing FCB2 [ @0:0x40000 ] (840) * mtd: erasing @0:0x60000-0x80000 mtd: Writing FCB3 [ @0:0x60000 ] (840) * mtd_commit_bcb(FCB): status 0 -------------- Start to write the [ DBBT ] ----- mtd: erasing @0:0x80000-0xa0000 mtd: Writing DBBT0 [ @0:0x80000 ] (800) * mtd: erasing @0:0xa0000-0xc0000 mtd: Writing DBBT1 [ @0:0xa0000 ] (800) * mtd: erasing @0:0xc0000-0xe0000 mtd: Writing DBBT2 [ @0:0xc0000 ] (800) * mtd: erasing @0:0xe0000-0x100000 mtd: Writing DBBT3 [ @0:0xe0000 ] (800) * mtd_commit_bcb(DBBT): status 0 ---------- Start to write the [ .tmp_kobs_ng ]---- mtd: Writting .tmp_kobs_ng: #0 @0: 0x00100000 - 0x0010e000 mtd: erasing @0:0x100000-0x120000 mtd: We write one page for save guard. * mtd: Writting .tmp_kobs_ng: #1 @0: 0x00180000 - 0x0018e000 mtd: erasing @0:0x180000-0x1a0000 mtd: We write one page for save guard. * root@desk-mx6ul-axelulite:~#
then the second mtd1
partition can be written using nandwrite:
root@desk-mx6ul-axelulite:~# flash_erase /dev/mtd1 0 0 Erasing 128 Kibyte @ 5e0000 -- 100 % complete root@desk-mx6ul-axelulite:~# nandwrite -p /dev/mtd1 desk-mx6ul-l-1.0.2_mx6uldesk_axelulite_nand_u-boot.img Writing data to block 0 at offset 0x0 Writing data to block 1 at offset 0x20000 Writing data to block 2 at offset 0x40000 Writing data to block 3 at offset 0x60000 Writing data to block 4 at offset 0x80000 root@desk-mx6ul-axelulite:~#
In this case, the SPL boot partition–/dev/mtd0
, indicated as a parameter of the command line–is 2MB. The u-boot.img partition–/dev/mtd1
is used for the second stage binary image.
Customizing the splash screen[edit | edit source]
Resources[edit | edit source]
For further details on splash screen support in U-Boot, please refer to:
Instructions[edit | edit source]
The following U-Boot environment variables are required:
- splashimage: RAM address where the BMP image is loaded. Please note that it must be a 32-bit aligned address with a 0x2 offset (eg: 0x20000002)
- loadsplash: comand for loading the BMP image from the storage device (e.g flash memory) to RAM. This command is automatically run by U-Boot at startup
Please note that loadsplash command will differ depends on used storage device.
Splash image in NOR SPI flash[edit | edit source]
U-Boot variables[edit | edit source]
loadsplash=run spi_loadsplash spi_loadsplash=sf probe; sf read ${splashimage} 0xa00000 ${splashsize} splashfile=splash_image.bmp splashimage=0x80800000 splashsize=0x120000 loadsplashfile=tftpboot ${loadaddr} desk-mxul-l/${splashfile} spi_updatesplash=sf probe; sf erase 0xa00000 +${filesize}; sf write ${loadaddr} 0xa00000 ${filesize}
Commands[edit | edit source]
The following commands are used to store in NOR SPI flash a BMP image loaded via tftp:
run loadsplashfile run spi_updatesplash
Splash image in NAND flash[edit | edit source]
U-Boot variables[edit | edit source]
mtdparts=mtdparts=gpmi-nand:2M(nand-SPL),6M(nand-uboot),1M(nand-env1),1M(nand-env2),1M(nand-fdt),1M(nand-spare),8M(nand-kernel),4M(nand-splash),-(nand-ubi) loadsplash=run nand_loadsplash nand_loadsplash=nand read ${splashimage} nand-splash ${splashsize} splashfile=splash_image.bmp splashimage=0x80800000 splashsize=0x120000 loadsplashfile=tftpboot ${loadaddr} desk-mxul-l/${splashfile} nand_updatesplash=nand erase.part nand-splash; nand write ${loadaddr} nand-splash ${filesize}
Please note that the NAND mtd partition for the splash image (nand-splash) is defined using the mtdparts
parameter, and then referenced by the nand {erase,read,write} commands.
Commands[edit | edit source]
The following commands are used to store in NAND flash a BMP image loaded via tftp:
run loadsplashfile run nand_updatesplash
Standalone boot[edit | edit source]
Introduction[edit | edit source]
This document was written and tested with the software/hardware combination described in the history table above. However, it contains general concepts that can be adapted on any DAVE Embedded Systems' Linux platform.
The following programming examples are intended for laboratory usage or for preliminary deployment strategy. |
We'll explain how to program and configure a <SOM> to boot in standalone mode, without the need of a system microSD card or an NFS server, with two options:
- booting with NOR and NAND internal storage
- in this configuration the primary boot images will be fetched from NOR flash storage, while the root file system will be fetched from NAND flash
- booting with NAND only
- in this configuration the whole system will boot without the need of a NOR flash storage, all images and the root file system will be fetched from NAND flash
Program boot images into NOR flash[edit | edit source]
U-Boot[edit | edit source]
Update to the latest U-Boot version allows usage of u-boot environment variables available.
=> run load_spl Using FEC0 device TFTP from server 192.168.4.210; our IP address is 192.168.4.230 Filename 'desk-mxul-l/SPL'. Load address: 0x80800000 Loading: ########## 1.4 MiB/s done Bytes transferred = 48128 (bc00 hex) => run spi_update_spl SF: Detected is25lp128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB SF: 65536 bytes @ 0x0 Erased: OK device 0 offset 0x400, size 0xbc00 SF: 48128 bytes @ 0x400 Written: OK => run load_uboot Using FEC0 device TFTP from server 192.168.4.210; our IP address is 192.168.4.230 Filename 'desk-mxul-l/u-boot.img'. Load address: 0x80800000 Loading: ################################################################# ########################################### 1.8 MiB/s done Bytes transferred = 552160 (86ce0 hex) => run spi_update_uboot SF: Detected is25lp128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB SF: 589824 bytes @ 0x10000 Erased: OK device 0 offset 0x10000, size 0x86ce0 SF: 552160 bytes @ 0x10000 Written: OK
kernel image and device tree[edit | edit source]
We assume that the following environment variables are present in U-Boot:
loadk=tftpboot ${loadaddr} ${serverip}:${bootfile} loadfdt=tftpboot ${fdtaddr} ${serverip}:${fdtfile} spi_updatek=sf erase 200000 800000; sf write ${loadaddr} 200000 ${filesize} spi_updatefdt=sf erase 180000 80000; sf write ${fdtaddr} 180000 ${filesize} spi_loadk=sf read ${loadaddr} 200000 800000 spi_loadfdt=sf read ${fdtaddr} 180000 80000 spi_nand=sf probe; run spi_loadk spi_loadfdt nandargs addcons addmisc; if run configid_fixupfdt; then bootm ${loadaddr} - ${fdtaddr}; fi
- Update the
bootfile
andfdtfile
environment variables to fit the filename as found inside the TFTP server. - Program kernel and device tree on NOR flash with the following U-Boot command
sf probe; run loadk spi_updatek loadfdt spi_updatefdt
E.g.:
=> sf probe; run loadk spi_updatek loadfdt spi_updatefdt SF: Detected is25lp128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB Using FEC0 device TFTP from server 192.168.4.210; our IP address is 192.168.4.230 Filename 'desk-mxul-l/uImage'. Load address: 0x80800000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ###### 2.1 MiB/s done Bytes transferred = 8016512 (7a5280 hex) SF: 8388608 bytes @ 0x200000 Erased: OK device 0 offset 0x200000, size 0x7a5280 SF: 8016512 bytes @ 0x200000 Written: OK Using FEC0 device TFTP from server 192.168.4.210; our IP address is 192.168.4.230 Filename 'desk-mxul-l/imx6ul-axelulite-cb003a.dtb'. Load address: 0x83000000 Loading: ####### 804.7 KiB/s done Bytes transferred = 32964 (80c4 hex) SF: 524288 bytes @ 0x180000 Erased: OK device 0 offset 0x180000, size 0x80c4 SF: 32964 bytes @ 0x180000 Written: OK
Reboot the system and configure U-Boot to apply the new configuration
=> setenv bootcmd run spi_nand => saveenv
Program boot images into NAND flash[edit | edit source]
U-Boot[edit | edit source]
U-Boot on NAND flash must be programmed using NXP kobs-ng
utility: this tool is required for writing the correct U-Boot image on NAND storing all information needed by bootrom to identify the NAND as a boot device.
Here below an example:
- boot the system via SD on NFS
- uses a rfs with kobs-ng utility available on it (e.g. DAVE's rfs provided with DESK-MX6UL-L)
- copy the related U-Boot image file on nfs /home/root (for example)
- execute kobs-ng passing the parameters for flashing U-Boot on NAND
root@desk-mx6ul-axelulite:~# kobs-ng -x -v -w desk-mx6ul-l-4.0.0_mx6uldesk_axelulite_SPL MTD CONFIG: chip_0_device_path = "/dev/mtd0" chip_1_device_path = "(null)" search_exponent = 2 data_setup_time = 80 data_hold_time = 60 address_setup_time = 25 data_sample_time = 6 row_address_size = 3 column_address_size = 2 read_command_code1 = 0 read_command_code2 = 48 boot_stream_major_version = 1 boot_stream_minor_version = 0 boot_stream_sub_version = 0 ncb_version = 3 boot_stream_1_address = 0 boot_stream_2_address = 0 secondary_boot_stream_off_in_MB = 64 -- We add the 1k-padding to the uboot. .tmp_kobs_ng: verifying using key '00000000000000000000000000000000' .tmp_kobs_ng: is a valid bootstream for key '00000000000000000000000000000000' mtd: use new bch layout raw access mode mtd: opening: "/dev/mtd0" NFC geometry : ECC Strength : 2 Page Size in Bytes : 2071 Metadata size : 10 ECC Chunk Size in byte : 512 ECC Chunk count : 4 Block Mark Byte Offset : 2028 Block Mark Bit Offset : 2 ==================================================== mtd: opened '/dev/mtd0' - '(null)' mtd: max_boot_stream_size_in_bytes = 524288 mtd: boot_stream_size_in_bytes = 49152 mtd: boot_stream_size_in_pages = 24 mtd: #1 0x00100000 - 0x00180000 (0x0010c000) mtd: #2 0x00180000 - 0x00200000 (0x0018c000) FCB m_u32Checksum = 0x00000000 m_u32FingerPrint = 0x20424346 m_u32Version = 0x01000000 m_NANDTiming.m_u8DataSetup = 80 m_NANDTiming.m_u8DataHold = 60 m_NANDTiming.m_u8AddressSetup = 25 m_NANDTiming.m_u8DSAMPLE_TIME = 6 m_u32PageDataSize = 2048 m_u32TotalPageSize = 2112 m_u32SectorsPerBlock = 64 m_u32NumberOfNANDs = 0 m_u32TotalInternalDie = 0 m_u32CellType = 0 m_u32EccBlockNEccType = 1 m_u32EccBlock0Size = 512 m_u32EccBlockNSize = 512 m_u32EccBlock0EccType = 1 m_u32MetadataBytes = 10 m_u32NumEccBlocksPerPage = 3 m_u32EccBlockNEccLevelSDK = 0 m_u32EccBlock0SizeSDK = 0 m_u32EccBlockNSizeSDK = 0 m_u32EccBlock0EccLevelSDK = 0 m_u32NumEccBlocksPerPageSDK = 0 m_u32MetadataBytesSDK = 0 m_u32EraseThreshold = 0 m_u32Firmware1_startingPage = 512 m_u32Firmware2_startingPage = 768 m_u32PagesInFirmware1 = 24 m_u32PagesInFirmware2 = 24 m_u32DBBTSearchAreaStartAddress = 256 m_u32BadBlockMarkerByte = 2028 m_u32BadBlockMarkerStartBit = 2 m_u32BBMarkerPhysicalOffset = 2048 m_u32BCHType = 0 m_NANDTMTiming.m_u32TMTiming2_ReadLatency = 0 m_NANDTMTiming.m_u32TMTiming2_PreambleDelay = 0 m_NANDTMTiming.m_u32TMTiming2_CEDelay = 0 m_NANDTMTiming.m_u32TMTiming2_PostambleDelay = 0 m_NANDTMTiming.m_u32TMTiming2_CmdAddPause = 0 m_NANDTMTiming.m_u32TMTiming2_DataPause = 0 m_NANDTMTiming.m_u32TMSpeed = 0 m_NANDTMTiming.m_u32TMTiming1_BusyTimeout = 0 m_u32DISBBM = 0 m_u32BBMarkerPhysicalOffsetInSpareData = 0 m_u32OnfiSyncEnable = 0 m_NANDONFITiming.m_u32ONFISpeed = 0 m_NANDONFITiming.m_u32ONFITiming_ReadLatency = 0 m_NANDONFITiming.m_u32ONFITiming_CEDelay = 0 m_NANDONFITiming.m_u32ONFITiming_PreambleDelay = 0 m_NANDONFITiming.m_u32ONFITiming_PostambleDelay = 0 m_NANDONFITiming.m_u32ONFITiming_CmdAddPause = 0 m_NANDONFITiming.m_u32ONFITiming_DataPause = 0 m_NANDONFITiming.m_u32ONFITiming_BusyTimeout = 0 m_u32DISBBSearch = 0 m_u32RandomizerEnable = 0 m_u32ReadRetryEnable = 0 m_u32ReadRetrySeqLength = 0 DBBT m_u32Checksum = 0x00000000 m_u32FingerPrint = 0x54424244 m_u32Version = 0x01000000 m_u32DBBTNumOfPages = 0 Firmware: image #0 @ 0x100000 size 0xc000 - available 0x80000 Firmware: image #1 @ 0x180000 size 0xc000 - available 0x80000 -------------- Start to write the [ FCB ] ----- mtd: erasing @0:0x0-0x20000 mtd: Writing FCB0 [ @0:0x0 ] (840) * mtd: erasing @0:0x20000-0x40000 mtd: Writing FCB1 [ @0:0x20000 ] (840) * mtd: erasing @0:0x40000-0x60000 mtd: Writing FCB2 [ @0:0x40000 ] (840) * mtd: erasing @0:0x60000-0x80000 mtd: Writing FCB3 [ @0:0x60000 ] (840) * mtd_commit_bcb(FCB): status 0 -------------- Start to write the [ DBBT ] ----- mtd: erasing @0:0x80000-0xa0000 mtd: Writing DBBT0 [ @0:0x80000 ] (800) * mtd: erasing @0:0xa0000-0xc0000 mtd: Writing DBBT1 [ @0:0xa0000 ] (800) * mtd: erasing @0:0xc0000-0xe0000 mtd: Writing DBBT2 [ @0:0xc0000 ] (800) * mtd: erasing @0:0xe0000-0x100000 mtd: Writing DBBT3 [ @0:0xe0000 ] (800) * mtd_commit_bcb(DBBT): status 0 ---------- Start to write the [ .tmp_kobs_ng ]---- mtd: Writting .tmp_kobs_ng: #0 @0: 0x00100000 - 0x0010c000 mtd: erasing @0:0x100000-0x120000 mtd: We write one page for save guard. * mtd: Writting .tmp_kobs_ng: #1 @0: 0x00180000 - 0x0018c000 mtd: erasing @0:0x180000-0x1a0000 mtd: We write one page for save guard. * </pre> then the second <code>mtd1</code> partition can be written using ''nandwrite'': <pre class="workstation-terminal"> root@desk-mx6ul-axelulite:~# flash_erase /dev/mtd1 0 0 Erasing 128 Kibyte @ 5e0000 -- 100 % complete root@desk-mx6ul-axelulite:~# nandwrite -p /dev/mtd1 desk-mx6ul-l-3.0.0_mx6uldesk_axelulite_u-boot.img Writing data to block 0 at offset 0x0 Writing data to block 1 at offset 0x20000 Writing data to block 2 at offset 0x40000 Writing data to block 3 at offset 0x60000 Writing data to block 4 at offset 0x80000
kernel image and device tree[edit | edit source]
We assume that the following environment variables are present in u-boot:
nand_updatek=nand erase.part nand-kernel; nand write ${loadaddr} nand-kernel ${filesize} nand_updatefdt=nand erase.part nand-fdt; nand write ${fdtaddr} nand-fdt ${filesize} nand_loadk=nand read ${loadaddr} nand-kernel nand_loadfdt=nand read ${fdtaddr} nand-fdt nand_nand=run nand_loadk nand_loadfdt nandargs addcons addmisc; if run configid_fixupfdt; then bootm ${loadaddr} - ${fdtaddr}; fi
- Update the
bootfile
andfdtfile
environment variables to fit the filename as found inside the TFTP server. - Program kernel and device tree on NAND flash with the following U-Boot command
run loadk nand_updatek loadfdt nand_updatefdt
E.g.:
=> run loadk nand_updatek loadfdt nand_updatefdt Using FEC0 device TFTP from server 192.168.4.210; our IP address is 192.168.4.159 Filename 'desk-mxul-l/uImage'. Load address: 0x80800000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ###### 2.1 MiB/s done Bytes transferred = 8016512 (7a5280 hex) NAND erase.part: device 0 offset 0xc00000, size 0x800000 Erasing at 0x13e0000 -- 100% complete. OK NAND write: device 0 offset 0xc00000, size 0x7a5280 8016512 bytes written: OK Using FEC0 device TFTP from server 192.168.4.210; our IP address is 192.168.4.159 Filename 'desk-mxul-l/imx6ul-axelulite-cb003a.dtb'. Load address: 0x83000000 Loading: ####### 804.7 KiB/s done Bytes transferred = 32964 (80c4 hex) NAND erase.part: device 0 offset 0xa00000, size 0x100000 Erasing at 0xae0000 -- 100% complete. OK NAND write: device 0 offset 0xa00000, size 0x80c4 32964 bytes written: OK
Reboot the system and configure U-Boot to apply the new configuration
=> setenv bootcmd run nand_nand => saveenv
Program root file system into NAND flash[edit | edit source]
- boot the system via SD or NFS as described in the Booting from NFS
- by default, the NAND is already partitioned to allow booting from NAND-only (see next section) and, thus, some partitions are reserved for u-boot and kernel images. Here we won't modify this default configuration. The MTD partitions can be dumped with
/proc/mtd
(the partition's name should be self-explanatory)
root@desk-mx6ul-axelulite:~# cat /proc/mtd dev: size erasesize name mtd0: 00200000 00020000 "nand-SPL" mtd1: 00600000 00020000 "nand-uboot" mtd2: 00100000 00020000 "nand-env1" mtd3: 00100000 00020000 "nand-env2" mtd4: 00100000 00020000 "nand-fdt" mtd5: 00100000 00020000 "nand-spare" mtd6: 00800000 00020000 "nand-kernel" mtd7: 00400000 00020000 "nand-splash" mtd8: 06800000 00020000 "nand-ubi" mtd9: 00010000 00001000 "spi-SPL" mtd10: 000f0000 00001000 "spi-uboot" mtd11: 00040000 00001000 "spi-env1" mtd12: 00040000 00001000 "spi-env2" mtd13: 00080000 00001000 "spi-dtb" mtd14: 00800000 00001000 "spi-kernel" mtd15: 00400000 00001000 "spi-splash" mtd16: 00200000 00001000 "spi-free"
Please note that MTD partition index may change depending of flash device availability, flash device size, u-boot environment variables or kernel device driver load order. Always take care of looking inside |
- Format and initialize nand-ubi partition, which in our case is
mtd8
, using UBI with:
ubiformat /dev/mtd8 ubiattach -m 8 ubimkvol /dev/ubi0 -N rootfs -m
E.g.
root@desk-mx6ul-axelulite:~# ubiformat /dev/mtd8 ubiformat: mtd8 (nand), size 109051904 bytes (104.0 MiB), 832 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes libscan: scanning eraseblock 831 -- 100 % complete ubiformat: 832 eraseblocks have valid erase counter, mean value is 39 ubiformat: formatting eraseblock 831 -- 100 % complete root@desk-mx6ul-axelulite:~# ubiattach -m 8 UBI device number 0, total 832 LEBs (105644032 bytes, 100.7 MiB), available 808 LEBs (102596608 bytes, 97.8 MiB), LEB size 126976 bytes (124.0 KiB) root@desk-mx6ul-axelulite:~# ubimkvol /dev/ubi0 -N rootfs -m Set volume size to 102596608 Volume ID 0, size 808 LEBs (102596608 bytes, 97.8 MiB), LEB size 126976 bytes (124.0 KiB), dynamic, name "rootfs", alignment 1
- Now mount the UBI volume using UBIFS in a temporary directory
mkdir -p /mnt/nand mount -t ubifs ubi0_0 /mnt/nand
E.g.:
root@desk-mx6ul-axelulite:~# mkdir -p /mnt/nand root@desk-mx6ul-axelulite:~# mount -t ubifs ubi0_0 /mnt/nand/ root@desk-mx6ul-axelulite:~# dmesg | tail -n 7 [ 86.268589] UBIFS (ubi0:0): Mounting in unauthenticated mode [ 86.272276] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 276 [ 86.302293] UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "rootfs" [ 86.302349] UBIFS (ubi0:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes [ 86.302377] UBIFS (ubi0:0): FS size: 101199872 bytes (96 MiB, 797 LEBs), max 808 LEBs, journal size 5079040 bytes (4 MiB, 40 LEBs) [ 86.302411] UBIFS (ubi0:0): reserved for root: 4779919 bytes (4667 KiB) [ 86.302431] UBIFS (ubi0:0): media format: w5/r0 (latest is w5/r0), UUID 36C676F6-9160-4334-B687-9CEE57A30FEF, small LPT model
- you can now extract the root file system into that directory
tar xvjf desk-image-qt5-desk-mx6ul-axelulite.tar.bz2 -C /mnt/nand/
- finally, you need to cleanly umount and detach the MTD partition
umount /mnt/nand/ ubidetach -m 8
E.g.
root@desk-mx6ul-axelulite:~# umount /mnt/nand/ root@desk-mx6ul-axelulite:~# ubidetach -m 8 root@desk-mx6ul-axelulite:~# dmesg | tail -n 4 [ 105.493236] UBIFS (ubi0:0): un-mount UBI device 0 [ 105.493401] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" stops [ 109.963440] ubi0: detaching mtd8 [ 109.971275] ubi0: mtd8 is detached
You can now safely reboot or turn off the system.
In U-Boot environment check the following variable, which must contain the same MTD partition number used above
nandargs=setenv bootargs ubi.mtd=8 root=ubi0_0 rootfstype=ubifs rw
Peripherals[edit | edit source]
Peripheral Audio[edit | edit source]
The audio peripheral is not available - as default option - on AXEL ULite EVK. Please contact Sales department for this option. |
Device tree configuration[edit | edit source]
AXEL ULite SOM[edit | edit source]
Here below is an example of device tree configuration for the AXEL ULite SOM (using a special version of AXEL ULite EVK mounting option):
From imx6ul-axelulite-cb006c.dts
:
sound { compatible = "fsl,imx-audio-tlv320aic31xx"; model = "axelulite-audio-tlv320aic3100"; cpu-dai = <&sai2>; audio-codec = <&codec>; audio-routing = "Speaker", "SPK", "Headphone Jack", "HPL", "Headphone Jack", "HPR", "MIC1LP", "Line In", "MIC1LM", "Line In", "MIC1RP", "Mic Jack", "Mic Jack", "MICBIAS"; status = "okay"; }; &i2c4 { clock-frequency = <100000>; pinctrl-names = "default", "recovery"; pinctrl-0 = <&pinctrl_i2c4>; pinctrl-1 = <&pinctrl_i2c4_recovery>; recovery-gpios = <&gpio1 20 0>, <&gpio1 21 0>; status = "okay"; codec: tlv320aic31xx@18 { compatible = "ti,tlv320aic3100"; reg = <0x18>; clocks = <&clks IMX6UL_CLK_SAI2>, <&clks IMX6UL_CLK_DUMMY>; clock-names = "mclk1", "mclk2"; gpio-reset = <&gpio1 27 1>; HPVDD-supply = <®_3p3v>; SPRVDD-supply = <®_3p3v>; SPLVDD-supply = <®_3p3v>; AVDD-supply = <®_3p3v>; IOVDD-supply = <®_3p3v>; DVDD-supply = <®_1p8v>; }; ... ... &iomuxc { pinctrl-0 = <&pinctrl_hog_gpios>; imx6ul-axelulite { tlv320aic3x { pinctrl_tlv320aic3x_1: tlv320aic3x_codecgrp-1{ fsl,pins = < MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK 0x17088 MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC 0x17088 MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088 MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA 0x11088 MX6UL_PAD_JTAG_TMS__SAI2_MCLK 0x17088 MX6UL_PAD_UART3_RTS_B__GPIO1_IO27 0x130b0 /* codec reset */ >; }; }; };
Accessing the peripheral AXEL ULite SOM[edit | edit source]
Access to the audio interface is provided by ALSA (Advanced Linux Sound Architecture), which consists in a kernel driver and a users space library for application developers. A set of standard tools alsa-utils can be used for simple management of the audio codec.
Linux messages at boot time[edit | edit source]
... ... [ 3.314515] imx-tlv320aic31xx sound: tlv320aic31xx-hifi <-> 202c000.sai mapping ok ... ... [ 3.545396] ALSA device list: [ 3.548401] #0: axelulite-audio-tlv320aic3100
To list the audio sound cards just use the aplay
utility:
root@desk-mx6ul-axelulite:~# aplay -l **** List of PLAYBACK Hardware Devices **** card 0: axeluliteaudiot [axelulite-audio-tlv320aic3100], device 0: HiFi tlv320aic31xx-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 root@desk-mx6ul-axelulite:~#
Usage alsa-utils[edit | edit source]
root@desk-mx6ul-axelulite:~# aplay audio8k16S.wav Playing WAVE 'audio8k16S.wav' : Signed 16 bit Little Endian, Rate 8000 Hz, Stereo
Peripheral CAN[edit | edit source]
The CAN peripheral is not available on AXEL ULite EVK. This peripheral is available on the i.MX6UL standard product RIALTO SBC |
Device tree configuration[edit | edit source]
RIALTO SBC[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the RIALTO SBC:
From imx6ul-lynx-som0022-cb0090.dts
:
&can1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_flexcan1>; status = "okay"; };
From imx6ul-lynx-som0022.dtsi
:
... &iomuxc { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_hog_gpios>; imx6ul-lynx { ... ... pinctrl_flexcan1: flexcan1grp{ fsl,pins = < MX6UL_PAD_LCD_DATA09__FLEXCAN1_RX 0x1b020 MX6UL_PAD_LCD_DATA08__FLEXCAN1_TX 0x1b020 >; }; ...
Accessing the peripheral RIALTO SBC[edit | edit source]
Linux messages at boot time[edit | edit source]
... ... [ 3.047454] can: controller area network core [ 3.057221] can: raw protocol [ 3.069417] can: broadcast manager protocol [ 3.073846] can: netlink gateway - max_hops=1 ... ...
Enable the interface and check status[edit | edit source]
root@desk-mx6ul-rialto:~# ip link set can0 type can bitrate 500000 root@desk-mx6ul-rialto:~# ifconfig can0 up root@desk-mx6ul-rialto:~# 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 31 root@desk-mx6ul-rialto:~#
Usage with can-utils[edit | edit source]
root@desk-mx6ul-rialto:~# ip link set can0 type can bitrate 500000 triple-sampling on loopback on root@desk-mx6ul-rialto:~# ifconfig can0 up root@desk-mx6ul-rialto:~# candump can0 & [1] 275 root@desk-mx6ul-rialto:~# interface = can0, family = 29, type = 3, proto = 1 root@desk-mx6ul-rialto:~# cansend can0 -i 0x7ff 00 01 02 03 04 05 06 07 interface = can0, family = 29, type = 3, proto = 1 <0x7ff> [8] 00 01 02 03 04 05 06 07 <0x7ff> [8] 00 01 02 03 04 05 06 07 root@desk-mx6ul-rialto:~#
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.MX6UL fec interface which should be initialized on the device tree.
Device tree configuration[edit | edit source]
Axel ULite SOM[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM:
From imx6ul-axelulite.dtsi
:
&fec1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_enet1>; phy-mode = "rmii"; phy-handle = <ðphy0>; status = "okay"; mdio { #address-cells = <1>; #size-cells = <0>; ethphy0: ethernet-phy@3 { compatible = "ethernet-phy-ieee802.3-c22"; reg = <3>; micrel,led-mode = <1>; clocks = <&clks IMX6UL_CLK_ENET_REF>; clock-names = "rmii-ref"; }; }; }; ... ... &iomuxc { ... ... pinctrl_enet1: enet1grp { fsl,pins = < MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0 MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0 MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0 MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0 MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0 MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0 MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0 MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b0a8 MX6UL_PAD_GPIO1_IO07__ENET1_MDC 0x1b0b0 MX6UL_PAD_GPIO1_IO06__ENET1_MDIO 0x1b0b0 MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x1b0b0 /* ETH_PHY_RST */ MX6UL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x1b0b0 /* ETH_INT */ >; }; ... ... };
RIALTO SBC[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the RIALTO SBC:
From imx6ul-lynx-som0022.dtsi
:
... ... &fec1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_enet1>; phy-mode = "rmii"; phy-handle = <ðphy0>; phy-reset-gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>; phy-reset-post-delay = <50>; status = "okay"; fsl,dev_id = <0>; mdio: mdio { #address-cells = <1>; #size-cells = <0>; ethphy0: ethernet-phy@3 { compatible = "ethernet-phy-ieee802.3-c22"; reg = <0x03>; micrel,led-mode = <1>; clocks = <&clks IMX6UL_CLK_ENET_REF>; clock-names = "rmii-ref"; }; }; }; ... ... &iomuxc { ... ... pinctrl_enet1: enet1grp-1 { fsl,pins = < MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0 MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0 MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0 MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0 MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0 MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0 MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0 MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031 MX6UL_PAD_GPIO1_IO07__ENET1_MDC 0x1b0b0 MX6UL_PAD_GPIO1_IO06__ENET1_MDIO 0x1b0b0 >; }; ... ... pinctrl_enet2: enet2grp { fsl,pins = < MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN 0x1b0b0 MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER 0x1b0b0 MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0 MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0 MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN 0x1b0b0 MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0 MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0 MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b031 >; }; ... ... } ... ...
From imx6ul-lynx-som0022-cb0090.dts
:
... ... &fec2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_enet2>; phy-mode = "rmii"; phy-handle = <ðphy1>; status = "okay"; }; &mdio { ethphy1: ethernet-phy@0 { compatible = "ethernet-phy-ieee802.3-c22"; reg = <0>; micrel,led-mode = <1>; clocks = <&clks IMX6UL_CLK_ENET2_REF>; clock-names = "rmii-ref"; }; }; ... ...
Accessing the peripheral in Axel ULite SOM[edit | edit source]
AXEL ULite SOM provides the primary network interface mapped at eth0
.
Linux messages at boot time[edit | edit source]
... ... [ 1.771162] fec 2188000.ethernet eth0: registered PHC device 0 [ 23.370105] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx ... ... [ 20.262485] Micrel KSZ8081 or KSZ8091 2188000.ethernet-1:03: attached PHY driver (mii_bus:phy_addr=2188000.ethernet-1:03, irq=POLL) ... ...
Cable connection:
... ... [ 93.046409] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx ... ...
Check the interface with ifconfig[edit | edit source]
root@desk-mx6ul-axelulite:~# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.4.159 netmask 255.255.255.0 broadcast 192.168.4.255 inet6 fe80::bc0a:b6ff:fe9b:b0f8 prefixlen 64 scopeid 0x20<link> ether be:0a:b6:9b:b0:f8 txqueuelen 1000 (Ethernet) RX packets 331 bytes 36636 (35.7 KiB) RX errors 0 dropped 47 overruns 0 frame 0 TX packets 77 bytes 11278 (11.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Test with iperf[edit | edit source]
root@desk-mx6ul-axelulite:~# iperf3 -t 5 -c 192.168.4.47 Connecting to host 192.168.4.47, port 5201 [ 5] local 192.168.4.159 port 56244 connected to 192.168.4.47 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 11.3 MBytes 94.7 Mbits/sec 0 143 KBytes [ 5] 1.00-2.00 sec 10.8 MBytes 90.4 Mbits/sec 0 143 KBytes [ 5] 2.00-3.00 sec 10.8 MBytes 90.1 Mbits/sec 0 150 KBytes [ 5] 3.00-4.00 sec 10.9 MBytes 91.2 Mbits/sec 0 150 KBytes [ 5] 4.00-5.00 sec 10.8 MBytes 90.3 Mbits/sec 0 157 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-5.00 sec 54.4 MBytes 91.3 Mbits/sec 0 sender [ 5] 0.00-5.05 sec 54.1 MBytes 89.9 Mbits/sec receiver iperf Done.
Accessing the peripheral in RIALTO SBC[edit | edit source]
RIALTO SBC provides the primary network interface mapped at eth0
.
Linux messages at boot time[edit | edit source]
... ... [ 2.501689] fec 2188000.ethernet eth0: registered PHC device 0 [ 3.215129] fec 20b4000.ethernet eth1: registered PHC device 1 ... ... [ 22.091756] Micrel KSZ8081 or KSZ8091 2188000.ethernet-1:00: attached PHY driver (mii_bus:phy_addr=2188000.ethernet-1:00, irq=POLL) [ 22.201649] Micrel KSZ8081 or KSZ8091 2188000.ethernet-1:03: attached PHY driver (mii_bus:phy_addr=2188000.ethernet-1:03, irq=POLL) ... ... [ 25.209227] fec 20b4000.ethernet eth1: Link is Up - 100Mbps/Full - flow control rx/tx [ 25.289308] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx ... ...
Check the interface with ifconfig[edit | edit source]
root@desk-mx6ul-rialto:~# ifconfig 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::72b3:d5ff:fe3e:ad88 prefixlen 64 scopeid 0x20<link> ether 70:b3:d5:3e:ad:88 txqueuelen 1000 (Ethernet) RX packets 46 bytes 4780 (4.6 KiB) RX errors 0 dropped 1 overruns 0 frame 0 TX packets 24 bytes 3909 (3.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.11.89 netmask 255.255.255.0 broadcast 192.168.11.255 inet6 fe80::72b3:d5ff:fe3e:ad89 prefixlen 64 scopeid 0x20<link> ether 70:b3:d5:3e:ad:89 txqueuelen 1000 (Ethernet) RX packets 49 bytes 5633 (5.5 KiB) RX errors 0 dropped 1 overruns 0 frame 0 TX packets 25 bytes 4007 (3.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ... ... root@desk-mx6ul-rialto:~#
Test with iperf[edit | edit source]
root@desk-mx6ul-rialto:~# iperf3 -t 5 -c 192.168.0.99 Connecting to host 192.168.0.99, port 5201 [ 5] local 192.168.0.89 port 39480 connected to 192.168.0.99 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 11.2 MBytes 94.0 Mbits/sec 0 147 KBytes [ 5] 1.00-2.00 sec 10.9 MBytes 91.1 Mbits/sec 0 147 KBytes [ 5] 2.00-3.00 sec 10.7 MBytes 89.8 Mbits/sec 0 147 KBytes [ 5] 3.00-4.00 sec 10.8 MBytes 90.7 Mbits/sec 0 156 KBytes [ 5] 4.00-5.00 sec 10.8 MBytes 90.2 Mbits/sec 0 156 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-5.00 sec 54.4 MBytes 91.2 Mbits/sec 0 sender [ 5] 0.00-5.04 sec 54.0 MBytes 89.9 Mbits/sec receiver iperf Done. root@desk-mx6ul-rialto:~# iperf3 -t 5 -c 192.168.11.99 Connecting to host 192.168.11.99, port 5201 [ 5] local 192.168.11.89 port 40244 connected to 192.168.11.99 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 11.3 MBytes 94.7 Mbits/sec 0 143 KBytes [ 5] 1.00-2.00 sec 10.8 MBytes 90.7 Mbits/sec 0 143 KBytes [ 5] 2.00-3.00 sec 10.8 MBytes 90.6 Mbits/sec 0 157 KBytes [ 5] 3.00-4.00 sec 10.6 MBytes 89.1 Mbits/sec 0 158 KBytes [ 5] 4.00-5.00 sec 10.8 MBytes 91.0 Mbits/sec 0 158 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-5.00 sec 54.4 MBytes 91.2 Mbits/sec 0 sender [ 5] 0.00-5.04 sec 54.1 MBytes 90.0 Mbits/sec receiver iperf Done. root@desk-mx6ul-rialto:~#
Peripheral SD[edit | edit source]
Device tree configuration[edit | edit source]
Axel ULite SOM[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM:
From imx6ul-axelulite.dtsi
:
&usdhc1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usdhc1>; cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>; bus-width = <4>; no-1-8-v; keep-power-in-suspend; enable-sdio-wakeup; status = "okay"; }; ... ... &iomuxc { ... ... pinctrl_usdhc1: usdhc1grp { fsl,pins = < MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x17059 MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x10071 MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059 MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059 MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059 MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059 MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */ >; }; ... ... };
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).
RIALTO SBC[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the RIALTO SBC:
From imx6ul-axelulite.dtsi
:
&usdhc1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usdhc1>; cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>; no-1-8-v; keep-power-in-suspend; enable-sdio-wakeup; status = "okay"; }; ... ... &iomuxc { ... ... pinctrl_usdhc1: usdhc1grp { fsl,pins = < MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x17059 MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x10071 MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059 MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059 MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059 MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059 MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD2 CD */ >; }; ... ... };
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).
Accessing the peripheral in Axel ULite SOM[edit | edit source]
Once initialized, the SD device is mapped to the standard /dev/mmcblk0pX
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 partition detected like p1, p2, etc.:
... ... [ 2.394568] sdhci-esdhc-imx 2190000.mmc: Got CD GPIO [ 2.451067] mmc0: SDHCI controller on 2190000.mmc [2190000.mmc] using ADMA [ 2.501056] mmc0: host does not support reading read-only switch, assuming write-enable [ 2.512002] mmc0: new high speed SDHC card at address 5048 [ 2.521767] mmcblk0: mmc0:5048 SD32G 28.9 GiB [ 2.546074] mmcblk0: p1 p2 [ 3.055471] EXT4-fs (mmcblk0p2): mounting ext3 file system using the ext4 subsystem [ 3.139912] EXT4-fs (mmcblk0p2): recovery complete [ 3.146027] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none. [ 7.093243] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null). Quota mode: none. ... ...
Additional information[edit | edit source]
If the root file system configuration does not automatically mount the partition, it is possible to mount the device using the following command:
root@desk-mx6ul-axelulite:~# mkdir -p /mnt/boot root@desk-mx6ul-axelulite:~# mount /dev/mmcblk0p1 /mnt/boot/ root@desk-mx6ul-axelulite:~# ls /mnt/boot/ boot.scr desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb desk-mx6ul-l-4.0.0_uImage splash_image.bmp
and then the mounted partition is available on the /mnt/boot root file system directory.
Accessing the peripheral in RIALTO SBC[edit | edit source]
Once initialized, the SD device is mapped to the standard /dev/mmcblk0pX
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 partition detected like p1, p2, etc.:
... ... [ 2.664756] sdhci: Secure Digital Host Controller Interface driver [ 2.671049] sdhci: Copyright(c) Pierre Ossman [ 2.675429] sdhci-pltfm: SDHCI platform and OF driver helper [ 2.683712] sdhci-esdhc-imx 2190000.mmc: Got CD GPIO [ 2.752188] mmc0: SDHCI controller on 2190000.mmc [2190000.mmc] using ADMA [ 2.819418] mmc0: host does not support reading read-only switch, assuming write-enable [ 2.837977] mmc0: new high speed SDHC card at address aaaa [ 2.856731] mmcblk0: mmc0:aaaa SA16G 14.8 GiB [ 3.404407] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none. [ 3.414605] VFS: Mounted root (ext4 filesystem) on device 179:2. [ 7.470880] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null). Quota mode: none. ... ...
Additional information[edit | edit source]
If the root file system configuration does not automatically mount the partition, it is possible to mount the device using the following command:
root@desk-mx6ul-rialto:~# mkdir -p /mnt/boot root@desk-mx6ul-rialto:~# mount /dev/mmcblk0p1 /mnt/boot/ root@desk-mx6ul-rialto:~# ls /mnt/boot/ 'System Volume Information' boot.scr imx6ul-lynx-som0022-cb0090.dtb linux_testfile.txt splash_image.bmp uImage uboot_testfile.txt root@desk-mx6ul-rialto:~#
and then the mounted partition is available on the /mnt/boot root file system directory.
Peripheral UART[edit | edit source]
Device tree configuration[edit | edit source]
AXEL ULite SOM[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM:
From the Carrier imx6ul-axelulite-cb003a.dts
device tree:
&uart3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart3>; status = "okay"; }; ... ... &iomuxc { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_hog_gpios>; imx6ul-axelulite { ... ... uart { pinctrl_uart3: uart3grp { fsl,pins = < MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1 MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1 >; }; }; ... ...
RIALTO SBC[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the RIALTO SBC:
From the SOMimx6ul-lynx-som0022.dtsi
device tree:
... ... &uart3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart3>; status = "disabled"; }; ... ... &iomuxc { ... ... pinctrl_uart3: uart3grp { fsl,pins = < MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0a1 MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0a1 >; }; ... ... pinctrl_uart2: uart2grp { fsl,pins = < MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0a1 MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0a1 >; }; ... ...
From the Carrier imx6ul-lynx-som0022-cb0090.dts
device tree:
... ... /* RS485 on J3 of RTIN add-on */ &uart2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart2>; status = "okay"; }; /* RS232 on J67 */ &uart3 { status = "okay"; }; /* RS485 on J4 of RTIN add-on */ &uart5 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart5>; status = "okay"; }; ... ... &iomuxc { ... ... pinctrl_uart5: uart5grp { fsl,pins = < MX6UL_PAD_GPIO1_IO04__UART5_DCE_TX 0x1b0a1 MX6UL_PAD_GPIO1_IO05__UART5_DCE_RX 0x1b0a1 >; }; ... ... pinctrl_uart2: uart2grp { fsl,pins = < MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0a1 MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0a1 >; }; ... ...
Accessing the peripheral in AXEL ULite SOM[edit | edit source]
Linux messages at boot time[edit | edit source]
... ... [ 0.569198] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 30, base_baud = 5000000) is a IMX [ 1.344706] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 65, base_baud = 5000000) is a IMX ... ...
Usage with stty[edit | edit source]
N.B. UART mapping respect to ttymxcX
is the following one:
UART1 <-> ttymxc0 UART2 <-> ttymxc1 UART3 <-> ttymxc2 UART4 <-> ttymxc3 UART5 <-> ttymxc4 UART6 <-> ttymxc5 UART7 <-> ttymxc6 UART8 <-> ttymxc7 ...
For example, using a loopback HW connection (RX short-circuited to TX on UART232 port) it is possible to test the send and receive data using the ttymxc2
device:
root@desk-mx6ul-axelulite:~# stty -F /dev/ttymxc2 115200 -echo root@desk-mx6ul-axelulite:~# cat /dev/ttymxc2 & [1] 267 root@desk-mx6ul-axelulite:~# echo "Test loopback" > /dev/ttymxc2 Test loopback
Accessing the peripheral in RIALTO SBC[edit | edit source]
Linux messages at boot time[edit | edit source]
... ... [ 1.332721] 21e8000.serial: ttymxc1 at MMIO 0x21e8000 (irq = 65, base_baud = 5000000) is a IMX [ 1.343551] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 66, base_baud = 5000000) is a IMX [ 1.354436] 21f4000.serial: ttymxc4 at MMIO 0x21f4000 (irq = 67, base_baud = 5000000) is a IMX ... ...
Usage with stty[edit | edit source]
N.B. UART mapping respect to ttymxcX
is the following one:
UART1 <-> ttymxc0 UART2 <-> ttymxc1 UART3 <-> ttymxc2 UART4 <-> ttymxc3 UART5 <-> ttymxc4 UART6 <-> ttymxc5 UART7 <-> ttymxc6 UART8 <-> ttymxc7 ...
For example, to use UART232, using a loopback HW connection (RX short-circuited to TX on UART232) it is possible to test the send and receive data using the ttymxc2
device:
root@desk-mx6ul-rialto:~# stty -F /dev/ttymxc2 115200 -echo root@desk-mx6ul-rialto:~# cat /dev/ttymxc2 & [1] 313 root@desk-mx6ul-rialto:~# echo "Test loopback RS232" > /dev/ttymxc2 root@desk-mx6ul-rialto:~# Test loopback RS232
For example, to use UART485, using a loopback HW connection (RX short-circuited to TX of UART285 on J3 and J4 of RTIN add-on ) it is possible to test the send and receive data using the ttymxc1
and ttymxc4
device:
root@desk-mx6ul-rialto:~# stty -F /dev/ttymxc1 115200 -echo root@desk-mx6ul-rialto:~# stty -F /dev/ttymxc4 115200 -echo root@desk-mx6ul-rialto:~# cat /dev/ttymxc4 & [2] 316 root@desk-mx6ul-rialto:~# cat /dev/ttymxc1 & [3] 317 root@desk-mx6ul-rialto:~# echo "Send message from ttymxc1 to ttymxc4!" > /dev/ttymxc1 Send message from ttymxc1 to ttymxc4! root@desk-mx6ul-rialto:~# echo "Send message from ttymxc4 to ttymxc1!" > /dev/ttymxc4 Send message from ttymxc4 to ttymxc1!
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 USB Host[edit | edit source]
The USB Host port requires to configure the USB VBUS regulator and the gpio used for enabling the 5V USB power switch.
Device tree configuration[edit | edit source]
AXEL ULite SOM[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM:
From imx6ul-axelulite-cb003a.dts
:
reg_usb_otg1_vbus: regulator@2 { compatible = "regulator-fixed"; reg = <2>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usb_otg1>; regulator-name = "usb_otg1_vbus"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&gpio1 18 GPIO_ACTIVE_HIGH>; enable-active-high; }; ... ... &usbotg1 { vbus-supply = <®_usb_otg1_vbus>; disable-over-current; dr_mode = "host"; status = "okay"; }; ... ... &iomuxc { pinctrl-0 = <&pinctrl_hog_gpios>; imx6ul-axelulite { ... ... pinctrl_usb_otg1: usbotg1grp { fsl,pins = < MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x10b0 /* HOST PWR */ MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10b0 /* HOST OC */ >; }; };
RIALTO SBC[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the RIALTO SBC:
From imx6ul-lynx-som0022.dtsi
:
... ... reg_usb_otg1_vbus: regulator@2 { compatible = "regulator-fixed"; reg = <2>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usb_otg1>; regulator-name = "usb_otg1_vbus"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&gpio2 8 GPIO_ACTIVE_HIGH>; enable-active-high; vin-supply = <&swbst_reg>; }; reg_usb_otg2_vbus: regulator@3 { compatible = "regulator-fixed"; reg = <3>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usb_otg2>; regulator-name = "usb_otg2_vbus"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>; enable-active-high; }; ... ... &usbotg1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usb_otg1_id>; vbus-supply = <®_usb_otg1_vbus>; dr_mode = "otg"; srp-disable; hnp-disable; adp-disable; status = "disabled"; }; &usbotg2 { vbus-supply = <®_usb_otg2_vbus>; dr_mode = "host"; status = "disabled"; }; ... ... &iomuxc { ... ... pinctrl_usb_otg1_id: usbotg1idgrp { fsl,pins = < MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x17059 >; }; pinctrl_usb_otg1: usbotg1grp { fsl,pins = < MX6UL_PAD_JTAG_MOD__GPIO1_IO10 0x10b0 /* OTG1 PWR */ MX6UL_PAD_UART3_RX_DATA__GPIO1_IO25 0x17059 /* OTG1_OC */ >; }; pinctrl_usb_otg1_1: usbotg1grp-1 { fsl,pins = < MX6UL_PAD_JTAG_MOD__GPIO1_IO10 0x10b0 /* OTG1 PWR */ MX6UL_PAD_SNVS_TAMPER6__GPIO5_IO06 0x17059 /* OTG1_OC */ >; }; pinctrl_usb_otg2_1: usbotg2grp-1 { fsl,pins = < MX6UL_PAD_UART3_CTS_B__GPIO1_IO26 0x17059 /* OTG2_PWR */ MX6UL_PAD_UART3_RTS_B__GPIO1_IO27 0x17059 /* OTG2_OC */ >; }; ... ... };
From imx6ul-lynx-som0022-cb0090.dts
:
... ... ®_usb_otg1_vbus { pinctrl-0 = <&pinctrl_usb_otg1_1>; gpio = <&gpio1 10 GPIO_ACTIVE_HIGH>; }; ®_usb_otg2_vbus { pinctrl-0 = <&pinctrl_usb_otg2_1>; gpio = <&gpio1 26 GPIO_ACTIVE_HIGH>; }; &usbotg1 { disable-over-current; // only GPIO support for OVERCURRENT in this board status = "okay"; }; &usbotg2 { disable-over-current; // only GPIO support for OVERCURRENT in this board status = "okay"; }; ... ...
Accessing the peripheral in AXEL ULite SOM[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.)
[ 199.668004] usb 1-1: new high-speed USB device number 2 using ci_hdrc [ 199.876433] usb 1-1: New USB device found, idVendor=13fe, idProduct=6700, bcdDevice= 1.10 [ 199.876545] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 199.876604] usb 1-1: Product: USB DISK 3.0 [ 199.876647] usb 1-1: Manufacturer: Wilk [ 199.876690] usb 1-1: SerialNumber: 07012533C2BE5935 [ 199.897372] usb-storage 1-1:1.0: USB Mass Storage device detected [ 199.918075] scsi host0: usb-storage 1-1:1.0 [ 200.961571] scsi 0:0:0:0: Direct-Access Wilk USB DISK 3.0 PMAP PQ: 0 ANSI: 6 [ 200.976402] sd 0:0:0:0: [sda] 60628992 512-byte logical blocks: (31.0 GB/28.9 GiB) [ 200.977682] sd 0:0:0:0: [sda] Write Protect is off [ 200.977729] sd 0:0:0:0: [sda] Mode Sense: 45 00 00 00 [ 200.989604] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 201.200618] sda: sda1 sda2 [ 201.214974] sd 0:0:0:0: [sda] Attached SCSI removable disk
Additional information[edit | edit source]
If the root file system configuration does not automatically mount the partition, it is possible to mount the device using the following command:
root@desk-mx6ul-axelulite:~# mkdir -p /mnt/usbApr root@desk-mx6ul-axelulite:~# mount /dev/sda1 /mnt/usb/ root@desk-mx6ul-axelulite:~# ls -la /mnt/usb/ total 24 drwxr-xr-x 3 root root 4096 Apr 1 14:16 . drwxr-xr-x 4 root root 4096 Apr 3 18:15 .. drwx------ 2 root root 16384 Apr 3 14:16 lost+found -rwxr-xr-x 1 root root 6881192 Apr 3 14:16 uImage
Accessing the peripheral in RIALTO SBC[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.)
[ 3198.828827] usb 1-1: new high-speed USB device number 2 using ci_hdrc [ 3199.031869] usb 1-1: New USB device found, idVendor=125f, idProduct=c08a, bcdDevice= 1.00 [ 3199.031980] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 3199.032042] usb 1-1: Product: ADATA USB Flash Drive [ 3199.032086] usb 1-1: Manufacturer: ADATA [ 3199.032131] usb 1-1: SerialNumber: 11B15033223000B1 [ 3199.051776] usb-storage 1-1:1.0: USB Mass Storage device detected [ 3199.084045] scsi host0: usb-storage 1-1:1.0 [ 3200.091305] scsi 0:0:0:0: Direct-Access ADATA USB Flash Drive 0.00 PQ: 0 ANSI: 2 [ 3200.110289] sd 0:0:0:0: [sda] 7892992 512-byte logical blocks: (4.04 GB/3.76 GiB) [ 3200.110969] sd 0:0:0:0: [sda] Write Protect is off [ 3200.111006] sd 0:0:0:0: [sda] Mode Sense: 00 00 00 00 [ 3200.111582] sd 0:0:0:0: [sda] Asking for cache data failed [ 3200.111615] sd 0:0:0:0: [sda] Assuming drive cache: write through [ 3200.125359] sda: sda1 [ 3200.139266] sd 0:0:0:0: [sda] Attached SCSI removable disk
Additional information[edit | edit source]
If the root file system configuration does not automatically mount the partition, it is possible to mount the device using the following command:
root@desk-mx6ul-rialto:~# mkdir -p /mnt/usbApr root@desk-mx6ul-rialto:~# mount /dev/sda1 /mnt/usbApr/ root@desk-mx6ul-rialto:~# ls -la /mnt/usbApr/ total 217048 drwxr-xr-x 3 root root 4096 Jan 1 1970 . drwxr-xr-x 4 root root 4096 Apr 28 20:56 .. drwxr-xr-x 2 root root 4096 May 29 2024 'System Volume Information' root@desk-mx6ul-rialto:~#
Peripheral USB OTG[edit | edit source]
The USB OTG ports can be configured as Host or Device mode depending on the device tree configuration. In OTG mode they can be easily tested using the Mass Storage Gadget, which lets the device export a file as a mass storage device to the connected PC.
The USB OTG peripheral is NOT available - as default option - on AXEL ULite EVK. Please contact Sales department for this option. |
Device tree configuration[edit | edit source]
RIALTO SBC[edit | edit source]
Here below is an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM where USB OTG1 is configured as otg while the USB OTG2 port is configured in host mode:
From imx6ul-lynx-som0022.dtsi
:
... ... reg_usb_otg2_vbus: regulator@3 { compatible = "regulator-fixed"; reg = <3>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usb_otg2>; regulator-name = "usb_otg2_vbus"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>; enable-active-high; }; ... ... &usbotg2 { vbus-supply = <®_usb_otg2_vbus>; dr_mode = "host"; status = "disabled"; }; ... ... &iomuxc { ... ... pinctrl_usb_otg2: usbotg2grp { fsl,pins = < MX6UL_PAD_ENET2_TX_DATA1__GPIO2_IO12 0x17059 /* OTG2_PWR */ MX6UL_PAD_ENET2_TX_EN__USB_OTG2_OC 0x17059 /* OTG2_OC */ >; }; pinctrl_usb_otg2_1: usbotg2grp-1 { fsl,pins = < MX6UL_PAD_UART3_CTS_B__GPIO1_IO26 0x17059 /* OTG2_PWR */ MX6UL_PAD_UART3_RTS_B__GPIO1_IO27 0x17059 /* OTG2_OC */ >; }; ... ... };
From imx6ul-lynx-som0022-cb0090.dts
:
... ... ®_usb_otg2_vbus { pinctrl-0 = <&pinctrl_usb_otg2_1>; gpio = <&gpio1 26 GPIO_ACTIVE_HIGH>; }; ... ... &usbotg2 { disable-over-current; // only GPIO support for OVERCURRENT in this board status = "okay"; }; ... ...
Accessing the peripheral in RIALTO SBC[edit | edit source]
Linux messages at boot time[edit | edit source]
... ... [ 3822.510915] ci_hdrc ci_hdrc.0: EHCI Host Controller [ 3822.511081] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 2 [ 3822.538895] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00 [ 3822.540643] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15 [ 3822.540746] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 3822.540812] usb usb2: Product: EHCI Host Controller [ 3822.540858] usb usb2: Manufacturer: Linux 5.15.71-desk-mx6ul-l-4.2.0-rc1+g09351f1d762a ehci_hcd [ 3822.540907] usb usb2: SerialNumber: ci_hdrc.0 [ 3822.561551] hub 2-0:1.0: USB hub found [ 3822.561824] hub 2-0:1.0: 1 port detected ... ...
Usage in Host mode[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. class, vendor id, product id, etc.)
[ 3999.798783] usb 2-1: new high-speed USB device number 2 using ci_hdrc [ 4000.000961] usb 2-1: New USB device found, idVendor=0781, idProduct=557d, bcdDevice= 1.00 [ 4000.009839] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 4000.026275] usb 2-1: Product: Cruzer Force [ 4000.034961] usb 2-1: Manufacturer: SanDisk [ 4000.043548] usb 2-1: SerialNumber: 03021401121621082422 [ 4000.070921] usb-storage 2-1:1.0: USB Mass Storage device detected [ 4000.109120] scsi host1: usb-storage 2-1:1.0 [ 4001.131262] scsi 1:0:0:0: Direct-Access SanDisk Cruzer Force 1.00 PQ: 0 ANSI: 6 [ 4001.155899] sd 1:0:0:0: [sdb] 60088320 512-byte logical blocks: (30.8 GB/28.7 GiB) [ 4001.180363] sd 1:0:0:0: [sdb] Write Protect is off [ 4001.207039] sd 1:0:0:0: [sdb] Mode Sense: 43 00 00 00 [ 4001.218222] sd 1:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 4001.270832] sdb: sdb1 [ 4001.295366] sd 1:0:0:0: [sdb] Attached SCSI removable disk
Usage with mass-storage[edit | edit source]
root@desk-mx6ul-rialto:~# dd if=/dev/zero of=mass_storage count=32 bs=1M 32+0 records in 32+0 records out 33554432 bytes (34 MB, 32 MiB) copied, 0.570367 s, 58.8 MB/s root@desk-mx6ul-rialto:~# mkfs.msdos mass_storage mkfs.fat 4.2 (2021-01-31) root@desk-mx6ul-rialto:~# mkdir loop root@desk-mx6ul-rialto:~# mount -o loop mass_storage loop [ 4130.830326] loop0: detected capacity change from 0 to 65536 root@desk-mx6ul-rialto:~# echo "Test USB OTG with mass storage device" > loop/usb.txt root@desk-mx6ul-rialto:~# umount loop/
then insert the g_mass_storage
kernel module driver enabling an Windows PC to see it as a removable device
root@desk-mx6ul-rialto:~# modprobe g_mass_storage removable=y file=mass_storage [ 4215.960825] Mass Storage Function, version: 2009/09/11 [ 4215.966024] LUN: removable file: (no medium) [ 4215.981660] LUN: removable file: /home/root/mass_storage [ 4215.987023] Number of LUNs=1 [ 4215.999126] g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11 [ 4216.006139] g_mass_storage gadget: userspace failed to provide iSerialNumber [ 4216.015682] g_mass_storage gadget: g_mass_storage ready root@desk-mx6ul-rialto:~#
Once the USB cable is connected to the PC, the storage is mounted and the usb.txt file is available:
$ cat /media/tomzy/42D5-CBA5/usb.txt Test USB OTG with mass storage device
The Windows PC also activates the driver and the disk is available as a Drive Unit (with the usb.txt file available).
Additional information[edit | edit source]
More information about Mass Storage Gadget driver is given in the kernel tree under Documentation/usb/mass-storage.rst
Peripheral GPIOs[edit | edit source]
i.MX6UL 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.
There aren't GPIOs configured in the AXEL ULite EVK |
Device tree configuration[edit | edit source]
RIALTO SBC[edit | edit source]
Here below is an example of device tree configuration for using the:
- RS-485 GPIOs
- Relè
- GPIO Push Button on Mezzanine Board
- LEDs on Mezzanine Board
From imx6ul-lynx-som0022-cb0090.dts
:
... ... leds { compatible = "gpio-leds"; can_term { label = "can_term"; gpios = <&gpio3 3 0>; default-state = "off"; }; uart2_en { label = "uart2_en"; gpios = <&gpio1 22 0>; default-state = "on"; }; uart5_en { label = "uart5_en"; gpios = <&gpio1 23 0>; default-state = "on"; }; ... ... gpio-push-button { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio_push_button>; status = "okay"; f1 { label = "GPIO F1"; gpios = <&gpio3 1 GPIO_ACTIVE_LOW>; linux,code = <KEY_F1>; }; }; }; ... ... &i2c2 { status = "okay"; ... ... pca9551@60 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pca60>; compatible = "nxp,pca9551"; reg = <0x60>; #address-cells = <1>; #size-cells = <0>; reset-gpios = <&gpio3 22 GPIO_ACTIVE_LOW>; led@4 { label = "led2"; reg = <4>; retain-state-shutdown; default-state = "keep"; type = <PCA955X_TYPE_LED>; }; led@5 { label = "led1"; reg = <5>; retain-state-shutdown; default-state = "keep"; type = <PCA955X_TYPE_LED>; }; }; ... ... }; ... ... &iomuxc { ... ... imx6ul-lynx { pinctrl_hog_gpios: hoggrp-gpios { fsl,pins = < MX6UL_PAD_GPIO1_IO08__WDOG1_WDOG_B 0x0b0b1 /* WD RESET */ MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0x1b0b1 MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0x4001b0b1 /* Enable SION bit */ MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x4001b0b1 /* Enable SION bit */ MX6UL_PAD_CSI_DATA04__GPIO4_IO25 0x1b0b1 MX6UL_PAD_CSI_DATA05__GPIO4_IO26 0x1b0b1 MX6UL_PAD_CSI_DATA06__GPIO4_IO27 0x1b0b1 MX6UL_PAD_LCD_VSYNC__GPIO3_IO03 0x1b0b1 /* FlexCAN SW Termination */ MX6UL_PAD_LCD_HSYNC__GPIO3_IO02 0x1b0b1 /* UART3 RS485 SW Termination */ MX6UL_PAD_UART2_CTS_B__GPIO1_IO22 0x1b0b1 /* UART2 RS485 on RTIN enable */ MX6UL_PAD_UART2_RTS_B__GPIO1_IO23 0x1b0b1 /* UART5 RS485 on RTIN enable */ >; }; pinctrl_gpio_push_button: gpio_push_button { fsl,pins = < MX6UL_PAD_LCD_RESET__GPIO3_IO04 0x1b0b0 /*KEY1*/ MX6UL_PAD_LCD_ENABLE__GPIO3_IO01 0x1b0b0 /*KEY0*/ >; }; ... ... };
Accessing the peripheral in RIALTO SBC[edit | edit source]
Using LEDs on Mezzanine Board[edit | edit source]
To blink LED1 on Mezzanine Board send the following commands
root@desk-mx6ul-rialto:~# echo 255 > /sys/class/leds/pca955x\:led1/brightness
root@desk-mx6ul-rialto:~# echo 0 > /sys/class/leds/pca955x\:led1/brightness
</pre>
To blink LED2 on Mezzanine Board send the following commands
<pre>
root@desk-mx6ul-rialto:~# echo 255 > /sys/class/leds/pca955x\:led2/brightness
root@desk-mx6ul-rialto:~# echo 0 > /sys/class/leds/pca955x\:led2/brightness
Using GPIO Push Button on Mezzanine Board[edit | edit source]
Pressing the Button generates the following event
root@desk-mx6ul-rialto:~# evtest /dev/input/event0
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio-push-button"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 59 (KEY_F1)
Properties:
Testing ... (interrupt to exit)
[ 5332.805492] evbug: Event. Dev: input0, Type: 1, Code: 59, Value: 1
[ 5332.811800] evbug: Event. Dev: input0, Type: 0, Code: 0, Value: 0
Event: time 1651181469.356509, type 1 (EV_KEY), code 59 (KEY_F1), value 1
Event: time 1651181469.356509, -------------- SYN_REPORT ------------
[ 5333.103596] evbug: Event. Dev: input0, Type: 1, Code: 59, Value: 0
[ 5333.109908] evbug: Event. Dev: input0, Type: 0, Code: 0, Value: 0
Event: time 1651181469.654611, type 1 (EV_KEY), code 59 (KEY_F1), value 0
Event: time 1651181469.654611, -------------- SYN_REPORT ------------
Using Relé on RTIN add-on[edit | edit source]
- set
GPIO1_IO01
as output GPIOGPIO1_IO01
=>(n-1)*32 + IO = (1-1)*32+1 = 1
- to enable and disable relè, with sysfs, use the command here below
root@desk-mx6ul-rialto:~# echo 1 > /sys/class/gpio/export root@desk-mx6ul-rialto:~# echo out > /sys/class/gpio/gpio1/direction root@desk-mx6ul-rialto:~# echo 1 > /sys/class/gpio/gpio1/value root@desk-mx6ul-rialto:~# echo 0 > /sys/class/gpio/gpio1/value
- to enable and disable relè, with
libgpiod
, use the command here belowroot@desk-mx6ul-rialto:~# gpioset gpiochip0 1=1 root@desk-mx6ul-rialto:~# gpioset gpiochip0 1=0
- set
GPIO2_IO02
as output GPIOGPIO2_IO02
=>(n-1)*32 + IO = (1-1)*32+2 = 2
- to enable and disable relè, with sysfs, use the command here below
root@desk-mx6ul-rialto:~# echo 2 > /sys/class/gpio/export root@desk-mx6ul-rialto:~# echo out > /sys/class/gpio/gpio2/direction root@desk-mx6ul-rialto:~# echo 1 > /sys/class/gpio/gpio2/value root@desk-mx6ul-rialto:~# echo 0 > /sys/class/gpio/gpio2/value
- to enable and disable relè, with
libgpiod
, use the command here belowroot@desk-mx6ul-rialto:~# gpioset gpiochip0 2=1 root@desk-mx6ul-rialto:~# gpioset gpiochip0 2=0
Using INPUT GPIO on RTIN add-on[edit | edit source]
A loopback HW connection is wired between relè and INPUT GPIO for testing purposes: the relè output sets the INPUT GPIO value.
The relè as shown in the previous chapter is set and then the INPUT GPIOs value is read.
- set
GPIO4_IO26
as input GPIOGPIO4_IO26
=>(n-1)*32 + IO = (4-1)*32+26 = 122
- to enable input GPIO, with sysfs, use the command here below
root@desk-mx6ul-rialto:~# echo 122 > /sys/class/gpio/export root@desk-mx6ul-rialto:~# echo in > /sys/class/gpio/gpio122/direction root@desk-mx6ul-rialto:~# cat /sys/class/gpio/gpio122/value 1
- to read value of input GPIOs with
libgpiod
, use the command here belowroot@desk-mx6ul-rialto:~# gpioget gpiochip3 26 1
- set
GPIO4_IO27
as input GPIOGPIO4_IO27
=>(n-1)*32 + IO = (4-1)*32+27 = 123
- to enable input GPIO, with sysfs, use the command here below
root@desk-mx6ul-rialto:~# echo 123 > /sys/class/gpio/export root@desk-mx6ul-rialto:~# echo in > /sys/class/gpio/gpio123/direction root@desk-mx6ul-rialto:~# cat /sys/class/gpio/gpio123/value 1
- to read value of input GPIOs with
libgpiod
, use the command here belowroot@desk-mx6ul-rialto:~# gpioget gpiochip3 27 1
Additional information[edit | edit source]
Information about GPIOs usage under sysfs directory https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
sysfs GPIO ABI has been deprecated. Please find more information here about it. A character device access has to be used, more information here |
Information about GPIOs library libgpiod - C library and tools - can be found on git.kernel.org