i.MX Linux Users Guide
i.MX Linux Users Guide
Contents
Chapter 1 Overview............................................................................................... 6
1.1 Audience....................................................................................................................................6
1.2 Conventions...............................................................................................................................6
1.3 Supported hardware SoCs and boards..................................................................................... 6
1.4 References................................................................................................................................ 7
Chapter 2 Introduction........................................................................................... 9
Chapter 7 Multimedia...........................................................................................55
7.1 i.MX multimedia packages.......................................................................................................55
7.2 Building limited access packages............................................................................................55
7.3 Multimedia use cases.............................................................................................................. 55
7.3.1 Playback use cases.................................................................................................................. 55
7.3.1.1 Audio-only playback.....................................................................................................................56
7.3.1.2 Video-only playback.....................................................................................................................56
7.3.1.3 Audio/Video file playback.............................................................................................................56
7.3.1.4 Multichannel audio playback........................................................................................................56
7.3.1.5 Other methods for playback.........................................................................................................57
7.3.1.6 Video playback to multiple displays............................................................................................. 57
7.3.2 Audio encoding......................................................................................................................... 58
7.3.3 Video encoding......................................................................................................................... 58
7.3.4 Transcoding.............................................................................................................................. 59
7.3.5 Audio recording......................................................................................................................... 60
7.3.6 Video recording......................................................................................................................... 60
7.3.7 Audio/Video recording...............................................................................................................61
7.3.8 Camera preview........................................................................................................................ 61
7.3.9 Recording the TV-in source...................................................................................................... 62
7.3.10 Web camera............................................................................................................................62
7.3.11 HTTP streaming...................................................................................................................... 62
7.3.12 HTTP live streaming................................................................................................................62
7.3.13 MPEG-DASH streaming..........................................................................................................63
7.3.14 Real Time Streaming Protocol (RTSP) playback.................................................................... 63
7.3.15 RTP/UDP MPEGTS streaming............................................................................................... 64
7.3.16 RTSP streaming server...........................................................................................................64
7.3.17 Video conversion ....................................................................................................................65
Chapter 8 Audio................................................................................................... 70
8.1 DSP support............................................................................................................................ 70
8.1.1 HiFi 4 DSP framework...............................................................................................................70
8.1.2 Sound Open Firmware.............................................................................................................. 70
8.2 HDMI eARC support................................................................................................................70
Chapter 9 Graphics..............................................................................................72
9.1 imx-gpu-sdk............................................................................................................................. 72
9.2 G2D-imx-samples....................................................................................................................72
9.3 viv_samples............................................................................................................................. 73
9.4 Qt 5..........................................................................................................................................74
Chapter 10 Security............................................................................................. 75
10.1 CAAM kernel driver............................................................................................................... 75
10.1.1 Introduction............................................................................................................................. 75
10.1.2 Source files............................................................................................................................. 76
10.1.3 Module loading........................................................................................................................77
10.1.4 Kernel configuration................................................................................................................ 77
10.1.5 How to test the drivers............................................................................................................ 78
10.2 Crypto algorithms support..................................................................................................... 80
10.3 CAAM Job Ring backend driver specifications......................................................................81
10.3.1 Verifying driver operation and correctness..............................................................................81
10.3.2 Incrementing IRQs in /proc/interrupts..................................................................................... 82
10.3.3 Verifying the 'self test' fields say 'passed' in /proc/crypto........................................................ 82
10.4 OpenSSL offload................................................................................................................... 82
10.4.1 OpenSSL software architecture.............................................................................................. 83
10.4.2 OpenSSL's ENGINE interface.................................................................................................84
10.4.3 NXP solution for OpenSSL hardware offloading..................................................................... 84
10.4.4 Deploying OpenSSL into rootfs...............................................................................................84
10.4.5 Running OpenSSL benchmarking tests with cryptodev engine.............................................. 84
10.4.5.1 Running OpenSSL benchmarking tests for symmetric ciphering and digest............................. 85
10.4.6 Running OpenSSL benchmarking tests with AF_ALG engine................................................ 85
10.4.6.1 Running OpenSSL benchmarking tests for symmetric ciphering and digest............................. 85
10.5 Disk encryption acceleration..................................................................................................86
10.5.1 Enabling disk encryption support in kernel..............................................................................87
10.5.2 User space tools for disk encryption....................................................................................... 88
10.5.3 DM-Crypt using CAAM's tagged key.......................................................................................88
10.5.4 Usage......................................................................................................................................90
10.6 crypto_af_alg application support.......................................................................................... 94
10.6.1 Prerequisites........................................................................................................................... 94
10.6.2 Building the kernel...................................................................................................................94
10.6.2.1 Kernel configuration................................................................................................................... 94
10.6.2.2 Building a toolchain....................................................................................................................94
10.6.2.3 Cross compiling the user space sources................................................................................... 94
10.6.3 Usage......................................................................................................................................95
10.6.4 Use case example...................................................................................................................95
Chapter 11 Connectivity.......................................................................................96
11.1 Connectivity for Bluetooth wireless technology and Wi-Fi ....................................................96
11.2 Connectivity for USB type-C..................................................................................................98
11.3 NXP Bluetooth/Wi-Fi information...........................................................................................99
11.4 Certification............................................................................................................................99
11.4.1 WFA certification................................................................................................................... 100
11.4.2 Bluetooth controller certification............................................................................................ 100
®
Chapter 14 NXP eIQ Machine Learning...........................................................105
Chapter 1
Overview
®
This document describes how to build and install the i.MX Linux OS BSP, where BSP stands for Board Support Package, on the
i.MX platform. It also covers special i.MX features and how to use them.
The document also provides the steps to run the i.MX platform, including board DIP switch settings, and instructions on configuring
and using the U-Boot bootloader.
The later chapters describe how to use some i.MX special features when running the Linux OS kernel.
Features covered in this guide may be specific to particular boards or SoCs. For the capabilities of a particular board or SoC, see
®
the i.MX Linux Release Notes (IMXLXRN).
1.1 Audience
This document is intended for software, hardware, and system engineers who are planning to use the product, and for anyone
who wants to know more about the product.
1.2 Conventions
This document uses the following conventions:
• Courier New font: This font is used to identify commands, explicit command parameters, code examples, expressions,
data types, and directives.
1.4 References
®
i.MX has multiple families supported in software. The following are the listed families and SoCs per family. The i.MX Linux
Release Notes describes which SoC is supported in the current release. Some previously released SoCs might be buildable in
the current release but not validated if they are at the previous validated level.
• i.MX 6 Family: 6QuadPlus, 6Quad, 6DualLite, 6SoloX, 6SLL, 6UltraLite, 6ULL, 6ULZ
• i.MX 7 Family: 7Dual, 7ULP
• i.MX 8 Family: 8QuadMax, 8ULP
• i.MX 8M Family: 8M Plus, 8M Quad, 8M Mini, 8M Nano
• i.MX 8X Family: 8QuadXPlus, 8DXL, 8DualX
This release includes the following references and additional information.
®
• i.MX Linux Release Notes (IMXLXRN) - Provides the release information.
®
• i.MX Linux User's Guide (IMXLUG) - Provides the information on installing U-Boot and Linux OS and using i.MX-specific
features.
• i.MX Yocto Project User's Guide (IMXLXYOCTOUG) - Describes the board support package for NXP development
systems using Yocto Project to set up host, install tool chain, and build source code to create images.
• i.MX Machine Learning User's Guide (IMXMLUG) - Provides the machine learning information.
• i.MX Linux Reference Manual (IMXLXRM) - Provides the information on Linux drivers for i.MX.
• i.MX Graphics User's Guide (IMXGRAPHICUG) - Describes the graphics features.
• i.MX Porting Guide (IMXXBSPPG) - Provides the instructions on porting the BSP to a new board.
®
• i.MX VPU Application Programming Interface Linux Reference Manual (IMXVPUAPI) - Provides the reference information
on the VPU API on i.MX 6 VPU.
• Harpoon User's Guide (IMXHPUG) - Presents the Harpoon release for i.MX 8M device family.
• i.MX Digital Cockpit Hardware Partitioning Enablement for i.MX 8QuadMax (IMXDCHPE) - Provides the i.MX Digital
Cockpit hardware solution for i.MX 8QuadMax.
• i.MX DSP User's Guide (IMXDSPUG) - Provides the information on the DSP for i.MX 8.
• i.MX 8M Plus Camera and Display Guide (IMX8MPCDUG) - Provides the information on the ISP Independent Sensor
Interface API for the i.MX 8M Plus.
The quick start guides contain basic information on the board and setting it up. They are on the NXP website.
• SABRE Platform Quick Start Guide (IMX6QSDPQSG)
• SABRE Board Quick Start Guide (IMX6QSDBQSG)
• i.MX 6UltraLite EVK Quick Start Guide (IMX6ULTRALITEQSG)
• i.MX 6ULL EVK Quick Start Guide (IMX6ULLQSG)
• SABRE Automotive Infotainment Quick Start Guide (IMX6SABREINFOQSG)
• i.MX 7Dual SABRE-SD Quick Start Guide (SABRESDBIMX7DUALQSG)
• i.MX 8M Quad Evaluation Kit Quick Start Guide (IMX8MQUADEVKQSG)
• i.MX 8M Mini Evaluation Kit Quick Start Guide (8MMINIEVKQSG)
• i.MX 8M Nano Evaluation Kit Quick Start Guide (8MNANOEVKQSG)
• i.MX 8QuadXPlus Multisensory Enablement Kit Quick Start Guide (IMX8QUADXPLUSQSG)
• i.MX 8QuadMax Multisensory Enablement Kit Quick Start Guide (IMX8QUADMAXQSG)
• i.MX 8M Plus Evaluation Kit Quick Start Guide (IMX8MPLUSQSG)
Documentation is available online at nxp.com.
• i.MX 6 information is at nxp.com/iMX6series
• i.MX SABRE information is at nxp.com/imxSABRE
• i.MX 6UltraLite information is at nxp.com/iMX6UL
• i.MX 6ULL information is at nxp.com/iMX6ULL
• i.MX 7Dual information is at nxp.com/iMX7D
• i.MX 7ULP information is at nxp.com/imx7ulp
• i.MX 8 information is at nxp.com/imx8
• i.MX 6ULZ information is at nxp.com/imx6ulz
Chapter 2
Introduction
The i.MX Linux BSP is a collection of binary files, source code, and support files that can be used to create a U-Boot bootloader,
a Linux kernel image, and a root file system for i.MX development systems. The Yocto Project is the framework of choice to build
the images described in this document, although other methods can be used.
All the information on how to set up the Linux OS host, how to run and configure a Yocto Project, generate an image, and generate
a rootfs, are covered in the i.MX Yocto Project User's Guide (IMXLXYOCTOUG).
When Linux OS is running, this guide provides information on how to use some special features that i.MX SoCs provide. The
release notes provide the features that are supported on a particular board.
Chapter 3
Basic Terminal Setup
®
The i.MX boards can communicate with a host server (Windows OS or Linux OS) using a serial cable. Common serial
communication programs such as HyperTerminal, Tera Term, or PuTTY can be used. The example below describes the serial
terminal setup using HyperTerminal on a host running Windows OS.
The i.MX 6Quad/QuadPlus/DualLite SABRE-AI boards connect to the host server using a serial cable.
The other i.MX boards connect the host driver using the micro-B USB connector.
1. Connect the target and the PC running Windows OS using a cable mentioned above.
2. Open HyperTerminal on the PC running Windows OS and select the settings as shown in the following figure.
The i.MX 8 board connects the host driver using the micro USB connector. The USB to serial driver can be found under
www.ftdichip.com/Drivers/VCP.htm. The FT4232 USB to serial converter provides four serial ports. The i.MX 8 board uses the
® ®
first port for the Arm Cortex -A cores console and the second port for SCU's console. Users need to select the first port (COM)
in the terminal setup. The i.MX 8DXL board uses the third and fourth ports respectively for Arm Cortex-A cores console and
SCU console.
Chapter 4
Booting Linux OS
Before booting the Linux OS kernel on an i.MX board, copy the images (U-Boot, Linux kernel, device tree, and rootfs) to a boot
device and set the boot switches to boot that device. There are various ways to boot the Linux OS for different boards, boot
devices, and results desired. This section describes how to prepare a boot device, where files need to be in the memory map, how
to set switches for booting, and how to boot Linux OS from U-Boot.
4.1.1 Bootloader
U-Boot is the tool recommended as the bootloader for i.MX 6 and i.MX 7. i.MX 8 requires a bootloader that includes U-Boot as
well as other components described below. U-Boot must be loaded onto a device to be able to boot from it. U-Boot images are
board-specific and can be configured to support booting from different sources.
The pre-built or Yocto project default bootloader names start with the name of the bootloader followed by the name of the
platform and board and followed by the name of the device that this image is configured to boot from: u-boot-[platform]
[board]_[machine_configuration].bin. If no boot device is specified, it boots from SD/MMC.
The manufacturing tool can be used to load U-Boot onto all devices with i.MX 6 and i.MX 7. U-Boot can be loaded directly onto
an SD card using the Linux dd command. U-Boot can be used to load a U-Boot image onto some other devices.
On i.MX 8, the U-Boot cannot boot the device by itself. The i.MX 8 pre-built images or Yocto Project default bootloader is imx-boot
for the SD card, which is created by the imx-mkimage. The imx-boot binary includes the U-Boot, Arm trusted firmware, DCD
file (8QuadMax/8QuadXPlus/8DXL), system controller firmware (8QuadMax/8QuadXPlus/8DXL), SPL (8M SoC), DDR firmware
(8M), HDMI firmware (8M Quad), and SECO firmware for B0 (8QuadMax/8QuadXPlus/8DXL).
On i.MX 8M SoC, the second program loader (SPL) is enabled in U-Boot. SPL is implemented as the first-level bootloader running
on TCML (For i.MX 8M Nano and i.MX 8M Plus, the first-level bootloader runs in OCRAM). It is used to initialize DDR and load
U-Boot, U-Boot DTB, Arm trusted firmware, and TEE OS (optional) from the boot device into the memory. After SPL completes
loading the images, it jumps to the Arm trusted firmware BL31 directly. The BL31 starts the optional BL32 (TEE OS) and BL33
(U-Boot) for continue booting kernel.
In imx-boot, the SPL is packed with DDR Firmware together, so that ROM can load them into Arm Cortex-M4 TCML or OCRAM
(only for i.MX 8M Nano and i.MX 8M Plus). The U-Boot, U-Boot DTB, Arm Trusted firmware, and TEE OS (optional) are packed
into a FIT image, which is finally built into imx-boot.
The following command decompresses bz2 file and writes into eMMC:
The following command executes downloading and bootloader (SPL and U-Boot) by USB:
The follow command burns into eMMC (If only one board is supported in such a release package and the board supports
eMMC chip):
NOTE
For i.MX 8QuadXPlus B0, UUU flashes the eMMC image to boot partition with 32 KB offset. It may not be
compatible with all eMMC devices. It is recommended to enable eMMC fastboot mode and use the UUU kernel
version script to flash the eMMC image to boot partition with 0 offset.
The Yocto Project build creates an SD card image that can be flashed directly. This is the simplest way to load everything needed
onto the card with one command.
A .wic image contains all four images properly configured for an SD card. The release contains a pre-built .wic image that is built
specifically for the one board configuration. It runs the Wayland graphical backend. It does not run on other boards unless U-Boot,
the device tree, and rootfs are changed.
When more flexibility is desired, the individual components can be loaded separately, and those instructions are included here as
well. An SD card can be loaded with the individual components one-by-one or the .wic image can be loaded and the individual
parts can be overwritten with the specific components.
The rootfs on the default .wic image is limited to a bit less than 4 GB, but re-partitioning and re-loading the rootfs can increase
that to the size of the card. The rootfs can also be changed to specify the graphical backend that is used.
The device tree file (.dtb) contains board and configuration-specific changes to the kernel. Change the device tree file to change
the kernel for a different i.MX board or configuration.
By default, the release uses the following layout for the images on the SD card. The kernel image and DTB move to use the FAT
partition without a fixed raw address on the SD card. The users have to change the U-Boot boot environment if the fixed raw
address is required.
0x400 bytes (2) 0x9FFC00 bytes (20478) RAW i.MX 6 and i.MX 7 U-Boot and reserved area
0x8400 (66) 0x9F7C00 (20414) RAW i.MX 8M Quad and i.MX 8M Mini imx-boot
reserved area
0xa00000 bytes (20480) 500 MB (1024000) FAT Kernel Image and DTBs
$ cat /proc/partitions
major minor #blocks name
8 0 78125000 sda
8 1 75095811 sda1
8 2 1 sda2
8 5 3028221 sda5
8 32 488386584 sdc
8 33 488386552 sdc1
8 16 3921920 sdb
8 18 3905535 sdb1
In this example, the device node assigned is /dev/sdb (a block is 1024 Bytes).
NOTE
Make sure that the device node is correct for the SD/MMC card. Otherwise, it may damage your operating system
or data on your computer.
The entire contents of the SD card are replaced. If the SD card is larger than 4 GB, the additional space is not accessible.
$ mkdir mountpoint
$ sudo mount /dev/sdx1 mountpoint
3. Copy the zImage and *.dtb files to the mountpoint by using cp. The device tree names should match the one used by the
variable specified by U-Boot. Unmount the partition with this command:
Each of them copies the kernel to the media at offset 1 MB (bs x seek = 512 x 2048 = 1 MB). The file zImage_imx_v7_defconfig
refers to the zImage file created when using the imx_v7_defconfig configuration file, which supports both i.MX 6 and i.MX 7 SoCs.
The i.MX DTB image can be copied by using the copy command and copying the file to the 2nd partition or the following commands
copy an i.MX DTB image to the SD/MMC card by using dd command.
For i.MX 6 and i.MX 7, the following command can be used to copy the kernel image to the boards, such as the i.MX 6UltraLite
EVK board and i.MX 6ULL EVK board:
For i.MX 6 and i.MX 7, this copies the board-specific .dtb file to the media at offset 10 MB (bs x seek = 512 x 20480 = 10 MB).
$ mkdir /home/user/mountpoint
$ sudo mount /dev/sdx2 /home/user/mountpoint
$ cd /home/user/rootfs
$ tar -jxvf imx-image-multimedia-imx7ulpevk.tar.bz2
$ cd /home/user/rootfs
$ sudo cp -a * /home/user/mountpoint
$ sudo umount /home/user/mountpoint
$ sync
NOTE
Copying the file system takes several minutes depending on the size of your rootfs.
NOTE
To enable the full features for i.MX 7ULP, burn the Arm Cortex-M4 image to QuadSPI. It is recommended to use
the MFGTool script uuu LF5.10.72_2.2.0_images_MX7ULPEVK.zip\uuu_sd_m4.auto to burn both BSP
and Arm Cortex-M4 images.
i.MX U-Boot provides a reference script on i.MX 7Dual SABRESD and i.MX 6SoloX SABRE-AI/SABRE-SD to flash the Arm
Cortex-M4 image from the SD card. To execute the script, perform the following steps:
1. Copy the Arm Cortex-M4 image to the first VFAT partition of the boot SD card. Name the file to m4_qspi.bin.
2. Boot from the SD card.
3. Flash the Arm Cortex-M4 image from the SD card to the NOR flash on QuadSPI2 PortB CS0 on the i.MX 6SoloX
SABRE-SD board, QuadSPI1 PortB CS0 on the i.MX 6SoloX SABRE-AI board, or QuadSPI1 PortA CS0 offset 1 MB on
the i.MX 7Dual SABRE-SD board.
Alternatively, users can flash the Arm Cortex-M4 image from TFTP by performing the following steps:
1. Boot from the SD card.
2. TFTP the Arm Cortex-M4 image.
3. Select the NOR flash on QuadSPI2 PortB CS0 on the i.MX 6SoloX SABRE-SD board or QuadSPI1 PortB CS0 on the
i.MX 6SoloX SABRE-AI board.
Select the NOR flash on QuadSPI1 PortA CS0 on the i.MX 7Dual SABRE-SD board and i.MX 7ULP EVK board.
4. Flash the Arm Cortex-M4 image to the selected NOR flash. The erase size is ${filesize}, around 64 Kbytes. This
example assumes that it is 128 Kbytes.
i.MX 7Dual SABRE-SD needs to program the Arm Cortex-M4 images to 1 MB offset, because the first 1 MB is used by the
U-Boot image in QuadSPI.
NOTE
On i.MX 7Dual SABRE-SD, the Arm Cortex-M4 image on QuadSPI is supported only when the U-Boot image is
built by the target mx7dsabresd_qspi1_defconfig booted by U-Boot from QuadSPI.
The default U-Boot for the i.MX 7Dual SABRESD board uses the Cortex-M4 image from the SD card and runs it
on OCRAM.
On i.MX 7ULP EVK, the Arm Cortex-M4 image needs to be programmed. Otherwise, it will not boot.
NOTE
To enable the full features for i.MX 7ULP, burn the Arm Cortex-M4 image to QuadSPI. It is recommended to use the
MfgTool script uuu LF5.10.72_2.2.0_images_MX7ULPEVK.zip\uuu_sd_m4.auto to burn both BSP and
Arm Cortex-M4 images.
For i.MX 7ULP, to burn the Arm Cortext-M4 image to QuadSPI, perform the following steps:
1. Copy the Arm Cortext-M4 image to the SD card vfat partition, insert the SD card, and then boot to the U-Boot console.
2. Probe the Quad SPI in U-Boot, and erase an enough big size QuardSPI flash space for this Arm Cortext-M4 image.
3. Read the Arm Cortext-M4 image (in the first vfat partition on the SD card) to memory address, the Arm Cortext-M4 image
name is sdk20-app.img here.
To flash the original U-Boot, see Section Preparing an SD/MMC card to boot.
The U-Boot bootloader is able to download images from a TFTP server into RAM and to write from RAM to an SD card. For this
operation, the Ethernet interface is used and U-Boot environment variables are initialized for network communications.
The boot media contains U-Boot, which is executed upon power-on. Press any key before the value of the U-Boot environment
variable, bootdelay, decreases and before it times out. The default setting is 3 seconds to display the U-Boot prompt.
1. To clean up the environment variables stored on MMC/SD to their defaults, execute the following command in the
U-Boot console:
U-Boot > env default -f -a U-Boot > saveenv U-Boot > reset
2. Configure the U-Boot environment for network communications. The following is an example. The lines preceded by the
"#" character are comments and have no effect.
The user can set a fake MAC address through ethaddr environment if the MAC address is not fused.
5. Check the usage of the mmc command. The blk# is equal to <the offset of read/write>/<block length of the
card>. The cnt is equal to <the size of read/write>/<block length of the card>.
6. Program the kernel zImage/Image located in RAM at ${loadaddr} into the SD card. For example, the command to
write the image with the size 0x800000 from ${loadaddr} to the offset of 0x100000 of the microSD card. See the
following examples for the definition of the MMC parameters.
This example assumes that the kernel image is equal to 0x800000. If the kernel image exceeds 0x800000, increase
the image length. After issuing the TFTP command, filesize of the U-Boot environment variable is set with the number
of bytes transferred. This can be checked to determine the correct size needed for the calculation. Use the U-Boot
command printenv to see the value.
7. Program the dtb file located in RAM at ${fdt_addr} into the microSD.
8. On i.MX 6 SABRE boards, you can boot the system from rootfs on SD card, using the HannStar LVDS as display. The
kernel MMC module now uses a fixed mmcblk index for the uSDHC slot. The SD3 slot uses mmcblk2 on i.MX 6 SABRE
boards, the SD1 slot uses mmcblk0 on the i.MX 7Dual SABRE-SD board, and the SD2 slot uses mmcblk1 on the i.MX
6UltraLite board and i.MX 6ULL EVK board. The SD1 slot uses mmcblk1 on i.MX 8 MEK boards and i.MX 8M boards.
NOTE
To enable the full features for i.MX 7ULP, burn the Arm Cortex-M4 image to QuadSPI. It is recommended to use the
MfgTool script uuu LF5.10.72_2.2.0_images_MX7ULPEVK.zip\uuu_sd_m4.auto to burn both BSP and
Arm Cortex-M4 images.
1. Execute the following command on the U-Boot console to clean up the environments stored on eMMC:
2. Configure the boot pin. Power on the board and set the U-Boot environment variables as required. For example,
5. Check the usage of the mmc command. blk# is equal to <the offset of read/write>/<block length of the
card>. cnt is equal to <the size of read/write>/<block length of the card>.
6. Program the kernel zImage/Image into eMMC. For example, the command below writes the image with the size
0x800000 from ${loadaddr} to the offset 0x100000 of the eMMC chip. Here, the following equations are used: 0x800
=0x100000/0x200, 0x4000=0x800000/0x200. The block size of this card is 0x200. This example assumes that the
kernel image is less than 0x800000 bytes. If the kernel image exceeds 0x800000, enlarge the image length.
7. Program the dtb file located in RAM at ${fdt_addr} into the eMMC chip.
8. Boot up the system through the rootfs in eMMC, using the HannStar LVDS as display. The kernel MMC module now
uses the fixed mmcblk indexes for the USDHC slots. The eMMC/SD4 slot on the i.MX 6 SABRE boards is mmcblk3.
The eMMC5.0 on the i.MX 8QuadMax MEK board, i.MX 8QuadXPlus MEK board, and i.MX 8M Quad EVK board are
mmcblk0. The eMMC5.0/SD3 slot on the i.MX 7Dual SABRE board is mmcblk2. eMMC is not populated on the i.MX
7Dual SABRE board.
9. Boot up the system through the rootfs in eMMC, using the CLAA WVGA panel as display:
• For i.MX 6 boards:
10. Boot up the system through rootfs in eMMC, using HDMI as display:
• For i.MX 6 boards:
• For i.MX 8QuadMax/8QuadXPlus/8M Quad/8M Plus, the following display kernel parameters are supported:
a. Pick a particular video mode for legacy FB emulation since system startup.
video=HDMI-A-{n}: {video_mode}
n can be 1 to the maximum number of HDMI connectors in the system. video_mode should be the one that
the monitor on the connector supports. For example, video=HDMI-A-1:1920x1080@60. By default, if there is no
parameter in the command line, the system uses the video mode that the monitor recommends.
b. Enable or disable legacy FB emulation.
drm_kms_helper.fbdev_emulation=0 or 1
0 to disable, 1 to enable. By default, if there is no parameter in the command line, the emulation is enabled.
c. Set legacy FB emulation framebuffer’s bits per pixel (bpp) parameter.
imxdrm.legacyfb_depth=16 or 24 or 32
NOTE
To enable the full features for i.MX 7ULP, burn the Arm Cortex-M4 image to QuadSPI. It is recommended to use
the MFGTool script uuu LF5.10.72_2.2.0_images_MX7ULPEVK.zip\uuu_sd_m4.auto to burn both BSP
and Arm Cortex-M4 images.
i.MX U-Boot provides a reference script on i.MX 7Dual SABRESD and i.MX 6SoloX SABRE-AI/SABRE-SD to flash the Arm
Cortex-M4 image from the SD card. To execute the script, perform the following steps:
1. Copy the Arm Cortex-M4 image to the first VFAT partition of the boot SD card. Name the file to m4_qspi.bin.
2. Boot from the SD card.
3. Flash the Arm Cortex-M4 image from the SD card to the NOR flash on QuadSPI2 PortB CS0 on the i.MX 6SoloX
SABRE-SD board, QuadSPI1 PortB CS0 on the i.MX 6SoloX SABRE-AI board, or QuadSPI1 PortA CS0 offset 1 MB on
the i.MX 7Dual SABRE-SD board.
Alternatively, users can flash the Arm Cortex-M4 image from TFTP by performing the following steps:
1. Boot from the SD card.
2. TFTP the Arm Cortex-M4 image.
3. Select the NOR flash on QuadSPI2 PortB CS0 on the i.MX 6SoloX SABRE-SD board or QuadSPI1 PortB CS0 on the
i.MX 6SoloX SABRE-AI board.
Select the NOR flash on QuadSPI1 PortA CS0 on the i.MX 7Dual SABRE-SD board and i.MX 7ULP EVK board.
4. Flash the Arm Cortex-M4 image to the selected NOR flash. The erase size is ${filesize}, around 64 Kbytes. This
example assumes that it is 128 Kbytes.
i.MX 7Dual SABRE-SD needs to program the Arm Cortex-M4 images to 1 MB offset, because the first 1 MB is used by the
U-Boot image in QuadSPI.
NOTE
On i.MX 7Dual SABRE-SD, the Arm Cortex-M4 image on QuadSPI is supported only when the U-Boot image is
built by the target mx7dsabresd_qspi1_defconfig booted by U-Boot from QuadSPI.
The default U-Boot for the i.MX 7Dual SABRESD board uses the Cortex-M4 image from the SD card and runs it
on OCRAM.
On i.MX 7ULP EVK, the Arm Cortex-M4 image needs to be programmed. Otherwise, it will not boot.
$ cat /proc/partitions
2. To create a partition on the MMC/SD card, use the fdisk command (requires root privileges) in the Linux console:
The device contains neither a valid DOS partition table, nor Sun, SGI or OSF disk label
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that the previous content
won't be recoverable.
The number of cylinders for this disk is set to 124368.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
The usual prompt and commands to partition the card are as follows. Text in boldface indicates what the user types.
4. As described in Flash memory maps, the rootfs partition should be located after the kernel image. The first 0x800000
bytes can be reserved for MBR, bootloader, and kernel sections. From the log shown above, the Units of the current
MMC/SD card is 32768 bytes. The beginning cylinder of the first partition can be set to "0x300000/32768 = 96." The last
cylinder can be set according to the rootfs size. Create a new partition by typing the letters in bold:
5. Check the partitions (see above) to determine the name of the partition. $PARTITION is used here to indicate the
partition to be formatted. Format the MMC/SD partitions as ext3 or ext4 type. For example, to use ext3:
6. Copy the rootfs contents to the MMC/SD card. The name may vary from the one used below. Check the directory for the
rootfs desired. (Copy the *.ext2 to NFS rootfs).
mkdir /mnt/tmpmnt
mount -t ext3 -o loop /imx-image-multimedia.ext3 /mnt/tmpmnt
cd /mnt
mkdir mmcblk0p1
mount -t ext3 /dev/$PARTITION /mnt/mmcblk0p1
cp -af /mnt/tmpmnt/* /mnt/mmcblk0p1/
umount /mnt/mmcblk0p1
umount /mnt/tmpmnt
8. Type poweroff to power down the system. Follow the instructions in Running Linux OS on the target to boot the image
from the MMC/SD card.
NOTE
By default, v2013.04 and later versions of U-Boot support loading the kernel image and DTB file from the SD/MMC
vfat partition by using the fatload command. To use this feature, perform the following steps:
1. Format the first partition (for example 50 MB) of the SD/MMC card with vfat filesystem.
2. Copy zImage and the DTB file into the VFAT partition after you mount the VFAT partition into your
host computer.
3. Make sure that the zImage and DTB file name are synchronized with the file name pointed to by the U-Boot
environment variables: fdtfile and image. Use the print command under U-Boot to display these two
environment variables. For example:
4. U-Boot loads the kernel image and the DTB file from your VFAT partition automatically when you boot from
the SD/MMC card.
The following is an example to format the first partition to a 50 MB vfat filesystem and format the second partition to an
ext4 filesystem:
~$ fdisk /dev/sdb
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-30318591, default 2048): 4096
Last sector, +sectors or +size{K,M,G} (4096-30318591, default 30318591): +50M
Command (m for help): p
Disk /dev/sdb: 15.5 GB, 15523119104 bytes
64 heads, 32 sectors/track, 14804 cylinders, total 30318592 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3302445d
Device Boot Start End Blocks Id System
/dev/sdb1 4096 106495 51200 83 Linux
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (2048-30318591, default 2048): 106496
Last sector, +sectors or +size{K,M,G} (106496-30318591, default 30318591):
Using default value 30318591
Command (m for help): p
Disk /dev/sdb: 15.5 GB, 15523119104 bytes
64 heads, 32 sectors/track, 14804 cylinders, total 30318592 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3302445d
Device Boot Start End Blocks Id System
/dev/sdb1 4096 106495 51200 83 Linux
Switch D1 D2 D3 D4 D5 D6 D7 D8
SW3 ON OFF - - - - - -
The following table shows the DIP switch settings for booting from the SD card slot labeled SD1 on the i.MX 7ULP EVK boards.
Switch D1 D2 D3 D4
The following table shows the bootcfg pin settings for booting from the SD card slot labeled SD1 on the i.MX 8QuadMax
MEK boards.
Switch D1 D2 D3 D4 D5 D6 D7 D8
The following table shows the bootcfg pin settings for booting from the SD card slot labeled SD1 on the i.MX 8QuadXPlus
MEK boards.
NOTE
This is the same setting for the i.MX 8DualX MEK and i.MX 8DXL EVK boards.
Switch D1 D2 D3 D4
Switch D1 D2 D3 D4 D5 D6 D7 D8
The i.MX 6UltraLite EVK board or i.MX 6ULL EVK board has one TF card slot on the CPU board. This slot uses the USDHC2
controller. The following table shows the DIP switch settings for booting from the TF slot.
Table 7. Booting from TF on i.MX 6UltraLite EVK and i.MX 6ULL EVK
Switch D1 D2 D3 D4
SW602 ON OFF - -
The i.MX 8M Quad EVK board has one TF card slot. This slot uses the USDHC2 controller. The following table shows the DIP
switch settings for booting from the TF slot.
Switch D1 D2 D3 D4
SW802 ON OFF - -
The i.MX 8M Mini EVK board has one TF card slot. This slot uses the USDHC2 controller. The following table shows the DIP switch
settings for booting from the TF slot.
Switch D1 D2 D3 D4 D5 D6 D7 D8
The i.MX 8M Nano EVK board has one TF card slot. This slot uses the USDHC2 controller. The following table shows the DIP
switch settings for booting from the TF slot.
Switch D1 D2 D3 D4
The i.MX 8M Plus EVK board has one TF card slot. This slot uses the USDHC2 controller. The following table shows the DIP switch
settings for booting from the TF slot.
Switch D1 D2 D3 D4
Switch D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
S1 X X X OFF ON X X X X X
S2 X OFF ON OFF - - - - - -
The following table shows the DIP switch settings to boot from an SD card in slot SD3 on i.MX 6SoloX SABRE-AI boards.
Table 13. Booting from an MMC card in Slot SD3 on i.MX 6SoloX SABRE-AI
Switch D1 D2 D3 D4 D5 D6 D7 D8
The following table shows the DIP switch settings for booting from SD3, also labeled as J507. The SD3 slot is located between
the HDMI and UART ports.
Switch D1 D2 D3 D4 D5 D6 D7 D8
Table 15. Booting from an SD card in slot SD4 on i.MX 6SoloX SABRE-SD
Switch D1 D2 D3 D4 D5 D6 D7 D8
Table 16. Booting from an MMC card in slot SD4 on i.MX 6SoloX SABRE-SD
Switch D1 D2 D3 D4 D5 D6 D7 D8
Switch D1 D2 D3 D4 D5 D6 D7 D8
i.MX 7Dual is different from i.MX 6. The eMMC uses the SD3 pin connections from the i.MX 7Dual processor.
Switch D1 D2 D3 D4 D5 D6 D7 D8
SW3 ON OFF - - - - - -
The following table shows the boot switch settings to boot from eMMC4.4 on the i.MX 7ULP EVK boards.
Switch D1 D2 D3 D4
The following table shows the boot switch settings to boot from eMMC5.0 on the i.MX 8QuadMax MEK boards.
Switch D1 D2 D3 D4 D5 D6 D7 D8
The following table shows the boot switch settings to boot from eMMC5.0 on the i.MX 8QuadXPlus MEK boards.
NOTE
This is the same setting for the i.MX 8DualX MEK and i.MX 8DXL EVK boards, except that 8DXL EVK uses SW1.
Switch D1 D2 D3 D4
The following table shows the boot switch settings to boot from eMMC5.0 on the i.MX 8M Quad EVK boards.
Switch D1 D2 D3 D4
The following table shows the boot switch settings to boot from eMMC5.1 on the i.MX 8M Mini EVK boards.
Switch D1 D2 D3 D4 D5 D6 D7 D8
The following table shows the boot switch settings to boot from eMMC5.1 on the i.MX 8M Nano EVK boards.
Switch D1 D2 D3 D4
The following table shows the boot switch settings to boot from eMMC5.1 on the i.MX 8M Plus EVK boards.
Switch D1 D2 D3 D4
The following table lists the boot switch settings to boot from eMMC5.1 on the i.MX 8ULP EVK.
Switch D1 D2 D3 D4 D5 D6 D7 D8
Table 27. Dualboot booting from eMMC for A35 on i.MX 8ULP EVK
Switch D1 D2 D3 D4 D5 D6 D7 D8
Switch D1 D2 D3 D4 D5 D6 D7 D8
Switch D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
The following table shows the DIP switch settings needed to boot from NAND for i.MX 7Dual SABRE-SD boards.
Switch D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
S2 OFF ON ON X X X X OFF - -
S3 ON OFF X X X X X X - -
The following table shows the DIP switch settings needed to boot from NAND for i.MX 8M Mini DDR4 EVK boards.
Switch D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
Switch D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
S1 X X X X X X X X X X
Switch D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
S1 X X X OFF OFF ON X X X X
NOTE
SPI and EIM NOR have pin conflicts on i.MX 6 SABRE-AI boards. Neither can be used for the same configuration.
The default U-Boot configuration is set to SPI NOR.
Switch D1 D2 D3 D4 D5 D6 D7 D8
Switch D1 D2 D3 D4 D5 D6 D7 D8
Switch D1 D2 D3 D4 D5 D6 D7 D8
SW3 ON OFF - - - - - -
Table 37. Booting from QuadSPI on i.MX 6UltraLite EVK and i.MX 6ULL EVK
Switch D1 D2 D3 D4
SW602 ON OFF - -
Switch D1 D2 D3 D4 D5 D6 D7 D8
Switch D1 D2 D3 D4
Switch D1 D2 D3 D4 D5 D6 D7 D8
Switch D1 D2 D3 D4
SW602 ON OFF - -
Switch D1 D2 D3 D4
Table 43. Singleboot booting from Flexspi NOR on i.MX 8ULP EVK
Switch D1 D2 D3 D4 D5 D6 D7 D8
Table 44. Dualboot booting from Flexspi for A35 on i.MX 8ULP EVK
Switch D1 D2 D3 D4 D5 D6 D7 D8
Switch D1 D2 D3 D4
Table 46. Setup for the Manufacturing Tool on i.MX 7Dual SABRE-SD
Switch D1 D2 D3 D4
S3 OFF ON - -
Table 47. Setup for Manufacturing Tool on i.MX 6UltraLite EVK and i.MX 6ULL EVK
Switch D1 D2
SW602 OFF ON
Switch D1 D2 D3 D4
SW1 OFF ON - -
Switch D1 D2
SW802 OFF ON
Switch D1 D2 D3 D4
Switch D1 D2 D3 D4 D5 D6 D7 D8
SW1101 ON OFF X X X X X X
SW1102 X X X X X X X X
Switch D1 D2 D3 D4
Switch D1 D2 D3 D4 D5 D6
NOTE
The following settings are same for the i.MX 8DualX MEK and i.MX 8DXL EVK boards (8DXL EVK uses SW1).
Switch D1 D2 D3 D4
Switch D1 D2 D3 D4 D5 D6 D7 D8
NOTE
If the SD card with bootable image is plugged in SD2 (baseboard), ROM will not fall back into the serial
download mode.
environment without Yocto Project. This SDK should be updated for each release to pick up the latest headers, toolchain,
and tools from the current release.
NOTE
If the building process is interrupted, modify conf/local.conf to comment out the line: PACKAGE_CLASSES =
"package_deb", and then execute the populate_sdk command again.
• From the build directory, the bitbake was run in, copy the sh file in tmp/deploy/sdk to the host machine to build on and
execute the script to install the SDK. The default location is in /opt but can be placed anywhere on the host machine.
On the host machine, these are the steps to build U-Boot and Kernel:
• For i.MX 8 builds on the host machine, set the environment with the following command before building.
source /opt/fsl-imx-xwayland/5.10-hardknott/environment-setup-aarch64-poky-linux
export ARCH=arm64
make distclean
make imx8ulp_evk_defconfig
make
• For i.MX 6 and i.MX 7 builds on the host machine, set the environment with the following command before building.
source /opt/fsl-imx-fb/5.10-hardknott/environment-setup-cortexa9hf-neon-poky-linux-gnueab
export ARCH=arm
• To build an i.MX 8 U-Boot in the standalone environment, find the configuration for the target boot. In the following
example, i.MX 8QuadMax MEK board is the target and it runs on the Arm Cortex-A53 core by default. SPL image
(u-boot-spl.bin) is also generated with the default defconfig. It is needed when booting with OP-TEE image.
make distclean
make imx8qm_mek_defconfig
make
make distclean
make imx8qxp_mek_defconfig
make
make distclean
make imx8dxl_evk_defconfig
make
make distclean
make imx8mq_evk_defconfig
make
make distclean
make imx8mm_evk_defconfig
make
make distclean
make imx8mm_ddr4_evk_defconfig
make
make distclean
make imx8mp_evk_defconfig
make
• To build an i.MX 6 or i.MX 7 U-Boot in the standalone environment, find the configuration for the target boot. In the
following example, i.MX 6ULL is the target.
• To build the kernel in the standalone environment for i.MX 8, execute the following commands:
make imx_v8_defconfig
make
• To build the kernel in the standalone environment for i.MX 6 and i.MX 7, execute the following commands:
NOTE
Users need to modify configurations for fused parts. For example, the i.MX 6UltraLite has four parts, G0, G1, G2,
and G3.
• G0: TSC, ADC2, FLEXCAN1, FLEXCAN2, FREQ_MON, TEMP_MON, VOLT_MONLCDIF, CSI, ENET2,
CAAM, USB_OTG2, SAI23, BEE, UART5678, PWM5678, ECSPI34, I2C34, GPT2, and EPIT2.
• G1: TSC, ADC2, FLEXCAN2, FREQ_MON, TEMP_MON, VOLT_MON, LCDIF, CSI, ENET2, and BEE.
G0:
/* #define CONFIG_VIDEO */
#define CONFIG_FEC_ENET_DEV 0
/* #define CONFIG_CMD_BEE */
#define CONFIG_USB_MAX_CONTROLLER_COUNT 1
G1:
/* #define CONFIG_VIDEO */
#define CONFIG_FEC_ENET_DEV 0
/* #define CONFIG_CMD_BEE */
G2:
/* #define CONFIG_CMD_BEE */
G3: No change.
For i.MX 8QuadXPlus, to build imx-boot image by using imx-mkimage, perform the following steps:
1. Copy u-boot.bin from u-boot/u-boot.bin to imx-mkimage/iMX8QX/.
2. Copy scfw_tcm.bin from SCFW porting kit to imx-mkimage/iMX8QX/.
3. Copy bl31.bin from Arm Trusted Firmware (imx-atf) to imx-mkimage/iMX8QX/.
4. Copy the SECO firmware container image (ahab-container.img) to imx-mkimage/iMX8QX/.
5. Run make SOC=iMX8QX flash to generate flash.bin.
6. If using OP-TEE, copy tee.bin to imx-mkimage/iMX8QX/ and copy u-boot/spl/u-boot-spl.bin to imx-mkimage/
iMX8QX/. Run make SOC=iMX8QX flash_spl to generate flash.bin.
For i.MX 8DXL, to build imx-boot image by using imx-mkimage, perform the following steps:
1. Copy u-boot.bin from u-boot/u-boot.bin to imx-mkimage/iMX8DXL/.
2. Copy scfw_tcm.bin from SCFW porting kit to imx-mkimage/iMX8DXL/.
3. Copy bl31.bin from Arm Trusted Firmware (imx-atf) to imx-mkimage/iMX8DXL/.
4. Copy the image of SECO firmware container (mx8dxla1-ahab-container.img) to imx-mkimage/iMX8DXL/.
5. Run make SOC=iMX8DXL flash to generate flash.bin.
6. If using OP-TEE, copy tee.bin to imx-mkimage/iMX8DXL/ and copy u-boot/spl/u-boot-spl.bin to imx-mkimage/
iMX8DXL/. Run make SOC=iMX8DXL flash_spl to generate flash.bin.
7. If skipping loading V2X firmware, add V2X=NO to make command, like make SOC=iMX8DXL V2X=NO flash.
The following is a matrix table for targets of i.MX 8QuadMax and i.MX 8QuadXPlus.
Table 56. Matrix table for targets of i.MX 8QuadMax, i.MX 8QuadXPlus, and i.MX 8DXL
flash No Yes No No
For i.MX 8ULP EVK, to build imx-boot image by using imx-mkimage, perform the following steps:
1. Copy u-boot.bin from u-boot/u-boot.bin and u-boot-spl.bin from u-boot/spl/u-boot-spl.bin to imx-mkimage/
iMX8ULP/.
Single Boot (Default) Boot Cortex-A35 + Cortex-M33 from eMMC: 1000_xx00 Single Boot-
eMMC
make SOC=iMX8ULP flash_singleboot_m33
For i.MX 8M EVK, to build imx-boot image by using imx-mkimage, perform the following steps:
1. Copy and rename mkimage from u-boot/tools/mkimage to imx-mkimage/iMX8M/mkimage_uboot.
2. Copy u-boot-spl.bin from u-boot/spl/u-boot-spl.bin to imx-mkimage/iMX8M/.
3. Copy u-boot-nodtb.bin from u-boot/u-boot-nodtb.bin to imx-mkimage/iMX8M/.
4. Copy imx8mq-evk.dtb (for i.MX 8M Quad EVK), imx8mm-evk.dtb (for i.MX 8M Mini LPDDR4 EVK), imx8mm-ddr4-
evk.dtb (for i.MX 8M Mini DDR4 EVK), or imx8mp-evk.dtb (for i.MX 8M Plus LPDDR4 EVK) from u-boot/
arch/arm/dts/ to imx-mkimage/iMX8M/.
For i.MX 8M Mini DDR4 EVK, copy ddr4_imem_1d.bin, ddr4_dmem_1d.bin, ddr4_imem_2d.bin, and ddr4_dmem_2d.bin
from firmware/ddr/synopsys of the firmware-imx package to imx-mkimage/iMX8M.
For i.MX 8M Plus LPDDR4 EVK, copy lpddr4_pmu_train_1d_dmem_201904.bin,
lpddr4_pmu_train_1d_imem_201904.bin, lpddr4_pmu_train_2d_dmem_201904.bin, and
lpddr4_pmu_train_2d_imem_201904.bin from firmware/ddr/synopsys of the firmware-imx package to imx-
mkimage/iMX8M/.
8. For i.MX 8M Quad EVK, run make SOC=iMX8M flash_evk to generate flash.bin (imx-boot image) with HDMI FW
included. For i.MX 8M Mini LPDDR4 EVK, run make SOC=iMX8MM flash_evk to generate flash.bin (imx-boot image).
For i.MX 8M Mini DDR4 EVK, run make SOC=iMX8MM flash_ddr4_evk to generate flash.bin (imx-boot image).
For i.MX 8M Plus LPDDR4 EVK, run make SOC=iMX8MP flash_evk to generate flash.bin (imx-boot-image).
To boot with eMMC fasboot on i.MX 8M Quad EVK and i.MX 8M Mini LPDDR4 EVK, use
flash_evk_emmc_fastboot target.
mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs)
mtdparts=8000000.nor:1m(uboot),-(rootfs)
mtdparts=spi32766.0:768k(uboot),8k(env),128k(dtb),-(kernel)
mtdparts=21e4000.qspi:1m(uboot),8m(kernel),1m(dtb),-(user)
U-Boot has the mapping below to help in accessing the QuadSPI flash in U-Boot for non-parallel mode.
The commands env default -f -a and saveenv can be used to return to the default environment.
For the i.MX 7ULP EVK, i.MX 8QuadMax MEK boards, and i.MX 8QuadXPlus MEK board, change to " console=ttyLP0,115200".
Specifying displays
The display information can be specified on the Linux boot command line. It is not dependent on the source of the Linux image.
If nothing is specified for the display, the settings in the device tree are used. Add ${displayinfo} to the environment macro
®
containing bootargs. The specific parameters can be found in the i.MX Linux Release Notes (IMXLXRN). The following are some
examples of these parameters.
• U-Boot > setenv displayinfo 'video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24' for an HDMI display
• U-Boot > setenv displayinfo 'video=mxcfb1:dev=ldb video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24' for
LVDS and HDMI dual displays
• U-Boot > setenv displayinfo 'video=mxcfb0:dev=lcd,if=RGB565' for an LCD
• U-Boot > setenv displayinfo 'video=mxcepdcfb:E060SCM,bpp=16 max17135:pass=2,vcom=-2030000' for an EPDC
connection
• U-Boot > setenv displayinfo 'video=mxcfb0:mxcfb0:dev=lcd,if=RGB565
video=mxcfb1:dev=hdmi,1920x1080M@60,if=RGB24' for LCD and HDMI dual displays
Variable 6Quad, 6SoloX SD 7Dual 6UltraLite, 7ULP EVK 8QuadMax, 8M Quad/ Description
6QuadPlus, SABRE-SD 6ULL and 8QuadXPlu 8M Mini
and 6ULZ EVK s, 8DualX, EVK
6DualLite and 8DXL
SABRE (AI
and SD)
Variable 6Quad, 6SoloX SD 7Dual 6UltraLite, 7ULP EVK 8QuadMax, 8M Quad/ Description
6QuadPlus, SABRE-SD 6ULL and 8QuadXPlu 8M Mini
and 6ULZ EVK s, 8DualX, EVK
6DualLite and 8DXL
SABRE (AI
and SD)
tree code
are copied
to
In addition, fdtfile is used to specify the file name of the device tree file. The commands used to set the U-Boot environment
variables are as follows:
Special settings
i.XM 6Solo, and 6UltraLite can specify uart_from_osc on the command line to specify that the OSC clock rather than PLL3 should
be used. This allows the system to enter low power mode.
U-Boot > setenv bootargsset 'setenv bootargs ${consoleinfo} ${rootfsinfo} ${displayinfo} ${special}'
U-Boot > setenv bootcmd 'run bootargsset; {settings-for-device}; bootz ${loadaddr} - ${fdt_addr}'
Assume that the kernel image starts from the address 0x1400000 byte (the block starting address is 0x800). The kernel image
size is less than 0x400000 byte. The rootfs is located in /dev/mtd2.
U-Boot > setenv bootcmd 'run bootargsset; nand read ${loadaddr} 0x1000000 0x800000; nand read $
{fdt_addr} 0x2000000 0x100000; bootz ${loadaddr} - ${fdt_addr}'
U-Boot > setenv bootcmd 'run bootargsset; cp.b 0x80c0000 ${loadaddr} 0x800000;cp.b 0x80a0000
${fdt_addr} 0x20000;bootz ${loadaddr} - ${fdt_addr} '
U-Boot > setenv bootcmd 'run bootargsset; sf probe; sf read ${loadaddr} 0xA00000 0x2000; sf read
${fdt_addr} 0x800000 0x800; bootz ${loadaddr} - ${fdt_addr} '
2. On the i.MX 6SoloX SABRE-SD board, assumed that the Arm Cortex-M4 image is at address 0x78000000 (NOR flash
of QuadSPI2 PortB CS0). On the i.MX 6SoloX SABRE-AI board, assumed that the Arm Cortex-M4 image is at address
0x68000000 (NOR flash of QuadSPI1 PortB CS0).
At the U-Boot prompt:
NOTE
For how to add the MCC demo to the kernel and limit RAM available to kernel to use it, see Chapter 53 "i.MX 6
®
SoloX MultiCore Communication (MCC)" of the i.MX Linux Reference Manual (IMXLXRM).
As well as supporting running the Arm Cortex-M4 image from QuadSPI, the default i.MX 7Dual SABRE-SD board supports loading
the Arm Cortex-M4 image from the SD card and running it on OCRAM.
Prepare the Arm Cortex-M4 image to the FAT partition of the SD card. Name the file to "m4_qspi.bin" when using "m4boot" script.
After the board is powered on, the following information is displayed at the U-Boot prompt:
On the i.MX 8M boards, perform the commands to boot the Arm Cortex-M Core core:
On the i.MX 8QuadMax and i.MX 8QuadXPlus boards, there are two ways to boot the Arm Cortex-M4 cores:
• Booting from ROM
Users need to use imx-mkimage to pack the Arm Cortex-M4 images into imx-boot image. It is necessary to specify the core
ID and its TCML address in the build command. The following is an example:
NOTE
When booting with the packed Cortex-M4 image (flash_linux_m4), use kernel DTB with RPMSG enabled, like
fsl-imx8qm-mek-rpmsg.dtb for i.MX 8QuadMax MEK or fsl-imx8qxp-mek-rpmsg.dtb for i.MX 8QuadXPlus MEK.
uSDHC mmcroot
uSDHC 1 mmcblk0*
uSDHC 2 mmcblk1*
uSDHC 3 mmcblk2*
uSDHC 4 mmcblk3*
In the default configuration of the SD card and the example here, U-Boot is at the 1024 byte offset, 32 KB offset for the i.MX
8QuadXPlus B0 and i.MX 8QuadMax B0, or 33 KB offset for the i.MX 8QuadXPlus A0, i.MX 8QuadMax A0, i.MX 8M EVK boards
before the first partition, partition 1 is the partition with the Linux kernel and device trees, and partition 2 is the rootfs.
Setting up the environment variables
For convenience, this document uses a standard set of variables to describe the information in the Linux command line. The values
used here may be different for different machines or configurations. By default, U-Boot supports setting mmcdev and mmcroot
automatically based on the uSDHC slot that we boot from. This assumes zImage, the device tree file (DTB), and the rootfs are on
the same SD/MMC card. To set these environment variables manually, set mmcautodetect to no to disable the feature.
The following is one way to set up the items needed to boot Linux OS.
NOTE
The U-Boot environment on the pre-built SD card does not match this. It is more complex so that it can automatically
deal with more variations. The example above is designed to be easier to understand and use manually.
NOTE
If the MAC address has not been burned into the fuses, set the MAC address to use the network in U-Boot.
3. Boot the board. The ACS test will automatically run up.
4. There will be manual step for the power-off test from ACS. Just re-power on the board when run into that test case.
The test result will be stored on the storage.
5. Use the SCT_Parser to analyze the ACS result. The SCT_Parser can be obtained from: https://github.com/
vstehle/SCT_Parser
6. Copy the acs_results\sct_results\Overall\Summary.ekl file from the RESULT partition in U-disk to the SCT_Parser
folder. Run python3 parser.py --config EBBR.yaml Summary.ekl EBBR.seq to get the final report.
U-Boot > env set dfu_alt_info "mmc 1=1 raw 0x42 0x2000"
• For eMMC:
U-Boot > env set dfu_alt_info "mmc 2=1 raw 0x42 0x2000 mmcpart 1"
U-Boot > efidebug boot add 0 Boot0000 mmc 1:1 capsule1.bin;efidebug boot next 0
U-Boot > setenv serverip 10.192.242.218;dhcp $loadaddr capsule1.bin;fatwrite mmc 1:1 $
{loadaddr} /EFI/UpdateCapsule/capsule1.bin 0x${filesize}
U-Boot > setenv -e -nv -bs -rt -v OsIndications =0x04
U-Boot > efidebug capsule disk-update
reset
Do not interrupt U-Boot. Let the board run into grub. Before grub runs, it should update the bootloader automatically and remove
capsule1.bin. And reboot the board again. The board will boot up with the updated U-Boot.
Chapter 5
Enabling Solo Emulation
Solo emulation can be enabled on the i.MX 6DualLite SABRE-SD and i.MX 6DualLite SABRE-AI boards. This is achieved by using
a specific U-Boot configuration in the bootloader build process.
When this Solo emulation is enabled on the i.MX 6DualLite SABRE platforms, the capabilities of the i.MX 6DualLite change to
the following:
• For solo emulation, use 6DualLite DTB and add maxcpus=1 to bootcmd of U-Boot.
• 32-bit data bus on DDR RAM.
• 1 GB of RAM for i.MX 6DualLite SABRE-AI.
• 512 MB of RAM for i.MX 6DualLite SABRE-SD.
To build U-Boot for an i.MX 6Solo on an i.MX 6DualLite SABRE-SD card, use the following command:
To build U-Boot for an i.MX 6Solo on an i.MX 6DualLite SABRE-AI card, use the following command:
Chapter 6
Power Management
The i.MX power management uses the standard Linux interface. Check the standard Linux power documentation for information
®
on the standard commands. The i.MX Linux Reference Manual (IMXLXRM) contains information on the power modes that are
available and other i.MX-specific information in the power management section.
There are three main power management techniques on i.MX boards: suspend and resume commands, CPU frequency scaling,
and bus frequency scaling. They are described in the following sections.
NOTE
It is ttylp0 for i.MX 8QuadXPlus and i.MX 8QuadMax, and ttyLP0 for i.MX 8DXL.
• RTC can be used to enter and exit from suspend mode by using the command:
This command indicates to sleep for 10 secs. This command automatically sets the power state to mem mode.
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
cat /sys/devices/system/cpu/*/cpufreq/scaling_available_governors
cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_cur_freq
cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_max_freq
cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_min_freq
• The following two commands set the scaling governor to a specified frequency, if that frequency is supported. If the
frequency is not supported, the closest supported frequency is used:
On most systems, the chip enters low power IDLE mode after the above two commands are executed.
To manipulate bus frequency, use the following commands to achieve the results desired:
cat /sys/bus/platform/drivers/imx_busfreq/soc\:busfreq/enable -> displays the status of bus frequency.
Chapter 7
Multimedia
i.MX provides audio optimized software codecs, parsers, hardware acceleration units, and associated plugins. The i.MX provides
GStreamer plugins to access the i.MX multimedia libraries and hardware acceleration units. This chapter provides various
multimedia use cases with GStreamer command line examples.
One option is to set these as environment variables as shown in the following examples. Use the full path to the command on
your system.
export GSTL=gst-launch-1.0
export PLAYBIN=playbin
export GPLAY=gplay-1.0
export GSTINSPECT=gst-inspect-1.0
In this document, variables are often used to describe the command parameters that have multiple options. These variables
are of the format $description where the type of values that can be used are described. The possible options can
®
be found in the Section about Multimedia in the i.MX Linux Release Notes (IMXLXRN) for i.MX-specific options, or at
"gstreamer.freedesktop.org/ for the community options.
The GStreamer command line pipes the input through various plugins. Each plugin section of the command line is marked by an
exclamation mark (!). Each plugin can have arguments of its own that appear on the command line after the plugin name and
before the next exclamation mark (!). Use $GSTINSPECT $plugin to get information on a plugin and what arguments it can use.
Square brackets ([ ]) indicate optional parts of the command line.
• Audio-only playback
• Video-only playback
• Audio/Video file playback
• Other methods for playback
If the file to be played contains an ID3 header, use the ID3 parser. If the file does not have an ID3 header, this has no effect.
This example plays an MP3 file in the audio jack output.
This is an example of an MP4 container with H.264 encoding format video file playback:
For the platforms without VPU hardware, $video_decoder_plugin could be a software decoder plugin like avdec_h264.
For the multichannel audio playback settings to be used when PulseAudio is enabled, see PulseAudio input/output settings.
7.3.4 Transcoding
Transcoding is converting a file from one video encoding to another.
VPU video encoding only works on SoC with VPU encoder support.
For i.MX 6 family with VPU, use the following command:
capsfilter is the container's mime type. CAPS1 is the target video resolution, and the vpuenc_xxx can be vpuenc_mpeg4,
vpuenc_h263, vpuenc_h264, and vpuenc_jpeg.
For example:
NOTE
• For some mux, such as matroskamux, add h264parse/h265parse before mux.
• For i.MX 6, h264parse is not required, because the VPU can output AVC and byte-stream formats. For
i.MX 8, h264parse/h265parse should be added before some mux, because the VPU supports only the
byte-stream output.
NOTE
Run the following command to work in EARC mode:
The following examples show how to make an MP3 or WMA audio recording.
• MP3 recording
NOTE
The recording duration is calculated as $NUMBER * $SIZE * 8 / (samplerate * channel *
bit width).
Therefore, to record 10 seconds of a stereo channel sample with a 44.1K sample rate and a 16 bit width, use the
following command:
Parameter comments:
• Get the camera support format and resolution using gst-inspect-1.0 v4l2src.
• Set caps filter according to the camera's supported capabilities if the user needs other format or resolution.
• Ensure that the right caps filter has been set, which also needs to be supported by v4l2sink.
NOTE
The TV decoder is ADV7180. It supports NTSC and PAL TV mode. The output video frame is interlaced, so the
sink plugin needs to enable deinterlace. The default value of v4l2sink deinterface is True.
• PLAYBIN
• GPLAY
$GPLAY http://SERVER/test.avi
• GPLAY
$GPLAY http://SERVER/test.m3u8
• GPLAY
$GPLAY http://SERVER/test.mpd
NOTE
Only supports TS container format segments currently.
RTSP streams can be played with a manual pipeline or by using playbin. The format of the commands is as follows.
• Manual pipeline
• PLAYBIN
Two properties of rtspsrc that are useful for RTSP streaming are:
• Latency: This is the extra added latency of the pipeline, with the default value of 200 ms. If you need low-latency RTSP
streaming playback, set this property to a smaller value.
• Buffer-mode: This property is used to control the buffering algorithm in use. It includes four modes:
— None: Outgoing timestamps are calculated directly from the RTP timestamps, not good for real-time applications.
— Slave: Calculates the skew between the sender and receiver and produces smoothed adjusted outgoing timestamps,
good for low latency communications.
— Buffer: Buffer packets between low and high watermarks, good for streaming communication.
— Auto: Chooses the three modes above depending on the stream. This is the default setting.
To pause or resume the RTSP streaming playback, use a buffer-mode of slave or none for rtspsrc, as in buffer-mode=buffer.
After resuming, the timestamp is forced to start from 0, and this causes buffers to be dropped after resuming.
Manual pipeline example:
Playback does not exit automatically in GStreamer 1.x, if buffer-mode is set to buffer in the rtpsrc plugin.
$yocto_root/build/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/gstreamer1.0-rtsp-server/
$version/
build/examples/
test-uri $RTSP_URI
For example:
test-uri file:///home/root/temp/TestSource/mp4/1.mp4
• Server address:
rtsp://$SERVER_IP:8554/test
For example:
rtsp://10.192.241.106:8554/test
• Client operations supported are Play, Stop, Pause, Resume, and Seek.
Resize
Rotate
• Composite two videos into one with CSC, resize, and rotate.
• Composite three videos into one with CSC, resize, rotate, alpha, z-order, and keep aspect ratio.
Sink #0
State: SUSPENDED
Name: alsa_output.platform-soc-audio.1.analog-stereo
Description: sgtl5000-audio Analog Stereo
...
...
Sink #1
State: SUSPENDED
Name: alsa_output.platform-soc-audio.4.analog-stereo
Description: imx-hdmi-soc Analog Stereo
...
...
Use the pacmd command to set the default audio sink according to the sink number in the list shown above:
After setting the default sink, use the command below to verify the audio path:
Source #0
State: SUSPENDED
Name: alsa_output.platform-soc-audio.1.analog-stereo.monitor
Description: Monitor of sgtl5000-audio Analog Stereo
...
...
Source #1
State: SUSPENDED
Name: alsa_input.platform-soc-audio.1.analog-stereo
Description: sgtl5000-audio Analog Stereo ...
...
...
Use the pacmd command to set the default audio source according to the source number in the list shown above:
$sink-number could be 0 or 1 in the example above. If record and playback at the same time is not needed, there is no need to
set the monitor mode.
$ pactl stat
$ pacmd list-cards
The available sound cards and the profiles supported are listed.
2 card(s) available.
index: 0
name: <alsa_card.platform-sound-cs42888.34>
driver: <module-alsa-card.c>
owner module: 6
properties:
alsa.card = "0"
alsa.card_name = "cs42888-audio"
...
...
profiles:
input:analog-mono: Analog Mono Input (priority 1, available: unknown)
input:analog-stereo: Analog Stereo Input (priority 60, available: unknown)
...
...
active profile: <output:analog-stereo+input:analog-stereo>
...
...
2. Use the pacmd command to set the profile for particular features.
$CARD is the card name listed by pacmd list-cards (for example, alsa_card.platform-sound-cs42888.34 in the
example above), and $PROFILE is the profile name. These are also listed by pamcd list-cards. (for example,
output:analog-surround-51 in the example above).
3. After setting the card profile, use $ pactl list sinks and $pacmd set-default-sink $sink-number to set the
default sink.
2. Build gstreamer1.0-libav.
$ bitbake gstreamer1.0-libav
$ bitbake <image_name>
Chapter 8
Audio
2. On i.MX 8M Plus EVK, use alsamixer to set Headphone and Playback controls to the maximum values for the
wm8960-audio card.
3. On i.MX 8M Plus EVK, start audio recording on the imxaudioxcvr card and playback on the wm8960audio card.
4. Make sure Digital Audio Out from the TV is PCM. Then, set eARC mode to ON and check audio on the headset connected
to the i.MX 8M Plus EVK jack. The settings on the TV should be as shown in the following figure.
Audio Output
eARC mode ON
The firmware on the eARC Rx (i.MX 8M Plus EVK) waits until HPD=high is sensed. Therefore, start recording and playback on i.MX
8M Plus before enabling eARC mode on the TV as described in Steps 3 and 4 above. This makes the behavior more predictable
on the RX side. In addition, set the subsequent eARC mode to OFF then to ON on the TV while keeping arecord … | aplay …
running on i.MX 8M Plus EVK. Check whether you can hear audio in the headset after subsequent eARC mode is set to ON on
the TV.
Besides, enabling the complete eARC feature, per the HDMI 2.1 specification, is more of a system-level application that integrates
different layers and modules of the CEC driver, DRM, HDMI/HDCP controller driver, EDID, and eARC driver modules.
Chapter 9
Graphics
There are a number of graphics tools, tests, and example programs that are built and installed in the Linux rootfs. There are
some variation on what is included based on the build and packages selected, the board, and the backend specified. This section
describes some of them.
The kernel module version of graphics used on the system can be found by running the following command on the board:
The user-side GPU drivers version of graphics can be displayed using the following command on the board:
9.1 imx-gpu-sdk
This graphics package contains source for several graphics examples for OpenGLES 2.0 and OpenGLES 3.0 APIs for X11,
Framebuffer, and XWayland graphical backends. These applications show that the graphics acceleration is working for different
APIs. The package includes samples, demo code, and documentation for working with the i.MX family of graphic cores. More
details about this SDK are in the i.MX Graphics User's Guide. This SDK is only supported for hardware that has OpenGLES
hardware acceleration.
9.2 G2D-imx-samples
The G2D Application Programming Interface (API) is designed to make it easy to use and understand the 2D BLT functions. It
allows the user to implement customized applications with simple interfaces. It is hardware and platform independent when using
2D graphics.
The G2D API supports the following features and more:
• Simple BLT operation from source to destination
• Alpha blend for source and destination with Porter-Duff rules
• High-performance memory copy from source to destination
• Up-scaling and down-scaling from source to destination
• 90/180/270 degree rotation from source to destination
• Horizontal and vertical flip from source to destination
• Enhanced visual quality with dither for pixel precision-loss
• High performance memory clear for destination
• Pixel-level cropping for source surface
• Global alpha blend for source only
• Asynchronous mode and synchronization
• Contiguous memory allocator
• VG engine
The G2D API document includes the detailed interface description and sample code for reference. The API is designed with
C-Style code and can be used in both C and C++ applications.
The G2D is supported on all i.MX. The hardware that supports G2D is described below. For more details, see the Frame Buffer
information in the i.MX Release Notes (IMXLXRN) to check which hardware is used for G2D.
• For i.MX 6 with GPU, the G2D uses the 2D GPU.
• For i.MX with PXP, the G2D uses the PXP with limited G2D features.
The following is the directory structure for the G2D test applications located under /opt.
• g2d_samples
— g2d_test
◦ g2d_overlay_test
◦ g2d_multiblit_test
9.3 viv_samples
The directory viv_samples is found under /opt. It contains binary samples for OpenGL ES 1.1/2.0 and OpenVG 1.1.
The following are the basic sanity tests, which help to make sure that the system is configured correctly.
• cl11: This contains unit tests and FFT samples for OpenCL 1.1 Embedded Profile. OpenCL is implemented on the i.MX
6Quad, i.MX 6QuadPlus, and i.MX 8 boards.
— ◦ UnitTest
▪ clinfo
▪ loadstore
▪ math
▪ threadwalker
▪ test_vivante
• functions_and_kernels
• illegal_vector_sizes
• initializers
• multi_dimensional_arrays
• reserved_data_types
• structs_and_enums
• unions
• unsupported_extensions
◦ fft
• es20: This contains tests for Open GLES 2.0.
— vv_launcher
◦ coverflow.sh
◦ vv_launcher
• tiger: A simple OpenVG application with a rotating tiger head. This is to demonstrate OpenVG.
• vdk: Contains sanity tests for OpenGL ES 1.1 and OpenGL ES 2.0.
The tiger and VDK tests show that hardware acceleration is being used. They will not run without it.
9.4 Qt 5
Qt 5 is built into the Linux image in the Yocto Project environment with the command bitbake imx-image-full. For more details
on Qt enablement, check out the README in the meta-imx repo and the i.MX Yocto Project User's Guide (IMXLXYOCTOUG).
Chapter 10
Security
The i.MX platforms define a series of security acceleration subsystems.
10.1.1 Introduction
The Linux kernel contains a Scatterlist Crypto API driver for the NXP CAAM security hardware block. It integrates seamlessly with
in-kernel crypto users, such as DM-Crypt, Keyctl, in a way that any disk encryption and key management suites will automatically
use the hardware to do the crypto acceleration. CAAM hardware is known in Linux kernel as 'caam', after its internal block name:
Cryptographic Accelerator and Assurance Module.
There are several HW interfaces ("backends") that can be used to communicate (for example, submit requests) with the engine,
their availability depends on the SoC:
• Register Interface (RI) - available on all SoCs (though access from kernel is restricted on DPAA2 SoCs).
Its main purpose is debugging (such as single-stepping through descriptor commands), though it is used also for
RNG initialization.
• Job Ring Interface (JRI) - legacy interface, available on all SoCs; on most SoCs there are 4 rings.
NOTE
There are cases when fewer rings are accessible or visible in the kernel, for example, when firmware like Trusted
Firmware-A (TF-A) reserves one of the rings.
On top of these backends, there are the "frontends" - drivers that sit between the Linux Crypto API and backend drivers. Their
main tasks aim to:
• Register supported crypto algorithms.
• Process crypto requests coming from users (through the Linux Crypto API) and translate them into the proper format
understood by the backend being used.
• Forward the CAAM engine responses from the backend being used to the users.
To use a specific implementation, it is possible to ask for it explicitly by using the specific (unique) "driver name" instead of
the generic "algorithm name". See official Linux Kernel Crypto API documentation (section Crypto API Cipher References And
Priority). Currently, the default priority is 3000 for JRI frontend.
crypto@30000 {
compatible = "fsl,sec-v4.0";
fsl,sec-era = <2>;
#address-cells = <1>;
#size-cells = <1>;
reg = <0x300000 0x10000>;
ranges = <0 0x300000 0x10000>;
interrupt-parent = <&mpic>;
interrupts = <92 2>;
clocks = <&clks IMX6QDL_CLK_CAAM_MEM>,
<&clks IMX6QDL_CLK_CAAM_ACLK>,
<&clks IMX6QDL_CLK_CAAM_IPG>,
<&clks IMX6QDL_CLK_EIM_SLOW>;
clock-names = "mem", "aclk", "ipg", "emi_slow";
};
Section from boot log that specify where crypto test are made (If a boot test is passing with success, no information will be reported.
For algorithms with no tests available, a line in dmesg will be printed):
aes-caam)
[ 4.710445] alg: No test for echainiv(authenc(hmac(sha1),cbc(aes))) (echainiv-authenc-hmac-sha1-
cbc-aes-caam)
[ 4.720488] alg: No test for authenc(hmac(sha224),cbc(aes)) (authenc-hmac-sha224-cbc-aes-caam)
[ 4.734647] alg: No test for echainiv(authenc(hmac(sha224),cbc(aes))) (echainiv-authenc-hmac-
sha224-cbc-aes-caam)
[ 4.750504] alg: No test for echainiv(authenc(hmac(sha256),cbc(aes))) (echainiv-authenc-hmac-
sha256-cbc-aes-caam)
[ 4.762468] alg: No test for authenc(hmac(sha384),cbc(aes)) (authenc-hmac-sha384-cbc-aes-caam)
[ 4.771188] alg: No test for echainiv(authenc(hmac(sha384),cbc(aes))) (echainiv-authenc-hmac-
sha384-cbc-aes-caam)
[ 4.782380] alg: No test for echainiv(authenc(hmac(sha512),cbc(aes))) (echainiv-authenc-hmac-
sha512-cbc-aes-caam)
[ 4.792765] alg: No test for authenc(hmac(md5),cbc(des3_ede)) (authenc-hmac-md5-cbc-des3_ede-caam)
[ 4.801832] alg: No test for echainiv(authenc(hmac(md5),cbc(des3_ede))) (echainiv-authenc-hmac-md5-
cbc-des3_ede-caam)
[ 4.812814] alg: No test for echainiv(authenc(hmac(sha1),cbc(des3_ede))) (echainiv-authenc-hmac-
sha1-cbc-des3_ede-caam)
[ 4.823942] alg: No test for echainiv(authenc(hmac(sha224),cbc(des3_ede))) (echainiv-authenc-hmac-
sha224-cbc-des3_ede-caam)
[ 4.835465] alg: No test for echainiv(authenc(hmac(sha256),cbc(des3_ede))) (echainiv-authenc-hmac-
sha256-cbc-des3_ede-caam)
[ 4.846980] alg: No test for echainiv(authenc(hmac(sha384),cbc(des3_ede))) (echainiv-authenc-hmac-
sha384-cbc-des3_ede-caam)
[ 4.858497] alg: No test for echainiv(authenc(hmac(sha512),cbc(des3_ede))) (echainiv-authenc-hmac-
sha512-cbc-des3_ede-caam)
[ 4.869764] alg: No test for authenc(hmac(md5),cbc(des)) (authenc-hmac-md5-cbc-des-caam)
[ 4.877977] alg: No test for echainiv(authenc(hmac(md5),cbc(des))) (echainiv-authenc-hmac-md5-cbc-
des-caam)
[ 4.888078] alg: No test for echainiv(authenc(hmac(sha1),cbc(des))) (echainiv-authenc-hmac-sha1-
cbc-des-caam)
[ 4.898356] alg: No test for echainiv(authenc(hmac(sha224),cbc(des))) (echainiv-authenc-hmac-
sha224-cbc-des-caam)
[ 4.908994] alg: No test for echainiv(authenc(hmac(sha256),cbc(des))) (echainiv-authenc-hmac-
sha256-cbc-des-caam)
[ 4.919653] alg: No test for echainiv(authenc(hmac(sha384),cbc(des))) (echainiv-authenc-hmac-
sha384-cbc-des-caam)
[ 4.930292] alg: No test for echainiv(authenc(hmac(sha512),cbc(des))) (echainiv-authenc-hmac-
sha512-cbc-des-caam)
[ 4.940688] alg: No test for authenc(hmac(md5),rfc3686(ctr(aes))) (authenc-hmac-md5-rfc3686-ctr-
aes-caam)
[ 4.950372] alg: No test for seqiv(authenc(hmac(md5),rfc3686(ctr(aes)))) (seqiv-authenc-hmac-md5-
rfc3686-ctr-aes-caam)
[ 4.961281] alg: No test for seqiv(authenc(hmac(sha1),rfc3686(ctr(aes)))) (seqiv-authenc-hmac-sha1-
rfc3686-ctr-aes-caam)
[ 4.972281] alg: No test for authenc(hmac(sha224),rfc3686(ctr(aes))) (authenc-hmac-sha224-rfc3686-
ctr-aes-caam)
[ 4.982482] alg: No test for seqiv(authenc(hmac(sha224),rfc3686(ctr(aes)))) (seqiv-authenc-hmac-
sha224-rfc3686-ctr-aes-caam)
[ 4.993903] alg: No test for seqiv(authenc(hmac(sha256),rfc3686(ctr(aes)))) (seqiv-authenc-hmac-
sha256-rfc3686-ctr-aes-caam)
[ 5.005331] alg: No test for seqiv(authenc(hmac(sha384),rfc3686(ctr(aes)))) (seqiv-authenc-hmac-
sha384-rfc3686-ctr-aes-caam)
[ 5.016763] alg: No test for seqiv(authenc(hmac(sha512),rfc3686(ctr(aes)))) (seqiv-authenc-hmac-
sha512-rfc3686-ctr-aes-caam)
[ 5.028023] caam algorithms registered in /proc/crypto
[ 5.157622] caam_jr 31430000.jr2: registering rng-caam
[ 5.206167] caam 31400000.caam: caam pkc algorithms registered in /proc/crypto
— "true" AEAD: generic GCM-AES, GCM-AES used in IPsec: RFC4543-GCM-AES and RFC4106-GCM-AES
• Encryption algorithms
The CAAM driver currently supports offloading the following encryption algorithms.
• Authentication algorithms
The CAAM driver's ahash support includes keyed (hmac) and unkeyed hashing algorithms.
• Asymmetric (public key) algorithms
Currently, CAAM driver supports RSA-Encrypt and RSA-Decrypt together with pkcs1pad (rsa-caam, sha256) driver.
• Algorithms supported by CAAM drivers
caamrng frontend (Random Number Generation) may be turned off in case there is an alternate source of entropy available to
the kernel.
caamkeyblob frontend (algorithms supporting tagged key) can be turned off if tagged keys or blobs are not used.
If the messages are not present in the logs, either the driver is not configured in the kernel, or no CAAM compatible device tree
node is present in the device tree.
If the number of interrupts fired increment, then the hardware is being used to do the crypto. If the numbers do not increment, then
check the algorithm being exercised is supported by the driver. If the algorithm is supported, there is a possibility that the driver
is in polling mode (NAPI mechanism) and the hardware statistics in debugfs (inbound/outbound bytes encrypted/protected - see
below) should be monitored.
name : cbc(des)
driver : cbc-des-caam
module : kernel
priority : 3000
refcnt : 1
selftest : passed
internal : no
type : givcipher
async : yes
blocksize : 8
min keysize : 8
max keysize : 8
ivsize : 8
geniv : <built-in>
Note that although a test vector may not exist for a particular algorithm supported by the driver, the kernel will emit messages
saying which algorithms weren't tested, and mark them as 'passed' anyway:
CORE_IMAGE_EXTRA_INSTALL+="cryptodev-module openssl-bin"
bitbake imx-image-full
NOTE
Starting from OpenSSL 1.1.1, the cryptodev engine is invoked by OpenSSL by default if the corresponding module
has been inserted in the kernel. Thus to perform only SW benchmark test using OpenSSL, remove the cryptodev
module by running rmmod cryptodev.
10.4.5.1 Running OpenSSL benchmarking tests for symmetric ciphering and digest
In the speed test file, a series of performance tests are made to check the performance of the symmetric and digest operations.
The following is described in the OpenSSL test execution:
Additional ciphers that could be benchmarked: aes-192-cbc, aes-256-cbc, aes-128-ecb, aes-192-ecb, aes-256-ecb,
aes-128-ctr, aes-192-ctr, aes-256-ctr, des-cbc, des-cbc, des-ede3-cbc.
Additional digests that could be benchmarked: sha1, sha224, sha256, sha384, sha512, md5.
10.4.6.1 Running OpenSSL benchmarking tests for symmetric ciphering and digest
Execute the following command:
+DT:aes-128-cbc:3:16
engine "afalg" set.
engine "afalg" set.
engine "afalg" set.
...
Got: +H:16:64:256:1024:8192:16384 from 0
Got: +F:22:aes-128-cbc:333888.00:1359317.33:4248405.33:5720064.00:6160384.00:6176768.00 from 0
Got: +H:16:64:256:1024:8192:16384 from 1
Got: +F:22:aes-128-cbc:378336.00:1382826.67:5117269.33:5739178.67:6190421.33:6176768.00 from 1
...
OpenSSL 1.1.1k 25 Mar 2021
built on: Thu Mar 25 13:28:38 2021 UTC
options:bn(64,64) rc4(char) des(int) aes(partial) blowfish(ptr)
compiler: aarch64-poky-linux-gcc -mcpu=cortex-a53 -march=armv8-a+crc+crypto -fstack-protector-
strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=recipe-
sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map= -fdebug-
prefix-map= -fdebug-prefix-map= -fdebug-prefix-map= -
DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM
-DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DNDEBUG
evp 2682.45k 10842.73k 35957.50k 45915.48k 49722.71k 50135.04k
If the disk encryption scenario is not enabled, some features in the kernel need to be enabled:
• keyutils: provides keyctl, which is required to manage Linux Key retention service.
• lvm2: provides dmsetup utility and libraries to manage device-mapper.
• e2fsprogs-mke2fs: contains necessary tools to create filesystems.
• util-linux: provides blockdev utility needed to read number of sectors from a volume.
The tagged key feature is based on CAAM’s black key mechanism. Black key protects user keys against bus snooping while
the keys are being written to or read from memory external to the SoC. CAAM supports two different black key encapsulation
schemes, which are AES-ECB and AES-CCM.
Regarding AES-ECB encryption, the data is a multiple of 16 bytes long and is intended for quick decryption.
The AES-CCM mode is not as fast as AES-ECB mode, but includes a “MAC tag” (integrity check value) that ensures the integrity
of the encapsulated key. A CCM-encrypted black key is always at least 12 bytes longer than the encapsulated key (nonce value
+ MAC tag).
Black keys are session keys; therefore, they are not power-cycles safe. CAAM's blob mechanism provides a method for protecting
user-defined data across system power cycles. It provides both confidentiality and integrity protection. The data to be protected
is encrypted so that it can be safely placed into non-volatile storage before the SoC is powered down.
The following diagram illustrates the changes that have been added to support full disk encryption using tagged key. The
CAAM driver registers new Cryptographic transformations in the kernel to use ECB and CBC blacken keys, tk(ecb(aes)) and
tk(cbc(aes)). The tk prefix refers to Tagged Key.
A Tagged Key is a black key that contains metadata indicating what it is and how to handle it.
Linux OS provides an in-kernel key management and retention facility called Keyrings. Keyring also enables interfaces to allow
accessing keys and performing operations such as add, update, and delete from user-space.
The kernel provides several basic types of keys including keyring, user, and logon.
The CAAM driver has associated a user-space application used to generate a tagged key and encapsulated it into a black blob.
This is also used to import a tagged key from a black blob.
$ ./caam-keygen
CAAM keygen usage: caam-keygen [options]
Options:
create <key_name> <key_enc> <key_mode> <key_val>
<key_name> the name of the file that will contain the black key.
A file with the same name, but with .bb extension, will contain the black blob.
<key_enc> can be ecb or ccm
<key_mode> can be -s or -t.
-s generate a black key from random with the size given in the next argument
-t generate a black key from a plaintext given in the next argument
<key_val> the size or the plaintext based on the previous argument (<key_mode>)
import <blob_name> <key_name>
<blob_name> the absolute path of the file that contains the blob
<key_name> the name of the file that will contain the black key.
By default, the keys and blobs are created in KEYBLOB_LOCATION, which is /data/caam/.
Later, CAAM Tagged Key is added into Linux Key Retention service and managed by user-space application such as keyctl.
Black blobs can be stored on any non-volatile storage.
Dmsetup (part of the libdevmapper package) is a powerful tool for performing very low-level configuration and is used to manage
encrypted volumes.
10.5.4 Usage
The following are the steps to perform a full disk encryption on i.MX devices.
1. After booting the device, make sure that cryptographic transformations using Tagged Key are registered.
./sys/class/misc/caam-keygen
./sys/devices/virtual/misc/caam-keygen
For now, we only support AES algorithms. Therefore, the size of the key accepted for encryption/decryption is 16, 24, and
32 bytes.
2. Make sure DM-Crypt is enabled.
If any of the above is missing, check Kernel configurations or see section Enable disk encryption support in kernel.
3. Then, provide the device with its key, the black key, which could be created either from a defined plain key or randomly.
Here is an example for black key encrypted with ECB, from a given plaintext of size 16 bytes:
The result is a Tagged Key and a Blob files written to filesystem (the default location is /data/caam). The used key
encryption scheme is ECB.
4. Create a secure volume. It could be a physical partition. In this example, make use of an image file and mount it later.
5. Use dmsetup to create a new device-mapper device named encrypted for example, and specify the mapping table. The
table can be provided on stdin or as argument.
root@imx8mqevk:~# dmsetup -v create encrypted --table "0 $(blockdev --getsz /dev/loop0) crypt
capi:tk(cbc(aes))-plain :36:logon:logkey: 0 /dev/loop0 0 1 sector_size:512"
Name: encrypted
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 0
Event number: 0
Major, minor: 253, 0
Number of targets: 1
9. Write to device.
root@imx8mqevk:~# echo "This is an encrypt with black key (ECB from text 16 bytes key size) test
of full disk encryption on i.MX" > /mnt/encrypted/readme.txt
root@imx8mqevk:~# reboot
...
root@imx8mqevk:~#
13. Import the key from blob and add it to key retention service.
15. Specify the mapping table to encrypt the volume using dmsetup.
root@imx8mqevk:~# dmsetup -v create encrypted --table "0 $(blockdev --getsz /dev/loop0) crypt
capi:tk(cbc(aes))-plain :36:logon:logkey2: 0 /dev/loop0 0 1 sector_size:512"
Name: encrypted
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 0
Event number: 0
Major, minor: 253, 0
Number of targets: 1
16. Mount.
encryption on i.MX.
root@imx8mqevk:~#
18. Unmount the device and deactivate the device mapper device.
10.6.1 Prerequisites
The caam-keygen application is needed to import the black key from the black blob. Make sure that the caam-keygen application
is already present at /usr/bin.
$ wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.2-2019.01/gcc-arm-8.2-2019.01-x86_64-
aarch64-elf.tar.xz
$ tar xf gcc-arm-8.2-2019.01-x86_64-aarch64-elf.tar.xz
2. Build the caam-decrypt user space application. Go to the source folder and run:
$ make clean
$ make
10.6.3 Usage
After the device successfully boots with the previously generated image, caam-decrypt can be used to decrypt an encrypted data
stored in a file.
$ ./caam-decrypt
Application usage: caam-decrypt [options]
Options:
<blob_name> <enc_algo> <input_file> <output_file>
<blob_name> the absolute path of the file that contains the black blob
<enc_algo> can be AES-256-CBC
<input_file> the absolute path of the file that contains input data
initialization vector(iv) of 16 bytes prepended
size of input file must be multiple of 16
<output_file> the absolute path of the file that contains output data
where:
• myblob: generated black key blob. The caam-keygen application imports a black key from the black blob. This black key is
used by CAAM for decryption.
• AES-256-CBC: currently the only supported symmetric algorithm used for decryption operation. Make sure that the
encrypted data must use the same algorithm.
• my_encrypted_file: Encrypted data stored in a file. Initialization vector(iv) of 16 bytes used during encryption must be
prepended to encrypted data.
Chapter 11
Connectivity
This section describes the connectivity for Bluetooth wireless technology and Wi-Fi, as well as for USB type-C.
Table 67. On-board chips and external solutions for Bluetooth and Wi-Fi support
SoC On-board chip PCIe M.2 card uSD card or SDIO M.2 card
AzureWave AW-CM358SM)
AzureWave AW-CM358SM)
Table 67. On-board chips and external solutions for Bluetooth and Wi-Fi support (continued)
SoC On-board chip PCIe M.2 card uSD card or SDIO M.2 card
The wireless driver supports wpa_supplicant, which is a WEP/WPA/WPA2/WPA3 encryption authenticated tool.
• Wi-Fi driver: supports NXP 88W8987-based modules with SDIO interface, NXP 88W8997-based modules with PCIe and
SDIO interfaces, NXP 88W9098-based modules with PCIe interface, NXP IW416-based modules with SDIO interface, and
NXP 88W8801-based modules with SDIO interface.
• Firmware
The NXP release package already includes all NXP, Wi-Fi/Bluetooth firmware. It requires to accept NXP license.
To run Wi-Fi, execute the following commands first and follow common commands below:
• For the following steps, execute these commands using connman
To run NXP Bluetooth with BlueZ stack, execute the following commands (it requires load Wi-Fi first to load Bluetooth firmware):
Run the following commands to connect the Bluetooth device for all chips:
$ bluetoothctl
[bluetooth]# default-agent
[bluetooth]# agent on
[bluetooth]# scan on
[bluetooth]# pair xx:xx:xx:xx:xx:xx
[BT dev]# connect xx:xx:xx:xx:xx:xx
[BT dev]# quit
NOTE
• Device: /dev/ttymxcN or /dev/ttyLPN.
The i.MX 6 boards require board rework to support the Bluetooth/Wi-Fi enablement as well as running with the Bluetooth/Wi-Fi
device tree. The following is a list of the hardware modifications required and possibly conflicts caused by these modifications.
• i.MX 6QuadPlus/Quad/Dual/DualLite/Solo: See https://community.nxp.com/docs/DOC-94235. This change HAS a pin
conflict with: EPDC/SPI-NOR/GPIO-LED.
• i.MX 6SoloX: Install R328, and disconnect R327. Connect with SD2 slot and BLUETOOTH CABLE CONNECTOR J19. It
has no Pin conflict with other modules.
• i.MX 6SLL: Install R127, and double check to ensure R126 and R128 are installed. Connect with SD3 slot and
BLUETOOTH CABLE CONNECTOR J4. It has no Pin conflict with other modules.
• i.MX 6UL/ULL/ULZ: Install R1701. It has no Pin conflict with other modules.
Rework is also required to support NXP PCIe 88W9098 on i.MX 8M Plus, and NXP SDIO 88W89997, NXP SDIO IW416, and NXP
SDIO 88W8801 on i.MX 8M Quad.
• To run NXP PCIe 88W9098 on i.MX 8M Plus, perform the hardware rework as follows:
Change R452 to 0 ohm.
• To run NXP SDIO 88W89997, NXP SDIO IW416, and SDIO 88W8801 on i.MX 8M Quad, perform the hardware rework
as follows:
Remove the following 0 Ω 0402 resistors: R1603, R1617, R1618, R1619, R1620, and R1621 (micro SD card J1601)
Install the following 0 Ω 0402 resistors: R1429, R1430, R1431, R1432, R1433, R1434, R1435, and R1436 (M.2 J1401)
typec_ptn5110: typec@50 {
compatible = "usb,tcpci";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_typec>;
reg = <0x50>;
interrupt-parent = <&gpio1>;
interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
ss-sel-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
reset-gpios = <&pca9557_a 7 GPIO_ACTIVE_HIGH>;
src-pdos = <0x380190c8>;
snk-pdos = <0x380190c8 0x3802d0c8>;
max-snk-mv = <9000>;
max-snk-ma = <1000>;
op-snk-mw = <9000>;
port-type = "drp";
sink-disable;
default-role = "source";
status = "okay";
};
For power capability related configuration, users need to check the PD specification to see how to composite the PDO value.
To make it support power source role for more voltages, specify the source PDO. The i.MX 8QuadXPlus board can support
5 V and 12 V power supply.
• The Linux BSP of the Alpha and Beta releases on the i.MX 8QuadXPlus MEK platform only supports power source role for 5 V.
• Users can use /sys/kernel/debug/tcpm/2-0050 to check the power delivery state, which is for debugging purpose information.
• Booting only by type-C port power supply is not supported on the Alpha release.
11.4 Certification
STA Certification
STA 802.11n
STA 802.11ac
STA WPS2.0
STA PMF
STA WMM-PS
STA WPA3
Chapter 12
DDR Performance Monitor
12.1 Introduction
There are counters in some i.MX 8 DDR controllers, which are used to monitor DDR signals. Some signals can help users monitor
DDR transactions and calculate DDR bandwidth.
NOTE
• i.MX 8M Plus and 8DXL support AXI ID filtering.
• For i.MX 8M Plus, cycles, read-cycles, write-cycles cannot be used since there is a hardware bug that leads
to counter overflow.
— GPU 3D:
— LCDIF1:
— USB 2.0:
— USDHC0:
Metrics:
imx8qxp_bandwidth_usage.lpddr4
[bandwidth usage for lpddr4 mek board. Unit: imx8_ddr ]
imx8qxp_ddr_read.all
[bytes all masters read from ddr based on read-cycles event. Unit: imx8_ddr ]
imx8qxp_ddr_write.all
[bytes all masters wirte to ddr based on write-cycles event. Unit: imx8_ddr ]
Chapter 13
One-Time Programmable Controller Driver Using
NVMEM Subsystem
13.1 Introduction
The One-Time Programmable Controller driver is realized with the NVMEM Subsystem, which introduces DT representation for
consumer devices to get the data they require (MAC addresses, SoC/Revision ID, part numbers, and so on) from the NVMEMs.
typedef int (*nvmem_reg_read_t)(void *priv, unsigned int offset, void *val, size_t bytes);
typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset, void *val, size_t bytes);
# hexdump /sys/bus/nvmem/devices/imx-ocotp0/nvmem
• i.MX 8ULP
# hexdump /sys/bus/nvmem/devices/fsb_s400_fuse1/nvmem
Chapter 14
®
NXP eIQ Machine Learning
The NXP eIQ machine learning software development environment enables the use of machine learning algorithms on i.MX
family SoCs. The eIQ software for i.MX includes inference engines, optimized libraries for hardware acceleration, and an ML
security package.
The main eIQ toolkit is integrated in the Yocto BSP, contained in meta-imx/meta-ml layer. The following inference engines are
currently supported: Arm NN, TensorFlow Lite, ONNX Runtime, OpenCV, DeepViewRTTM, and PyTorch. See the i.MX Machine
Learning User's Guide (IMXMLUG) for details about the eIQ software development environment.
In addition to the toolkit integrated in the Yocto BPS, there is an ML security package delivered separately. See also Security for
Machine Learning Package (AN12867).
Chapter 15
Revision History
This table provides the revision history.
L4.9.51_8qm-beta2/8qxp-beta 02/2018 Added i.MX 8QuadMax Beta2 and i.MX 8QuadXPlus Beta
L4.14.62_1.0.0_beta 11/2018 i.MX 4.14 Kernel Upgrade, Yocto Project Sumo upgrade
L4.19.35_1.0.0 07/2019 i.MX 4.19 Beta Kernel and Yocto Project Upgrades
Linux LF5.4.3_1.0.0 03/2020 i.MX 5.4 Kernel and Yocto Project Upgrades
L5.4.3_2.0.0 04/2020 i.MX 5.4 Alpha release for i.MX 8M Plus and 8DXL EVK boards
L5.4.24_2.1.0 06/2020 i.MX 5.4 Beta release for i.MX 8M Plus, Alpha2 for 8DXL, and
consolidated GA for released i.MX boards
L5.4.47_2.2.0 09/2020 i.MX 5.4 Beta2 release for i.MX 8M Plus, Beta for 8DXL, and
consolidated GA for released i.MX boards
L5.4.70_2.3.0 12/2020 i.MX 5.4 consolidated GA for release i.MX boards including i.
MX 8M Plus and i.MX 8DXL
L5.4.70_2.3.0 01/2021 Updated the command lines in Section "Running the Arm
Cortex-M4 image"
Linux LF5.10.9_1.0.0 03/2021 Upgraded Yocto Project to Gatesgarth and the kernel
upgraded to 5.10.9
Linux LF5.10.35_2.0.0 06/2021 Upgraded Yocto Project to Hardknott and the kernel upgraded
to 5.10.35
Linux LF5.10.52_2.1.0 09/2021 Updated for i.MX 8ULP Alpha and the kernel upgraded
to 5.10.52
Linux LF 5.10.72_2.2.0 12/2021 Upgraded the kernel to 5.10.72 and updated the BSP
Appendix A
Murata Wi-Fi/Bluetooth Solutions
Table 70. Murata Wi-Fi/Bluetooth solutions with NXP chipsets
NXP chipset Murata module (Part number) Embedded Artists M.2 EVB
EAR00386
EAR00385
EAR00364
NXP chipset Murata module (Part number) Embedded Artists M.2 EVB
EAR00370
EAR00387
Table 71. Murata Wi-Fi/Bluetooth solutions for NXP and Embedded Artists EVKs
Table 71. Murata Wi-Fi/Bluetooth solutions for NXP and Embedded Artists EVKs (continued)
Table 71. Murata Wi-Fi/Bluetooth solutions for NXP and Embedded Artists EVKs (continued)
1. Default strapping option on Embedded Artists 1YM/1XL M.2 module is WLAN-PCIe. Refer to Embedded Artists datasheet
on how to modify strapping on M.2 module for WLAN-SDIO configuration.
Right to make changes - NXP Semiconductors reserves the right to make changes to information published in this
document, including without limitation specifications and product descriptions, at any time and without notice. This
document supersedes and replaces all information supplied prior to the publication hereof.
Security — Customer understands that all NXP products may be subject to unidentified or documented vulnerabilities.
Customer is responsible for the design and operation of its applications and products throughout their lifecycles to reduce
the effect of these vulnerabilities on customer’s applications and products. Customer’s responsibility also extends to other
open and/or proprietary technologies supported by NXP products for use in customer’s applications. NXP accepts no
liability for any vulnerability. Customer should regularly check security updates from NXP and follow up appropriately.
Customer shall select products with security features that best meet rules, regulations, and standards of the intended
application and make the ultimate design decisions regarding its products and is solely responsible for compliance with all
legal, regulatory, and security related requirements concerning its products, regardless of any information or support that
may be provided by NXP. NXP has a Product Security Incident Response Team (PSIRT) (reachable at [email protected])
that manages the investigation, reporting, and solution release to security vulnerabilities of NXP products.
NXP, the NXP logo, NXP SECURE CONNECTIONS FOR A SMARTER WORLD, COOLFLUX,EMBRACE, GREENCHIP,
HITAG, ICODE, JCOP, LIFE, VIBES, MIFARE, MIFARE CLASSIC, MIFARE DESFire, MIFARE PLUS, MIFARE FLEX,
MANTIS, MIFARE ULTRALIGHT, MIFARE4MOBILE, MIGLO, NTAG, ROADLINK, SMARTLX, SMARTMX, STARPLUG,
TOPFET, TRENCHMOS, UCODE, Freescale, the Freescale logo, AltiVec, CodeWarrior, ColdFire, ColdFire+, the Energy
Efficient Solutions logo, Kinetis, Layerscape, MagniV, mobileGT, PEG, PowerQUICC, Processor Expert, QorIQ, QorIQ
Qonverge, SafeAssure, the SafeAssure logo, StarCore, Symphony, VortiQa, Vybrid, Airfast, BeeKit, BeeStack, CoreNet,
Flexis, MXC, Platform in a Package, QUICC Engine, Tower, TurboLink, EdgeScale, EdgeLock, eIQ, and Immersive3D are
trademarks of NXP B.V. All other product or service names are the property of their respective owners. AMBA, Arm, Arm7,
Arm7TDMI, Arm9, Arm11, Artisan, big.LITTLE, Cordio, CoreLink, CoreSight, Cortex, DesignStart, DynamIQ, Jazelle,
Keil, Mali, Mbed, Mbed Enabled, NEON, POP, RealView, SecurCore, Socrates, Thumb, TrustZone, ULINK, ULINK2,
ULINK-ME, ULINK-PLUS, ULINKpro, μVision, Versatile are trademarks or registered trademarks of Arm Limited (or its
subsidiaries) in the US and/or elsewhere. The related technology may be protected by any or all of patents, copyrights,
designs and trade secrets. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. The
Power Architecture and Power.org word marks and the Power and Power.org logos and related marks are trademarks and
service marks licensed by Power.org.