第一章 概述
本文档介绍了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连接器连接主机驱动。
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中,执行以下步骤:
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分区
$ sudo mkfs.vfat /dev/sdx1
$ 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映像。执行脚本的步骤如下:
U-Boot > run update_m4_from_sd
用户也可以通过以下步骤在TFTP上flash 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
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,执行以下步骤:
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;
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秒。
U-Boot > env default -f -a
U-Boot > saveenv
U-Boot > reset
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
U-Boot > mmc dev
U-Boot > mmcinfo
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
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
U-Boot > tftpboot ${fdt_addr} ${fdtfile}
U-Boot > mmc write ${fdt_addr} 0x5000 0x800
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图像。
U-Boot > env default -f -a
U-Boot > save
U-Boot > reset
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
U-Boot > mmc dev
U-Boot > mmcinfo
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
### 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
U-Boot > tftpboot ${fdt_addr} ${fdtfile}
U-Boot > mmc write ${fdt_addr} 0x5000 0x800
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
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'
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的步骤如下:
U-Boot > tftpboot ${loadaddr} u-boot.imx
U-Boot > sf probe
U-Boot > sf erase 0 0x80000
U-Boot > sf write ${loadaddr} 0x400 0x7FC00
i.MX U-Boot提供了i.MX 7Dual SABRESD和i.MX 6SoloX SABRE-SD的参考脚本,用于从SD卡上闪烁Arm Cortex-M4映像。执行脚本的步骤如下:
U-Boot > run update_m4_from_sd
用户也可以通过以下步骤在TFTP上flash 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
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的步骤如下:
tftpboot $ {loadaddr} u-boot.imx
cp.b ${loadaddr} 0x08001000 ${filesize}
S2 all 0 S1-6 1 other 0
$ cat /proc/partitions
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)
通常的分区提示和命令如下所示。粗体文本表示用户键入的内容。
Command (m for help): p
Disk /dev/sdd: 3965 MB, 3965190144 bytes
4 heads, 32 sectors/track, 60504 cylinders, total 7744512 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: 0x00080bff
Device Boot Start End Blocks Id System
Command (m for help): n
e extended
p primary partition (1-4) Select (default p): p
Partition number (1-4): 1
First cylinder (1-124368, default 1): 96
Last cylinder or +size or +sizeM or +sizeK (96-124368, default 124368): Using default value 124368 Command (m for help): w
The partition table has been altered! Calling ioctl() to re-read $SD partition table
root@ ~$ mkfs.ext3 /dev/$PARTITION
mke2fs 1.42 (29-Nov-2011)
Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 248992 inodes, 994184 blocks 49709 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1019215872 31 block groups 32768 blocks per group, 32768 fragments per group 8032 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
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
~$ 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
/dev/sdb2 106496 30318591 15106048 83
Linux Command (m for help): w
The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
~$ mkfs.vfat /dev/mmcblk0p1
~$ mkfs.ext4 /dev/mmcblk0p2
4.5如何启动i.MX单板
当U-Boot加载到支持启动的设备之一时,可以使用拨码开关从该设备启动。i.MX单板的启动方式由单板上的启动配置拨码开关控制。对于定位引导配置开关的帮助,请参见上面参考资料中列出的特定板的快速启动指南。
以下部分列出了基本的启动设置配置。下表表示指定单板上开关块的拨码开关设置。X表示特定的开关设置不影响此操作。
4.5.12如何在单机环境下构建U-Boot和Kernel
要在独立环境下构建U-Boot和Kernel,请执行以下步骤。
首先,生成一个SDK,其中包括工具、工具链和要在主机上编译的小rootfs。
•使用以下命令从Yocto项目构建环境生成SDK。要设置Yocto项目构建环境,请遵循i.MX Yocto项目用户指南(IMXLXYOCTOUG)中的步骤。在下面的命令中,将Target-Machine设置为要构建的计算机。populate_sdk生成一个脚本文件,用于设置一个没有Yocto Project的独立环境。这个SDK应该为每个版本更新,以获取最新的头文件、工具链、以及当前版本的工具。
DISTRO=fsl-imx-fb MACHINE=Target-Machine bitbake core-image-minimal -c populate_sdk
请注意:如果构建过程中断,请修改conf/local.conf,将PACKAGE_CLASSES = "package_deb"这一行注释掉,然后再次执行populate_sdk命令。
•从build目录,bitbake被运行,拷贝sh文件在tmp/deploy/sdk到主机上构建,并执行脚本安装sdk。默认位置在/opt中,但是可以放在主机上的任何位置。
在主机上,以下是构建U-Boot和Kernel的步骤:
•对于在主机上构建的i.MX 8,在构建之前使用以下命令设置环境。
source /opt/fsl-imx-xwayland/5.15-honister/environment-setup-aarch64-poky-linux
export ARCH=arm64
•对于i.MX 8ULP EVK板:
make distclean
make imx8ulp_evk_defconfig
make
•对于主机上的i.MX 6和i.MX 7,在构建之前使用以下命令设置环境。
source /opt/fsl-imx-fb/5.15-honister/environment-setup-cortexa9hf-neon-poky-linux-gnueab
export ARCH=arm
•要在独立环境中构建i.MX 8 U-Boot,需要找到目标启动的配置。在下面的例子中,i.MX 8QuadMax MEK板为目标,默认运行在Arm Cortex-A53内核上。SPL映像(u-boot- spl1 .bin)也使用默认的defconfig生成。使用OP-TEE映像启动时需要它。
make distclean
make imx8qm_mek_defconfig
make
对于i.MX 8QuadXPlus MEK和i.MX 8DualX板:
make distclean
make imx8qxp_mek_defconfig
make
对于i.MX 8DXL EVK板:
make distclean
make imx8dxl_evk_defconfig
make
•为i.MX 8M Quad EVK构建U-Boot:
make distclean
make imx8mq_evk_defconfig
make
•对于i.MX 8M LPDDR4 EVK:
make distclean
make imx8mm_evk_defconfig
make
•对于i.MX 8M DDR4 EVK:
make distclean
make imx8mm_ddr4_evk_defconfig
make
•对于i.MX 8M Plus LPDDR4 EVK板:
make distclean
make imx8mp_evk_defconfig
make
•要在独立环境中构建i.MX 6或i.MX 7 U-Boot,找到目标启动的配置。在下面的例子中,i.MX 6ULL是目标。
Download source by cloning with git clone https://source.codeaurora.org/external/imx/uboot-imx -b lf_v2021.04
cd uboot-imx
make clean
make mx6ull_14x14_evk_defconfig
make
•要在独立的环境中为i.MX 8构建内核,执行以下命令:
make imx_v8_defconfig
make
要在独立环境中为i.MX 6和i.MX 7构建内核,执行以下命令:
Download source by cloning with git clone https://source.codeaurora.org/external/imx/linux-imx -b lf-5.15.y
cd linux-imx
make imx_v7_defconfig
make
4.5.13如何使用imx-mkimage构建imx-boot镜像
对于i.MX 8QuadMax,使用imx-mkimage构建imx-boot 映像,执行以下步骤:
mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs)
4.6.3并行NOR闪存映射
默认配置只包含一个并行NOR分区。并行NOR设备一般为4MB。U-Boot在并行NOR开始加载,以便设备从其启动。默认配置是在启动时,U-Boot将内核、DTB和根文件系统从SD/MMC卡加载到DDRAM中。最终用户可以根据自己的需要更改默认设置。可以通过内核命令行添加更多分区。下面命令的内存类型指示器由NOR地址和指示器组成。这些信息可以在arch/arm/boot/dts的i.MX.dtsi设备树文件中找到。下面是一个可能添加到Linux引导命令行的示例:
mtdparts=8000000.nor:1m(uboot),-(rootfs)
对于i.MX 6 SABRE-AI,并行NOR的地址是0x8000000。
4.6.4 SPI-NOR闪存映射
可以使用Linux内核命令行配置SPI-NOR闪存。
U-Boot在QuadSPI内存的开始加载,以便设备可以从它启动。默认配置是在启动时,U-Boot将内核、DTB和根文件系统从SD/MMC卡加载到DDRAM中。最终用户可以根据自己的需求修改默认设置。可以通过内核命令行添加更多分区。下面是一个可能添加到Linux引导命令行的示例:
mtdparts=spi32766.0:768k(uboot),8k(env),128k(dtb),-(kernel)
U-Boot有下面的映射,以帮助在U-Boot中访问非并行模式的QuadSPI闪存。
表58 QuadSPI的U-Boot映射
4.7在目标器上运行Linux操作系统
介绍通过U-Boot在目标器上运行Linux镜像文件的方法。
这些说明假设您已经使用下载映像或准备SD/MMC卡引导中的说明下载了内核映像。如果您还没有设置串口终端,请参见基本终端设置。
在i.MX板上运行Linux操作系统的基本步骤如下。本文档使用一组特定的环境变量名,以便更容易地描述设置。每种类型的设置将在其各自的部分中进行描述,如下所示。
1.单板上电。
2. 当U-Boot启动时,设置特定于您的机器和配置的环境变量。下面描述了常见的设置,具体到设备的设置在单独的章节中描述。
3.保存环境设置:
U-Boot > saveenv
U-Boot > run bootcmd
env default -f -a和saveenv命令可用于返回默认环境。
指定控制台
可以在Linux引导命令行上指定用于调试的控制台和命令行控制。i.MX 6Quad SABRE-AI板使用ttymxc2,所以不是所有板都一样。通常如下所示,但波特率和端口可以修改。
因此,对于NFS,它可能是ttymxc3。
U-Boot > setenv consoleinfo 'console=ttymxc2,115200'
对于i.MX 7ULP EVK, i.MX 8QuadMax MEK板,和i.MX 8QuadXPlus MEK板,更改为“console=ttyLP0,115200”。
指定显示
可以在Linux boot命令行中指定显示信息。它不依赖于Linux映像的源文件。
如果没有指定显示内容,则使用设备树中的设置。添加${displayinfo}到包含启动项的环境宏中。具体参数可以在i.MX Linux®Release Notes (IMXLXRN)中找到。下面是这些参数的一些示例。
• 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
指定内存地址
Linux操作系统中加载内核和设备树的内存地址不随设备而改变。本章说明使用环境变量loadaddr和ftd_addr来表示这些值。下表显示了不同i.MX板上使用的地址。
此外,还使用fdtfile指定设备树文件的文件名。设置U-Boot环境变量的命令如下:
U-Boot > setenv loadaddr 0x80080000
U-Boot > setenv fdtaddr 0x80f00000
U-Boot > setenv fdtfile fsl-imx7ulp-evk.dtb
指定根文件系统的位置
rootfs可以位于单板上的设备上,也可以位于NFS上。下面的设置显示了用于指定这些参数的一些选项。
• U-Boot > setenv rootfsinfo 'root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp'
• U-Boot > setenv rootfsinfo 'root=/dev/nfs ip=dhcp weim-nor nfsroot=${serverip}:${nfsroot},v3,tcp'
• U-Boot > setenv rootfsinfo 'ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs rootwait rw mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),-(rootfs)'
• U-Boot > setenv rootfsinfo 'root=/dev/mmcblk0p2 rootwait rw'
特殊的设置
i.xm 6Solo和6UltraLite可以在命令行上指定uart_from_osc来指定应该使用OSC时钟而不是PLL3。这允许系统进入低功耗模式。
U-Boot > setenv special 'uart_from_osc'
创建启动命令行
为了澄清,本文档将boottargs分成一个宏,如下:
U-Boot > setenv bootargsset 'setenv bootargs ${consoleinfo} ${rootfsinfo} ${displayinfo} ${special}'
执行的启动命令如下所示。参数因设备而异。
U-Boot > setenv bootcmd 'run bootargsset; {settings-for-device}; bootz ${loadaddr} - ${fdt_addr}'
4.7.1从NAND运行镜像
NAND可以在i.MX 6 SABRE-AI板上找到。
将单板上电,输入命令。以下设置可以用于从NAND引导Linux系统。
假设内核映像从地址0x1400000字节开始(块的起始地址是0x800)。内核映像大小小于0x400000字节。rootfs位于/dev/mtd2目录下
U-Boot > setenv bootcmd 'run bootargsset; nand read ${loadaddr} 0x1000000 0x800000; nand read $ {fdt_addr} 0x2000000 0x100000; bootz ${loadaddr} - ${fdt_addr}'
4.7.2在Parallel NOR上运行Linux操作系统
并行NOR可用于i.MX 6 SABRE-AI板。可以使用以下过程从Parallel NOR引导系统。
U-Boot > setenv bootcmd 'run bootargsset; cp.b 0x80c0000 ${loadaddr} 0x800000;cp.b 0x80a0000 ${fdt_addr} 0x20000;bootz ${loadaddr} - ${fdt_addr} '
4.7.3在QuadSPI上运行Linux操作系统镜像
QuadSPI可在i.MX 6SoloX SABRE-SD板、i.MX 7Dual SABRE-SD板、i.MX 6UltraLite EVK板、i.MX 6ULL EVK板、i.MX 8QuadMax MEK和i.MX 8QuadXPlus MEK上使用。可以使用以下步骤从QuadSPI NOR引导Linux系统。
U-Boot > setenv bootcmd 'run bootargsset; sf probe; sf read ${loadaddr} 0xA00000 0x2000; sf read ${fdt_addr} 0x800000 0x800; bootz ${loadaddr} - ${fdt_addr} '
4.7.4运行Arm Cortex-M4镜像
在i.MX 6SoloX板上,有两种方式在U-Boot中启动Arm Cortex-M4图像:
• Arm Cortex-M4处理器Normal Up(支持i.MX 6SoloX SABRE-AI和SABRE-SD板)。通过U-Boot命令执行。要求:
U-Boot > run m4boot
或者用户可以不依赖脚本执行命令:
U-Boot > sf probe 1:0
对于i.MX 6SoloX SABRE-SD板:
U-Boot > bootaux 0x78000000
对于i.MX 6SoloX SABRE-AI板:
U-Boot > bootaux 0x68000000
请注意:关于如何将MCC演示添加到内核并限制内核可用RAM来使用它,请参见i.MX Linux®参考手册(IMXLXRM)的第53章“i.MX 6 SoloX多核通信(MCC)”。
除了支持从QuadSPI运行Arm Cortex-M4映像外,默认的i.MX 7Dual SABRE-SD板还支持从SD卡加载Arm Cortex-M4映像并在OCRAM上运行。
准备Arm Cortex-M4镜像到SD卡的FAT分区。当使用“m4boot”脚本时,将文件命名为“m4_qspi.bin”。
单板上电完成后,U-Boot提示信息显示如下:
U-Boot > run m4boot
或者不依赖脚本执行命令:
u-boot=> fatload mmc 0:0 ${loadaddr} m4_qspi.bin
u-boot=> cp.b ${loadaddr} 0x7e0000 ${filesize}
u-boot=> bootaux 0x7e0000
在i.MX 8M板上执行如下命令启动Arm Cortex-M Core核心:
u-boot=> fatload mmc 1:1 ${loadaddr} m4.bin
u-boot=> cp.b ${loadaddr} 0x7e0000 ${filesize}
u-boot=> bootaux 0x7e0000
在i.MX 8QuadMax和i.MX 8QuadXPlus板上,有两种方式启动Arm Cortex-M4内核:
•从ROM启动
用户需要使用imx-mkimage将Arm Cortex-M4映像打包到imx-boot image中。有必要在构建命令中指定核心ID及其TCML地址。示例如下:
flash_linux_m4: $(MKIMG) mx8qm-ahab-container.img scfw_tcm.bin u-boot-spl.bin m4_image.bin m4_1_image.bin u-boot-atf-container.img
./$(MKIMG) -soc QM -rev B0 -dcd skip -append mx8qm-ahab-container.img -c -flags 0x00200000
-scfw scfw_tcm.bin -ap u-boot-spl.bin a53 0x00100000 -p3 -m4 m4_image.bin 0 0x34FE0000 -p4 -m4
m4_1_image.bin 1 0x38FE0000 -out flash.bin
cp flash.bin boot-spl-container.img
@flashbin_size=`wc -c flash.bin | awk '{print $$1}'`; \
pad_cnt=$$(((flashbin_size + 0x400 - 1) / 0x400)); \
echo "append u-boot-atf-container.img at $$pad_cnt KB"; \
dd if=u-boot-atf-container.img of=flash.bin bs=1K seek=$$pad_cnt;
•从U-Boot启动(不支持多分区)
U-Boot支持从SD卡的FAT分区加载Arm Cortex-M4镜像,默认名为“m4_0.bin”和“m4_1.bin”。单板启动进入U-Boot控制台后,执行如下命令启动Arm Cortex-M4 core 0。
U-Boot > run m4boot_0 Or the command to boot M4 core 1:
U-Boot > run m4boot_1 Or perform the commands for core 0 without depending on the script:
U-Boot > fatload mmc 1:1 0x80280000 m4_0.bin
U-Boot > dcache flush; bootaux 0x80280000 0
4.7.5登录Linux操作系统
说明i.MX Linux操作系统默认登录用户名为“root”,无密码。
4.7.6在MMC/SD上运行Linux操作系统
该场景以配置单板引导U-Boot为例,假设Linux内核镜像名为zImage,保存在SD卡上MS-DOS FAT分区中,该分区中还存放一个或多个设备树文件。rootfs也存储在另一个分区的SD/MMC卡上。
当U-Boot启动时,它会检测到要启动的槽位,并自动设置mmcdev和mmcroot使用该SD卡上的rootfs。本场景下,相同的SD卡可以从i.MX 6/7单板的任意SD卡槽位启动,不需要修改U-Boot设置。在U-Boot命令行输入boot,运行Linux操作系统。
如果不需要默认设置,可以使用以下说明。
将mmcautodetect设置为“no”,关闭mmcdev和mmcroot中SD卡插槽的自动设置。U-Boot mmcdev基于SD/MMC焊接连接,不同单板的连接方式不同。U-Boot mmc dev 0为当前槽位中编号最低的SD槽位,其次为1,以此类推。但是,Linux内核对所有uSDHC控制器进行索引,无论它们是否存在。下表显示了这种映射。
在SD卡的默认配置和本例中,U-Boot的偏移量为1024字节,i.MX 8QuadXPlus B0和i.MX 8QuadMax B0的偏移量为32kb, i.MX 8QuadXPlus A0、i.MX 8QuadMax A0、i.MX 8M EVK板在第一个分区之前的偏移量为33kb,分区1是有Linux内核和设备树的分区,分区2是rootfs。
设置环境变量
为了方便起见,本文使用一组标准变量来描述Linux命令行中的信息。对于不同的机器或配置,此处使用的值可能不同。U-Boot默认支持根据启动的uSDHC槽位自动设置mmcdev和mmcroot。这里假设zImage、设备树文件(DTB)和rootfs在同一个SD/MMC卡上。要手动设置这些环境变量,请将mmcautodetect设置为no以禁用该特性。
下面是一种设置启动Linux OS所需项的方法。
U-Boot > setenv mmcpart 1
U-Boot > setenv loadfdt 'fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdtfile}'
U-Boot > setenv loadkernel 'fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage'
U-Boot > setenv bootcmd 'mmc dev ${mmcdev}; run loadkernel; run mmcargs; run loadfdt; bootz $ {loadaddr} - ${fdt_addr};'
以上变量说明如下:
•mmcpart—这是MMC/SD卡上包含内核映像的分区。
•mmcroot—MMC SD卡上根文件系统的位置,以及用于rootfs的引导命令的指令。
请注意:预建SD卡的U-Boot环境与此不匹配。它更复杂,所以它可以自动处理更多的变化。上面的示例被设计得更容易理解和手动使用。
从eMMC读取内核映像
eMMC有用户区、启动分区1和启动分区2。切换eMMC分区需要使用命令mmc dev [dev id] [partition id]。例如,
mmc dev 2 0 ---> user area
mmc dev 2 1 ---> boot partition 1
mmc dev 2 2 ---> boot partition 2
4.7.7运行NFS镜像文件
从NFS启动,在U-Boot提示符设置以下环境变量:
U-Boot > setenv serverip <your server IP>
U-Boot > setenv image <your kernel zImage name on the TFTP server>
U-Boot > setenv fdtfile <your dtb image name on the TFTP server>
U-Boot > setenv rootfsinfo 'setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp \
nfsroot=${serverip}:/data/rootfs_home/rootfs_mx6,v3,tcp'
U-Boot > setenv bootcmd_net 'run rootfsinfo; dhcp ${image}; dhcp ${fdt_addr} \
${fdtfile}; booti ${loadaddr} - ${fdt_addr}'
U-Boot > setenv bootcmd 'run bootcmd_net'
请注意:如果MAC地址没有烧入熔断器,请在U-Boot中设置为使用网络。
setenv ethaddr xx: xx: xx: xx: xx: xx
4.8 Arm SystemReady-IR
4.8.1 Arm SystemReady-IR ACS符合性测试
在i.MX 8M Mini EVK板上运行SystemReady-IR ACS,请参考Arm SystemReady-IR ACS,网址:https://github.com/ARM-software/arm-systemready
sudo dd if=ir_acs_live_image.img of=/dev/sde bs=64M;sync
3.引导。ACS测试将自动运行。
4. ACS断电测试会有手动步骤。当运行到测试用例时,只需重新启动电路板。测试结果将存储在存储器上。
5. 使用SCT_Parser分析ACS结果。SCT_Parser的获取路径:https://github.com/vstehle/SCT_Parser
6. 复制acs_results\sct_results\Overall\Summary.ekl文件从u盘的RESULT分区到SCT_Parser文件夹。执行python3 parser.py --config EBBR.yaml Summary.ekl EBBR.seq来获得最终报告。
4.8.2胶囊更新
使用以下命令进行胶囊更新:
•对于SD:
U-Boot > env set dfu_alt_info "mmc 1=1 raw 0x42 0x2000"
•对于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
不要打断U-Boot。让板进入grub。在grub运行之前,它应该自动更新引导加载程序并删除capsule1.bin。然后重新启动主板。U-Boot更新后,单板将启动。
4.8.3 Linux发行版安装
Fedora34: