ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

S905M2-B盒子刷Armbian:从硬件适配到低功耗服务器实战

S905M2-B盒子刷Armbian:从硬件适配到低功耗服务器实战 1. 从一块闲置盒子说起S905M2-B为什么值得折腾手头攒了好几个运营商退下来的电视盒子拆开一看主控清一色印着Amlogic的标型号五花八门——S905L、S905L3、S905M2-B后缀差一个字母命运就完全不同。有人把这类盒子当电子垃圾论斤卖也有人专门盯着S905M2-B这个型号收原因很简单它在Armbian社区里的适配成熟度比同代不少兄弟型号要友好得多。先把概念理清楚。晶晨AmlogicS905M2-B属于S905家族里的一个细分型号四核Cortex-A53架构主频通常在1.5GHz上下集成Mali-450级别的GPU定位是入门级4K解码SoC。它大量出现在2016到2018年之间的运营商定制盒子里比如某些省市的IPTV终端。这类芯片本身是给Android定制的官方从不提供Linux主线支持所以想让它跑Armbian本质上是一场硬件层面的逆向适配——社区开发者靠逆向、靠试错、靠一堆补丁硬生生把主线内核和uboot移植上去。那为什么偏偏是S905M2-B被盯上我自己的观察是三个因素叠加一是存量巨大运营商集采的盒子保有量高二手市场几十块就能收到二是硬件规格相对规整DDR3内存、eMMC存储、千兆或百兆网口、USB2.0没有太多奇奇怪怪的定制外设降低了适配难度三是社区有人啃过Armbian论坛和GitHub上有针对性的dtb文件和uboot分支后来者能站在前人的肩膀上。这篇文章适合谁看如果你手里正好有一台S905M2-B的盒子想把它改造成低功耗的Linux小服务器——跑个下载机、做个轻量NAS、挂个内网服务——那这篇内容能帮你少走弯路。如果你只是对芯片适配这件事本身好奇想知道一个封闭的Android SoC是怎么被撬开跑Linux的那也能从里面看到硬件破解的完整思路。我不打算写成一份冷冰冰的刷机说明书而是把为什么这么做、坑在哪里、怎么判断自己有没有走错路讲透。需要提前说明的是S905M2-B的适配资料散落在各个论坛帖、GitHub issue和零散的commit里没有一份官方权威文档。下面所有内容一部分来自我自己反复刷机踩出来的经验一部分是基于社区常见实践的合理归纳。具体到某一台盒子硬件版本、内存颗粒、eMMC型号都可能不同务必以实测为准。2. 拆开看门道S905M2-B的硬件底子与适配难点2.1 这颗SoC到底给了什么资源要理解适配的难度得先知道S905M2-B手里有什么牌。它基于ARM Cortex-A53四核属于ARMv8-A架构支持64位指令集但很多盒子的Android固件是32位的这给后来跑64位Armbian埋了个伏笔。GPU是Mali-450 MP主频不高跑桌面环境会卡但做无头服务器完全够用。内存控制器支持DDR3/DDR3L/LPDDR3实际盒子上常见1GB或2GB DDR3频率多在912MHz到1066MHz之间。存储方面盒子通常配8GB eMMC走的是eMMC 5.0接口速度一般但比SD卡稳。网络部分差异最大有的盒子是百兆网口RTL8201或类似PHY有的是千兆RTL8211还有的干脆只有WiFi没有网口。这一点直接决定了你刷完Armbian后网络能不能用因为不同PHY芯片需要不同的dtb配置。USB方面一般是两个USB2.0口其中一个可能是OTG口这个OTG口在刷机阶段极其关键——它是进入USB Burning模式的入口。视频输出是HDMI 2.0支持4K解码但Linux下驱动支持有限别指望跑图形界面流畅。2.2 适配难在哪三个绕不开的坎第一个坎是uboot。晶晨的SoC用的是自家定制的ubootAndroid固件里的uboot是闭源的不提供Linux启动所需的完整环境。社区的做法是替换成开源的uboot分支比如基于mainline uboot的amlogic分支但这个uboot需要针对具体板子的DDR时序、eMMC参数做适配。DDR时序配错了板子直接起不来表现为上电无输出或者卡在串口某一行。第二个坎是dtb设备树。Linux内核靠设备树来识别硬件S905M2-B没有官方dtb社区里能用的dtb往往是从相近型号比如S905X、S905W改过来的。改dtb的核心工作是把CPU频率、内存大小、eMMC节点、网口PHY、USB控制器、GPIO定义这些参数对齐到实际硬件。网口PHY型号对不上网口就不通eMMC节点写错系统就找不到存储。第三个坎是启动链。Android盒子的启动流程是BootROM → 预loader → uboot → kernel → Android。刷Armbian要替换掉中间好几环同时保留BootROM能识别的引导头。晶晨的BootROM只认特定格式的引导镜像带Amlogic签名的BL2/BL3所以刷机工具比如USB Burning Tool和镜像打包方式都有讲究。2.3 为什么说这是硬件破解而不是软件安装很多人第一次接触会觉得不就是刷个系统吗跟手机刷机有什么区别区别大了。手机刷机是在厂商提供的框架内换系统bootloader、分区表、驱动都是现成的。而S905M2-B跑Armbian是在一个从没打算让你跑Linux的封闭平台上从零搭建启动环境。你得自己解决uboot、自己配dtb、自己处理分区甚至要飞线接串口看启动日志。这个过程更接近嵌入式开发的板级移植而不是普通用户理解的刷机。我个人的经验是串口是必备的。没有串口你只能靠HDMI输出和网口灯来判断启动状态效率极低。接上UART通常是板子上的TX/RX/GND三个焊点波特率115200你能看到uboot的每一行输出卡在哪一步一目了然。这个投入非常值得。3. 动手前的准备工具、镜像与风险清单3.1 硬件工具别省刷S905M2-B工具准备直接决定成功率。下面这张表是我实际用下来觉得必要的清单工具作用备注USB双公头线连接盒子OTG口与电脑进入刷机模式质量差的线会导致刷机中断UART转USB模块接串口看启动日志CH340或CP2102都行3.3V电平镊子或短接线短接eMMC或特定焊点进入刷机模式部分盒子需要短接才能进USB Burning拆机工具打开盒子外壳塑料撬棒十字螺丝刀备用电源盒子供电5V/2A供电不足会导致刷机失败USB双公头线这个坑我踩过。第一次用了一根便宜线刷到一半电脑提示设备断开盒子变砖只能重新短接进模式。后来换了根带屏蔽的粗线一次成功。刷机过程中供电和USB连接稳定性比什么都重要。3.2 软件与镜像来源软件侧需要三样东西晶晨USB Burning ToolWindows下的刷机工具负责把镜像写进eMMC、Armbian镜像针对amlogic的社区构建版本、dtb和uboot文件通常打包在镜像里或单独提供。Armbian镜像建议从Armbian官方或社区维护的amlogic分支获取注意区分meson-gxbb、meson-gxl、meson-gxm这些内核平台代号——S905M2-B属于GXL平台S905系列选错平台镜像直接不启动。镜像一般提供.img格式可以直接被USB Burning Tool识别也有.img.xz压缩版需要先解压。dtb文件是重头戏。社区里常见的做法是用meson-gxl-s905x-*.dtb作为基础然后根据自己盒子的实际硬件改。如果你运气好能找到和你盒子型号完全一致的dtb那省事很多。找不到就得自己改改dtb需要dtc工具把dtb反编译成dts改完再编译回去。3.3 风险清单变砖了怎么办必须说清楚风险。刷S905M2-B有变砖的可能但晶晨的BootROM是只读的理论上永远能通过短接进入USB Burning模式救回来这是它比很多其他平台友好的地方。真正救不回来的情况极少通常是硬件损坏比如短接时手抖烧了元件。常见风险和对策刷错镜像导致不启动重新短接进USB Burning模式刷回正确的镜像或原厂固件。uboot刷坏同样靠USB Burning模式重刷BootROM不依赖uboot。eMMC被写坏极端情况下需要短接eMMC的CLK和GND强制进入模式或者用SD卡启动绕过eMMC。供电不足刷机中断换电源重刷。提示动手前先用USB Burning Tool把原厂固件完整备份一份如果工具支持读取或者至少记下原厂固件版本方便回退。4. 刷机全流程从短接到第一次点亮4.1 进入USB Burning模式的两种姿势晶晨盒子进刷机模式有两种常见方式。第一种是软件触发盒子正常开机进Android用ADB执行reboot update命令盒子会重启进入刷机模式。这种方式最省事但前提是Android还能正常启动。第二种是硬件短接拆开盒子找到eMMC芯片或者板子上标注的短接点用镊子短接的同时上电BootROM会检测到强制进入USB Burning模式。不同盒子的短接点位置不同有的在eMMC的特定引脚有的有专门的测试点。短接的时机很关键——先短接再插USB线最后上电顺序错了进不去。我自己的盒子是软件触发进不去的Android已经刷坏只能短接。第一次短接找不准点试了七八次才成功。经验是用万用表确认短接点别瞎试短错引脚可能损坏芯片。4.2 USB Burning Tool的正确用法打开USB Burning Tool导入Armbian镜像.img文件工具会自动解析分区。关键设置有几个擦除flash勾选擦除所有还是擦除bootloader取决于你是否要保留原uboot。刷Armbian一般选擦除全部。擦除bootloader如果镜像里自带uboot勾选这个如果打算单独刷uboot先不勾。覆盖密钥一般不需要勾。点开始后工具会等待设备连接。此时给盒子上电已短接工具识别到设备后开始写入。写入过程中绝对不能断电或拔线进度条走完提示烧录成功才算完。刷完后拔掉USB线接HDMI和网线上电。如果一切正常盒子会从eMMC启动Armbian串口能看到内核日志滚动网口灯亮起路由器里能看到新设备。4.3 第一次启动后的必做配置Armbian首次启动会要求设置root密码、创建用户、选择时区。这些跟着提示走就行。之后有几件事必须做第一确认网络。ip a看网口有没有拿到IP。如果网口不通多半是dtb里PHY配置不对需要换dtb或改dts。第二扩展根分区。Armbian镜像默认分区可能没占满eMMC用armbian-resize-filesystem或resize2fs把根分区扩到最大。第三更新系统。apt update apt upgrade把内核和软件包更新到最新。注意amlogic平台的内核更新有时会覆盖dtb更新前备份/boot/dtb。第四装温度监控。S905M2-B没有主动散热长时间跑负载会热装lm-sensors或者直接读/sys/class/thermal/thermal_zone0/temp监控温度。我实测满载能到70度以上建议加个小散热片。5. 适配深水区dtb、uboot与网口的那些坑5.1 dtb改不对网口就是不通网口不通是S905M2-B刷Armbian后最常见的问题。根因几乎都在dtb的以太网节点。GXL平台的以太网控制器是内置的但外接PHY芯片型号各异。dtb里需要正确声明PHY的地址、复位GPIO、时钟。排查思路串口启动日志里搜eth0或ethernet看内核有没有识别到PHY。如果提示no PHY found或者PHY not ready基本就是dtb配置问题。解决办法是找到你盒子实际用的PHY型号看板子上的芯片丝印常见RTL8211、RTL8201然后在dts里改phy-mode和phy-handle。我遇到过一台盒子dtb用的是千兆PHY配置但实际板子是百兆PHY结果网口死活不通。改成百兆配置后立刻正常。所以拆机看PHY丝印这一步不能省。5.2 uboot的DDR时序起不来的元凶如果刷完uboot后盒子完全没反应串口也没输出八成是DDR时序不对。DDR时序参数时序表、驱动强度、ODT设置是板级相关的不同内存颗粒需要不同参数。社区uboot一般内置了几套常见配置但你的盒子可能不在其中。解决路径有两条一是找到和你盒子内存颗粒一致的uboot配置看内存颗粒丝印比如三星、海力士、镁光二是自己调时序参数。后者难度高需要参考颗粒的datasheet一般玩家不建议碰。更实际的做法是换一个已知能用的uboot版本或者用SD卡启动绕过eMMC里的uboot。5.3 从SD卡启动降低变砖风险的技巧一个很实用的技巧是先用SD卡跑Armbian确认硬件都能驱动起来再决定要不要刷进eMMC。晶晨的BootROM支持从SD卡启动前提是uboot支持把Armbian镜像写到SD卡插上盒子短接或按特定按键进入SD启动模式。SD卡启动的好处是不碰eMMC刷坏了拔卡就行风险极低。确认网口、USB、温度都正常后再用armbian-install把系统装进eMMC。这个流程我强烈推荐给第一次折腾的人。6. 刷完之后这台小机器能干什么6.1 低功耗内网服务的几个实用方向S905M2-B跑Armbian后功耗大概3到5瓦24小时开机一年电费可以忽略。适合干这些活轻量下载机装transmission或aria2挂PT或者下大文件。内网文件共享samba或nfs把USB口接个硬盘当简易NAS。注意USB2.0速度有限别指望跑满千兆。内网穿透辅助节点装zerotier或tailscale把内网服务暴露到自己的虚拟局域网里方便远程访问。这类工具在ARM64上都有现成包。DNS和广告过滤adguardhome或pihole给全家网络做DNS过滤。轻量容器宿主装docker跑几个小容器比如nginx、watchtower。内存1GB的话别跑太多。6.2 性能边界在哪别对它期望过高得实话实说S905M2-B的性能天花板不高。四核A53在ARM64里属于入门水平单核性能大概相当于树莓派3的水平。跑无头服务没问题跑桌面环境会卡。USB2.0接口限制了外接存储速度eMMC写入速度也就几十MB/s。把它定位成低功耗常驻小服务器是合理的想当主力NAS或者跑重负载服务不现实。温度也是限制因素。没有风扇的情况下持续满载编译或者转码温度会飙到80度以上触发降频。加个散热片或者小风扇能明显改善。6.3 系统维护的几个习惯跑Armbian的盒子建议养成几个习惯定期apt upgrade但升级前备份/boot用armbian-config管理网络和时区开ssh密钥登录关掉密码登录装log2ram减少eMMC写入延长寿命。eMMC的写入寿命有限频繁写日志会加速磨损log2ram把日志放内存里定期同步能明显延长eMMC寿命。7. 一些踩坑之后的个人体会折腾S905M2-B这段时间最大的感受是这类适配工作的成败八成取决于前期信息收集两成才是动手。找到对的dtb、对的uboot、对的镜像刷机就是十分钟的事找不到可能折腾一星期还在原地打转。所以我的建议是动手前先花时间在社区里搜你的盒子型号看有没有人成功过用的什么dtb、什么uboot版本直接抄作业比自己摸索快得多。另一个体会是串口真的不能省。我一开始图省事不接串口靠HDMI和网口灯判断结果盒子不启动完全不知道卡在哪。接了串口之后uboot输出、内核日志一目了然排查效率提升十倍不止。几十块钱的UART模块是这类折腾里性价比最高的投入。还有一点别怕变砖。晶晨的BootROM机制决定了它很难真正刷死短接进USB Burning模式基本都能救回来。心态放平多试几次大部分问题都能解决。真正需要谨慎的是短接操作本身别短错引脚烧硬件。最后说个细节不同批次的S905M2-B盒子哪怕型号一样内部硬件也可能有差异。别人能用的dtb你未必能用。遇到问题先怀疑硬件差异再怀疑操作。这个思路能帮你少走很多冤枉路。
返回列表