核心内容摘要
YOLOv8与DAMO-YOLO性能对比:基于TinyNAS WebUI的实时检测效果展示
整体背景TF 卡启动 u-boot 的核心目的当开发板上没有可启动的系统比如 “变砖”或者需要调试启动流程时我们可以通过 TF 卡启动到 u-boot 终端进行救砖、烧写镜像等操作。
整个流程分为TF 卡分区和镜像烧录两大阶段。
分
5.
1 TF 卡分区为启动镜像准备 “专属位置”TF 卡需要按照 STM32MP157 的启动硬件要求划分出对应启动链各阶段的分区。
查看 TF 卡分区ls /dev/sd*作用在 Linux 系统中存储设备会被识别为/dev/sdX如主硬盘是/dev/sdaTF 卡通常是/dev/sdb后面的数字代表分区如/dev/sdb1。
这个命令用来确认 TF 卡对应的设备节点避免后续操作误写硬盘同时查看现有分区结构判断是否需要重新分区。
卸载设备umount /dev/sdb1作用如果 TF 卡的分区被系统自动挂载了必须先卸载umount否则后续分区、格式化等操作会因 “设备被占用” 而失败。
确保 TF 卡处于可读写的空闲状态才能进行修改分区表等底层操作。
删除原有分区表sudo parted -s /dev/sdb mklabel msdos作用parted是 Linux 分区工具-s表示 “静默模式”无需交互确认mklabel msdos会将 TF 卡的分区表类型设置为MBRmsdos 格式同时覆盖原有分区表相当于 “清空所有旧分区”为重新分区做准备。
重新分区sudo sgdisk --resize-table128 -a 1 -n 1:34:545 -c 1:fsbl1 -n 2:546:1057 -c 2:fsbl2 -n 3:1058:5153 -c 3:ssbl -n 4:5154 -c 4:rootfs -p /dev/sdb -g这是最关键的一步完全贴合 STM32MP157 的启动硬件要求拆解各参数作用sgdiskGPT 分区工具这里兼容 MBR 模式适配开发板硬件--resize-table128调整分区表最大支持 128 个分区满足多分区需求-a 1设置分区对齐为 1 扇区STM32MP1 平台要求 1 扇区对齐避免启动异常-n 1:34:545 -c 1:fsbl1创建第 1 个分区起始扇区
结束扇区 545命名为fsbl1存放第一阶段启动加载器 TF-A 的第一份镜像-n 2:546:1057 -c 2:fsbl2创建第 2 个分区起始扇区
结束扇区 1057命名为fsbl2存放 TF-A 的冗余备份镜像当fsbl1损坏时硬件会自动从fsbl2启动提高可靠性-n 3:1058:5153 -c 3:ssbl创建第 3 个分区起始扇区
结束扇区 5153命名为ssbl存放第二阶段启动加载器 u-boot-n 4:5154 -c 4:rootfs创建第 4 个分区起始扇区
默认到卡末尾命名为rootfs存放 Linux 根文件系统后续挂载后存放系统文件-p /dev/sdb打印分区表信息方便验证分区是否正确-g生成新的 GUID 分区表兼容硬件启动要求核心作用按 STM32MP157 启动链的阶段划分分区让硬件能按顺序加载fsbl1/fsbl2→u-boot→ 根文件系统。
格式化 rootfs 分区sudo mkfs.ext4 /dev/sdb4作用rootfs分区需要是 Linux 支持的文件系统常用ext4mkfs.ext4会将分区 4 格式化为ext4文件系统这样后续可以挂载该分区并复制根文件系统内容到这里。
分
5.
2 镜像烧录把启动镜像写入对应分区这一步是把编译好的启动镜像写入 TF 卡的对应分区让硬件能加载启动。
烧录 TF-A 镜像第一阶段启动加载器cd ~/fs-mp1a/trusted-firmware/build/trusted/进入 TF-A 镜像的编译输出目录TF-A 是 ARM Trusted Firmware-A负责安全启动、初始化硬件、建立安全环境sudo dd iftf-a-stm32mp157a-fsmp1a.stm32 of/dev/sdb1 convfdatasyncdd是 Linux 块设备复制工具if是输入文件TF-A 镜像of是输出设备分区 1fsbl1convfdatasync强制将缓存数据刷写到磁盘确保镜像完全写入分区避免断电导致数据丢失第二个dd命令sudo dd iftf-a-stm32mp157a-fsmp1a.stm32 of/dev/sdb2 convfdatasync作用把 TF-A 镜像也写入分区 2fsbl2实现双 FSBL 冗余启动提高系统可靠性当fsbl1损坏时硬件自动尝试从fsbl2启动烧录 u-boot 镜像第二阶段启动加载器cd ~/fs-mp1a/u-boot/build-trusted/进入 u-boot 镜像的编译输出目录u-boot 负责加载内核、设备树启动 Linux 系统或进入 u-boot 终端进行调试 / 救砖sudo dd ifu-boot-stm32mp157a-fsmp1a-trusted.stm32 of/dev/sdb3 convfdatasync把 u-boot 镜像写入分区 3ssbl让 TF-A 加载完成后能继续加载 u-boot最终进入 u-boot 终端或启动 Linux 内核启动开发板插入 TF 卡 调整拨码开关为【101】作用开发板的拨码开关用来选择启动介质如 eMMC、TF 卡、SPI Flash 等设置为101是指定从 TF 卡启动。
开发板上电后会从 TF 卡的fsbl1/fsbl2加载 TF-A再加载 u-boot最终进入 u-boot 终端或启动系统。
实际操作第一步确认设备非常重要避免误操作硬盘从lsblk输出可以明确/dev/sda是你的 Ubuntu 系统硬盘有/boot/efi和根目录/挂载点绝对不能动/dev/sdb是你的 TF 卡RM1表示可移动设备这是我们要操作的目标。
通过lsblk命令查看哪些分区已挂载以下图为例下图四个分区均已挂载需进行卸载操作️ 第二步卸载 TF 卡的所有挂载分区因为 TF 卡的 4 个分区都被自动挂载了必须先卸载否则后续分区操作会失败。
依次执行以下命令bash运行sudo umount /media/hqyj/C2DB-9200 # 卸载 sdb1 sudo umount /media/hqyj/DCE4-F5F3 # 卸载 sdb2 sudo umount /media/hqyj/BEED-59BC # 卸载 sdb3 sudo umount /media/hqyj/67a70f
c
-aa
e8805823 # 卸载 sdb4提示如果某个分区卸载失败可以先关闭文件管理器中打开的 TF 卡文件夹再重新执行卸载命令。
️ 第三步清空旧分区表并重新分区清空原有分区表MBR 格式bash运行sudo parted -s /dev/sdb mklabel msdos这个命令会清除 TF 卡上所有旧分区为重新分区做准备。
按 STM32MP157 要求创建新分区直接执行这条分区命令和你教程中的参数完全匹配bash运行sudo sgdisk --resize-table128 -a 1 -n 1:34:545 -c 1:fsbl1 -n 2:546:1057 -c 2:fsbl2 -n 3:1058:5153 -c 3:ssbl -n 4:5154 -c 4:rootfs -p /dev/sdb -g执行后会自动创建 4 个分区sdb1fsbl1存放 TF-A 主镜像sdb2fsbl2存放 TF-A 备份镜像sdb3ssbl存放 u-boot 镜像sdb4rootfs存放根文件系统 第四步格式化 rootfs 分区把sdb4格式化为 Linux 支持的ext4文件系统bash运行sudo mkfs.ext4 /dev/sdb4这个命令会在分区上创建文件系统后续可以挂载并复制根文件系统。
第五步烧录 TF-A 和 u-boot 镜像烧录 TF-A 镜像两个冗余分区先进入 TF-A 镜像的编译输出目录路径以你实际编译的为准bash运行cd ~/fs-mp1a/trusted-firmware/build/trusted/烧录到fsbl1sdb1bash运行sudo dd iftf-a-stm32mp157a-fsmp1a.stm32 of/dev/sdb1 convfdatasync烧录到fsbl2sdb2bash运行sudo dd iftf-a-stm32mp157a-fsmp1a.stm32 of/dev/sdb2 convfdatasync烧录 u-boot 镜像进入 u-boot 镜像的编译输出目录bash运行cd ~/fs-mp1a/u-boot/build-trusted/烧录到ssblsdb3bash运行sudo dd ifu-boot-stm32mp157a-fsmp1a-trusted.stm32 of/dev/sdb3 convfdatasync提示convfdatasync是为了确保数据完全写入 TF 卡避免断电导致镜像损坏。
第六步启动开发板安全弹出 TF 卡避免数据丢失bash运行sudo eject /dev/sdb将 TF 卡插入开发板调整拨码开关为101选择 TF 卡启动模式。
上电启动开发板会从 TF 卡加载 TF-A → u-boot最终进入 u-boot 终端。