ALPHA开发板烧录工具MfgTool烧写原理

一.  简介

MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件,可以在 NXP 官网下载到。运行在windows下。可以烧写uboot.imx、zImage、dtb,rootfs。通过 USB口进行烧写。

上一篇文章简单了解了 烧录工具MfgTool (针对ALPHA开发板的)烧写的方法。文章地址如下:

ALPHA开发板烧录工具MfgTool烧写过程-CSDN博客

本文简单了解一下 烧录工具MfgTool的工作原理就行了。MfgTool 只是个工具,具体的原理不需要去深入研究。

二.  ALPHA开发板烧录工具MfgTool烧写原理

MfgTool工具都烧录哪些文件呢?

肯定是烧写 uboot、Linux kernel、.dtb 和 rootfs。
那么,uboot、Linux kernel、.dtb 和 rootfs 这四个应该放到哪里 MfgTool 才能访问到呢?
进入如下目录中:
L4.1.15_2.0.0-ga_mfg-tools/mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware

此目录中的文件如下所示:

文件夹“ OS Firmware ”看名字就知道是存放系统固件的,我们重点关注 files firmware 这两个文件夹,以及 ucl2.xml 这个文件。

MfgTool 烧写的原理:

在具体看这三个文件和文件夹之前,我们先来简单了解一下 MfgTool 烧写的原理。
MfgTool 其实是先通过 USB OTG 先将 uboot kernel .dtb( 设备树 ) 这三个文件下载到开发板的 DDR 中,注意不需要下载 rootfs 。就相当于直接在开发板的 DDR 上启动 Linux 系统,等 Linux 系统启动以后再向 Nand-Flash 中烧写完整的系统,包括 uboot kernel .dtb( 设备树 ) rootfs。

MfgTool 工作过程主要分两个阶段:

1.  将 firmware 目录中的 uboot linux kernel .dtb( 设备树 ) ,然后通过 USB OTG 将这个 文件下载到开发板的 DDR 中,目的就是在 DDR 中启动 Linux 系统,为后面的烧写做准备。
2.  经过第 1 步的操作,此时 Linux 系统已经运行起来了,系统运行起来以后,就可以很方 便的完成对 Nand-Flash 的格式化、分区等操作。
Nand-Flash 分区建立好以后,就可以从 files 中读取要烧 写的 uboot linux kernel .dtb( 设备树 ) rootfs 4 个文件,然后将其烧写到 Nand-Flash中。

三. MfgTool工具中几个文件或文件夹

注意:下面介绍 MFGTool工具的几个文件或文件夹,以 EMMC 版开发板所使用的文件为例进行说明!!!

1.  firmeare 文件夹

打开 firmware 文件夹,里面有很多的以 .imx 结尾 uboot 文件、一个 zImage 镜像文件、很多 .dtb 结尾的设备树文件。这些文件都是 NXP 官方开发板使用的,不同的板子使用不同的文件,
其中我们需要关心的只有下面 的这三个文件:

上表 中的这三个文件就是 I.MX6ULL EVK 开发板烧写系统的时候第一阶段所需的文 件。如果要烧写我们的系统,就需要用我们编译出来的 zImage u-boot.imx imx6ull-alientek- emmc.dtb 这三个文件替换掉上表中的 这三个文件。但是名字要和上表中 的一致,因 此,需要将 u-boot.imx 重命名为 u-boot-imx6ull14x14evk_emmc.imx ,将 imx6ull-alientek-emmc.dtb 重命名为 zImage-imx6ull-14x14-evk-emmc.dtb

2. files 文件夹

将上表 中的这三个文件下载到开发板的 DDR 上以后烧写的第一阶段就完成了。
第二阶段就是从 files 目录中读取整个系统文件,并将其烧写到 EMMC 中。 files 目录中的文件和
firmware 目录中的基本差不多,都是不同板子对应的 uboot 、设备树文件,同样,我们只关心表 下表 中的四个文件:
如果要烧写我们自己编译出来的系统,就需要用我们编译出来的 zImage u-boot.imx
imx6ull-alientek-emmc.dtb rootfs 这四个文件替换掉上表 中这四个文件。 同样的,名字也需要跟上表中名字都保持一致。

3. ucl2.xml 文件

files firmware 目录下有众多的 uboot 和设备树,那么烧写的时候究竟选择哪一个呢?这个工作就是由 ucl2.xml 文件来完成的。
ucl2.xml 以“ <UCL> ”开始,以“ </UCL> ”结束。“ <CFG> ” 和 “ </CFG> ” 之间是配置相关内容,主要是判断当前是给 I.MX 系列的哪个芯片烧写系统。
<UCL><CFG><STATE name="BootStrap" dev="MX6SL" vid="15A2" pid="0063"/><STATE name="BootStrap" dev="MX6D" vid="15A2" pid="0061"/><STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0054"/><STATE name="BootStrap" dev="MX6SX" vid="15A2" pid="0071"/><STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/><STATE name="BootStrap" dev="MX7D" vid="15A2" pid="0076"/><STATE name="BootStrap" dev="MX6ULL" vid="15A2" pid="0080"/><STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/></CFG>

