2-EMMC启动及各分区文件生成过程

2024-05-28 13:12
文章标签 启动 生成 过程 分区 emmc

本文主要是介绍2-EMMC启动及各分区文件生成过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EMMC的使用比nand flash还是复杂一些,有其特有的分区和电器性能

1、启动过程介绍

跟普通nand或spi flash不同,uboot前面还有好几级

在vendor某些厂商的设计中,ATF并不是BOOTROM加载后的第一个启动镜像,可能是这样的:
BOOTROM—>PL—>ATF—>optee—>uboot…, 在PL阶段就已经将ATF/optee/uboot镜像的load到内存了.

image

ATF(ARM Trusted firmware)完成启动流程:https://blog.csdn.net/u014426028/article/details/117949006?spm=1001.2014.3001.5501

ATF(ARM Trusted firmware):https://blog.csdn.net/shuaifengyun/category_6919265.html

MTK系统启动流程:https://www.likecs.com/show-203730440.html

Bpi-r64 quick start (boot from eMMC):https://forum.banana-pi.org/t/bpi-r64-quick-start-boot-from-emmc/9809

2、BL1(ROM)启动检测

从启动流程可以看到BL1属于固化在芯片内部ROM里面的一小段代码,我们修改不到。

其作用比较简单,主要有
a.初始化ISRAM和EMMC
b.当系统全擦后 ,也会配置USB,用来仿真USB端口下载镜像。
c.从EMMC中加载preloader到ISRAM中执行。

比如MT7622支持EMMC、SD卡、SPI Nor/Nand Flash

在《MT7622A_Datasheet.pdf》里面的strapping Options章节,有定义启动顺序

Bit[1]:NREB和Bit[0]:NWEB两个引脚

  • 00:SPI-NOR -> eMMC -> SDXC
  • 01:SPI-NAND -> eMMC -> SDXC
  • 10:SLC-NAND -> eMMC -> SDXC
  • 11:SDXC -> eMMC -> SLC-NAND

BL1启动后,根据引脚的设备,会依次从上面的选项启动,哪个初始化成功就用哪个启动。

3、BL2(preloader)生成过程

BL2的代码属于ATF的一部分arm-trusted-firmware-mediatek-2021-05-08-d2c75b21,ATF的package编译后会生产bl2.bin

Built /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/arm-trusted-firmware-mediatek-mt7622-emmc-1ddr/arm-trusted-firmware-mediatek-2021-05-08-d2c75b21/build/mt7622/release/bl2.bin successfullyImage Type:   MediaTek BootROM Loadable Image
Boot Media:   eMMC
Load Address: 002010...
install -m0644 /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/arm-trusted-firmware-mediatek-mt7622-emmc-1ddr/arm-trusted-firmware-mediatek-2021-05-08-d2c75b21/build/mt7622/release/bl2.img /home/router/19.07/staging_dir/target-aarch64_cortex-a53_musl/image/mt7622-emmc-1ddr-bl2.img

也就是上面启动流程的第二级,正常我们也把这个叫成preloader。

cat /home/router/19.07/staging_dir/target-aarch64_cortex-a53_musl/image/mt7622-emmc-1ddr-bl2.img >> /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/tmp/openwrt-mediatek-mt7622-ZH-A0501-EMMC-squashfs-emmc-1ddr-preloader.bincp /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/tmp/openwrt-mediatek-mt7622-ZH-A0501-EMMC-squashfs-emmc-1ddr-preloader.bin /home/router/19.07/bin/targets/mediatek/mt7622/openwrt-mediatek-mt7622-ZH-A0501-EMMC-squashfs-emmc-1ddr-preloader.bin
4、BL31+uboot(fip)生成过程

之后就是BL31,它也是属于ATF的一部分,编译生产bl31.bin。

Built /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/arm-trusted-firmware-mediatek-mt7622-emmc-1ddr/arm-trusted-firmware-mediatek-2021-05-08-d2c75b21/build/mt7622/release/bl31.bin successfullyinstall -m0644 /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/arm-trusted-firmware-mediatek-mt7622-emmc-1ddr/arm-trusted-firmware-mediatek-2021-05-08-d2c75b21/build/mt7622/release/bl31.bin /home/linye/sdb/zihome/ZMAX2/ZH-A0502/zrouter/19.07/staging_dir/target-aarch64_cortex-a53_musl/image/mt7622-emmc-1ddr-bl31.bin

正常会将bl31.bin和u-boot.bin合并成一个u-boot.fip文件

使用fiptool工具合并:

