尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CM211-1刷Armbian避坑指南:解决HDMI黑屏与WiFi失效

CM211-1刷Armbian避坑指南:解决HDMI黑屏与WiFi失效 1. 为什么CM211-1刷Armbian值得折腾电视盒子刷Armbian这件事圈子里已经热闹了好几年。CM211-1这款盒子用的是晶晨S905L3方案四核A53架构配1GB或2GB内存8GB eMMC存储自带百兆网口和双频WiFi模块。原厂系统是运营商定制的安卓广告多、限制多、后台偷跑流量基本上除了当个IPTV盒子之外没什么大用。但硬件本身其实不差功耗低、发热小、24小时开机毫无压力拿来跑轻量级服务器再合适不过。我手上这台CM211-1是去年从二手市场淘来的花了不到四十块。当时想的就是刷个Armbian当家庭小服务器用跑跑Docker、挂个下载、做个内网穿透节点。结果一上手就发现这玩意儿坑是真不少。网上教程看着挺多但要么语焉不详要么关键步骤一笔带过照着做十有八九会卡在HDMI黑屏或者WiFi失效这两个问题上。这篇内容就是把我前前后后折腾了三四台CM211-1的经验整理出来重点解决两个最让人头疼的问题刷完Armbian之后HDMI没有输出信号以及板载WiFi搜不到网络。这两个问题本质上都和DTB文件的选择与配置有关但具体怎么选、怎么改、改哪里里面有不少门道。适合已经有一定Linux基础、想拿电视盒子做轻量服务器的朋友参考纯小白也能看懂因为我会把每一步的原理和操作都拆开讲。2. 刷机前的准备工作与核心思路2.1 硬件与工具清单先把需要的东西列清楚免得做到一半发现缺东少西。CM211-1盒子一台确认是S905L3芯片版本不同批次的CM211-1可能用不同WiFi模块后面会细说。USB双公头数据线一根线刷必备用来连接盒子和电脑。电脑一台Windows系统即可用来运行线刷工具。镊子或短接工具CM211-1需要短接主板上的特定触点才能进入线刷模式。U盘一个8GB以上用来做Armbian启动盘。网线一根刷机过程中有线网络比WiFi可靠得多。散热片或小风扇可选但长时间跑服务建议加上。软件方面需要准备晶晨USB烧录工具Amlogic USB Burning Tool、CM211-1对应的线刷固件包、Armbian镜像文件、DTB文件合集、写盘工具balenaEtcher或Rufus。2.2 为什么先线刷再刷Armbian很多教程会告诉你直接写U盘启动就行但CM211-1原厂系统的bootloader有锁直接插U盘大概率进不去Armbian。所以标准流程是先用线刷工具刷入一个解锁的安卓底包这个底包的作用是替换掉原厂的bootloader让它能够从U盘引导。刷完底包之后再从U盘启动Armbian最后把Armbian写入eMMC。这个顺序不能乱。我试过跳过线刷底包直接U盘启动结果盒子反复重启就是进不去系统。也试过刷了底包之后不写eMMC直接U盘跑Armbian能用但性能受U盘读写速度限制而且每次重启都要插着U盘不优雅。2.3 DTB文件为什么是核心关键DTB全称Device Tree Blob中文叫设备树二进制文件。你可以把它理解成一份硬件说明书告诉Linux内核这个板子上有什么硬件、分别接在哪个总线上、地址是多少、怎么初始化。Armbian是一个通用系统它不知道你具体用的是哪个盒子所以需要你提供对应的DTB文件。CM211-1的问题在于它虽然用的是S905L3芯片但不同批次的主板设计有差异尤其是WiFi模块和HDMI输出部分。网上能找到的DTB文件有好几个版本比如meson-gxl-s905l3-cm211.dtb、meson-gxl-s905l2-x96-mini.dtb等等。选错了DTB轻则WiFi不工作重则HDMI直接黑屏甚至系统都起不来。注意DTB文件必须和内核版本匹配。Armbian不同版本的内核差异较大用旧版DTB配新内核可能会出现各种奇怪问题。3. HDMI黑屏的根因分析与实操解决3.1 黑屏的三种典型表现HDMI黑屏不是一种原因造成的根据我的经验至少分三种情况第一种是刷完Armbian之后HDMI完全没有信号输出显示器提示“无信号”。这种情况通常是DTB文件里的显示输出配置和实际硬件不匹配内核根本没有初始化HDMI控制器。第二种是能看到开机log但走到某个阶段就黑屏了系统其实还在运行能ping通只是显示输出中断。这往往是分辨率或刷新率设置超出了显示器的支持范围。第三种是HDMI有输出但花屏、闪烁、颜色异常。这通常和色彩空间或像素格式配置有关。3.2 通过串口或SSH确认系统状态HDMI黑屏的时候第一件事不是急着换DTB而是先确认系统到底有没有起来。最可靠的方法是接串口调试CM211-1主板上预留了UART接口波特率115200。接上串口线之后能看到完整的启动log系统有没有正常启动、卡在哪一步一目了然。如果没有串口线也可以用网线连接盒子在路由器后台看有没有新设备上线。如果能ping通盒子的IP说明系统已经起来了问题只出在显示输出上。这时候可以通过SSH登录进去修改显示相关的配置。3.3 修改uEnv.txt强制指定显示模式确认系统能起来但HDMI没输出之后可以尝试修改启动配置文件。Armbian的启动分区里有一个uEnv.txt文件里面可以指定内核启动参数。# 挂载启动分区 mount /dev/mmcblk0p1 /mnt/boot # 编辑uEnv.txt nano /mnt/boot/uEnv.txt在文件中添加或修改以下参数# 强制指定HDMI输出分辨率为1080p60 videoHDMI-A-1:1920x108060 # 如果显示器较老可以试试降低刷新率 videoHDMI-A-1:1920x108050 # 或者试试720p videoHDMI-A-1:1280x72060保存后重启观察HDMI是否有输出。这个方法的原理是绕过内核的自动检测直接告诉它用什么分辨率和刷新率驱动HDMI。我遇到过一台CM211-1接老显示器自动检测出来是4K分辨率但显示器不支持结果就是黑屏。强制改成1080p之后立马正常。3.4 更换DTB文件的正确姿势如果改uEnv.txt没用那大概率是DTB文件本身的问题。更换DTB的步骤如下# 进入DTB目录 cd /boot/dtb/ # 查看当前使用的DTB ls -la # 备份当前DTB cp meson-gxl-s905l3-cm211.dtb meson-gxl-s905l3-cm211.dtb.bak # 替换为其他版本的DTB cp /path/to/new/dtb/meson-gxl-s905l3-cm211.dtb ./ # 修改uEnv.txt中的DTB路径 nano /boot/uEnv.txt # 找到FDT/dtb/amlogic/xxx.dtb这一行改成新的文件名重启之后观察HDMI输出。这里有个小技巧可以一次性准备多个DTB文件在uEnv.txt里逐个测试每次改完重启看效果。虽然麻烦一点但比盲目猜测高效。3.5 实操心得与避坑要点我在折腾HDMI黑屏的过程中踩过几个坑这里分享一下第一个坑是DTB文件名大小写敏感。Linux系统区分大小写meson-gxl-s905l3-cm211.dtb和Meson-GXL-S905L3-CM211.dtb是两个不同的文件。写uEnv.txt的时候一定要和实际文件名完全一致。第二个坑是uEnv.txt的格式。这个文件对空格和换行很敏感修改的时候不要用Windows的记事本容易引入不可见字符。建议用nano或vi在Linux环境下编辑。第三个坑是HDMI线本身。我有一次折腾了半天以为是DTB问题结果换了一根HDMI线就好了。劣质线材在1080p下可能没问题但Armbian默认输出分辨率可能更高线材带宽不够就黑屏了。提示如果手头有多个显示器建议先用一个确认支持1080p的显示器测试。排除显示器兼容性问题之后再专注调DTB。4. WiFi失效的排查与修复方案4.1 确认WiFi模块型号CM211-1的WiFi模块有好几个版本常见的有RTL8189FTV、RTL8723DS、SSV6051P等。不同模块需要的驱动和固件不一样DTB里的配置也不同。所以第一步是确认你手上这台盒子用的是什么WiFi芯片。方法一拆机看芯片丝印。WiFi模块通常是一个小方块贴在主板上上面印着型号。这是最准确的方法。方法二如果系统能起来通过SSH登录后用命令查看# 查看USB设备有些WiFi模块走USB总线 lsusb # 查看SDIO设备 ls /sys/bus/sdio/devices/ # 查看内核日志中的WiFi相关信息 dmesg | grep -i wifi dmesg | grep -i wlan dmesg | grep -i sdio4.2 驱动与固件的对应关系确认模块型号之后需要确保系统里有对应的驱动和固件。Armbian通常已经内置了大部分常见WiFi驱动但固件文件可能需要手动补充。WiFi模块型号驱动名称固件文件常见问题RTL8189FTVrtl8189fsrtl8189f-fw.bin需要手动编译驱动RTL8723DSrtl8723dsrtl8723d-fw.bin固件缺失导致无法识别SSV6051Pssv6051ssv6051-fw.bin驱动兼容性差RTL8822BSrtl8822bsrtl8822b-fw.bin需要较新内核如果dmesg里看到“firmware not found”或者“failed to load firmware”之类的错误那就是固件缺失。可以从网上找到对应的固件文件放到/lib/firmware/目录下然后重启。4.3 通过DTB配置启用WiFi有些情况下驱动和固件都没问题但WiFi就是不出来这是因为DTB里没有正确配置WiFi模块的电源和时钟。CM211-1的DTB文件里有一段关于SDIO和WiFi的配置如果和实际硬件不匹配WiFi模块就不会被初始化。可以尝试用以下命令检查WiFi模块是否被识别# 查看网络接口列表 ip link show # 如果只有lo和eth0没有wlan0说明WiFi没被识别如果确认是DTB配置问题可以尝试换一个已知支持WiFi的DTB文件。比如有些玩家用X96 Mini的DTBWiFi能正常工作但HDMI可能有问题。这就需要权衡或者手动修改DTB文件。4.4 手动修改DTB启用WiFi的进阶操作如果找不到完美的DTB可以自己动手改。需要用到device-tree-compiler工具# 安装工具 apt install device-tree-compiler # 将DTB反编译为DTS dtc -I dtb -O dts -o cm211.dts meson-gxl-s905l3-cm211.dtb # 编辑DTS文件 nano cm211.dts在DTS文件里找到SDIO和WiFi相关的节点检查以下几个方面sdio节点确认bus-width、max-frequency等参数是否正确。wifi节点确认status是“okay”而不是“disabled”。电源域确认WiFi模块的供电引脚配置正确。时钟确认WiFi模块的时钟源和频率配置正确。修改完成之后重新编译# 编译回DTB dtc -I dts -O dtb -o meson-gxl-s905l3-cm211.dtb cm211.dts # 替换并重启 reboot这个操作有一定门槛建议先备份原始DTB文件。改错了最多就是WiFi不工作不会把系统搞崩。4.5 WiFi失效的常见排查清单现象可能原因排查方法解决方案没有wlan0接口DTB未配置WiFidmesg查看SDIO初始化更换DTB或手动修改有wlan0但搜不到网络固件缺失dmesg查看firmware错误补充固件文件能搜到网络但连不上驱动兼容性问题查看内核版本和驱动版本更换驱动或内核WiFi时断时续电源管理问题查看dmesg中的电源相关日志关闭WiFi省电模式信号极弱天线未连接或DTB配置错误检查天线连接重新插拔天线或改DTB关闭WiFi省电模式的方法# 临时关闭 iwconfig wlan0 power off # 永久关闭在/etc/rc.local中添加 iwconfig wlan0 power off5. 从U盘启动到写入eMMC的完整流程5.1 制作Armbian启动U盘下载Armbian镜像的时候要注意选择正确的版本。CM211-1是Amlogic S905L3芯片属于GXL系列应该选择Armbian的aml-s9xx-box版本。下载下来是一个压缩包解压得到.img文件。用balenaEtcher把img写入U盘。写完之后U盘的第一个分区是FAT格式里面有一个uEnv.txt文件。这时候先不要急着插到盒子上需要先把正确的DTB文件复制到U盘的dtb目录里并修改uEnv.txt指向这个DTB。# 在电脑上操作假设U盘挂载在/mnt/usb cp meson-gxl-s905l3-cm211.dtb /mnt/usb/dtb/amlogic/ nano /mnt/usb/uEnv.txt # 修改FDT/dtb/amlogic/meson-gxl-s905l3-cm211.dtb5.2 短接进入线刷模式CM211-1进入线刷模式需要短接主板上的特定触点。拆开盒子找到主板上的短接点通常标着“GND”和一个测试点。用镊子短接这两个点然后插上USB双公头线连接电脑最后通电。电脑上的Amlogic USB Burning Tool应该能识别到设备。如果识别不到检查以下几点USB线是不是数据线有些线只能充电、短接是否到位、驱动是否安装正确。5.3 线刷底包与U盘启动在烧录工具里加载CM211-1的线刷固件包点击开始。烧录过程大概两三分钟完成后盒子会自动重启。这时候拔掉USB线插上做好的Armbian U盘通电启动。第一次启动会比较慢因为系统要初始化。如果HDMI有输出能看到Armbian的开机log。如果没有输出等几分钟后用网线连接在路由器后台找盒子的IPSSH登录。默认用户名是root密码是1234。第一次登录会要求修改密码和创建普通用户。5.4 写入eMMC的详细步骤U盘跑通之后就可以把系统写入eMMC了。Armbian提供了一个安装脚本# 登录系统后执行 armbian-install脚本会提示选择安装位置选eMMC。然后会问是否保留U盘启动一般选否。安装过程大概五到十分钟取决于eMMC的写入速度。安装完成后关机拔掉U盘重新通电。如果一切正常系统会从eMMC启动HDMI和WiFi都应该正常工作。注意写入eMMC之前一定要确认U盘系统已经调通了HDMI和WiFi。因为写入之后如果发现问题再改DTB就要重新挂载eMMC分区比改U盘麻烦得多。5.5 写入eMMC后的收尾工作系统写入eMMC之后还有几件事要做第一扩展文件系统。Armbian默认可能没有占满整个eMMC需要手动扩展# 查看分区情况 df -h # 扩展根分区 resize2fs /dev/mmcblk0p2第二更新系统apt update apt upgrade -y第三安装常用工具apt install -y docker.io docker-compose htop nano curl wget第四配置静态IP或者DDNS方便远程管理。6. 常见问题速查与独家避坑技巧6.1 刷机后无法启动的排查顺序盒子刷完Armbian之后完全没反应电源灯亮但没有任何输出。按照以下顺序排查确认线刷底包是否成功重新线刷一次看烧录工具是否报错。确认U盘是否制作正确换一个U盘试试有些U盘兼容性不好。确认DTB文件是否存在U盘dtb目录里必须有对应的dtb文件。确认uEnv.txt路径是否正确FDT后面的路径要和实际文件位置一致。尝试不同的USB口有些盒子的USB口供电不足换一个试试。6.2 网络配置的注意事项Armbian默认使用NetworkManager管理网络。如果WiFi和有线同时连接可能会出现路由冲突。建议只保留一种连接方式或者手动设置路由优先级。# 查看网络连接 nmcli connection show # 设置有线连接优先级更高 nmcli connection modify eth0 ipv4.route-metric 100 nmcli connection modify wlan0 ipv4.route-metric 2006.3 散热与长期运行的稳定性CM211-1的S905L3芯片发热不算大但长时间跑Docker容器还是会温热。我实测在室温25度环境下不加散热片连续跑一周芯片表面温度大概在55度左右还算安全。但如果放在密闭空间里建议加一个小散热片或者USB小风扇。另外Armbian默认的CPU调度策略是ondemand可以根据负载自动调频。如果跑的服务对延迟敏感可以改成performance模式# 查看当前调度策略 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # 改成performance echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor6.4 独家避坑技巧汇总技巧一备份原始DTB和uEnv.txt。在修改任何配置之前先把原始文件备份到电脑上。改坏了可以随时恢复不用重新刷机。技巧二用网线而不是WiFi进行初始配置。WiFi在调试阶段不稳定用网线可以避免很多网络问题。等系统稳定了再切WiFi。技巧三准备多个DTB文件轮流测试。把常见的几个DTB都放到U盘里改uEnv.txt重启测试比一次次下载复制快得多。技巧四串口调试线是终极武器。十几块钱的USB转TTL线能让你看到系统启动的完整log排查问题效率提升十倍。技巧五不要追求最新内核。Armbian的新内核可能对老硬件的支持反而不如旧内核。如果某个版本用着稳定就不要随便升级。技巧六eMMC写入前先测试U盘启动。U盘启动调通了再写eMMC否则出问题要重新拆机短接非常麻烦。技巧七记录每次修改的内容。改了什么DTB、改了什么参数、结果如何都记下来。折腾多了容易忘有记录才能快速定位问题。6.5 常见问题速查表问题可能原因快速解决方案HDMI无输出DTB显示配置错误改uEnv.txt指定分辨率或换DTBWiFi搜不到网络固件缺失或DTB配置错误补充固件或换DTB系统启动卡住DTB与硬件不匹配换DTB文件网口不工作网络配置问题检查nmcli连接状态eMMC写入失败分区表问题重新线刷底包再试系统时间不对时区未设置timedatectl set-timezone Asia/ShanghaiSSH连不上防火墙或服务未启动检查sshd状态和防火墙规则Docker无法启动内核模块缺失检查内核是否支持cgroups和overlayfs7. 刷完之后能做什么CM211-1刷上Armbian之后1GB内存的版本跑几个轻量级服务绰绰有余2GB版本就更宽裕了。我目前在这台盒子上跑了以下几个服务Docker容器跑了一个Alist做网盘聚合一个qBittorrent做下载一个Nginx做反向代理。内网穿透用ZeroTier组了个虚拟局域网在外面也能访问家里的服务。文件共享Samba服务把盒子挂载的移动硬盘共享给局域网内的其他设备。定时任务crontab跑一些自动备份和清理脚本。功耗方面实测整机运行功率在3到5瓦之间一个月电费不到两块钱。相比动辄几十瓦的x86小主机CM211-1做轻量级服务性价比极高。不过也要客观说S905L3的性能有限跑个Docker容器、做个文件共享没问题但别指望它能转码4K视频或者跑复杂的数据库。定位清晰它就是一台低功耗的ARM小服务器干自己该干的活。我在实际使用中还发现一个细节Armbian的默认SSH配置允许root登录但为了安全起见建议创建一个普通用户禁用root的SSH登录。具体操作是编辑/etc/ssh/sshd_config把PermitRootLogin改成no然后重启sshd服务。这个习惯在公网环境下尤其重要。最后再分享一个小技巧如果WiFi信号不稳定可以外接一个USB WiFi网卡。Armbian对常见的RTL8811CU、RTL8812AU等USB网卡支持很好插上就能用比板载WiFi稳定得多。而且USB网卡可以选带外置天线的型号信号强度提升明显。
返回列表