问题描述
通过SD卡烧写镜像具有操作简便、快速部署、灵活性强等优势。只需将镜像文件写入SD卡,然后插入开发板即可完成烧写,步骤简单且工具易得;烧写速度快,支持批量操作,适合设备的快速部署和更新。
但是瑞芯微TF卡制作软件只适用于4G以下大小镜像的制作,而在iTOP-RK3588开发板所提供的镜像中,只有安卓镜像以及buildroot镜像是小于4G的,Ubuntu和Debian镜像会超过4G大小的限制,从而导致TF卡制作失败。
但是Ubuntu和Debian镜像客户使用频率是非常高的,在项目部署以及后续项目升级阶段难免需要使用TF卡烧写镜像,那要如何解决TF卡4G大小限制的问题呢?
解决步骤
首先使用TF卡磁盘升级工具创建一个普通的buildroot固件升级镜像,升级步骤如下图所示:
升级完成之后将TF卡转到ubuntu虚拟机,TF卡默认格式为FAT32格式,TF卡里的内容如下图所示:
由于FAT32格式的TF卡只能存放4G以下容量的文件,所以这里要重新拷贝上述文件(瑞芯微sd卡工具制作步骤不能缺少,因为需要进入recovery进行系统升级),为了方便起见,可以直接使用以下脚本:
#!/bin/bash
# 检查参数数量
if [ "$#" -ne 2 ]; then
echo -e "\033[31m用法: $0 <磁盘设备> <挂载点>\033[0m"
echo -e "\033[33m例如: $0 /dev/sdc1 /mnt\033[0m"
exit 1
fi
DISK=$1
MNT=$2
# Step 1: 创建临时目录并制作空的 rksdfw.tag
echo -e "\033[32m步骤 1: 创建临时目录并制作空的 rksdfw.tag...\033[0m"
touch rksdfw.tag
echo -e "\033[32mrksdfw.tag 文件已创建。\033[0m"
# Step 2: 制作升级的配置文件 sd_boot_config.config
echo -e "\033[32m步骤 2: 创建 sd_boot_config.config 文件...\033[0m"
cat <<EOL > sd_boot_config.config
#rockchip sdcard boot config file for factory
loader_update = 0
display_led = 1
display_lcd = 1
pcba_test = 0
fw_update = 1
demo_copy = 0
EOL
echo -e "\033[32msd_boot_config.config 文件已创建。\033[0m"
# Step 3: 检查固件文件是否存在
if [ ! -f sdupdate.img ]; then
echo -e "\033[31m错误: 当前目录中未找到 sdupdate.img 文件。\033[0m"
echo -e "\033[33m请将要升级的固件文件拷贝到当前目录,并重命名为 sdupdate.img。\033[0m"
exit 1
else
echo -e "\033[32msdupdate.img 文件已找到。\033[0m"
fi
# Step 4: 格式化磁盘并拷贝文件
echo -e "\033[32m步骤 4: 格式化磁盘并拷贝文件...\033[0m"
sudo umount $DISK
if [ $? -ne 0 ]; then
echo -e "\033[31m卸载 $DISK 失败,请确认设备未被占用。\033[0m"
exit 1
fi
sudo mkfs.ext4 -F $DISK
if [ $? -ne 0 ]; then
echo -e "\033[31m格式化 $DISK 失败。\033[0m"
exit 1
fi
sudo mount $DISK $MNT
if [ $? -ne 0 ]; then
echo -e "\033[31m挂载 $DISK 到 $MNT 失败。\033[0m"
exit 1
fi
sudo cp rksdfw.tag sd_boot_config.config sdupdate.img $MNT
if [ $? -ne 0 ]; then
echo -e "\033[31m拷贝文件到 $MNT 失败。\033[0m"
sudo umount $MNT
exit 1
fi
sudo umount $MNT
if [ $? -ne 0 ]; then
echo -e "\033[31m卸载 $MNT 失败。\033[0m"
exit 1
fi
echo -e "\033[32m步骤 4 完成: 磁盘格式化并成功拷贝文件。\033[0m"
保存该脚本为 full_flash.sh,然后像之前一样赋予可执行权限:
chmod +x full_flash.sh
然后将要烧写的镜像拷贝到当前目录,并重命名为sdupdate.img
最后使用以下命令拷贝制作必须的文件即可,其中第一个参数为TF卡的盘符,第二个为挂载目录,制作过程如下所示:
升级完成之后,会提升以下打印信息,拔掉TF卡重启就可以进入要烧写的系统了。