NXP的mfgtool镜像烧写工具是如何对EMMC进行分区的

news2024/9/24 19:19:20

本来是想在IMX6ULL板卡上实现u-boot中显示开机logo的功能的,过程中就牵扯出了这几个问题。大概的缘由是修改了u-boot后,想在系统中直接对EMMC中u-boot进行更新,就不用通过SD卡或USB重新烧写了;在更新的时候,又需要知道u-boot、logo图片存放在EMMC中的具体位置,所以就有了下面这3个问题问题,本文主要针对第3个问题摸索的过程记录

1、u-boot中如何添加开机logo

2、如何在系统中更新u-boot、zImage、dtb

3、EMMC是如何分区的

一、EMMC分区

1、分区

对于I.MAX6U来说,烧写过Linux系统的SD卡或EMMC会分为三个分区:

第0分区:存放uboot,没有文件系统

第1分区:存放系统镜像(zImage)、设备树(.dtb),采用的是FAT格式

第2分区:存放的系统的根文件系统,采用的是EXT4格式

所以更新uboot是从第0分区开始的。可以通过下面指令查看EMMC的分区:

mmc dev 1 //切换到EMMC

mmc part //查看emmc的分区情况。会发现第0个分区识别不出来,是因为第0分区没有格式化,实际上第0个分区是存在的

烧过系统的EMMC分区如下:

可见EMMC的分区是这样的

分区/存放内容

开始扇区/起始地址

扇区数据/大小

0/uboot

0

10MByte

1/镜像、设备树

20480 / 10MByte

1024000 / 500M

2/rootfs

1228800 / 600Myte

14041088 / 6856M(6G)

可以通过下面指令查看EMMC分区里的内容:

//查看EMMC设备分区1的内容,因为该分区是FAT的,所有需要使用fat相关的命令

fatinfo mmc 1:1

2、分区的起始地址和大小

现在只是知道了EMMC有3个分区,但是这3个分区的起始地址和大小是怎么设置的,能不能修改?要想搞清楚,就得先弄清楚谁是第一个对EMMC进行分区操作的,那就是mfgtool工具,所以从mfgtool工具的.vbs烧写脚本中应该就能找到答案。mfgtool烧写原理不在这里赘述,大概的一个调用过程是 :xxx.vbs ---> MfgTool2.exe ---> \Profiles\Linux\OS Firmware\ucl2.xml。打开ucl2.xml配置

可以看出来,是调用了 mksdcard.sh脚本对 /dev/mmcblk1 设备进行了分区,该脚本就在同级目录下:

该脚本是个tar的压缩包,解压缩后打后内容如下

#!/bin/sh

# partition size in MB
BOOT_ROM_SIZE=10

# wait for the SD/MMC device node ready
while [ ! -e $1 ]
do
sleep 1
echo “wait for $1 appear”
done

# call sfdisk to create partition table
# destroy the partition table
node=$1
dd if=/dev/zero of=${node} bs=1024 count=1

sfdisk --force ${node} << EOF
${BOOT_ROM_SIZE}M,500M,0c
600M,,83
EOF

第15行,node=/dev/mmcblk1

第18行,调用sfdisk硬盘分区工具程序,对 /dev/mmcblk1进行分区,命令介绍

第19行,0C 表示windows FAT分区,83表示LINUX分区。表示从EMMC的10M位置到500M位置为第一分区,至于前面的10M作用,估计是存放UBOOT部分,而第一分区在我开发板上存放kernel和dtb的。

第20行,表示的是从600M 以后的所有内存都为第二分区,也就是存放rootfs

分析后发现这里的空间分配跟在uboot中查看的分区情况是一致的。所以如果要想修改EMMC中各分区的起始地址和大小,或是增加新的分区,只需要修改mksdcard.sh 脚本,按照 {始地址,结束地址,分区类型} 的格式添加即可,注意要添加单位M,不然分配的内容就不对了。

二、测试验证

1、将rootfs改为1G大小,之后的空间用来存放数据

sfdisk --force ${node} << EOF
${BOOT_ROM_SIZE}M,500M,0c  //分配了490M,存放kernel 、dtb
600M,1624M,83 //分配了1024M,存放rootfs
1624M,,83 //之后的空间都用作存放 appdata
EOF

2、制作并替换调原来的mksdcard.sh.tar

3、通过mfgtool重新烧写系统后,在u-boot中可查看分区情况。可以发现已经多增加了一个分区

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

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

相关文章

猿如意程序代码生成实践与测试

ChatGPT中国区申请无法直接注册与使用&#xff1b; 使用csdn提供的猿如意效率工具箱提供的chatGPU功能实现智能程序编写实验&#xff1a; 先安装&#xff1a; csdn猿如意下载地址 选择其中的ChatGPT菜单 在右侧窗口中的输入框&#xff0c;可输入问题内容。 &#xff08;1&a…

〖产品思维训练白宝书 - 产品思维认知篇⑥〗- 职场人面临困惑与迷茫应该如何破局?

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

Leetcode:459. 重复的子字符串(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 移动匹配法&#xff1a; 原理思路&#xff1a; 利用kmp法&#xff1a; 原理思路&#xff1a; 暴力法&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给定一个非空的字符串 s &#xff0c;检查是否可以…

55 处理错误的树形数据结构导致不断地添加元素到集合中 OOM

前言 呵呵 这是最近一个 前同事/朋友 碰到的一个问题 主要的问题是 在 dump 文件中发现了很多 LinkedList$Node 的节点 然后 整个问题 抛出来的错误是 OOM 呵呵 这种问题 还是相当好处理的 这里 仅仅是 简单记录一下 前因 后果 测试用例 /*** Test11OomByTree** aut…

关于2022年

也算是传统了&#xff0c;每年到年底的时候&#xff0c;总喜欢做点总结&#xff0c;或许类似于企业里面的年底复盘&#xff0c;但更多的还是碎碎念。往年一般会放在农历新年那一天&#xff0c;今年做点小改变&#xff0c;影响不大。 回顾过去的一年&#xff0c;发现自己基本上…

【HR-VITON】虚拟换衣算法pre-processing复现全过程记录

Link of original Github repo Link of personal made study case of HR-VITON ContentPre1、OpenPose&#xff08;On colab, need GPU&#xff09;2、Human ParseMethod 1: ColabMethod 2: Local or Server3、DensePose (On colab, GPU or CPU)4、Cloth Mask (On colab, GPU o…

【MySQL】InnoDB数据页结构

文章目录1. 前言2. 数据页结构3. 记录在页中的存储4. 记录头信息5. 页目录&#xff08;Page Directory&#xff09;6. 页面头部&#xff08;Page Header&#xff09;7.文件头部&#xff08;Fiile Header&#xff09;8. 文件尾部&#xff08;File Trailer&#xff09;不知不觉20…

JVM调优相关说明

前言 其实听着JVM调优这个词有些高大上&#xff0c;但是等你真正了解了他的内在原理后&#xff0c;还是很容易的。再简单 JVM调优大致可分为如下&#xff1a; 解决JVM运行过程中的问题&#xff08;主要就是内存溢出的问题&#xff09;优化JVM运行时的环境&#xff0c;提高运…

多线程问题(四)

目录 一、常见的锁策略 1、乐观锁 VS 悲观锁 2、读写锁 VS 普通的互斥锁 3、重量级锁 VS 轻量级锁 4、挂起等待锁 VS 自旋锁 6、公平锁 VS 非公平锁 7、可重入锁 VS 不可重入锁 8、synchronized锁的性质 二、CAS 1、CAS的伪代码 2、CAS的应用 a、实现原子类…

【Spring系列】一篇文章开启你的 SpringBoot 之旅

SpringBoot 快速入门一. 环境搭建1.1 环境准备Java环境准备(本人是 JDK 1.8)开发工具 IntelliJ IDEAMaven (可使用 IntelliJ IDEA 自带)二. 快速开始2.1 新建项目打开IDEA 新建 SpringBoot 项目2.2 运行项目Spring Boot 项目运行分析尝试在浏览器中访问2.3 完成第一个接口新建c…

ArcGIS基础实验操作100例--实验30清除坐标系信息

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验30 清除坐标系信息 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff…

运维管理平台OEM定制集成开发,激发IT价值

对硬件设备商而言&#xff0c;借助优秀的网管、运维管理平台&#xff0c;可以形成完整的产品解决方案&#xff0c;直接提升产品的形象和适用范围。同时还可以通过网管、运维管理平台&#xff0c;切入到外围的产品及集成领域&#xff0c;并在用户后续的升级改造活动中占据有利位…

12.31日报

纠正前天的错误&#xff1a; 前天我写&#xff1a; 不知道在mapper中的增删改方法返回值int的值&#xff0c;和含义&#xff0c;在调用方法时也没有定义int来接参&#xff0c;都是直接调用。于是我定义int i&#xff0c;并打印输出&#xff0c;使用postman调用接口方法&#xf…

R语言hdnom包进行高维惩罚 Cox 回归模型绘制列线图-校准曲线-时间依赖ROC-外部验证

Hdnom包可以用于用于给高维数据构建Cox 模型、绘制列线图-校准曲线-时间依赖ROC-外部验证&#xff0c;而且Hdnom包简化了建模过程&#xff0c;带有自动选择变量功能&#xff0c;将用户从繁琐且容易出错的调参过程中解放出来. hdnom提供了多项自动调参和模型选择功能&#xff…

【OpenAI】基于 Gym-CarRacing 的自动驾驶项目 | 前置知识介绍 | 项目环境准备

猛戳&#xff01;跟哥们一起玩蛇啊 &#x1f449; 《一起玩蛇》&#x1f40d; &#x1f4ad; 写在前面&#xff1a; 本篇是关于多伦多大学自动驾驶专业项目 Gym-CarRacing 的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行…

jscharting.js v3.3.1.20220428 Crack

jscharting.js 3.3 版带来了主要的新组织结构图和甘特图扩展&#xff0c;包括甘特关键路径图、组织连接线样式和选择、仪表板小部件、象形图等等。图表渐变支持扩展到包括图标和动态点和系列渐变填充。 JSCharting 团队使用新功能、图表类型和图表小部件制作了超过 55 个高级示…

从发展的趋势来看,数字技术理应是产业互联网时代的驱动力

事实上&#xff0c;以往&#xff0c;我们所经历的那个互联网玩家频出的年代&#xff0c;其实就是一个以互联网技术为主导的年代。在那样一个年代里&#xff0c;互联网技术几乎是解决一切痛点和难题的万能解药&#xff0c;几乎是破解一切行业痛点和难题的杀手锏。任何一个行业&a…

【Java语言】—顺序结构、分支结构

流程控制语句 Java提供了一些流程控制语句&#xff0c;来控制程序的执行流程。 1.顺序结构 按照代码的先后顺序&#xff0c;以此执行程序。 2.分支结构 &#xff08;1&#xff09;if分支 根据判断的结果&#xff08;真或假&#xff09;决定执行某个分支的代码。 if分支有三…

Docker+Nginx打包部署前后端分离项目

DockerNginx打包部署前后端分离项目1、问题描述2、项目打包2.1 前端项目打包2.1.1 修改vue.config.js文件2.1.2 router配置中添加base属性2.1.3 打包前端项目2.2 后端项目打包2.3 将前端和后端的打包文件上传到服务器3 nginx反向代理配置4、后端通过Dockerfile打包成docker镜像…

目标检测-锚框

目标检测算法通常会在输入图像中采样大量的区域&#xff0c;然后判断这些区域中是否包含我们感兴趣的目标&#xff0c;并调整区域边界从而更准确地预测目标的真实边界框&#xff08;ground-truth bounding box&#xff09;。 不同的模型使用的区域采样方法可能不同。 这里我们介…