IMX Linux 用户手册 --- 1

Posted chocolate2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IMX Linux 用户手册 --- 1相关的知识,希望对你有一定的参考价值。

IMX Linux 用户手册 — 1

第一章 概述
本文档介绍了i.MX Linux®OS BSP (BSP代表Board Support Package)在i.MX平台上的构建和安装方法。它还涵盖了特殊的i.MX功能和如何使用它们。
本文档还提供了运行i.MX平台的步骤,包括单板拨码开关设置、U-Boot引导加载程序的配置和使用说明。
后面的章节描述了在运行Linux操作系统内核时如何使用一些i.MX特殊特性。
本指南中涉及的功能可能针对特定的板或soc。对于特定板或SoC的能力,请参阅i.MX Linux®发布说明(IMXLXRN)。
1.1观众
本文档主要适用于打算使用本产品的软件、硬件和系统工程师,以及想要了解本产品的任何人。
1.2约定
本文档遵循以下约定:
•Courier New font:该字体用于标识命令、显式命令参数、代码示例、表达式、数据类型和指令。
1.3支持的硬件soc和单板
以下是本指南中涉及的系统:
• i.MX 6Quad SABRE-SD board and platform
• i.MX 6DualLite SABRE-SD platform
• i.MX 6SoloX SABRE-SD platform
• i.MX 7Dual SABRE-SD platform
• i.MX 6QuadPlus SABRE-SD platform
• i.MX 6UltraLite EVK platform
• i.MX 6ULL EVK platform
• i.MX 6ULZ EVK platform
• i.MX 7ULP EVK platform
• i.MX 8QuadMax MEK board
• i.MX 8QuadXPlus MEK platform
• i.MX 8DXL EVK Platform
• i.MX 8M Quad EVK platform
• i.MX 8M Mini EVK Board
• i.MX 8M Nano EVK Board
• i.MX 8M Plus EVK board
• i.MX 8DualX MEK Board
• i.MX 8ULP EVK Board NXP Semiconductors
第二章 介绍
i.MX Linux BSP是二进制文件、源代码和支持文件的集合,可用于创建U-Boot引导加载程序、Linux内核映像和i.MX开发系统的根文件系统。Yocto项目是构建本文中描述的映像的首选框架,当然也可以使用其他方法。
关于如何设置Linux操作系统主机、如何运行和配置Yocto项目、生成映像和生成rootfs的所有信息都包含在i.MX Yocto项目用户指南(IMXLXYOCTOUG)中。
当Linux操作系统运行时,本指南提供了i.MX soc提供的一些特殊特性的使用方法。发布说明提供了特定板上支持的特性。
第三章 基本的终端设置
i.MX单板可以通过串口线与主机服务器(Windows®操作系统或Linux操作系统)通信。已使用超级终端、Tera Term、PuTTY等常用串口通信程序。下面以在Windows操作系统上使用超级终端安装串口为例进行说明。
i.MX 6Quad/QuadPlus/DualLite SABRE-AI单板通过串口线缆连接主机服务器。
其他的i.MX板通过micro-B USB连接器连接主机驱动。

  1. 使用上述线缆连接目标器和Windows操作系统的PC。
  2. 在Windows操作系统的PC上打开超级终端,按照下图所示进行设置。

    i.MX 8单板通过micro USB连接器连接主机驱动。USB到串行驱动程序可以在www.ftdichip.com/Drivers/VCP.htm下面找到。FT4232 USB to串口转换器提供4个串口。i.MX 8主板的第一个端口用于Arm®Cortex®-A核心控制台,第二个端口用于SCU的控制台。用户需要选择第一个端口(COM)
    在终端设置中。i.MX 8DXL板的第三和第四个端口分别用于Arm Cortex-A核心控制台和SCU控制台。
    第四章 引导Linux操作系统
    在i.MX板上启动Linux操作系统内核之前,需要将镜像(U-Boot、Linux内核、设备树和rootfs)拷贝到启动设备,并设置启动开关以启动该设备。针对不同的单板、启动设备和期望的结果,有不同的引导Linux操作系统的方法。介绍如何准备启动设备,在内存映射中需要放置文件,设置启动开关,以及如何从U-Boot启动Linux操作系统。
    4.1软件概述
    介绍单板引导和运行Linux操作系统所需的软件。
    要在i.MX 6和i.MX 7上启动一个Linux镜像,需要以下元素:
    •引导装载程序(U-Boot)
    •Linux内核映像(zImage)
    •单板的设备树文件(.dtb)
    •特定Linux映像的根文件系统(rootfs)
    •用于i.MX 7ULP的Arm Cortex-M4映像
    要在i.MX 8QuadMax, i.MX 8QuadXPlus和i.MX 8DXL上启动一个Linux镜像,需要多个元素:
    •Bootloader (imx-boot由imx-mkimage构建,这是一个将固件和U-Boot结合起来为i.MX 8创建Bootloader的工具),其中包括U-Boot, Arm可信固件,DCD文件,系统控制器固件,以及i.MX 8QuadMax/i以来的SECO固件。MX 8QuadXPlus B0和i.m x8dxl A1。
    •(可选) Arm Cortex-M4图像
    •Linux内核映像(由Linux -imx构建的映像)
    •单板的设备树文件(.dtb)
    •特定Linux映像的根文件系统(rootfs)
    在i.MX 8M Quad, i.MX 8M Mini, i.MX 8M Nano和i.MX 8M Plus上,需要多个元素:
    •imx-boot(由imx-mkimage构建),包括SPL, U-Boot, Arm可信固件,DDR固件
    •HDMI固件(仅支持i.m x8m Quad)
    •Linux内核映像
    •单板的设备树文件(.dtb)。
    •特定Linux映像的根文件系统(rootfs)
    在i.MX 8ULP上,需要四个要素:
    •imx-boot(由imx-mkimage构建),包括SPL, U-Boot, Arm Trusted Firmware, OP-TEE, uPower Firmware, Sentinel Firmware和Arm Cortex-M33映像
    •Linux内核映像
    •单板的设备树文件(.dtb)
    •特定Linux映像的根文件系统(rootfs)
    可以为特定的图形化后端配置系统。对于i.MX 8,图形化后端是XWayland。对于i.MX 7ULP,默认后端是XWayland。
    4.4.1Bootloader
    推荐U-Boot作为i.MX 6和i.MX 7的引导加载工具。i.MX 8需要一个引导加载程序,其中包括U-Boot以及下面描述的其他组件。U-Boot必须加载到一个设备上才能从该设备启动。U-Boot映像是特定于单板的,可以配置为支持从不同源启动。
    预构建或Yocto项目默认引导加载程序名称以引导加载程序名称开始,然后是平台和板的名称,然后是配置映像从哪个设备启动的设备名称:u-boot-[platform][board]_[machine_configuration].bin。如果不指定启动设备,则从SD/MMC启动。
    该工具可用于将U-Boot加载到所有带有i.MX 6和i.MX 7的设备上。U-Boot可以通过Linux dd命令直接加载到SD卡上。U-Boot支持将U-Boot镜像加载到其他设备上。
    在i.MX 8上,U-Boot无法自行启动设备。i.MX 8预构建映像或Yocto Project默认引导加载程序是SD卡的imx-boot,它是由imx-mkimage创建的。imx-boot二进制文件包括U-Boot, Arm可信固件,DCD文件(8QuadMax/8QuadXPlus/8DXL),系统控制器固件(8QuadMax/8QuadXPlus/8DXL), SPL (8M SoC), DDR固件(8M), HDMI固件(8M Quad),和B0的SECO固件(8QuadMax/8QuadXPlus/8DXL)。
    在i.MX 8M SoC上,U-Boot中启动第二个SPL (program loader)。SPL被实现为运行在TCML上的第一级引导加载程序(对于i.m x8m Nano和i.m x8m Plus,第一级引导加载程序运行在OCRAM中)。用于初始化DDR,并将U-Boot、U-Boot DTB、Arm可信固件、TEE OS(可选)从启动设备加载到内存中。SPL完成之后加载映像,它跳转到Arm的可信固件BL31直接。BL31启动可选的BL32 (TEE OS)和BL33 (U-Boot)继续引导内核。
    在imx-boot中,SPL与DDR固件一起打包,以便ROM可以将它们加载到Arm Cortex-M4 TCML或OCRAM(仅适用于i.MX 8M Nano和i.MX 8M Plus)。U-Boot、U-Boot DTB、Arm Trusted固件和TEE OS(可选)被打包到FIT映像中,最终构建到imx-boot中。
    4.1.2 Linux内核镜像和设备树
    这个i.MX BSP包含一个基于Linux内核5.15.5版本的预构建内核映像,以及与每个平台相关联的设备树文件。
    相同的内核映像用于名称为zImage的所有i.MX 6和i.MX 7。设备树是树形数据结构,它描述了硬件配置,允许一个通用内核在不同的单板或配置下以不同的引脚设置启动。设备树文件使用.dtb扩展名。设备树的配置可以在Linux源代码中的arch/arm/boot/dts下找到.dts文件。
    i.MX Linux交付包中包含预构建的各种配置的i.MX板设备树文件。预构建映像的文件名为Image-[platform]-[board]-[configuration].dtb。例如,i.MX 8QuadMax MEK单板的设备树文件为Image-imx8qm-mek.dtb。
    对于i.MX 6和i.MX 7来说,是ldo.dtb设备树用于支持启用了ldo的特性。缺省情况下,LDO bypass功能处于开启状态。如果你的单板的CPU设置为1.2 GHz,你应该使用ldo.dtb。因为在1.2 GHz的CPU上不支持LDO旁路模式,所以使用dtb设备树代替默认设置。设备树*hdcp.dtb用于启用HDCP特性,因为
    引脚冲突的,这需要在构建时配置。
    在i.MX 8, i.MX 8M和i.MX 8ULP上,内核是64位的,设备树位于arch/arm64/boot/dts/freescale文件夹中,并使用dts扩展。内核是使用发行包中提供的linux-imx软件和以Image开头的文件名构建的。
    4.1.3根文件系统
    根文件系统包(或rootfs)提供busybox、公共库和其他基本元素。
    i.MX BSP包包含几个根文件系统。它们的命名规则如下: [image name]- [backend]-[platform][board].[ext4|wic]。“ext4”表示标准文件系统。它可以作为NFS挂载,也可以将其内容存储在引导媒体(如SD/MMC卡)上。
    要使用的图形化后端也是由rootfs定义的。
    4.2通用更新工具
    UUU (Universal Update Utility)运行在Windows或Linux操作系统主机上,用于将镜像下载到i.MX板上的不同设备。
    4.2.1下载UUU
    从https://github.com/NXPmicro/mfgtools/releases下载uu1.4.193及以上版本。
    4.2.2使用UUU
    要使用UUU进行i.MX 6, i.MX 7, i.MX 8,请遵循以下说明:
  3. 用计算机的USB线缆连接单板的USB OTG/TYPE C接口。
  4. 从OTG-to-UART端口连接USB电缆到计算机进行控制台输出。
    3.打开终端仿真程序。请参阅本文档中的“基本终端设置”小节。
  5. 设置启动引脚为串口下载模式。请参阅本文档“制造工具的串行下载模式”一节。
    要使用i.MX 8ULP EVK的UUU,请遵循以下说明:
    •将单引导映像和rootfs烧刻到eMMC,执行以下命令:
