news 2026/9/24 11:47:05

魔百盒M401A刷Armbian安装Home Assistant Supervised全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
魔百盒M401A刷Armbian安装Home Assistant Supervised全攻略

1. 为什么偏偏是魔百盒M401A

1.1 从吃灰盒子到家庭服务器

家里有运营商宽带的朋友,大概率都见过这种场景:装宽带时送了一个电视盒子,用了一两年之后,运营商又打电话说可以免费升级,于是旧盒子就被拔下来扔进抽屉,再也没拿出来过。魔百盒M401A就是这类设备里非常典型的一款——晶晨S905L3A/S905L3A-B主控,2GB内存,8GB或16GB eMMC存储,带千兆网口(部分批次是百兆,这个后面会专门讲怎么分辨),支持双频WiFi和蓝牙。这个配置放在电视盒子领域属于入门偏上,但放在“常年通电、低功耗、跑轻量服务”的场景里,它其实相当能打。

我手头这台M401A是2021年前后办的宽带套餐里配的,型号印在底部标签上,S905L3A-B,2G+8G版本。闲置了两年多,直到我开始认真折腾智能家居,才发现这东西的价值:功耗低(实测待机2W出头,满载不超过5W)、被动散热无风扇(放卧室也不吵)、原生带网口(比WiFi稳定太多)、价格几乎为零(二手市场也就三四十块)。用它来跑Home Assistant,比买树莓派4B(现在价格依然不便宜)或者N100小主机(动辄六七百)划算得多。

1.2 为什么选Armbian而不是安卓

M401A出厂是安卓系统,理论上也能装安卓版的Home Assistant,但我不推荐。原因有三点:第一,安卓系统后台进程多,内存占用高,2GB内存跑完系统本身就没剩多少了;第二,安卓的电源管理策略是为“遥控器开关机”设计的,长时间运行容易因为内存回收把HA进程杀掉;第三,Armbian是完整的Debian/Ubuntu环境,Docker、Python、各种命令行工具都能直接用,Home Assistant Supervised的官方安装脚本就是为Debian系设计的,在Armbian上跑最顺。

Armbian对S905L3A系列的支持已经比较成熟了,社区里有专门针对M401A的dtb文件,网口、WiFi、蓝牙、USB都能正常驱动。刷上Armbian之后,这台盒子就变成了一台完整的Linux小主机,你想跑什么就跑什么。

1.3 Home Assistant Supervised到底值不值得装

Home Assistant有四种安装方式:OS、Supervised、Container、Core。很多人一上来就推荐HAOS,说“官方支持、一键刷机、最省心”。这话没错,但HAOS对硬件有硬性要求——至少2GB内存和32GB存储,而且它把整个系统都接管了,你没法在同一个系统里跑其他服务。M401A的8GB eMMC装HAOS会很紧张,系统更新几次就满了。

Supervised模式的好处在于:它跑在你自己装的Debian/Armbian系统上,HA核心、Supervisor、各种Add-on都能用,同时你还能在同一个系统里跑其他Docker容器(比如Mosquitto、Node-RED、zigbee2mqtt)。代价是安装过程比HAOS麻烦一些,需要手动装Docker、装os-agent、跑官方脚本,而且系统更新时要注意别把Supervised的环境搞坏。但我觉得这个代价是值得的,尤其是当你只有一台设备、想让它物尽其用的时候。

注意:Home Assistant官方对Supervised的支持态度是“支持但不推荐给新手”,因为Supervised依赖宿主系统的Docker和NetworkManager配置,系统层面出问题会直接影响HA。如果你完全不想碰命令行,HAOS是更稳妥的选择;如果你愿意花一个下午折腾,Supervised能给你更大的自由度。

2. 刷机前的准备工作

2.1 确认你的M401A具体型号和硬件版本

这一步非常关键,因为M401A有好几个批次,主控和网口配置不一样。我见过的情况包括:S905L3A(无-B后缀)、S905L3A-B、S905L3B,网口有千兆的也有百兆的,WiFi芯片有RTL8822CS也有其他型号。刷错固件轻则网口不工作,重则变砖。

确认方法很简单:把盒子拆开,看主板上的丝印。主控芯片上会印着“S905L3A”或“S905L3A-B”,网口变压器旁边如果有“G”字样通常是千兆,没有就是百兆。WiFi芯片在主板背面或者正面角落,常见的是RTL8822CS(支持双频+蓝牙)。记下这些信息,后面选dtb和固件的时候要用。

另外,M401A的eMMC容量有8G和16G两个版本,8G版本装完Armbian和Docker之后剩余空间会比较紧张,建议外接一个U盘或者移动硬盘来存Docker数据和HA的配置备份。

2.2 需要的工具和软件清单

