用微信微博网站来做睡眠经济,亚马逊跨境电商开店流程及费用,广东省建设厅网站怎么查询证件,网络推广网络营销公司EMMC的使用比nand flash还是复杂一些#xff0c;有其特有的分区和电器性能 1、启动过程介绍
跟普通nand或spi flash不同#xff0c;uboot前面还有好几级 在vendor某些厂商的设计中#xff0c;ATF并不是BOOTROM加载后的第一个启动镜像#xff0c;可能是这样的#xff1a; … EMMC的使用比nand flash还是复杂一些有其特有的分区和电器性能 1、启动过程介绍
跟普通nand或spi flash不同uboot前面还有好几级 在vendor某些厂商的设计中ATF并不是BOOTROM加载后的第一个启动镜像可能是这样的 BOOTROM—PL—ATF—optee—uboot…, 在PL阶段就已经将ATF/optee/uboot镜像的load到内存了. ATFARM Trusted firmware完成启动流程:https://blog.csdn.net/u014426028/article/details/117949006?spm1001.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两个引脚
00SPI-NOR - eMMC - SDXC01SPI-NAND - eMMC - SDXC10SLC-NAND - eMMC - SDXC11SDXC - eMMC - SLC-NAND
BL1启动后根据引脚的设备会依次从上面的选项启动哪个初始化成功就用哪个启动。
3、BL2(preloader)生成过程
BL2的代码属于ATF的一部分arm-trusted-firmware-mediatek-2021-05-08-d2c75b21ATF的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.bin4、BL31uboot(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.fipuboot之后就是正常的内核引导了。
5、EMMC启动设置和分区分配
EMMC本身有几个物理分区跟人为的mtd功能分区不一样。 EMMC的启动逻辑是可以设置的设置从哪个物理分区启动正常有两种做法
方法1设置从boot1启动即boot1里面烧录BL2(preloader)之后再跳转到UDA分区启动BL31-uboot。方法2设备从UDA启动即把BL2(preloader)和BL31-uboot之类的信息都烧录到UDA分区boot1分区不烧录东西。
至于设备从哪个分区启动可以查看EMMC寄存器说明 我们只需要设置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的头部加一个软件分区配置文件目前主流的软件分区技术有 MBRMaster Boot Record和 GPTGUID 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分区bl2fipenvfirmwareemmc使用的就是方法1bl2属于boot1分区这边不用生成UDA分区内容为fipenvfirmwarefirmware2
define Build/mt7622-gptcp $ $.tmp 2/dev/null || trueptgen -g -o $.tmp -a 1 -l 1024 \-t 0xef -N fip -r -p 2M2M \-t 0x83 -N ubootenv -r -p 1M4M \-t 0x2e -N firmware -p 48M6M \-t 0x2e -N firmware2 -p 48M54M \-t 0x83 -N zbootconfig -p 512k102M \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 2M2M -t 0x83 -N ubootenv -r -p 1M4M -t 0x2e -N firmware -p 48M6M -t 0x2e -N firmware2 -p 48M54M -t 0x83 -N zbootconfig -p 512k102M
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.gpt7、最终固件
经过上面的分析可以得到最终会有两个文件需要烧录
由ATF中的BL2生成的preloader文件烧录到boot1分区由AGPTLB31ubootuboot-envfirmware生成的固件烧录到uda分区