uuu -b emmc_all imx-boot-imx8ulpevk-sd.bin-flash_singleboot_m33 <rootfs.wic.bz2>

•将单引导映像烧录到FlexSPI2 NOR flash,执行以下命令:

uuu -b qspi imx-boot-imx8ulpevk-fspi.bin-flash_singleboot_m33_flexspi

•将双引导映像和rootfs刻录到eMMC和FlexSPI0 NOR flash中,执行以下步骤:

  1. 准备imx-boot-imx8ulpevk-sd.bin-flash_singleboot_m33, imx-boot-imx8ulpevk-sd.bin-flash_dualboot, imx-boot-imx8ulpevk-sd.bin-flash_dualboot_m33,和<rootfs.wic>。
  2. 更新UUU脚本文件uuu_8ulp_dual.auto与上述图像的文件路径和名称。
    3.运行uuu mfgtools/scripts/samples/uuu_8ulp_dual.auto。
    UUU的详细使用方法请参见github.com/NXPmicro/mfgtools/wiki。
    例如,下面的命令写入rootfs.wic 到eMMC。
uuu -b emmc_all <bootloader> < rootfs.wic>

执行如下命令解压bz2文件并写入eMMC:

uuu -b emmc_all <bootloader> < rootfs.wic.bz2 / * >

