收起左侧

UNT402A刷飞牛系统

3
回复
387
查看
[ 复制链接 ]

1

主题

5

回帖

0

牛值

江湖小虾

2026-2-26 12:19:11 显示全部楼层 阅读模式

一、背景:并夕夕买的电视盒子(背面标签UNT402A),买回来一年后才知道盒子有年费,不交费无法进入系统,一气之下我把盒子刷成Armbian系统,emmc只运行基础系统,外挂ssd跑docker日志等其他所有配置,某天断 电后盒子挂了,ssd数据也没了,刚好飞牛公测,我决定体验飞牛。刷飞牛之前,我担心emmc的寿命和8G的容量,同时也担心断 电后系统跑路,系统跑路后需线刷安卓从头开始,我怕麻烦不想把盒子挂身上,最好就是放在角落剩下的我远程操作。基于这个这个思路,我决定emmc刷Armbian,外置ssd刷飞牛,设置ssd优先启动,emmc次之。如果ssd挂了,通过emmc启动,然后ssh-emmc反向抢救/刷写ssd,然后继续ssd优先启动,实现远程操作,此过程全程在AI指导下完成。


二、准备

  1. 盒子线刷安卓,安卓启动后,插入已刷好Armbian的U盘,通过adb实现U盘启动,U盘启动后,按照设置ssh进入arm命令行界面,开始Armbian刷入emmc。
    运行 armbian-install
    Please Input ID输入 0
    Please Input SoC Name输入 s905l3b
    Please Input DTB Name输入 meson-gxl-s905l3b-m302a.dtb(只有这一个设备树能启动)
    Please Input UBOOT_OVERLOAD Name输入 u-boot-e900v22c.bin
    Please Input MAINLINE_UBOOT Name输入 e900v22c-u-boot.bin.sd.bin
    Please Input BOOTLOADER_IMG Name直接回车
    选择根分区文件系统输入 1
    最后提示 Installation finished或Installation successful,表示安装完成。
    执行 sync同步数据
    执行 poweroff关闭设备,拔掉 U 盘,重新上电设备会从 eMMC 启动,armbian已经刷写完成。

  2. 下载镜像fnnas_amlogic_s905l3a_k6.12.41_2026.02.14.img.gz(下载地址:https://github.com/ophub/fnnas/releases),用电脑刷进外挂的ssd,成功后ssd插入开机运行armbian系统的盒子。
    执行 lsblk查看ssd是否识别/刷好
    执行 dd if=/dev/sda bs=512 count=1 2>/dev/null | hexdump -C,确认确认SSD引导信息,正常以 55 aa为结尾
    执行 sudo nano /boot/armbianEnv.txt编辑 U-Boot 环境配置文件
    文件末尾添加以下两行,确保启动顺序为usb0 mmc0:

    boot_targets=usb0 mmc0
    fdtfile=meson-gxl-s905l3b-m302a.dtb
    

    保存并退出编辑器,然后更新 U-Boot 环境变量到硬件存储中
    sudo fw_setenv boot_targets "usb0 mmc0"
    sudo fw_setenv fdtfile "meson-gxl-s905l3b-m302a.dtb"
    验证是否写入成功
    fw_printenv boot_targets
    fw_printenv fdtfile
    验证成功的输出:
    boot_targets=usb0 mmc0
    fdtfile=meson-gxl-s905l3b-m302a.dtb
    执行 sudo sync同步数据
    执行 sudo reboot重启

  3. 重启后会从ssd启动,此时无法通过ssh连接,路由列表找到设备IP,IP+5666进入飞牛的初始化配置界面,无默认账户,设置完毕后进入熟悉的飞牛界面。注意:不要点在线升级,我在线升级后,系统跑路了,系统跑后emmc和ssd都没有启动,卡在了启动页面。

  4. 创建启动管家脚本:sudo nano /usr/local/bin/boot_manager.sh 粘贴下面内容:

    #!/bin/bash
    # S905L3A 双系统启动管家 - 自动选SSD/eMMC
    SSD_DEV="/dev/sda"
    
    # 检测SSD是否能引导
    if [ -b "$SSD_DEV" ]; then
        dd if=$SSD_DEV bs=512 count=1 2>/dev/null | grep -q "55 aa"
        if [ $? -eq 0 ]; then
            # SSD引导正常,切换到SSD启动
            echo "SSD正常,启动飞牛NAS..."
            runusb boot $SSD_DEV
            exit 0
        fi
    fi
    
    # SSD异常,停在eMMC兜底系统
    echo "SSD异常,停在eMMC兜底系统(可远程救砖)"
    systemctl enable --now ssh
    exit 0
    
    

保存退出,加执行权限:sudo chmod +x /usr/local/bin/boot_manager.sh
运行 sudonano /etc/rc.local设置开机自启
exit 0前面加一行:/usr/local/bin/boot_manager.sh &
保存退出,加执行权限:sudo chmod +x /etc/rc.local
运行 sudoreboot重启验证

5.优化飞牛 btrfs 挂载参数,减少断 电影响,ssh进入飞牛
sudo -i
nano /etc/fstab
找到/dev/sda2那一行,把挂载参数改成这样:
/dev/sda2 / btrfs defaults,noatime,ssd,commit=30 0 0
保存退出,运行 reboot

此时,可以实现完全断 电后,重新上电emmc系统启动,然后执行 reboot会切换ssd飞牛启动,如果重启ssd无法启动,理论上需要重新刷写ssd系统,后续升级飞牛时,把镜像传入emmc,重新刷ssd。

收藏
送赞 1
分享

3

主题

15

回帖

0

牛值

江湖小虾

2026-3-7 00:23:40 显示全部楼层

没看懂启动逻辑,启动管家脚本是放在哪一个系统的?

  • 如果放在SSD,U-Boot中已经配置了启动顺序为usb0 mmc0,SSD启动成功才会去运行启动管家脚本,这脚本就没意义
  • 如果放在emmc,U-Boot中已经配置了启动顺序为usb0 mmc0,SSD现在启动失败,回退到emmc,启动脚本还是没意义,因为SSD已经启动失败了
启动管家的核心价值不在于 “改变启动顺序”,而在于: 1.SSD 成功启动后:做健康检查、自动挂载数据盘、发送启动通知。 2.回退到 eMMC 后:自动执行 SSD 修复(如重写引导、文件系统检查),为下一次重启做准备。  详情 回复
2026-3-7 16:34

1

主题

5

回帖

0

牛值

江湖小虾

2026-3-7 16:34:15 楼主 显示全部楼层
mo.mo 发表于 2026-3-7 00:23
没看懂启动逻辑,启动管家脚本是放在哪一个系统的?

如果放在SSD,U-Boot中已经配置了启动顺序为usb0 mmc0 ...

启动管家的核心价值不在于 “改变启动顺序”,而在于:
1.SSD 成功启动后:做健康检查、自动挂载数据盘、发送启动通知。
2.回退到 eMMC 后:自动执行 SSD 修复(如重写引导、文件系统检查),为下一次重启做准备。
你精准地指出了当前方案的盲区。要让脚本真正 “有意义”,我们需要把决策点从 “启动后” 提前到 “启动前”。
可以通过以下方式实现:
1.U-Boot 脚本:在 U-Boot 环境变量中加入一段简单脚本,先尝试读取 SSD 的引导扇区。如果读取失败,直接强制切换到 mmc0 启动。
2.按键干预:在 U-Boot 倒计时阶段,通过特定按键(如空格)直接选择从 eMMC 启动,进入修复模式。
这样一来,脚本就能在启动失败前介入,真正实现 “智能启动管理”。

3

主题

15

回帖

0

牛值

江湖小虾

2026-3-8 01:57:48 显示全部楼层

所以你实际测试了你的流程能否达到你预想的效果了吗?

比如拔掉你的SSD,看能否自动进入到Armbian,保持不失联状态?

我也在研究这个方案,boot_targets=usb0 mmc0 参数逻辑是不通的,AI给了我和你类似的方案,我问AI下面的问题,AI马上就认错了,认为这个方案不可行

1. 部署完成后,`/boot/armbianEnv.txt`中rootdev=UUID=依旧指向sata系统,添加了`boot_targets=sata mmc1 mmc0`,假如sata出问题,系统能否知道EMMC根分区的UUID从而顺利启动?
2. 假如能顺利启动,此时`/boot/armbianEnv.txt`中rootdev=UUID=依旧指向sata系统,但应该启动EMMC,是否冲突?
3. 手动切换系统时,指定`/boot/armbianEnv.txt`中rootdev=UUID=指向EMMC,但此时`boot_targets=sata mmc1 mmc0`没改,重启会启动哪一个系统?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则