CM311/M401A 盒子的折腾笔记
经不起S905盒子50块的诱惑,上周购入,折腾了大半个礼拜,踩了无数的坑,刷机几十次,整个人都不好了。如果你也已经买入,和我有同样的痛苦,欢迎来看看这篇踩坑日记
还没买的同学请先做好心理准备,大概率是会变砖的,哪怕你按着教程一步步做没有做错,也有可能会在刷入 emmc 阶段,或者设置网络阶段,莫名其妙的网卡挂掉,或者引导挂掉,然后就要从头开始刷机了。
救砖篇
晶晨线刷软件和刷机教程可以在网上搜,挺多的,这里好像不方便提供外部链接,具体我就不讲了,我就补充点教程里可能会遗漏的小细节
如何进入刷机模式:
1. 触点。不同板子的触点不同,我的主板和网上的图就不一致,但是我试了一下,图中同样的触点(4R32)是可以进入刷机模式的。先打开刷机软件,一头连上电脑,一只手先用镊子按住两个触点短接,另一只手把数据线的另一头插入盒子。
2. 复位键。有的主板背面有颗复位键,也可以试试,但是刷过机之后可能就失效了,需要用触点了。可以两种都是一下。
3. PDD 买一个晶晨免拆神器,8块钱一个,直接插在 HDMI 接口上就可以。(我没试过)
注意事项
1.刷入 Armbian 之后启动黑屏
网友们反馈:需要安装图形界面(xorg,kodi,xfce都行)或是在开机之后再插入 HDMI 线。据说是 5.15.61 内核的 bug,可以换 5.15.60 内核,或者换 5.10.x 也行。
2.盒子获取了两个 IP 地址
有两种方式:
第一种,执行以下命令关闭 NetworkManager 服务(一次就好),重启机器。
systemctl disable NetworkManager.service
这种方式的好处是比较方便,后续想去 "/etc/network/interfaces" 做任何配置的话,网上资料挺多。
缺点是获取不到公网 IPv6 地址了。
第二种,注释掉 "/etc/network/interfaces" 中关于 eth0 的所有配置,保留 NetworkManager 服务,重启机器。
这种方式的缺点(不,是我的缺点)是,后续配置网络需要用 nmcli 这个命令行工具操作,可能很多同学对他会比较陌生。
3.开机后概率性获取不到 IP 地址
这是一个非常玄乎的问题,当我想要复现它的时候,重启了十几次都没有发生,但是我感觉在做任何网卡设置有关的操作时(比如修改网卡配置,设置 mac 地址,添加网桥,或者 docker 新增 macvlan 网络,等等等等),都有概率当场网卡挂掉,也有可能是重启之后才挂掉。
具体现象是,启动日志在这步会停留很久直到超时:
A start job is running for Raise network interfaces (xxx /1min 43s)
然后执行 ifconfig 会发现 eth0 已经启动,但是没有分配到 IP 地址。尝试手工分配ip和设置路由表也无法正常访问网络。
有人说升级 5.15 内核可解,也有的说问题依旧。可能和 uboot 或者内核有关系,具体原因不清楚了,涉及到了我的知识盲区
经过本人复现和验证,这个问题算是被解决(绕过)了。在启动脚本 "/etc/rc.local" 中加入以下代码:
if ip addr show eth0 | grep "inet " > /dev/null 2>&1 ; then
echo "eth0: Get ip address success."
else
echo "eth0: Get ip address failed, retry..."
ifconfig eth0 down && ifconfig eth0 up
fi
意思是,当启动完成之后,eth0 网卡如果没有分配到 IP 地址,就执行 "ifconfig eth0 down && ifconfig eth0 up" 。大家不要笑,也就这么两句命令嘛,其实这里是有讲究的, "ifdown eth0 && ifup eth0" 是无效的 。两者区别欢迎大佬们来科普。
4.docker 容器关闭导致盒子重启
如果你的盒子是用于旁路由,那么你很有可能会用 docker 以特权模式启一个 OpenWrt 容器。如果你在启动容器的时候:
1. 添加了 "--privileged" 参数
2. 添加了 "--restart=always" 参数
你会发现,当你停止容器之后,系统日志多了一条:"watchdog did not stop!",过了几十秒之后,盒子就自动重启了。。卧槽什么鬼。。
重启了也就算了,问题来了,盒子重启之后,容器仍然是在运行的,因为 restart=always 嘛。。
那我如果就是想停掉容器怎么办,我把容器停止之后再删掉总可以了吧?好的,当我删掉容器之后,盒子同样是自动重启了。
关键来了,重启之后,容器诈尸了,刚才明明删除成功了,现在仍然是在运行中。
???
那怎么办?
docker update [container_name] --restart=no
先用这个命令把 restart 参数改成 no,然后再停止容器。随着盒子自动重启后,容器终于停下来了。
5. macvlan 网络的容器和主机之间无法互访
由于我们是拿盒子运行 OpenWrt 容器作为旁路由的,因此可以设置主路由作为中转。
在主机(盒子)的启动脚本 "/etc/rc.local" 中添加以下代码:
ip route add [container_ip] via [router_ip]
在 OpenWrt 的“网络 => 静态路由 => 静态IPv4路由”中添加以下记录:
6. 容器获取不到公网 IPv6
首先在 "/etc/docker/daemon.json" 新增这两个字段(没有就新建文件):
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
然后重启 docker 服务或者机器。
然后在创建 macvlan 网络的时候,请加上 "--ipv6" 参数,例如:
docker network create -d macvlan
--subnet=172.16.0.0/24 --gateway=172.16.0.1
--ipv6 --subnet=2001:db8:abc8::/64 --gateway=2001:db8:abc8::10
-o parent=eth0
bridge-host
关于IPv4和IPv6的子网和网关具体填什么的问题,貌似对于OpenWrt容器来说是没什么用处的,因为在容器其中之后,这些信息就已经被修改掉了。所以我是填了几个不存在的网段和网关IP。
最后执行 "docker network inspect [network_name]" 命令,确认输出的内容里 EnableIPv6 为 true,那么关于主机的 IPv6 设置应该就是成功了。至于 OpenWrt 容器如何配置,请另寻他处,我没有完全解决,就不分享了 。
7. OpenWrt 的一些代理工具失效
因为docker容器是共用宿主机的内核的,所以一些依赖到 "kmod-*" 的软件包可能工作会异常,比如某些海外加速工具(不知当讲不当讲)。失效的朋友们请切换一下代理模式,有些模式还是能用的。如果你很在意这个问题,建议还是直接盒子刷 OpenWrt 或者是在 Armbian 上运行 QEMU + KVM 虚拟机,在虚拟机里装 OpenWrt。
8.个别 OpenWrt 容器启动后,会导致盒子的控制台异常
现成的 OpenWrt 镜像有很多,例如 sulinggg/openwrt:armv8,偏偏我用的那个有点问题(immortalwrt/rootfs:armvirt-64-openwrt-21.02.1),启动之后,盒子的终端被抢占了,导致我重启盒子之后,终端显示错乱,即不能登录 Armbian 也不能登录 OpenWrt。最后对比了一下发现问题出在"/etc/inittab"。具体原因不是很懂,总之如果你遇到了这样问题的镜像,但是又想用的话,可以参考其他镜像改一改这个文件。
9. OpenWrt 容器启动后有概率 ping 不通任何 IP
(这台机子的网卡我真的是服了)
当你启动 OpenWrt 容器之后 ping 不通任何 IP 包括 127.0.0.1 时。。。
/ # ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
ping: sendto: Operation not permitted
和问题3类似,只是判断条件改了。在容器的 "/etc/rc.local" 添加以下内容(不是盒子的哈):
if ping -c 1 127.0.0.1 2>&1 | grep "sendto: Operation not permitted" > /dev/null ; then
logger "eth0: Init failed, retry..."
ifconfig eth0 down && ifconfig eth0 up
else
logger "eth0: Init success."
fi
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
Xiyanxue
校验提示文案
Wape
校验提示文案
Al张安乐
校验提示文案
朵鸣爸爸
校验提示文案
值友9121178043
校验提示文案
TheUnknown
校验提示文案
偷石头的石匠
校验提示文案
值友9492464889
校验提示文案
值友2892854619
校验提示文案
lukeluo
校验提示文案
himawari
校验提示文案
sfezen
校验提示文案
木力曾
校验提示文案
Eric66666
校验提示文案
90边缘的80后
校验提示文案
iziming
校验提示文案
值友3014682328
校验提示文案
值友4025077283
校验提示文案
tofu_gan
校验提示文案
小蘑菇1999
校验提示文案
手撕蘑菇丶4869
校验提示文案
值友3913002839
校验提示文案
lupp731
校验提示文案
手撕蘑菇丶4869
校验提示文案
iziming
校验提示文案
泰迪窝
校验提示文案
胖胖鹿船长
校验提示文案
Vita-XS
校验提示文案
猛禽大叔
校验提示文案
小蘑菇1999
校验提示文案
小小仙剑
校验提示文案
bogen987
没双头usb线
校验提示文案
壹_次_心
校验提示文案
saltdion
校验提示文案
saltdion
校验提示文案
Wape
校验提示文案
值友3014682328
校验提示文案
习习海风
校验提示文案
90边缘的80后
校验提示文案
老同学胡先生
校验提示文案