通过USB下载和bootloader (SPL和U-Boot)命令如下:

uuu -b spl <bootloader> 

以下命令刻入eMMC(如果该发布包只支持一个单板,且该单板支持eMMC芯片):

uuu <release_package>.zip

注意:对于i.m x8quadxplus B0, UUU以32 KB偏移量将eMMC映像闪烁到引导分区。它可能不兼容所有eMMC设备。建议开启eMMC fastboot模式,并使用UUU内核版本脚本将eMMC镜像flash到偏移量为0的引导分区。
4.3准备SD/MMC卡启动
介绍在Linux主机上启动i.MX板时,需要准备SD/MMC卡。这些说明适用于SD卡和MMC卡,但为了简单起见,通常只列出SD卡。
为了让一个Linux映像能够运行,需要四个独立的部分:
•Linux操作系统内核镜像(zImage/ image)
•设备树文件(*.dtb)
•映像引导装载程序
•根文件系统(例如,EXT4)
Yocto项目创建了一个可以直接闪现的SD卡映像。这是用一个命令将所有需要的东西加载到卡片上的最简单的方法。
一个.wic映像包含为SD卡正确配置的所有4个映像。该版本包含一个预构建的.wic映像,它是专门为单板配置构建的。它运行Wayland图形后端。除非U-Boot、设备树和rootfs被修改,否则不会在其他单板上运行。
当需要更大的灵活性时,可以单独加载各个组件,这些指令也包括在这里。SD卡可以用单个组件逐个加载,也可以加载.wic映像,个别部件可以用特定的组件覆盖。
默认.wic映像上的rootfs限制在小于4 GB,但是重新分区和重新加载rootfs可能会增加到卡的大小。还可以更改rootfs,以指定所使用的图形化后端。
设备树文件(.dtb)包含对内核的特定于单板和配置的更改。更改设备树文件以更改不同的i.MX板或配置的内核。
默认情况下,发行版使用以下布局的图像在SD卡。内核映像和DTB转移到使用FAT分区,而没有SD卡上固定的原始地址。如果需要固定的原始地址,用户需要修改U-Boot的启动环境。
表1. 映像布局

4.3.1准备卡
需准备SD/MMC读卡器,如USB读卡器。它用于传输引导加载程序和内核映像,以初始化分区表和复制根文件系统。为了简化指令,假设使用了4gb的SD/MMC卡。
任何Linux发行版都可以用于以下过程。
运行在Linux主机上的Linux内核为SD/MMC读卡器分配设备节点。内核可能决定设备节点名,或者使用udev规则。在下面的说明中,假设没有使用udev。
为了识别SD/MMC卡所分配的设备节点,可以执行以下命令:

$ 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

本例中分配的设备节点为/dev/sdb,每个块大小为1024字节。
注意:请确认SD/MMC卡的设备节点是否正确。否则,可能会损坏您的操作系统或计算机上的数据。
4.3.2复制全SD卡镜像
SD卡镜像(扩展名为.wic)包含U-Boot、Linux镜像和设备树,以及4gb SD卡的rootfs文件。如果不需要灵活性,可以使用一个命令将镜像安装到SD卡上。
执行如下命令将SD卡镜像拷贝到SD/MMC卡上。更改下面的sdx以匹配SD卡所使用的sdx。

$ sudo dd if=.wic of=/dev/sdx bs=1M && sync