<LIST> ”和“ </LIST> ”之间的是针对不同存储芯片的烧写命令。例如,如下是针对 Nand-Flash版芯片的烧录命令:
 <LIST name="NAND Flash" desc="Choose NAND as media"><CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6q%plus%%board%_%nand%.imx" ifdev="MX6Q">Loading U-boot</CMD><CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6dl%board%_%nand%.imx" ifdev="MX6D">Loading U-boot</CMD><CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6sx%sxuboot%_%nand%.imx" ifdev="MX6SX">Loading U-boot</CMD><CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx7d%7duboot%_%nand%.imx" ifdev="MX7D">Loading U-boot</CMD><CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ul%6uluboot%_%nand%.imx" ifdev="MX6UL">Loading U-boot</CMD><CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ul%lite%%6uluboot%_%nand%.imx" ifdev="MX6ULL">Loading U-boot</CMD><CMD state="BootStrap" type="load" file="firmware/zImage" address="0x12000000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6D">Loading Kernel.</CMD><CMD state="BootStrap" type="load" file="firmware/zImage" address="0x80800000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Kernel.</CMD><CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x12C00000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6D">Loading Initramfs.</CMD><CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x83800000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Initramfs.</CMD><CMD state="BootStrap" type="load" file="firmware/zImage-imx6q%plus%-%board%-%nanddtb%.dtb" address="0x18000000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q">Loading device tree.</CMD><CMD state="BootStrap" type="load" file="firmware/zImage-imx6dl-%board%-%nanddtb%.dtb" address="0x18000000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6D">Loading device tree.</CMD><CMD state="BootStrap" type="load" file="firmware/zImage-imx6sx-%sxdtb%-%nanddtb%.dtb" address="0x83000000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SX">Loading device tree.</CMD><CMD state="BootStrap" type="load" file="firmware/zImage-imx7d-%7ddtb%-%nanddtb%.dtb" address="0x83000000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX7D">Loading device tree.</CMD><CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul-%6uldtb%-%nanddtb%.dtb" address="0x83000000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6UL">Loading device tree.</CMD><CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul%lite%-%6uldtb%-%nanddtb%.dtb" address="0x83000000"loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6ULL">Loading device tree.</CMD><CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD><!--burn the uboot to NAND: -->	<CMD state="Updater" type="push" body="$ mount -t debugfs debugfs /sys/kernel/debug">Mounting debugfs</CMD><CMD state="Updater" type="push" body="$ flash_erase /dev/mtd%part_uboot% 0 0">Erasing Boot partition</CMD>..............................................</LIST>

 

MfgTool工具烧录原理简单介绍到这里。后面使用 MfgTool烧录我们自制系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TrustZone之数据、指令和统一缓存(unified caches)

在Arm架构中,data caches是物理标记(physically tagged)的。物理地址包括该行来自哪个地址空间,如下所示: 对于NP:0x800000的缓存查找永远不会命中使用SP:0x800000标记的缓存行。这是因为NP:0x800000和SP:0x800000是不同的地址。 这也影响缓存维护操作。考虑前面图表中的示…

人工智能学习8(集成学习之xgboost)

编译工具&#xff1a;PyCharm 文章目录 编译工具&#xff1a;PyCharm 集成学习XGBoost(Extreme Gradient Boosting)极端梯度提升树1.最优模型的构建方法XGBoost目标函数案例1&#xff1a;泰坦尼克号案例2&#xff1a;对奥拓集团差评进行正确分类。数据准备&#xff1a;1.第一种…

基于深度学习yolov5行人社交安全距离监测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介系统工作原理主要组成部分技术实现优势和特点应用场景和前景 二、功能三、系统四. 总结 一项目简介 基于深度学习 YOLOv5 的行人社交安全距离监测系统是一种…

数据仓库与数据挖掘复习资料

一、题型与考点[第一种] 1、解释基本概念(中英互译解释简单的含义)&#xff1b; 2、简答题(每个10分有两个一定要记住)&#xff1a; ① 考时间序列Time series(第六章)的基本概念含义解释作用&#xff08;序列模式挖掘的作用&#xff09;&#xff1b; ② 考聚类(第五章)重点考…

自动化定时发送天气提醒邮件

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;如喜欢麻烦您点个&#x1f44d;或者点个⭐&#xff01; &#x1f…

配置端口安全示例

组网需求 如图1所示&#xff0c;用户PC1、PC2、PC3通过接入设备连接公司网络。为了提高用户接入的安全性&#xff0c;将接入设备Switch的接口使能端口安全功能&#xff0c;并且设置接口学习MAC地址数的上限为接入用户数&#xff0c;这样其他外来人员使用自己带来的PC无法访问公…

华为配置风暴控制示例

组网需求 如下图所示&#xff0c;SwitchA作为二层网络到三层路由器的衔接点&#xff0c;需要防止二层网络转发的广播、未知组播或未知单播报文产生广播风 配置思路 用如下的思路配置风暴控制。 通过在GE0/0/1接口视图下配置风暴控制功能&#xff0c;实现防止二层网络转发的…

