Amlogic S9XXX Armbian项目:解决UNT413A刷入EMMC时的分区删除错误

Amlogic S9XXX Armbian项目:解决UNT413A刷入EMMC时的分区删除错误

amlogic-s9xxx-armbian amlogic-s9xxx-armbian: 该项目提供了为Amlogic、Rockchip和Allwinner盒子构建的Armbian系统镜像,支持多种设备,允许用户将安卓TV系统更换为功能强大的Armbian服务器系统。 amlogic-s9xxx-armbian 项目地址: https://gitcode.com/gh_mirrors/am/amlogic-s9xxx-armbian

在Amlogic S9XXX系列设备上安装Armbian系统时,用户可能会遇到各种硬件兼容性问题。本文将针对UNT413A(S905L3A芯片,南传主板)设备在刷写Armbian系统到EMMC存储时遇到的特定错误进行分析,并提供详细的解决方案。

问题背景

当用户尝试在UNT413A设备上使用Armbian-noble版本系统,并选择306 dtb文件时,在将系统写入EMMC的过程中可能会遇到两个主要问题:

  1. 初始阶段出现dd命令错误
  2. 后续出现"[ ERROR ] Failed to delete partition [ 1 ]. Please try again"错误提示

问题分析与解决方案

第一阶段:解决dd命令错误

dd命令错误通常与存储设备的时钟频率设置有关。在设备树(dtb)文件中,需要调整MMC和SD控制器的最大频率参数:

  1. 修改dtb文件中的max-frequency值为0x5f5e100(十进制为100,000,000,即100MHz)
  2. 注意需要同时修改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

技术细节解析

  1. 分区存在性检查:新增的partition_exists变量通过parted命令检查特定编号的分区是否存在,避免尝试删除不存在的分区。

  2. 错误处理改进:捕获并显示parted命令的完整输出,有助于诊断更深层次的问题。

  3. 安全删除:只有在确认分区存在的情况下才会尝试删除操作,提高了脚本的健壮性。

操作建议

  1. 在进行任何修改前,务必备份原始armbian-install文件
  2. 修改后,建议先在不实际写入的情况下测试脚本(可使用--dry-run参数)
  3. 对于不同型号的设备,可能需要调整max-frequency值为更适合的值
  4. 如果问题仍然存在,可以尝试其他兼容的dtb文件

总结

通过调整设备时钟频率和完善分区处理逻辑,可以有效解决UNT413A设备在刷写Armbian系统到EMMC时遇到的常见问题。这一解决方案不仅适用于特定型号,其思路也可供其他Amlogic S9XXX系列设备参考。理解这些底层原理有助于用户在遇到类似问题时能够自主分析和解决。

amlogic-s9xxx-armbian amlogic-s9xxx-armbian: 该项目提供了为Amlogic、Rockchip和Allwinner盒子构建的Armbian系统镜像,支持多种设备,允许用户将安卓TV系统更换为功能强大的Armbian服务器系统。 amlogic-s9xxx-armbian 项目地址: https://gitcode.com/gh_mirrors/am/amlogic-s9xxx-armbian

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

班颖展Norman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值