更换SD卡的全部内容。如果SD卡容量大于4gb,则无法访问剩余空间。
4.3.3对SD/MMC卡分区
完整的SD卡映像已经包含分区。本节介绍如何手动设置分区。这需要分别加载引导加载程序、内核和rootfs。
对SD卡进行分区的方法有多种。实际上,引导加载程序映像需要位于卡的开头,然后是Linux映像和设备树文件。它们可以在单独的分区中,也可以不在单独的分区中。根文件系统需要位于Linux部分之后启动的分区中。确保每个部分都有足够的空间。下面的示例创建两个分区。
在大多数Linux主机操作系统中,SD卡在插入时自动挂载。因此,在运行fdisk之前,如果SD卡之前挂载过,请确保已卸载(通过sudo umount /dev/sdx)。
首先以root权限运行fdisk。根据上面的说明来确定卡ID。这里我们以sdx为例。

$ sudo fdisk /dev/sdx

输入以下参数(每个参数后面):

p [lists the current partitions] 
d [to delete existing partitions. Repeat this until no unnecessary partitions are reported by the 'p' command to start fresh.] 
n [create a new partition]
p [create a primary partition - use for both partitions] 
1 [the first partition] 
20480 [starting at offset sector] 
1024000 [ending position of the first partition to be used for the boot images] 
p [to check the partitions] 
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]

4.3.4复制引导加载程序镜像
说明在不使用完整SD卡镜像的情况下,只需要加载引导程序镜像即可。执行如下命令拷贝U-Boot镜像到SD/MMC卡。

$ sudo dd if=<U-Boot image> of=/dev/sdx bs=1k seek= conv=fsync

其中偏移量为:
•1 -表示i.MX 6或i.MX 7
•33 -用于i.MX 8QuadMax A0, i.MX 8QuadXPlus A0, i.MX 8M Quad,和i.MX 8M Mini
•32 -用于i.MX 8QuadXPlus B0、i.MX 8QuadMax B0、i.MX 8DualX、i.MX 8DXL、i.MX 8M Nano、i.MX 8M Plus和i.MX 8ULP
预留SD/MMC卡前16kb,包括分区表。
4.3.5复制内核镜像和DTB文件
介绍在不使用全SD卡镜像时,如何加载内核镜像和DTB。预构建的SD卡映像使用VFAT分区存储内核映像和DTB,这需要一个VFAT分区,该分区作为Linux驱动器挂载,并将文件复制到该分区中。这是首选的方法。
用户可以使用的另一种方法是使用dd命令将内核映像和DTB放到SD卡的固定原始地址中。后面的方法需要修改用于加载内核映像和DTB的U-Boot默认环境变量。
默认值:VFAT分区

  1. 使用下面的命令将分区1格式化为VFAT:
$ sudo mkfs.vfat /dev/sdx1
  1. 用这个命令挂载格式化的分区:
$ mkdir mountpoint 
$ sudo mount /dev/sdx1 mountpoint

3.通过cp复制zImage和*.dtb的名称应该与U-Boot中指定的变量使用的名称相匹配。用这个命令卸载分区:

$ sudo umount mountpoint

备选方案:预定义的原始地址
将内核镜像拷贝到SD/MMC卡可以使用如下命令:
对于i.MX 6和i.MX7,使用以下命令:

$ sudo dd if=zImage_imx_v7_defconfig of=/dev/sdx bs=512 seek=2048 conv=fsync

对于i.MX 8,使用以下命令:

sudo dd if=Image-imx8qmsabreauto.bin of=/dev/sdx bs=512 seek=2048 conv=fsync

它们每个都在偏移量1 MB (bs x seek = 512 x 2048 = 1 MB)将内核复制到媒介。zImage_imx_v7_defconfig文件指的是使用imx_v7_defconfig配置文件时创建的zImage文件,该文件同时支持i.MX 6和i.MX 7 soc。
可以使用copy命令复制i.MX DTB镜像到第二个分区,或者使用dd命令复制i.MX DTB镜像到SD/MMC卡。
为你的单板选择一个命令:

$ sudo dd if=zImage-imx6qp-sabreauto.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync 
$ sudo dd if=zImage-imx6qp-sabresd.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync 
$ sudo dd if=zImage-imx6q-sabreauto.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync 
$ sudo dd if=zImage-imx6q-sabresd.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync 
$ sudo dd if=zImage-imx6sl-evk.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync 
$ sudo dd if=zImage-imx7d-sdb.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync

对于i.MX 6和i.MX 7,可以使用以下命令将内核镜像拷贝到各单板上,如i.MX 6UltraLite EVK板和i.MX 6ULL EVK板:

$ sudo dd if=zImage-imx6ul-14x14-evk.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync 
$ sudo dd if=zImage-imx6ull-14x14-evk.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync

对于i.MX 6和i.MX 7,这将在偏移量10 MB (bs x seek = 512 x 20480 = 10 MB)复制特定于板的.dtb文件到媒体。
4.3.6拷贝根文件系统(rootfs)
介绍在不使用完整SD卡镜像的情况下,如何加载rootfs镜像。
将目标文件系统复制到只包含rootfs的分区。本例使用分区2作为rootfs。首先格式化分区。文件系统格式ext3或ext4是可移动媒体的一个很好的选择,因为它内置了日志记录。将sdx替换为您配置中正在使用的分区。

$ sudo mkfs.ext3 /dev/sdx2 Or 
$ sudo mkfs.ext4 /dev/sdx2

复制目标文件系统到分区:

$ mkdir /home/user/mountpoint 
$ sudo mount /dev/sdx2 /home/user/mountpoint

解压rootfs文件包到以下目录:例如解压imx-image-multimedia-imx7ulpevk.tar。bz2 /home/user/rootfs:

$ cd /home/user/rootfs
$ tar -jxvf imx-image-multimedia-imx7ulpevk.tar.bz2

需要手动创建rootfs目录。
假设根文件系统文件和上一步一样位于/home/user/rootfs中:

$ cd /home/user/rootfs
$ sudo cp -a * /home/user/ mounpoint
$ sudo umount /home/user/mountpoint 
$ sync

文件系统内容现在在媒体上。
注意:根据rootfs的大小,复制文件系统需要几分钟的时间。
4.4下载图片
通过安装引导设备上已经加载的U-Boot镜像或通过制造工具uuu下载镜像。使用终端程序与i.MX板进行通信。
4.4.1 U-Boot方式下载镜像
下面介绍如何使用U-Boot引导加载程序下载镜像文件。
下面描述的命令在使用U-Boot时通常是有用的。其他命令和信息可以通过在U-Boot提示符中输入帮助来找到。
U-Boot print命令用于查看环境变量值。
setenv命令可用于设置环境变量的值。
4.4.1.1在QuadSPI上闪烁Arm Cortex-M4图像
i.MX 6SoloX SABRE-SD、i.MX 7ULP EVK和i.MX 7Dual SABRE-SD板都有Arm Cortex-M4处理器和QuadSPI内存,可以用来向其闪烁图像。
请注意:要启用i.MX 7ULP的全部功能,请将Arm Cortex-M4图像烧到QuadSPI。建议使用MFGTool脚本uuu lf5.15.5 _1.0 _images_mx7ulpevk .zip\\uuu_sd_m4。自动烧毁BSP和Arm Cortex-M4图像。

i.MX U-Boot提供了i.MX 7Dual SABRESD和i.MX 6SoloX SABRE-SD的参考脚本,用于从SD卡上闪烁Arm Cortex-M4映像。执行脚本的步骤如下:

  1. 复制Arm Cortex-M4镜像到启动SD卡的第一个VFAT分区。将文件命名为m4_qspi.bin。
  2. 从SD卡启动。
    3.将SD卡上的Arm Cortex-M4图像闪烁到i.MX 6SoloX SABRE-SD板上QuadSPI2 PortB CS0或i.MX 7Dual SABRE-SD板上QuadSPI1 PortA CS0上的NOR Flash上。
U-Boot > run update_m4_from_sd

用户也可以通过以下步骤在TFTP上flash Arm Cortex-M4镜像:

  1. 从SD卡启动。
  2. TFTP Arm Cortex-M4映像。
U-Boot > tftp $loadaddr m4_qspi.bin

3.选择i.MX 6SoloX SABRE-SD板上QuadSPI2 PortB CS0上的NOR flash。

U-Boot > sf probe 1:0

选择i.MX 7Dual SABRE-SD板和i.MX 7ULP EVK板上QuadSPI1 PortA CS0上的NOR flash。

U-Boot > sf probe 0:0
  1. 将Arm Cortex-M4映像发送到选定的NOR flash。擦除大小为$filesize,大约64kbytes。这个例子假设它是128 Kbytes。
U-Boot > sf erase 0x0 0x20000 
U-Boot > sf write $loadaddr 0x0 $filesize

i.MX 7Dual SABRE-SD需要将Arm Cortex-M4图像编程到1 MB偏移量,因为前1 MB被QuadSPI中的U-Boot图像使用。

U-Boot > sf erase 0x100000 0x20000 
U-Boot > sf write $loadaddr 0x100000 $filesize

请注意:在i.m x7dual SABRE-SD上,只有当U-Boot从QuadSPI引导的目标mx7dsabresd_qspi1_defconfig构建U-Boot映像时,才支持QuadSPI上的Arm Cortex-M4映像。
imx7dual SABRESD板的默认U-Boot使用SD卡上的Cortex-M4映像,并在OCRAM上运行。
在i.MX 7ULP EVK上,Arm Cortex-M4图像需要编程。否则,它将无法启动。

4.4.1.2下载镜像到MMC/SD
本节介绍U-Boot下载到其他MMC/SD卡的方法。
将MMC/SD卡插入SD卡槽。这是i.MX 6 SABRE的SD3插槽,i.MX 6UltraLite EVK和i.MX 6ULL EVK的SD2插槽,i.MX 7Dual SABRE- sd和i.MX 7ULP EVK (MicroSD)的SD1插槽,以及i.MX 8QuadMax MEK、8QuadXPlus MEK和i.MX 8M Quad EVK的SD1插槽。
请注意:要启用i.MX 7ULP的全部功能,请将Arm Cortex-M4图像烧到QuadSPI。建议使用MfgTool脚本uuu lf5.15.5 _1.0 _images_mx7ulpevk .zip\\uuu_sd_m4。自动烧毁BSP和Arm Cortex-M4图像。
对于i.MX 7ULP,将Arm cortex - m4图像刻录到QuadSPI,执行以下步骤:

  1. 将Arm cortex - m4镜像拷贝到SD卡的vfat分区中,插入SD卡后启动到U-Boot控制台。
  2. 在U-Boot中探测Quad SPI,并擦除一个足够大的QuadSPI flash空间为这个Arm Cortext-M4映像。
U-Boot > sf probe 
U-Boot > sf erase 0x0 0x30000;

3.读取Arm Cortext-M4映像(在SD卡的第一个vfat分区)到内存地址,Arm Cortext-M4映像名称为sdk20-app.img。

