I.mx Linux User's Guide
I.mx Linux User's Guide
I.mx Linux User's Guide
Contents
This document describes how to build and install the i.MX 2 Introduction.............................................................3
Linux® OS BSP, where BSP stands for Board Support 3 Basic Terminal Setup.............................................. 3
Package, on the i.MX platform. It also covers special i.MX
features and how to use them. 4 Booting Linux OS......................... ..........................4
The document also provides the steps to run the i.MX 5 Enabling Solo Emulation...................................... 36
platform, including board DIP switch settings, and instructions 6 Power Management...............................................36
on configuring and using the U-Boot bootloader.
7 Multimedia............................ ............................... 38
The later chapters describe how to use some i.MX special
features when running the Linux OS kernel. 8 Graphics.................................................................50
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:
Overview
• Courier New font: This font is used to identify commands, explicit command parameters, code examples,
expressions, data types, and directives.
1.4 References
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) - Contains the information on installing U-Boot and Linux OS and using i.MX-
specific features.
• i.MX Yocto Project User's Guide (IMXLXYOCTOUG) - Contains the instructions for setting up and building Linux
OS in the Yocto Project.
• i.MX Reference Manual (IMXLXRM) - Contains the information on Linux drivers for i.MX.
• i.MX Graphics User's Guide (IMXGRAPHICUG) - Describes the graphics features.
• i.MX BSP Porting Guide (IMXXBSPPG) - Contains 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.
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)
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.
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.
To boot a Linux image on i.MX 8QuadMax and i.MX 8QuadXPlus, four elements are needed:
• Bootloader (imx-boot built by imx-mkimage), which includes U-Boot, Arm Trusted Firmware, DCD file, and System
controller firmware.
• Linux kernel image (Image built by linux-imx)
The system can be configured for a specific graphical backend. For i.MX 8, the graphical backends are X11, XWayland, and
Frame Buffer. For i.MX 7ULP, the default backend is XWayland.
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 Uboot, ARM trusted
firmware, DCD file (8QuadMax/8QuadXPlus), system controller firmware (8QuadMax/8QuadXPlus), SPL(8MQuad), DDR
firmware (8MQuad), and HDMI firmware (8MQuad).
On i.MX 8MQuad, the second program loader (SPL) is enabled in U-Boot. SPL is implemented as the first-level bootloader
running on TCML (due to OCRAM size limitation). 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. 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.
For i.MX 6 and i.MX 7, the *ldo.dtb device trees are used for LDO-enabled feature support. By default, the LDO bypass is
enabled. If your board has the CPU set to 1.2 GHZ, you should use the *ldo.dtb device tree instead of the default, because
LDO bypass mode is not supported on the CPU at 1.2 GHZ. The device tree *hdcp.dtb is used to enable the DHCP feature
because of a pin conflict, which requires this to be configured at build time.
On i.MX 8, the kernel is 64 bit and device trees are located in the arch/arm64/boot/dts/freescale folder and use the dts
extension. The kernel is built using linux-imx software provided in the release package and the file name starting with Image.
[profiles]
chip = Linux
[platform]
board = SabreSD
[LIST]
name = SDCard
[variable]
board = sabresd
mmc = 0
sxuboot=17x17arm2
sxdtb=17x17-arm2
ldo=
• Bootloader image
• Root file system (i.e., EXT4)
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.
An .sdcard image contains all four images properly configured for an SD card. The release contains a pre-built .sdcard image
that is built specifically for the one board configuration. It runs the X11 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 .sdcard image can be loaded and
the individual parts can be overwritten with the specific components.
The rootfs on the default .sdcard 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.
$ 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.
n
p
2
1228800 [starting at offset sector, which leaves enough space for the kernel,
the bootloader and its configuration data]
<enter> [using the default value will create a partition that extends to
the last sector of the media]
p [to check the partitions]
w [this writes the partition table to the media and fdisk exits]
NOTE
For i.MX 8QuadMax, i.MX 8QuadXPlus, and i.MX 8MQuad, the offset should be 33k,
so bs=1k, seek=33.
The first 16 KB of the SD/MMC card, which includes the partition table, is preserved.
$ mkdir /home/user/mountpoint
$ sudo mount /dev/sdx2 /home/user/mountpoint
$ cd /home/user/rootfs
$ tar -jxvf fsl-image-qt5-validation-imx-imx7ulpevk.tar.bz2
$ cd /home/user/rootfs
$ sudo cp -a * /home/user/mountpoint
$ sudo umount /home/user/mountpoint
$ sudo umount /home/user/rootfs
$ sync
Images can be downloaded to a device using a U-Boot image that is already loaded on the boot device or by using the
Manufacturing Tool, MfgTool. Use a terminal program to communicate with the i.MX boards.
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 1 second 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:
The user can set a fake MAC address through ethaddr enviroment 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>".
Usage:
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
mmc part - lists available partition on current mmc device
mmc dev [dev] [part] - show or set current mmc device [partition]
mmc list - lists available devices
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.
10. Boot up the system through rootfs in eMMC, using HDMI as display:
• For i.MX 6 boards:
For i.MX 8QuadMax/8QuadXPlus, the following display kernel parameters are supported:
1. 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
command line, the system uses the video mode that the monitor recommends.
2. 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 command line, the emulation is enabled.
3. Set legacy FB emulation framebuffer’s bits per pixel (bpp) parameter.
imxdrm.legacyfb_depth=16 or 24 or 32
To program the rootfs to MMC/SD, see Using an i.MX board as the host server to create a rootfs or Preparing an SD/MMC
card to boot.
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 or 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.
Select the NOR flash on QuadSPI1 PortA CS0 on the i.MX 7Dual SABRE-SD board and i.MX 7ULP EVK board.
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 i.MX 7Dual SABRESD boards 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.
1. Boot from NFS or other storage. Determine your SD card device ID. It could be mmcblk* or sd*. (The index is
determined by the USDHC controller index.) Check the partition information with the command:
$ 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.
mkdir /mnt/tmpmnt
mount -t ext3 -o loop /fsl-image-gui-imx6qsabresd.ext3 /mnt/tmpmnt
cd /mnt
mkdir mmcblk0p1
mount -t ext3 /dev/$PARTITION /mnt/mmcblk0p1
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: fdt_file and image. Use the print
command under U-Boot to display these two environment variables. For example:
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
~$ mkfs.vfat /dev/mmcblk0p1
~$ mkfs.ext4 /dev/mmcblk0p2
The following table shows the DIP switch settings for booting from the SD card slot labeled SD1 on the i.MX 7ULP EVK
boards.
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 6. Booting from TF on i.MX 6UltraLite EVK and i.MX 6ULL EVK
Switch D1 D2 D3 D4
SW601 OFF OFF ON OFF
SW602 ON OFF - -
The i.MX 8MQuad 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:
Table 12. Booting from an MMC card in slot SD4 on i.MX 6SoloX SABRE-SD
Switch D1 D2 D3 D4 D5 D6 D7 D8
SW10 OFF OFF OFF OFF OFF OFF OFF OFF
SW11 OFF OFF ON ON ON OFF OFF OFF
SW12 OFF ON ON OFF OFF OFF OFF OFF
The following table shows the boot switch settings to boot from eMMC4.4 (SDIN5C2-8G) on i.MX 6 SABRE-SD boards.
Table 14. Booting from eMMC on i.MX 6 SABRE-SD
Switch D1 D2 D3 D4 D5 D6 D7 D8
SW6 ON ON OFF ON OFF ON ON OFF
i.MX 7Dual is different from i.MX 6. The eMMC uses the SD3 pin connections from the i.MX 7Dual processor.
Table 15. Booting from eMMC on i.MX 7Dual SABRE-SD
Switch D1 D2 D3 D4 D5 D6 D7 D8
SW2 OFF ON OFF ON OFF OFF OFF OFF
SW3 ON OFF - - - - - -
The following table shows the boot switch settings to boot from eMMC4.4 on the i.MX 7ULP EVK boards.
Table 16. Booting from eMMC on i.MX 7ULP EVK
Switch D1 D2 D3 D4
SW1 ON OFF OFF OFF
The following table shows the boot switch settings to boot from eMMC4.4 on the i.MX 8MQuad EVK boards.
Table 17. Booting from eMMC on i.MX 8MQuad EVK
Switch D1 D2 D3 D4
SW801 OFF OFF ON OFF
The following table shows the DIP switch settings needed to boot from NAND for i.MX 6SoloX SABRE-AI boards.
Table 20. Booting from NAND on i.MX 6 SoloX SABRE-AI
Switch D1 D2 D3 D4 D5 D6 D7 D8
S4 OFF OFF OFF OFF OFF OFF OFF ON
S3 OFF OFF OFF OFF OFF OFF OFF OFF
S1 OFF OFF ON OFF - - - -
The following table shows the DIP switch settings needed to boot from NAND for i.MX 7Dual SABRE-SD boards.
Table 21. Booting from NAND on i.MX 7Dual SABRE-SD
Switch D1 D2 D3 D4 D5 D6 D7 D8
S2 OFF ON ON X X X X OFF
S3 ON OFF X X 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.
Table 28. Booting from QuadSPI on i.MX 6UltraLite EVK and i.MX 6ULL EVK
Switch D1 D2 D3 D4
SW601 OFF OFF OFF OFF
SW602 ON OFF - -
The following table shows the boot switch settings for i.MX 6 SABRE-AI boards, which are used to enter serial download
mode for the Manufacturing Tool. If the boot image in the boot media is not validated, the system also enters the serial
download mode.
Table 30. Setup for the Manufacturing Tool on i.MX 6 SABRE-AI
Switch D1 D2 D3 D4
S3 OFF ON OFF OFF
Table 31. Setup for the Manufacturing Tool on i.MX 7Dual SABRE-SD
Switch D1 D2 D3 D4
S3 OFF ON - -
Table 32. Setup for Manufacturing Tool on i.MX 6UltraLite EVK and i.MX 6ULL EVK
Switch D1 D2
SW602 OFF ON
NOTE
If the SD card with bootable image is plugged in SD2, because of the MFG boot on SD2,
it will not enter the serial download mode.
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/4.9.88/environment-setup-aarch64-poky-linux
export ARCH=arm64
• 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/4.9.88/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.
make clean
make imx8qm_mek_defconfig
make
make clean
make imx8qxp_mek_defconfig
make
• To build U-Boot for i.MX 8MQuad EVK:
make clean
make imx8mq_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.
NOTE
Users need to modify configurations for fused parts. For example, the i.MX 6UltraLite
has four parts, G0, G1, G2, and G3.
The fused modules are as follows:
• 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.
/* #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. Run make SOC=iMX8QX flash to generate flash.bin.
For i.MX 8MQuad 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 bl31.bin from ARM Trusted Firmware (imx-atf) to imx-mkimage/iMX8M/.
5. Copy firmware/hdmi/cadence/signed_hdmi_imx8m.bin from firmware-imx package to imx-mkimage/iMX8M/.
6. Copy lpddr4_pmu_train_1d_dmem.bin, lpddr4_pmu_train_1d_imem.bin, lpddr4_pmu_train_2d_dmem.bin, and
lpddr4_pmu_train_2d_imem.bin from firmware/ddr/synopsys of firmware-imx package to imx-mkimage/iMX8M/.
7. Run make SOC=iMX8M flash_hdmi_spl_uboot to generate flash.bin (imx-boot image) with HDMI FW included.
This information is useful for understanding subsequent sections about image downloading and how the images are placed in
memory.
The mtdparts directive can be used in the Linux boot command to specify memory mapping. The following example briefly
describes how to use memory maps. Memory is allocated in the order of how it is listed. The dash (-) indicates the the rest of
the memory.
mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs)
mtdparts=8000000.nor:1m(uboot),-(rootfs)
U-Boot should be loaded at the 1 KB offset of the SPI-NOR memory, so that the device can boot from it. The default
configuration is that on boot up, U-Boot loads the kernel, DTB, and root file system from the SD/MMC card into DDRAM.
The end user can change the default settings according to their needs. More partitions can be added through the kernel
command line. The following is an example of what might be added to the Linux boot command line:
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.
Table 35. U-Boot mapping for QuadSPI
Device on hardware Device in U-Boot Memory address in U-Boot Remark
QuadSPI1 Port A CS0 sf probe 0:0 on i.MX 6SoloX SABRE-AI 0x60000000 -
board, i.MX 7Dual SABRE-SD board, i.MX
0x08000000
6UltraLite EVK board, i.MX 8QuadMax MEK
and QuadXPlus MEK
QuadSPI1 Port B CS0 sf probe 1:0 on i.MX 6 SoloX SABRE-AI 0x68000000 -
board
QuadSPI2 Port A CS0 sf probe 0:0 on i.MX 6SoloX SABRE-SD 0x70000000 -
board
QuadSPI2 Port B CS0 sf probe 1:0 on i.MX 6SoloX SABRE-SD 0x78000000 -
board
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
In addition, fdt_file is used to specify the filename of the device tree file. The commands used to set the U-Boot
environment variables are as follows:
Special settings
SoloLite, Solo, and UltraLite 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.
In the default configuration of the SD card and the example here, U-Boot is at the 1024 byte offset or 33 KB offset for i.MX
8 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.
Reading the kernel image from eMMC
eMMC has user area, boot partition 1, and boot partition 2. To switch between the eMMC partitions, the user needs to use the
command mmc dev [dev id] [partition id]. For example,
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} '
NOTE
If the MAC address has not been burned into the fuses, set the MAC address to use the
network in U-Boot.
c. Have the Arm Cortex-M4 image burned. (NOR flash of QuadSPI2 PortB CS0 for i.MX 6SoloX SABRE-SD
board. NOR flash of QuadSPI1 PortB CS0 for i.MX 6SoloX SABRE-AI board.)
• Arm Cortex-M4 processor Fast Up (only supported on i.MX 6SoloX SABRE-SD boards). Initiated by U-Boot at a very
early boot phase to meet the requirement of Arm Cortex-M4 processor booting in 50 ms. No U-Boot command is
involved. Requires:
a. U-Boot Arm Cortex-M4 fast up image and Arm Cortex-A9 processor must boot from the QSPI2 NOR flash.
b. Kernel DTB: imx6sx-sdb-m4.dtb.
c. Have the Arm Cortex-M4 image burned (NOR flash of QuadSPI2 PortB CS0).
To facilitate the Arm Cortex-M4 processor Normal Up, a script has been added to the default U-Boot. The following steps
may help users who need to run the Cortex-M4 processor Normal Up script.
1. Power on the board.
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).
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 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:
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:
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.
/unit_tests/SRTC/rtcwakeup.out
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
• To get the available scaling governors:
cat /sys/devices/system/cpu/*/cpufreq/scaling_available_governors
• To check the current CPU frequency:
cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_cur_freq
cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_max_freq
• To check the minimum frequency:
cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_min_freq
To enter a low power idle DDR frequency, ensure that all devices that require high DDR frequency are disabled. Most drivers
do active clock management, but certain commands can be used to avoid waiting for timeouts to occur:
echo 1 > /sys/class/graphics/fb0/blank -> to blank the display (may need to blank fb1, fb2, and so on, if more
than one display is active).
ifconfig eth0 down -> disables the Ethernet module. On i.MX 6SoloX, i.MX 7Dual, i.MX 6UltraLite, and i.MX
6UltraLiteLite should also disable Ethernet 1 (eth1).
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.
The i.MX Linux® Reference Manual (IMXLXRM) has more information on the bus frequency in the chapter about DVFS.
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.
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.
For the plattforms without VPU hardware, $video_deocder_plugin could be a software decoder plugin like avdec_h264.
• The target encoder codec type can be MPEG4, H263, H264, or MJPEG.
• The vpuenc_xxx can be vpuenc_mpeg4, vpuenc_h263, vpuenc_h264, or vpuenc_jpeg.
• The $MUXER can be set to qtmux, matroskamux, mp4mux, avimux, or flvmux.
• Different muxers support different encoded codec types. Use $GSTINSPECT $MUXER to see the capabilities of the
muxer to be used.
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. No VPU encoder is supported on i.MX 8QuadMax and
i.MX 8QuadXPlus in this release.
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
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:
• $DEVICE could be set to /dev/video, /dev/video0, or /dev/video1 according to the system video input device.
• $INPUT_CAPS should be set to 'video/x-
raw,format=(string)NV12,width=1920,height=1080,framerate=(fraction)30/1'.
• $MUXER can be set as to qtmux, matroskamux, mp4mux, avimux, or flvmux.
• $EXTENSION is filename extension according to the muxer type.
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.
$GPLAY http://SERVER/test.avi
RTSP streams can be played with a manual pipeline or by using playbin. The format of the commands is as follows.
• Manual pipeline
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.
Playback does not exit automatically in GStreamer 1.x, if buffer-mode is set to buffer in the rtpsrc plugin.
streaming-latency: This is the extra added latency of the pipeline, and the default value is 400 ms. This value is
designed for the situation when the client starts first. If the value is too small, the whole pipeline may not run due to
lack of audio or video buffers. In that situation, you should cancel the current command and restart the pipeline. If the
value is too large, wait for a long time to see the video after starting the server.
low_latency_tolerance: This value is a range that total latency can jitter around streaming-latency. This property is
disabled by default. When the user sets this value, the maximum latency is (streaming-latency +
low_latency_tolerance).
The UDP MPEGTS streaming command line format looks like this:
• Command:
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
Sink #0
State: SUSPENDED
Name: alsa_output.platform-soc-audio.1.analog-stereo
Description: sgtl5000-audio Analog Stereo
...
...
Sink #1
State: SUSPENDED
Use the pacmd command to set the default audio sink according to the sink number in the list shown above:
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.
The pulseaudio I/O path setting status can be checked with:
$ 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:
$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.
$ bitbake gstreamer1.0-libav
3. Build the rootfs image.
$ bitbake
$ <image_name>
8 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:
8.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.
8.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 look at the i.MX
Release Notes in the Frame Buffer to see 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.
• g2d
• g2d_test
• Overlay Test
• g2d_overlay_test
8.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.
• 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.
• 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
8.4 Qt 5
Qt 5 is built into the Linux image in the Yocto Project environment with the command bitkake fsl-image-qt5.
To run the Qt 5 examples on the board, the platform and input plugin need to be specified. Different backends require
different graphics plugins, as shown in the following table.
Table 39. Graphics plugins for backends
Backend Graphics
FB eglfs
XWayland wayland-egl
X11 xcb
It is often useful to specifically set the display variable and allow access to the X server. The commands below perform this
operation. Check the xhost man page for additional ways to use that command. These commands often fix the problem that
causes the "Could not connect to display" error message.
export DISPLAY=:0.0
xhost +
The command lines for some of the Qt 5 sample applications are as follows. For XWayland, it sometimes helps to add --
fullscreen to the command line. The Qt 5 desktop may contain links to these examples.
• Qt5_CinematicExperience -platform ${GRAPHICS} -plugin evdevtouch:/dev/input/event0
• /usr/share/qt5nmapcarousedemo-1.0/Qt5_NMap_CarouselDemo -platform ${GRAPHICS} -plugin
evdevtouch:/dev/input/event0
• /usr/bin/qt5/qmlscene -platform ${GRAPHICS} -plugin evdevtouch:/dev/input/event0 /usr/
share/qt5ledscreen-1.0/example_hello.qml
• /usr/bin/qt5/qmlscene -platform ${GRAPHICS} -plugin evdevtouch:/dev/input/event0 /usr/
share/qt5ledscreen-1.0/example_billboard.qml
• /usr/bin/qt5/qmlscene -platform ${GRAPHICS} -plugin evdevtouch:/dev/input/event0 /usr/
share/qt5ledscreen-1.0/example_combo.qml
Some examples must be run from a particular directory. The first column in the following table shows the directory and the
second column shows the command to run in that directory. The examples are usually installed in /usr/share.
Table 40. Example directories and command lines
Directory Command
qt5everywheredemo-1.0 ./QtDemo -platform ${GRAPHICS} -plugin evdevtouch:/dev/input/event0
qtpatientcare-1.0 ./patientcare -platform ${GRAPHICS} -plugin evdevtouch:/dev/input/event0
qtsmarthome-1.0 ./smarthome -platform ${GRAPHICS} -plugin evdevtouch:/dev/input/event0
quitbattery-1.0.0 ./QUItBattery -platform ${GRAPHICS} -plugin evdevtouch:/dev/input/event0
9 Security
Using the i.MX CryptoDev security driver causes the system to run much faster than without it.
The CAAM drivers are accelerated through the CryptoDev interface. The openssl command can be used to show the system
speed without CryptoDev .
An example of the key portion of the output is as follows. Library load errors may occur but they can be ignored.
Start CryptoDev and run the openssl command again. This time you should be able to see that the timeing values show the
accelerated values. As the block sizes increase, the elapsed time decreases.
modprobe cryptodev
openssl speed -evp aes-128-cbc -engine cryptodev
10 Connectivity
This section describes the connectivity for Bluetooth wireless technology and Wi-Fi, as well as for USB type-C.
• Bluetooth support works best with a USB dongle with either BlueZ4 or BlueZ5. For this release, BlueZ5 is default. To
switch between BlueZ4 and BlueZ5, it requires a clean build and changes in local.conf. BlueZ4 and BlueZ5 both use
different tools. More information about these tools is in the readme-bluez.txt file in the meta-fsl-bsp-release layer.
Bluetooth wireless technology is enabled in the default kernel configuration. To disable Bluetooth wireless technology,
run the following command:
Then, disable Bluetooth wireless technology. Bluetooth wireless technology works with a USB dongle.
• Broadcom Wi-Fi and Bluetooth wireless technology support require the Broadcom firmware package download of fsl-
bcmdhd_[version].tar.gz from freescale.com. The Broadcom device drivers are integrated into the kernel but to
function require the firmware package download and integration.
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 Revision History
This table provides the revision history.
Web Support: reserves the right to make changes without further notice to any products herein.
nxp.com/support NXP makes no warranty, representation, or guarantee regarding the suitability of its products for
any particular purpose, nor does NXP assume any liability arising out of the application or use
of any product or circuit, and specifically disclaims any and all liability, including without
limitation consequential or incidental damages. “Typical” parameters that may be provided in
NXP data sheets and/or specifications can and do vary in different applications, and actual
performance may vary over time. All operating parameters, including “typicals”, must be
validated for each customer application by customer’s technical experts. NXP does not convey
any license under its patent rights nor the rights of others. NXP sells products pursuant to
standard terms and conditions of sale, which can be found at the following address:
nxp.com/SalesTermsandConditions.
NXP, the NXP logo, Freescale, and the Freescale logo are trademarks of NXP B.V. All other
product or service names are the property of their respective owners.
Arm, the Arm logo, and Cortex are registered trademarks of Arm Limited (or its subsidiaries)
in the EU and/or elsewhere. IEEE 1588 and 802 are registered trademarks of the Institute of
Electrical and Electronics Engineers, Inc. (IEEE). This product is not endorsed or approved by
the IEEE. The Bluetooth word mark and logos are registered trademarks owned by Bluetooth
SIG, Inc. and any use of such marks by NXP is under license. All rights reserved.
© 2018 NXP B.V.