城市之眼:数据可视化在智慧城市的角色

作为智慧城市建设的核心组成部分&#xff0c;数据可视化扮演着至关重要的角色。在城市中&#xff0c;数据源源不断地产生&#xff0c;涵盖了从交通流量、环境质量到市民需求等各个方面。而数据可视化作为将这些数据呈现出来的手段&#xff0c;对智慧城市的发展起着关键性的作用…

HarmonyOS架构及关键技术整理

技术解析&#xff1a;鸿蒙系统的底层优势 鸿蒙系统采用了先进的微内核设计&#xff0c;这是一种全新的系统架构&#xff0c;能够更好地适应现代智能设备的多样性和互联性。微内核通过最小化系统的核心功能&#xff0c;提高了系统的安全性和可定制性。此外&#xff0c;鸿蒙系统…

多传感器融合SLAM在自动驾驶方向的初步探索的记录

1. VIO的不可观问题 现有的VIO都是解决的六自由度的问题, 但是对于行驶在路面上的车来说, 通常情况下不会有roll与z方向的自由度, 而且车体模型限制了不可能有纯yaw的变换. 同时由于IMU在Z轴上与roll, pitch上激励不足, 会导致IMU在初始化过程中尺度不准以及重力方向估计错误,…

决策树 (人工智能期末复习)

几个重要概念 信息熵&#xff1a;随机事件未按照某个属性的不同取值划分时的熵减去按照某个属性的不同取值划分时的平均 熵。即前后两次熵的差值。 表示事物的混乱程度&#xff0c;熵越大表示混乱程度越大&#xff0c;越小表示混乱程度越小。 对于随机事件&#xff0c;如果它的…

Mysql-全外连接-Union和Union ALL的辨析及练习

mysql不支持FULL JOIN&#xff0c;但是可以用 &#xff08;select 语句1&#xff09; union &#xff08;select 语句2&#xff09;代替 &#x1f436;1. SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意&#xff0c;UNION 内部的 SELECT 语句…

计算机图形图像技术(图像锐化处理与图像解析)

一、实验原理&#xff1a; 1、拓展Sobel算子锐化 void Sobel(Array src, Array dst, int ddepth, int dx, int dy, int ksize); ①参数&#xff1a;src为输入图像&#xff1b;dst为输出图像&#xff0c;大小和通道数与源图像一致&#xff0c;必要时重建&#xff1b;ddepth为目…

unity 2d 入门 飞翔小鸟 飞翔动作动画描点(六)

1、创建文件夹新建动画控制器 右键->create->Animator controer 给图层创建动画 把创建后的动画控制器拖拽至对应图层 点击window->Animation->Animation 点击创建文件夹 把图片拖拽到这里面&#xff0c;就可以了 然后我们就看在player看到已经把动作挂上去 点…

ChatGPT文书替代论“热”潮背后的“冷”思考

2022年11月底OpenAI推出的人工智能聊天工具ChatGPT仅推出一周就火爆全球&#xff0c;推出两个月&#xff0c;就在全球范围内坐拥1亿用户&#xff0c;根据华尔街消息&#xff0c;OpenAI目前估值已达290亿美元。 认识ChatGPT ChatGPT是由美国成立的人工智能研究公司OpenAI研究开…

华为数通---BFD多跳检测示例

定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网络设备需要…

时间序列预测 — GRU实现多变量多步光伏预测(Tensorflow)

目录 1 数据处理 1.1 数据集简介 1.2 导入库文件 1.3 数据集处理 1.4 训练数据构造 2 模型训练与预测 2.1 模型训练 2.2 模型多步预测 2.3 预测可视化 1 数据处理 1.1 数据集简介 实验数据集采用数据集7&#xff1a;常州普利司通光伏数据集&#xff08;下载链接&…

LV.12 D23 IIC控制器与MPU6050 学习笔记

一、Exynos_4412下的IIC控制器 ​ 4412有四个IIC&#xff0c;如果要使用需要配置四个寄存器 I2CCON&#xff1a;配置一些功能 I2CSTAT&#xff1a;控制一些功能、显示一些状态 I2CDS&#xff1a;发送和接收数据 I2CADD&#xff1a;当4412作为从机时需要一个地址&#xff…

minio的k8s的单机部署

minio的k8s的单机部署 apiVersion: apps/v1 kind: Deployment metadata:name: minionamespace: itshare spec:replicas: 1selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:containers:- name: minioimage: minio/minio:RELEASE.2022-10-15T19-57-03Z…

Centos服务器上根据端口号查询jar包,根据jar包查端口号

在开发springboot服务器时&#xff0c;经常会遇到其他人部署的java服务&#xff0c;需要自己维护&#xff0c;留下的信息又非常少。经常面临找不到jar包位置&#xff0c;或者不知道占用端口&#xff0c;不知道启动命令的问题。这里记录一下常用的centos服务器上的命令&#xff…