U-Boot > fatload mmc 0:1 0x62000000 sdk20-app.img;
  1. 将Arm Cortext-M4图像写入QuardSPI。
U-Boot > sf write 0x62000000 0x0 0x30000

如果需要将U-Boot版本的U-Boot进行flash操作,请参见准备SD/MMC卡进行启动。

U-Boot引导加载程序能够将镜像从TFTP服务器下载到RAM中,并从RAM写入SD卡。该操作使用以太网接口并初始化U-Boot环境变量,用于网络通信。
启动介质中包含U-Boot,上电后执行。在U-Boot环境变量值bootdelay递减前和超时前按任意键。U-Boot提示时间默认为3秒。

  1. 要清除存储在MMC/SD上的环境变量,请在U-Boot控制台执行以下命令:
U-Boot > env default -f -a 
U-Boot > saveenv 
U-Boot > reset
  1. 配置U-Boot环境,用于网络通信。示例如下。“#”字符前面的行是注释,没有任何作用。
U-Boot > setenv serverip <your TFTPserver ip>
U-Boot > setenv bootfile <your kernel zImage/Image name on the TFTP server>
U-Boot > setenv fdtfile <your dtb image name on the TFTP server>

如果MAC地址没有融合,用户可以通过ethaddr环境设置一个假MAC地址。

U-Boot > setenv ethaddr 00:01:02:03:04:05
U-Boot >save

3.将“zImage/Image”拷贝到TFTP服务器。然后下载到RAM:

U-Boot > dhcp
  1. 使用实例查询MMC/SD卡信息。
U-Boot > mmc dev
U-Boot > mmcinfo
  1. 查看mmc命令的使用情况。blk#等于<读写>的偏移量/<卡>的块长度。cnt等于<读写>的大小/<卡>的块长度。
U-Boot > help mmc 
mmc - MMC sub system 
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
  1. 将位于RAM l o a d a d d r 的内核 z I m a g e / I m a g e 写入 S D 卡。例如,将大小为 0 x 800000 的映像从 loadaddr的内核zImage/Image写入SD卡。例如,将大小为0x800000的映像从 loadaddr的内核zImage/Image写入SD卡。例如,将大小为0x800000的映像从loadaddr写入microSD卡的偏移量0x100000。有关MMC参数的定义,请参阅下面的示例。
blk# = (microSD Offset)/(SD block length) = 0x100000/0x200 = 0x800 
cnt = (image Size)/(SD block length) = 0x800000/0x200 = 0x4000

这个示例假设内核映像等于0x800000。如果内核映像超过0x800000,则增加映像长度。执行TFTP命令后,U-Boot环境变量的filesize会根据传输的字节数来设置。这可以通过检查来确定计算所需的正确大小。可以通过U-Boot命令printenv查看。

U-Boot > mmc dev 2 0 
U-Boot > tftpboot $loadaddr $bootfile 
### Suppose the kernel zImage is less than 8M. 
U-Boot > mmc write $loadaddr 0x800 0x4000
  1. 将位于RAM $fdt_addr的dtb文件编程到microSD。
U-Boot > tftpboot $fdt_addr $fdtfile
U-Boot > mmc write $fdt_addr 0x5000 0x800
  1. 在i.MX 6 SABRE板上,您可以使用HannStar LVDS作为显示器,从SD卡上的rootfs启动系统。内核MMC模块现在对uSDHC槽使用一个固定的mmcblk索引。SD3槽位使用的是i.MX 6 SABRE板上的mmcblk2, SD1槽位使用的是i.MX 7Dual SABRE- sd板上的mmcblk0, SD2槽位使用的是i.MX 6UltraLite板上的mmcblk1和i.MX 6ULL EVK板上的mmcblk1。SD1槽位在i.MX 8 MEK和i.MX 8M单板上使用mmcblk1。
  2. 引导。
U-Boot > setenv bootcmd_mmc 'run bootargs_base mmcargs;mmc dev;mmc read $loadaddr 0x800 0x4000;mmc read $fdt_addr 0x5000 0x800;bootz $loadaddr - $fdt_addr' 
U-Boot > setenv bootcmd 'run bootcmd_mmc' 
U-Boot > saveenv

4.4.1.3使用eMMC
在i.MX SABRE板、i.MX 8 MEK和EVK板、i.MX 8M EVK板和i.MX 8ULP EVK板上都有eMMC芯片。
通过i.MX 6 SABRE板上的SDHC4、i.MX 7Dual SABRE- sd板上的SDHC3、i.MX 8 MEK/EVK板上的SDHC1和i.MX 8M EVK板上的SDHC0和i.MX 8ULP EVK板上的SDHC0访问。i.MX 7ULP EVK板还支持MicroSD端口上的eMMC返工。下面的步骤描述了如何使用这个内存设备。
请注意:要启用i.MX 7ULP的全部功能,请将Arm Cortex-M4图像烧到QuadSPI。建议使用MfgTool脚本uuu lf5.15.5 _1.0 _images_mx7ulpevk .zip\\uuu_sd_m4。自动烧毁BSP和Arm Cortex-M4图像。

  1. 在U-Boot控制台执行以下命令清理eMMC上存储的环境:
U-Boot > env default -f -a 
U-Boot > save 
U-Boot > reset
  1. 配置引导引脚上电单板,根据实际情况设置U-Boot环境变量。例如,