我把整个流程需要的东西列一下,你可以提前准备好:

  • USB转TTL串口线(CH340G或CP2102芯片的都可以,十几块钱):用于查看启动日志和进入U-Boot,刷机过程中如果出问题,串口是唯一的救命稻草。
  • 双公头USB线:用于线刷救砖,平时不一定用得上,但建议备一根。
  • 8GB以上U盘:用于制作Armbian启动盘,建议用USB 2.0的,3.0的U盘在部分盒子上识别有问题。
  • 网线:连接盒子和路由器,刷机后通过SSH访问。
  • 电脑:Windows或Linux都行,Windows下用balenaEtcher写盘,Linux下用dd命令。
  • 晶晨刷机工具(Amlogic USB Burning Tool):只在需要线刷救砖时使用,版本建议用2.2.0或2.1.6。
  • Armbian镜像:推荐使用社区维护的armbianfors905l3a分支,具体下载地址在Armbian论坛的“Amlogic”板块里找,搜“M401A”或“S905L3A”就能找到对应的镜像和dtb。
  • dtb文件:M401A对应的dtb通常是meson-g12a-s905l3a-m401a.dtb或类似命名,具体以你下载的镜像包里附带的为准。

2.3 制作Armbian启动U盘

下载好Armbian镜像(通常是.img.xz格式)之后,用balenaEtcher写入U盘。写完之后,U盘会被分成两个分区:一个是FAT32的boot分区,一个是ext4的rootfs分区。在Windows下你只能看到boot分区,这是正常的。

接下来要做两件事:第一,把下载好的dtb文件复制到boot分区的dtb目录下,覆盖或新增;第二,编辑boot分区根目录下的uEnv.txtarmbianEnv.txt(不同版本文件名不一样),把fdtfile指向你刚才放进去的dtb文件。比如:

fdtfile=amlogic/meson-g12a-s905l3a-m401a.dtb

有些镜像版本会自动识别,但M401A不一定在自动识别列表里,手动指定最保险。

实操心得:如果你不确定dtb文件名,可以在boot分区的dtb/amlogic目录下找找有没有包含“m401”或“s905l3a”的文件。如果没有,可以去Armbian论坛的对应帖子下载,或者从其他S905L3A设备的镜像里提取。

3. 从安卓到Armbian的完整刷机流程

3.1 进入U-Boot并设置从U盘启动

M401A默认从eMMC启动安卓,要让它从U盘启动Armbian,需要进入U-Boot命令行。方法有两种:一种是按住复位键(AV孔里面那个按钮)再通电,另一种是通过TTL串口在启动时按回车打断自动启动。

我推荐用TTL串口,因为你能看到完整的启动日志,出问题的时候知道卡在哪一步。接线方式:盒子主板上有三个焊盘,分别是GND、TX、RX,用杜邦线连接到USB转TTL模块的对应引脚(GND接GND,TX接RX,RX接TX)。然后在电脑上打开串口终端(Windows下用PuTTY或MobaXterm,Linux下用minicom或screen),波特率115200。

通电后,串口会输出大量启动日志,在出现“Hit any key to stop autoboot”的时候快速按回车,就能进入U-Boot命令行。然后输入:

setenv bootfromusb 1 usb start fatload usb 0:1 0x01000000 uImage bootm 0x01000000

如果一切正常,系统会从U盘启动Armbian。第一次启动会比较慢,因为要初始化各种服务,耐心等两三分钟。

3.2 首次启动后的初始化配置

Armbian首次启动会要求你设置root密码、创建普通用户、选择时区和语言。这些按提示操作就行。有一点要注意:不要跳过创建普通用户这一步,Home Assistant Supervised的安装脚本要求有一个非root用户,并且该用户要有sudo权限。

启动完成后,用ip addr查看网口是否获取到了IP地址。如果网口没起来,大概率是dtb不对,需要换一个dtb再试。如果WiFi能用但网口不行,也可以先用WiFi顶着,但长期运行还是建议用网口。

确认网络正常后,先更新系统:

sudo apt update && sudo apt upgrade -y

然后安装一些基础工具:

sudo apt install -y curl wget git vim htop net-tools

3.3 把系统写入eMMC

U盘启动只是临时的,每次重启都要插着U盘太麻烦。Armbian提供了一个armbian-install脚本,可以把当前系统写入eMMC。运行:

sudo armbian-install

脚本会问你几个问题:选择要安装的设备(选eMMC)、是否格式化、是否保留U盘启动等。按提示操作,写入过程大概需要五到十分钟。写完之后关机,拔掉U盘,再通电,系统就会从eMMC启动了。

