i.MX8引导过程和创建可引导映像,怎么制作iso镜像文件

镜像文件 0
i.MX8引导过程和创建可引导映像 原文:/docs/DOC-343178由manuelrodriguez于2019-4-18创建的文档本文档旨在概述i.MX8引导过程,并引导您完成创建可引导映像的过程。
启动过程 退出重置状态后,i.MX8ROM(存储在i.MX8的非易失性存储器中的固件)将根据启动模式引脚以确定即将使用的启动媒体/设备。
i.MX8可以从以下启动设备启动: •eMMC/SD卡•FlexSPIFlash•NAND•串行下载(USB)-在芯片生产过程中所使用的模式,通过把映像下载到RAM并刷 新板载启动设备来启动板卡。
下表显示了i.MX8QXP上的可选选项,i.MX8读取控制引导模式的引脚,并根据配置选择相应的引导设备。
一旦标识启动设备,ROM会配置并尝试在启动设备中的预定义地址读取映像,下表显示了预加载映像位于不同启动设备上的地址。
ROM将数据从上面的预定义地址(取决于所选的引导设备)加载到系统控制器单元(SCU)内部存储器(紧密耦合的存储器)中,并对其进行解析,以查找映像单元。
它也可以通过USB下载映像来启动。
映像单元具有将所有映像加载到系统所需的所有信息,首先加载的映像是系统控制器固件(SCFW)和安全控制器固件(SECO)。
需要加载SECOFW来刷新设备中的watchdog计时器(喂狗)。
如果未在watchdog计时器 到期之前加载SECOFW,设备将被重置,这通常发生在设备无法从启动媒体中获取有效镜像的情况下。
一旦加载了SCFW,ROM就会跳转到SCFW,并开始执行它。
然后,SCFW初始化DDR,并开始为Cortex-M4(可选)和Cortex-A内核(可选)加载图像。
一旦将映像加载到它们的目标内存中,SCFW就会启动内核,并将它们设置在他们的起始地址中。
创建可引导映像 作为扼要重述,可引导映像至少由系统控制器固件和安全控制器固件组成。
它可以选择性地包含可用于CortexM4内核(如果在QM设备的情况下,如果有多个)和CortexA内核的映像。
引导仅包含SCFW和SECOFW的映像是可能的,这对将SCFW移植到目标板上的第一阶段可能是很有用的。
仅使用Cortex-M4映像(裸机,FreeRTOS,AutoSAR...),仅使用Cortex-A映像(U引导或任何引导加载程序)或同时使用Cortex-M4和Cortex-A映像来引导映像也是可能的。