U-Boot > setenv serverip 
U-Boot > setenv bootfile U-Boot > setenv fdtfile ### The user can set fake MAC address via ethaddr enviroment if the MAC address is not fused 
U-Boot > setenv ethaddr 00:01:02:03:04:05 U-Boot > save

如果MAC地址没有融合,用户可以通过ethaddr环境设置假MAC地址

U-Boot > setenv ethaddr 00:01:02:03:04:05
U-Boot >save

3.将zImage拷贝到TFTP服务器。然后下载到RAM:

U-Boot > dhcp
  1. 使用实例查询eMMC芯片信息。
U-Boot > mmc dev
U-Boot > mmcinfo
  1. 查看mmc命令的使用情况。Blk #等于<读写>的偏移量/<卡>的块长度。CNT等于<读写>的大小/<卡>的块长度。
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
  1. 将内核zImage/Image编写到eMMC中。例如,下面的命令将大小为0x800000的图像从$loadaddr写入eMMC芯片的偏移量0x100000。这里使用的公式如下:0x800 = 0x10000000 /0x200, 0x4000=0x800000/0x200。这个卡的块大小是0x200。这个示例假设内核映像小于0x800000字节。如果内核映像超过0x800000,则扩大映像长度。
### Select mmc dev 2 (USDHC4) on the i.MX 6 SABRESD board: 
U-Boot > mmc dev 2 0 
### Select mmc dev 1 (USDHC3) on the i.MX 7Dual SABRESD board: 
U-Boot > mmc dev 1 0 
### Select mmc dev 1 (USDHC2) on the i.MX 6UltraLite EVK board: 
U-Boot > mmc dev 1 0 
### Select mmc dev 0 (USDHC1) on the i.MX 7ULP EVK board: 
U-Boot > mmc dev 0 0 
### Select mmc dev 0 (eMMC0) on the i.MX 8QuadMax MEK, i.MX 8QuadXPlus MEK, i.MX 8M Quad, 8DualX, and 8DXL boards: 
U-Boot > mmc dev 0 0 
### select mmc dev 2 (USDHC3) on the i.MX 8M Mini EVK, i.MX 8M Nano EVK, and i.MX 8M Plus EVK: U-Boot > mmc dev 2 0 
### select mmc dev 0 (USDHC0) on the i.MX 8ULP EVK 
U-boot > mmc dev 0 
### Suppose kernel zImage is less than 8 MB: 
U-Boot > tftpboot $loadaddr $bootfile 
U-Boot > mmc write $loadaddr 0x800 0x4000
  1. 将位于RAM $fdt_addr的dtb文件编程到eMMC芯片。
U-Boot > tftpboot $fdt_addr $fdtfile
U-Boot > mmc write $fdt_addr 0x5000 0x800
  1. 使用HannStar LVDS作为显示,通过eMMC中的rootfs启动系统。内核MMC模块现在对USDHC插槽使用固定的mmcblk索引。immx 6 SABRE单板上的eMMC/SD4槽位为mmcblk3。
    i.MX 8QuadMax MEK板、i.MX 8QuadXPlus MEK板、i.MX 8M Quad EVK板上的eMMC5.0为mmcblk0。immx 7Dual SABRE单板上的eMMC5.0/SD3槽位为mmcblk2。eMMC不在i.MX 7Dual SABRE板上。
U-Boot > setenv mmcboot 'run bootargs_base mmcargs; mmc dev 2; mmc read $loadaddr 0x800 0x4000; mmc read $fdt_addr 0x5000 0x800;bootz $loadaddr - $ fdt_addr ' 
U-Boot > setenv bootcmd 'run mmcboot' 
U-Boot > saveenv
  1. 通过eMMC中的rootfs启动系统,使用CLAA WVGA面板显示:
    •对于i.MX 6板:
U-Boot > setenv mmcargs 'setenv bootargs $bootargs
root=/dev/mmcblk3p2 rootwait rw video=mxcfb0:dev=lcd,CLAA-WVGA,if=RGB565 ip=dhcp'

•对于i.MX 7Dual SABRE板:

U-Boot > setenv mmcargs 'setenv bootargs $bootargs root=/dev/mmcblk2p2 rootwait rw video=mxcfb0:dev=lcd,CLAA-WVGA,if=RGB565 ip=dhcp'
  1. 在eMMC中通过rootfs启动系统,使用HDMI作为显示:
    •对于i.MX 6板:
U-Boot > setenv mmcargs 'setenv bootargs $bootargs root=/dev/mmcblk3p2 rootwait rw video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24'

•对于i.MX 7Dual SABRE板:

U-Boot > setenv mmcargs 'setenv bootargs $bootargs root=/dev/mmcblk2p2 rootwait rw video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24'

对于i.MX 8QuadMax/8QuadXPlus/8M quadad /8M Plus,支持以下显示内核参数:
a.为系统启动后的遗留FB模拟选择一个特定的视频模式。

video=HDMI-A-n: video_mode

n为系统中HDMI连接器的最大数量。Video_mode应该是连接器上的监视器支持的模式。例如,视频= HDMI-A-1:1920x1080@60。缺省情况下,如果命令行无参数,系统将采用监视器推荐的视频模式。
b.启用或禁用遗留FB模拟。

drm_kms_helper.fbdev_emulation=0 or 1

0为禁用,1为启用。缺省情况下,如果命令行中没有参数,则启动仿真。
c.设置遗留FB仿真帧缓冲区的每像素位(bpp)参数。

imxdrm.legacyfb_depth=16 or 24 or 32

缺省情况下,当命令行无参数时,bpp值为16。
如需将rootfs编程到MMC/SD,请参见使用i.MX板作为主机服务器创建rootfs或准备SD/MMC卡引导。
4.4.1.4 U-Boot在SPI-NOR上从U-Boot闪烁
使用TFTPBoot直接闪烁到SPI-NOR仅限于i.MX 6 SABRE-AI板。在SPI-NOR上flash U-Boot的步骤如下:

  1. 从SD卡启动。
  2. 将跳线J3设置为位置:2-3。
    3.获取内置SPI-NOR支持的U-Boot映像。本例使用u-boot.imx。
U-Boot > tftpboot $loadaddr u-boot.imx
  1. 在SPI-NOR中刷新U-Boot镜像。
U-Boot > sf probe 
U-Boot > sf erase 0 0x80000
 U-Boot > sf write $loadaddr 0x400 0x7FC00
  1. 在SABRE-AI上将启动开关设置为从SPI-NOR启动。
    •S2-1 1
    •s2 2 1
    •S2-3 0
    •S2-4 0
    •S1 - [1:10] X
  2. 重新启动目标板。
    4.4.1.4.1在QuadSPI上闪烁Arm Cortex-M4图像
    i.MX 6SoloX SABRE-SD、i.MX 7ULP EVK和i.MX 7Dual SABRE-SD板都有Arm Cortex-M4处理器和QuadSPI内存,可以用来向其发送映像。
    请注意:要启用i.MX 7ULP的全部功能,请将Arm Cortex-M4图像烧到QuadSPI。建议使用MFGTool脚本uuu lf5.15.5 _1.0 _images_mx7ulpevk .zip\\uuu_sd_m4。自动烧毁BSP和Arm Cortex-M4图像。

i.MX U-Boot提供了i.MX 7Dual SABRESD和i.MX 6SoloX SABRE-SD的参考脚本,用于从SD卡上闪烁Arm Cortex-M4映像。执行脚本的步骤如下:

  1. 复制Arm Cortex-M4镜像到启动SD卡的第一个VFAT分区。将文件命名为m4_qspi.bin。
  2. 从SD卡启动。
    3.将SD卡上的Arm Cortex-M4映像闪烁到i.MX 6SoloX SABRE-SD板上QuadSPI2 PortB CS0或i.MX 7Dual SABRE-SD板上QuadSPI1 PortA CS0上的NOR Flash上。
U-Boot > run update_m4_from_sd

用户也可以通过以下步骤在TFTP上flash Arm Cortex-M4镜像:

  1. 从SD卡启动。
  2. TFTP Arm Cortex-M4图像。
U-Boot > tftp $loadaddr m4_qspi.bin

3.选择i.MX 6SoloX SABRE-SD板上QuadSPI2 PortB CS0上的NOR flash。

U-Boot > sf probe 1:0

选择i.MX 7Dual SABRE-SD板和i.MX 7ULP EVK板上QuadSPI1 PortA CS0上的NOR flash。

U-Boot > sf probe 0:0
  1. 将Arm Cortex-M4映像发送到选定的NORflash。擦除大小为$filesize,大约64kbytes。这个例子假设它是128 Kbytes。
U-Boot > sf erase 0x0 0x20000
U-Boot > sf write $loadaddr 0x0 $filesize

i.MX 7Dual SABRE-SD需要将Arm Cortex-M4图像编程到1 MB偏移量,因为前1 MB被QuadSPI中的U-Boot映像使用。
4.4.1.5 U-Boot在Parallel NOR时从U-Boot闪烁
使用TFTPBoot直接发送到Parallel NOR仅限于i.MX 6 SABRE-AI板。在Parallel NOR上flash U-Boot的步骤如下:

  1. 检查跳线J3,不应在引脚2和引脚3之间。
  2. 将SD U-Boot升级为EIM NOR版本。相关命令请参见复制引导加载程序镜像。然后从SD卡启动。
    3.TFTP安装U-Boot镜像文件。
tftpboot $ loadaddr u-boot.imx
  1. 刷新U-Boot镜像。
cp.b $loadaddr 0x08001000 $filesize
  1. 更改启动开关并重新启动。
S2 all 0 S1-6 1 other 0
  1. 默认情况下,在NFS上挂载rootfs。
    4.4.2使用i.MX板作为主机服务器创建rootfs
    Linux操作系统提供了多种将镜像编程到存储设备的方法。介绍如何使用i.MX平台作为Linux主机服务器在MMC/SD卡或SATA设备上创建rootfs。以SD卡为例进行说明。对于SATA设备,需要更改设备文件节点名称。
  2. 从NFS或其他存储引导。确定您的SD卡设备ID。它可以是mmcblk或sd。(索引由USDHC控制器索引决定。)使用以下命令查看分区信息:
$ cat /proc/partitions
  1. 要在MMC/SD卡上创建一个分区,在Linux控制台中使用fdisk命令(需要root权限):
    root@ ~$ sudo fdisk /dev/ S D 将上面的 SD 将上面的 SD将上面的SD替换为您的设备名称。
    3.如果是新SD卡,可能会收到如下信息:
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以上是关于IMX Linux 用户手册 --- 1的主要内容,如果未能解决你的问题,请参考以下文章

IMX Linux 用户手册 — 3

IMX Linux 用户手册 — 3

IMX Linux 用户手册 --- 2

IMX Linux 用户手册 --- 2

基于linux5.15.5的IMX 参考手册 --- 10

基于linux5.15.5的IMX 参考手册 --- 16