Amlogic S9XXX Armbian项目:解决UNT413A刷入EMMC时的分区删除错误
在Amlogic S9XXX系列设备上安装Armbian系统时,用户可能会遇到各种硬件兼容性问题。本文将针对UNT413A(S905L3A芯片,南传主板)设备在刷写Armbian系统到EMMC存储时遇到的特定错误进行分析,并提供详细的解决方案。
问题背景
当用户尝试在UNT413A设备上使用Armbian-noble版本系统,并选择306 dtb文件时,在将系统写入EMMC的过程中可能会遇到两个主要问题:
- 初始阶段出现dd命令错误
- 后续出现"[ ERROR ] Failed to delete partition [ 1 ]. Please try again"错误提示
问题分析与解决方案
第一阶段:解决dd命令错误
dd命令错误通常与存储设备的时钟频率设置有关。在设备树(dtb)文件中,需要调整MMC和SD控制器的最大频率参数:
- 修改dtb文件中的max-frequency值为0x5f5e100(十进制为100,000,000,即100MHz)
- 注意需要同时修改MMC和SD两个控制器的频率参数,共两处
这一修改可以确保存储设备在稳定的时钟频率下工作,避免数据传输错误。
第二阶段:解决分区删除错误
当系统尝试删除EMMC上的现有分区时,可能会报告分区不存在的错误。这是因为脚本尝试删除的分区实际上并不存在。解决方案是修改armbian-install脚本中的分区处理逻辑。
原始脚本中的分区删除代码如下:
# Clear emmc disk data
exists_pts="$(parted ${DEV_EMMC} print 2>/dev/null | grep 'primary' | wc -l)"
if [[ "${exists_pts}" -gt "0" ]]; then
echo -e "${INFO} Delete the existing [ ${exists_pts} ] partitions."
i=1
while [[ "${i}" -le "${exists_pts}" ]]; do
umount -f ${DEV_EMMC}p${i} 2>/dev/null
parted -s ${DEV_EMMC} rm ${i}
[[ "${?}" -eq "0" ]] || error_msg "Failed to delete partition [ ${i} ]. Please try again."
let i++
done
fi
修改后的代码增加了分区存在性检查:
# Clear emmc disk data
exists_pts="$(parted ${DEV_EMMC} print 2>/dev/null | grep 'primary' | wc -l)"
if [[ "${exists_pts}" -gt "0" ]]; then
echo -e "${INFO} Delete the existing [ ${exists_pts} ] partitions."
i=1
while [[ "${i}" -le "${exists_pts}" ]]; do
umount -f ${DEV_EMMC}p${i} 2>/dev/null
partition_exists=$(parted ${DEV_EMMC} print 2>/dev/null | grep -c "^ ${i}")
if [[ "${partition_exists}" -eq "0" ]]; then
echo "Partition [ ${i} ] does not exist. Skipping deletion."
else
output=$(parted -s ${DEV_EMMC} rm ${i} 2>&1)
if [[ "${?}" -ne "0" ]]; then
echo "Parted command output: $output"
error_msg "Failed to delete partition [ ${i} ]. Please try again."
fi
fi
let i++
done
fi
技术细节解析
-
分区存在性检查:新增的
partition_exists
变量通过parted
命令检查特定编号的分区是否存在,避免尝试删除不存在的分区。 -
错误处理改进:捕获并显示
parted
命令的完整输出,有助于诊断更深层次的问题。 -
安全删除:只有在确认分区存在的情况下才会尝试删除操作,提高了脚本的健壮性。
操作建议
- 在进行任何修改前,务必备份原始armbian-install文件
- 修改后,建议先在不实际写入的情况下测试脚本(可使用--dry-run参数)
- 对于不同型号的设备,可能需要调整max-frequency值为更适合的值
- 如果问题仍然存在,可以尝试其他兼容的dtb文件
总结
通过调整设备时钟频率和完善分区处理逻辑,可以有效解决UNT413A设备在刷写Armbian系统到EMMC时遇到的常见问题。这一解决方案不仅适用于特定型号,其思路也可供其他Amlogic S9XXX系列设备参考。理解这些底层原理有助于用户在遇到类似问题时能够自主分析和解决。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考