注意:写入eMMC之前,建议先用dd命令备份一下原安卓系统的boot分区,万一以后想刷回安卓还能用。备份命令:sudo dd if=/dev/mmcblk0boot0 of=~/boot0_backup.img bs=1M。不过说实话,刷了Armbian之后基本不会想回去了。

4. Home Assistant Supervised安装实操

4.1 安装Docker和必要依赖

Supervised模式依赖Docker和NetworkManager。Armbian默认可能没装NetworkManager,需要手动装:

sudo apt install -y network-manager sudo systemctl enable NetworkManager sudo systemctl start NetworkManager

然后安装Docker。官方推荐用Docker的官方脚本安装,但国内网络环境可能不太顺畅,可以用阿里云的镜像源:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

装完之后,把当前用户加入docker组,这样不用sudo也能跑docker命令:

sudo usermod -aG docker $USER

然后退出重新登录,或者执行newgrp docker让组权限生效。

4.2 安装os-agent

os-agent是Home Assistant Supervisor用来和宿主系统通信的组件,必须安装。去Home Assistant的GitHub releases页面下载对应架构的os-agent包。M401A是aarch64架构,下载os-agent_linux_aarch64.deb

wget https://github.com/home-assistant/os-agent/releases/download/1.6.0/os-agent_1.6.0_linux_aarch64.deb sudo dpkg -i os-agent_1.6.0_linux_aarch64.deb

安装完成后,验证一下:

gdbus introspect --system --dest io.hass.os --object-path /io/hass/os

如果能看到一堆接口信息,说明os-agent正常工作。

4.3 运行官方安装脚本

Home Assistant提供了一个安装脚本,会自动检测系统环境、安装Supervisor、拉取HA核心镜像。脚本地址在GitHub上,直接运行:

wget https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb sudo dpkg -i homeassistant-supervised.deb

安装过程中会问你设备类型,选qemuarm-64(因为M401A是aarch64架构)。脚本会自动拉取Docker镜像,这个过程取决于网络速度,可能需要十几分钟到半小时。

安装完成后,Supervisor会自动启动。你可以用以下命令查看状态:

sudo systemctl status hassio-supervisor

如果显示active (running),就说明安装成功了。然后在浏览器里访问http://盒子的IP:8123,就能看到Home Assistant的初始化界面。

4.4 首次配置和基础设置

第一次访问HA,会要求你创建管理员账号、设置家庭名称和位置。这些按提示操作就行。进入HA之后,建议先做几件事:

第一,在“设置 > 系统 > 存储”里检查一下可用空间。8G eMMC装完Supervised之后可能只剩2-3G,如果空间紧张,建议把Docker的数据目录迁移到外接U盘或移动硬盘。

第二,在“设置 > 加载项”里安装常用的Add-on,比如Mosquitto broker(MQTT)、File editor(文件编辑)、Terminal & SSH(终端)。这些Add-on在Supervised模式下都能正常使用。

第三,配置自动备份。HA的备份功能可以把配置、Add-on数据、数据库打包成一个tar文件,建议定期备份到外接存储或网络位置。

实操心得:Supervised模式下,HA的配置目录在/usr/share/hassio/homeassistant,Docker的数据在/usr/share/hassio下。如果你想迁移Docker数据目录,可以修改/etc/docker/daemon.json,把>sudo homeassistant-supervised-installer --check

根据输出提示补齐缺失的依赖。另外,Armbian的某些版本可能被脚本识别为“不支持的系统”,这时候可以修改脚本里的检测逻辑,或者手动设置/etc/os-release里的VERSION_CODENAMEbookwormbullseye

5.3 内存不足导致HA频繁重启

2GB内存跑Supervised确实有点紧张,尤其是你装了几个Add-on之后。我实测下来,HA核心+Supervisor+Mosquitto+zigbee2mqtt,内存占用大概在1.2-1.5G之间,如果再加Node-RED或者ESPHome,就容易触发OOM(内存不足)导致进程被杀。

解决办法有几个:第一,关掉不用的Add-on;第二,在HA的配置里限制数据库记录条数(recorder组件的purge_keep_days设为7天以内);第三,加一个swap分区。Armbian默认可能没有swap,可以手动创建一个:

sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

swap放在eMMC上会增加写入量,但总比OOM强。如果你外接了U盘或移动硬盘,把swap放在外接存储上更好。

5.4 系统更新后Supervised失效

Armbian的系统更新(apt upgrade)有时会升级内核或Docker,导致Supervised的某些组件不兼容。我踩过的坑是:某次内核升级后,os-agent的gdbus接口变了,Supervisor启动时报“Unable to connect to os-agent”。解决办法是重新安装os-agent,或者回滚内核版本。

为了避免这个问题,建议在/etc/apt/apt.conf.d/下创建一个配置文件,把关键包hold住:

Package: docker-ce linux-image-* linux-dtb-* Pin: version * Pin-Priority: -1

这样apt upgrade就不会动这些包了。需要升级的时候再手动解除hold。

5.5 常见问题速查表

问题现象可能原因解决方法
网口不亮/无法获取IPdtb不对或MAC未设置换dtb,U-Boot里手动设MAC
系统启动卡在U-BootU盘识别失败换USB 2.0 U盘,重新写盘
Supervised安装报错依赖缺失或系统不识别装NetworkManager、os-agent,改os-release
HA频繁重启内存不足关Add-on、限制recorder、加swap
系统更新后HA挂了内核/Docker版本冲突重装os-agent,hold关键包
eMMC空间不足8G版本容量小迁移Docker数据到外接存储
WiFi不能用驱动缺失换dtb,或外接USB WiFi网卡
蓝牙不能用固件缺失安装bluez-firmware和对应固件

6. 长期运行的经验和优化建议

6.1 散热和供电

M401A的被动散热在冬天没问题,夏天室温超过30度的时候,主控温度会到60度以上。虽然S905L3A的耐温上限是85度,但长期高温会加速eMMC老化。我的做法是在盒子底部贴几个橡胶脚垫,把它垫高一点,增加空气流通。如果温度还是高,可以加一个小USB风扇对着吹,或者换一个金属外壳。

供电方面,M401A原装电源是5V/2A,带一个盒子绰绰有余。但如果你外接了移动硬盘,建议换5V/3A的电源,否则硬盘启动时可能因为电流不足而掉盘。

6.2 数据备份策略

HA的配置和数据库都在eMMC上,eMMC的寿命有限,而且一旦损坏数据很难恢复。我的备份策略是:每周自动备份到外接U盘,每月手动备份一份到NAS。HA自带的备份功能可以设置自动备份,在“设置 > 系统 > 备份”里配置。

另外,Docker的卷数据(比如zigbee2mqtt的数据库、Mosquitto的持久化消息)也要备份。这些数据在/usr/share/hassio下,可以用rsync定期同步到外接存储。

6.3 远程访问方案

HA默认只能在局域网访问,如果你想在外面也能控制家里的设备,有几种方案。最简单的是用HA Cloud(Nabu Casa),每月几美元,配置最简单。如果不想花钱,可以用DuckDNS+Let's Encrypt做HTTPS反向代理,或者用ZeroTier/Tailscale组建虚拟局域网。这几种方案各有优劣,DuckDNS需要公网IP,ZeroTier/Tailscale不需要但需要额外装客户端。

注意:无论用哪种远程访问方案,都建议开启HA的双因素认证(2FA),并且不要把HA的8123端口直接暴露在公网上。我见过太多因为端口暴露被扫到、然后被暴力破解的案例。

6.4 后续扩展方向

M401A跑HA只是起点,这台小盒子还能做很多事。比如:装AdGuard Home做全网广告过滤;装Nginx做反向代理;装Node-RED做复杂的自动化流程;装ESPHome编译固件;甚至装一个轻量级的NAS(比如OpenMediaVault)做文件共享。只要内存和存储够用,它就是一个全能的小型家庭服务器。

我目前的配置是:HA Supervised + Mosquitto + zigbee2mqtt + Node-RED + AdGuard Home,内存占用稳定在1.6G左右,加了2G swap之后没有出现过OOM。eMMC只用来跑系统,Docker数据和HA配置都放在外接的64G U盘上,读写速度虽然不如eMMC,但胜在容量大、可更换。

最后分享一个小技巧:如果你觉得M401A的8G eMMC实在不够用,可以把整个系统迁移到外接SSD上。方法是用armbian-install把系统写到SSD,然后在U-Boot里设置从USB启动。SSD的读写速度和寿命都比eMMC好得多,而且容量随便选。我试过用一块128G的SATA SSD加USB转接盒,系统跑起来比eMMC还流畅。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 11:46:08

消防安防一体化:执行器智能化联动实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 11:44:34

GitHub热榜全解析:从趋势追踪到高效使用与自动化采集

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 11:44:25

设备互联互通与接口芯片设计:从协议转换到SerDes物理层实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 11:42:30

LAN9252从站开发:SSC工具生成EtherCAT XML避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 11:42:06

车载电机驱动板传导发射超标定位与滤波优化实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 11:41:50

工单批量处理Agent推荐:电信与物流工单自动化

电信与物流的工单场景有几个共同特征:单量大、类型重复度高、跨系统操作多、时效与合规要求强。传统做法靠人工在多个业务系统间切换、复制粘贴、逐条审核,既慢又容易出错。 选型时可重点看五个维度:维度关键问题跨系统能力有API的系统能否直…

作者头像 李华