/home/router/19.07/staging_dir/host/bin/fiptool create --soc-fw /home/router/19.07/staging_dir/target-aarch64_cortex-a53_musl/image/mt7622-emmc-1ddr-bl31.bin --nt-fw /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/uboot-mediatek/ZH-A0501/u-boot.bin /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/uboot-mediatek/ZH-A0501/u-boot.fipinstall -m0644 /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/uboot-mediatek/ZH-A0501/u-boot.fip /home/router/19.07/bin/targets/mediatek/mt7622/ZH-A0501-u-boot.fip

uboot之后就是正常的内核引导了。

5、EMMC启动设置和分区分配

EMMC本身有几个物理分区,跟人为的mtd功能分区不一样。

image

EMMC的启动逻辑是可以设置的,设置从哪个物理分区启动,正常有两种做法:

  • 方法1:设置从boot1启动,即boot1里面烧录BL2(preloader);之后再跳转到UDA分区启动BL31->uboot。
  • 方法2:设备从UDA启动,即把BL2(preloader)和BL31->uboot之类的信息都烧录到UDA分区,boot1分区不烧录东西。

至于设备从哪个分区启动,可以查看EMMC寄存器说明:

image
image

我们只需要设置PARTITION_CONFIG中的BOOT_PARTITION_ENABLE字段

  • 方法1:使能boot1,将BOOT_PARTITION_ENABLE设置为1
  • 方法2:使能UDA,将BOOT_PARTITION_ENABLE设置为7

烧录配置->文件选择:boot1选择preloader文件

在这里插入图片描述

烧录配置->寄存器选择:配置PARTITION_CONFIG寄存器为0x48

在这里插入图片描述

6、GPT生成过程

上面提到如果是以boot1启动的方法启动,那UDA分区就不需要preloader,只需要u-boot.fip就可以。

但是实际上除了u-boot.fip外,EMMC其实还需要一个在UDA的头部加一个软件分区配置文件,目前主流的软件分区技术有 MBR(Master Boot Record)和 GPT(GUID Partition Table)两种。

这两种分区技术的基本原理类似,如下图所示:
在这里插入图片描述

前面的Partition Table也就是上面说的GPT/MBR,里面记录了下面的SW Partitions每个分区的大小。

如何生成GPT文件?firmware-utils工具包里面提供了ptgen工具,可以生成。

命令行使用如下:

Usage: ./ptgen [-v] [-n] [-g] -h <heads> -s <sectors> -o <outputfile> [-a 0..4] [-l <align kB>] [-G <guid>] [[-t <type>] [-r] [-N <name>] -p <size>[@<start>]...

如下脚本:

  • sdmmc使用的就是方法2,所有属于都在UDA分区,bl2+fip+env+firmware
  • emmc使用的就是方法1,bl2属于boot1分区,这边不用生成,UDA分区内容为fip+env+firmware+firmware2
define Build/mt7622-gptcp $@ $@.tmp 2>/dev/null || trueptgen -g -o $@.tmp -a 1 -l 1024 \-t 0xef	-N fip		-r	-p 2M@2M \-t 0x83	-N ubootenv	-r	-p 1M@4M \-t 0x2e -N firmware		-p 48M@6M \-t 0x2e -N firmware2	-p 48M@54M \-t 0x83 -N zbootconfig	-p 512k@102M \cat $@.tmp >> $@rm $@.tmp
endef

生成gpt过程如下:

ptgen -g -o /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/tmp/openwrt-mediatek-mt7622-ZH-A0501-EMMC-squashfs-emmc.gpt.tmp -a 1 -l 1024  -t 0xef	-N fip		-r	-p 2M@2M -t 0x83	-N ubootenv	-r	-p 1M@4M   -t 0x2e -N firmware		-p 48M@6M -t 0x2e -N firmware2	-p 48M@54M -t 0x83 -N zbootconfig	-p 512k@102M 
part 2048 2048
part 4096 1024
part 6144 49152
part 55296 49152
part 104448 512
2097152
2097152
4194304
1048576
6291456
50331648
56623104
50331648
106954752
524288
cat /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/tmp/openwrt-mediatek-mt7622-EMMC-squashfs-emmc.gpt.tmp >> /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/tmp/openwrt-mediatek-mt7622-EMMC-squashfs-emmc.gpt
rm /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/tmp/openwrt-mediatek-mt7622-EMMC-squashfs-emmc.gpt.tmp
cp /home/router/19.07/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/tmp/openwrt-mediatek-mt7622-EMMC-squashfs-emmc.gpt /home/router/19.07/bin/targets/mediatek/mt7622/openwrt-mediatek-mt7622-ZH-A0501-EMMC-squashfs-emmc.gpt
7、最终固件

经过上面的分析可以得到最终会有两个文件需要烧录

  • 由ATF中的BL2生成的preloader文件,烧录到boot1分区
  • 由AGPT+LB31+uboot+uboot-env+firmware生成的固件,烧录到uda分区

这篇关于2-EMMC启动及各分区文件生成过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010661

相关文章

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2