Mkimage工具 负责合并所有这些映像并为i.MX8创建启动映像的工具称为mkimage。
它可以在以下存储库中以源代码形式获得: /external/imx/imx-mkimagemkimage仅能在Linux中使用因此,第一步是将mkimage存储库克隆到我们的计算机中,并签出最新的分支,在编写此文档时,最新版本为4.14.98_02:gitclone/external/imx/imx-mkimagecdimx-mkimagegitcheckoutimx_4.14.98_2.0.0_ga现在,您应该能够看到以下文件夹: 获取SCFW 有了mkimage工具后,您需要使用一些实际的图像。
如果使用的是自定义板,可能需要为其移植SCFW和DDR配置文件(取决于它与NXP参考板的距离)。
以下是有关SCFW基础知识的文档纲要,以及如何从头开始构建文档。
如果需要入门移植方面的帮助,可以点击下面的链接。
/docs/DOC-342654如果您在NXP的参考板上尝试此操作,则可以使用预构建的SCFW二进制文件,可以通过Yocto项目的构建过程或下载移植工具包并按照以下步骤操作来获得它:DownloadSECOFWbinariesforrelease4.14.98_02here.chmoda+xfirmware-imx-8.1.bin./firmware-imx-8.1.bin系统将提示您接受许可协议,然后提取二进制文件: 获得SECOFW 安全控制器固件仅以二进制形式发布,可以从NXP网站获得。
DownloadSECOFWbinariesforrelease4.14.98_02here.chmoda+xfirmware-imx-8.1.bin./firmware-imx-8.1.bin系统将提示您接受许可协议,然后提取二进制文件: SECOFW在固件/seco下•mx8qm-ahab-container.img----->适用于QM设备的SECOFW•mx8qx-ahab-container.img------>适用于QXP设备的SECOFW 获取Cortex-M4的图像 Cortex-M4的图像可以用SDK生成:/en/select 只需选择要使用的设备,然后单击“BuildMCUXpressoSDK”,然后系统将提示您选择您的IDE和主机。
单击下载SDK,包含该SDK的压缩文件将被下载到您的计算机上。
现在,您只需要解压缩文件并按照入门文档中的步骤生成镜像。
入门文档的内容是设置工具链的步骤和为M4生成映像的步骤。
本文档中还附带了用于QM和QXPMEK的M4二进制文件,示例在M4终端上输出helloworld消息。
获取Cortex-A的图像 可以通过YoctoBSP获得用于Cortex-A内核的引导程序: 为4.14.98发行版生成映像的步骤在以下链接:/webapp/Download?
colCode=imx-yocto-L4.14.98_2.0.0_ga 有关YoctoBSP的更多详细信息,可以在这里找到:/docs/DOC-94849 在此处随附了为MEK平台上的Cortex-A内核创建启动映像所需的所有二进制文件。
建立可启动映像 一旦所有必需的部件都已构建/获得,就可以创建可引导映像。
需要将SCFW,SECOFW和相应的Cortex-M4/A映像复制到目标设备的文件夹,即,如果您正在为i.MX8QX变体构建映像,则将该变体的二进制文件复制到其文件夹: 以下是构建可启动映像所需的文件的列表:•scfw_tcm.bin--------------------------------------------系统控制器固件目标板的二进制文件•mx8qm(qx)-ahab-container.image----------------适用于QM或QXP变体的安全控制器固件•bl31.bin---------------------------------------------------ARM可信固件二进制文件(如果将u-boot与ATF一起使用,则是必需的)仅用于通过uboot创建Cortex-A映像•u-boot.bin----------------------------------------------U-boot二进制文件(可选)•m4_image-----------------------------------------------M4二进制图像,QM变体具有2个Cortex-M4,在这种情况下,可能需要M4二进制文件(可选) 将所需的二进制文件复制到所需的变体文件夹(在本示例中为QXP或QM)后,即可开始构建一些映像。
在每个文件夹中包含的soc.mak文件中定义了用于构建不同映像的所有目标,该文件包含用于创建许多受支持的可引导映像的不同示例。
创建仅SCFW图像 用于创建仅SCFW映像的目标是flash_b0_scfw,并且在每个变量的soc.mak文件下定义了该目标。
要从imx-mkimage目录为QXP调用此目标:makeSOC=iMX8QXflash_b0_scfw要从imx-mkimage目录调用此目标:makeSOC=iMX8QMflash_b0_scfw 可以在下面看到flash_b0_scfw的目标定义。
QXP的定义:flash_scfwflash_b0_scfw:$(MKIMG)mx8qx-ahab-container.imgscfw_tcm.bin ./$(MKIMG)-socQX-revB0-dcdskip-appendmx8qx-ahabcontainer.img-c-scfwscfw_tcm.bin-outflash.binQM的定义:flash_b0_scfw:$(MKIMG)mx8qm-ahab-container.imgscfw_tcm.bin ./$(MKIMG)-socQM-revB0-dcdskip-appendmx8qm-ahabcontainer.img-c-scfwscfw_tcm.bin-outflash.bin 仅创建Cortex-A图像 仅用于创建Cortex-A图像的目标称为flash_b0。
从imx-mkimage目录中为QXP调用目标:makeSOC=iMX8QXflash_b0 从imx-mkimage目录中调用QM目标:makeSOC=iMX8QMflash_b0 flash_b0的目标定义如下所示。
QXP的定义: flashflash_b0:$(MKIMG)mx8qx-ahab-container.imgscfw_tcm.binu-boot-atf.bin ./$(MKIMG)-socQX-revB0-appendmx8qx-ahab-container.img-c-scfwscfw_tcm.bin-apu-boot-atf.bina350x80000000-outflash.binQM的定义: flash_b0:$(MKIMG)mx8qm-ahab-container.imgscfw_tcm.binuboot-atf.bin ./$(MKIMG)-socQM-revB0-appendmx8qm-ahab-container.img-c-scfwscfw_tcm.bin-apu-boot-atf.bina530x80000000-outflash.bin 仅创建Cortex-M4图像 仅用于创建Cortex-m4图像的目标在QXP上称为flash_b0_cm4。
既然系统中有两个M4,QM有不同的目标。
从imx-mkimage目录中为QXP调用此目标:makeSOC=iMX8QXflash_b0_cm4从imx-mkimage目录调用此QM目标://ForCortex-M4_0onlymakeSOC=iMX8QMflash_b0_cm4_
0 //ForCortex-M4_1onlymakeSOC=iMX8QMflash_b0_cm4_1//ForbothCortex-M4_0andCortex-M4_1makeSOC=iMX8QMflash_b0_m4s_tcm 可以在下面看到flash_b0_cm4的目标定义。
QXP的定义:flash_cm4flash_b0_cm4:$(MKIMG)mx8qx-ahab-container.imgscfw_tcm.binm4_image.bin ./$(MKIMG)-socQX-revB0-appendmx8qx-ahab-container.img-c-scfwscfw_tcm.bin-p1-m4m4_image.bin00x34FE0000-outflash.bin QM的定义:flash_b0_cm4_0:$(MKIMG)mx8qm-ahab-container.imgscfw_tcm.binm4_image.bin ./$(MKIMG)-socQM-revB0-dcdskip-appendmx8qm-ahabcontainer.img-c-scfwscfw_tcm.bin-p1-m4m4_image.bin00x34FE0000-outflash.bin flash_b0_cm4_1:$(MKIMG)mx8qm-ahab-container.imgscfw_tcm.binm4_image.bin ./$(MKIMG)-socQM-revB0-dcdskip-appendmx8qm-ahabcontainer.img-c-scfwscfw_tcm.bin-p1-m4m4_image.bin10x38FE0000-outflash.bin flash_b0_m4s_tcm:$(MKIMG)mx8qm-ahab-container.imgscfw_tcm.binm40_tcm.binm41_tcm.bin ./$(MKIMG)-socQM-revB0-dcdskip-appendmx8qm-ahabcontainer.img-c-scfwscfw_tcm.bin-p1-m4m40_tcm.bin00x34FE0000-m4m41_tcm.bin10x38FE0000-outflash.bin 上面的示例适用于从TCM引导的M4映像,M4拥有能从DDR引导和执行的能力。
它还能够从SPI存储器进行XIP(就地执行)。
有关此目标的示例,请查看soc.mak。
使用Cortex-A和Cortex-M4镜像创建镜像 用软件为所有内核创建映像的目标称为flash_linux_m4。
要从imx-mkimage目录为QXP调用此目标:makeSOC=iMX8QXflash_linux_m4 从imx-mkimage目录调用此QM目标: makeSOC=iMX8QMflash_linux_m4 可以在下面看到flash_linux_m4的目标定义。
QXP的定义:flash_linux_m4:$(MKIMG)mx8qx-ahab-container.imgscfw_tcm.binu-boot-atf.binm4_image.bin ./$(MKIMG)-socQX-revB0-appendmx8qx-ahab-container.img-c-flags0x00200000-scfwscfw_tcm.bin-apu-boot-atf.bina350x80000000-p3-m4m4_image.bin00x34FE0000-outflash.bin QM的定义:flash_linux_m4:$(MKIMG)mx8qm-ahab-container.imgscfw_tcm.binu-boot-atf.binm4_0_image.binm4_1_image.bin ./$(MKIMG)-socQM-revB0-appendmx8qm-ahab-container.img-c-flags0x00200000-scfwscfw_tcm.bin-apu-boot-atf.bina530x80000000-p3-m4m4_0_image.bin00x34FE0000-p4-m4m4_1_image.bin10x38FE0000-outflash.bin Flash图片 这将创建一个名为flash.bin的可引导镜像,并将该镜像刷新到SD卡并在您的MEK上引导,只需执行以下操作:sudoddif=iMX8QX/flash.binof=/dev/mmcblkXbs=1kseek=32如果所需目标是QM,就将if=iMX8QX...更改为if=iMX8QM。
然后在“of=/dev/mmcblkX”上匹配您的SD卡设备,您可以在插入SD卡之前和之后在控制台上键入lsblk来查看SD卡的枚举方式。
请记住,根据上面的信息,i.MX8将在SD卡上以32k搜索镜像,这就是我们在此处像SD卡刷新镜像的原因。
有关更多示例,请查看soc.mak文件,该文件包含用于不同启动媒体(NAND/QSPI)以及不同配置和用法的示例。
额外资源 参考手册第5章系统引导SCFWAPI和端口文档imx-mkimageREADMESystemControllerFirmware101 附件:..\..\..\bootableimage.tar.gz

标签: #镜像文件 #应用程序 #文件夹 #压缩文件 #压缩文件 #文件 #程序 #删了