前言

我手上现有的垃圾盒子都是arm32/v7l的cpu架构(迅雷赚钱宝一代/二代/三代),虽然debian12甚至下一个debian13依然会继续支持arm32,但很多我使用的软件和docker镜像已经不再支持arm32/v7的硬件了。

所以从闲鱼入手了一个电视盒子,型号是创维E900V22D,拆机确认芯片型号的S905L-3,aarch64架构,2GB内存 + 8GB emmc存储,百兆网口,2个usb2.0接口。

这机器入手价格是40rmb(加上邮费),一开始觉得性价比高,因为E900V22D按理是s905l-3a/3b的芯片,但我拆机以后发现是s905l-3,编号少了一个a和b,性能也差一大截。实际这个芯片的盒子价格应该在25rmb(不含邮费)左右,对应的热门盒子型号是cm211-1。所以我一不小心被割了韭菜,怒亏10rmb。

在海鲜市场淘电视盒子的时候,除了挑机器型号之外,一定要问清楚cpu芯片。因为电视盒子全国不同地区、不同厂家,可能同一个型号的机器会出现硬件配置不同的情况。高价买到低配还不是最麻烦的,最麻烦的是,因为相同型号但不同硬件的电视盒子,很可能设备树dtb就不一样,那对应的刷机固件、刷机方法也会不一样,比如我淘的这个E900V22D。

因为我的盒子型号和cpu芯片与ophubamlogic-s9xxx-armbian项目中现有的支持设备也对应不上,所以刷机过程中也碰到了一点儿小问题,不过最后还是完美刷入了armbian。

这里做个刷机步骤的简单记录,方便以后回溯。


拆机

拆机这一步主要是为了确认芯片型号,避免同型不同芯。

首先卸掉背壳的三颗螺丝,然后用撬片插入撬孔就可以掀开真个背壳。

确认了芯片型号是s905l-3。


固件

amlogic-s9xxx-armbian项目主页,根据自己的芯片型号,确定使用amlogic_s905l3.img这版固件。

然后在release页面,根据自己的喜好下载对应版本的armbian。我一直用的debian bookworm版。

在固件列表里选择自己喜欢的内核版本,注意选择s905l3的固件。

下载固件以后,使用软件(比如rufus)把固件烧录到u盘即可。


刷机

需要的设备

使用s905l-3芯片的创维E900V22D,刷机不需要短接,只需要用到遥控器,如果手头没有原装的遥控器,可以使用支持红外的手机(比如小米)的万能遥控app来控制。如果确实没有遥控器,不要紧张,还有方法的,可以通过短接线刷安卓tv底包 + adb工具来刷机,这个等下文【踩坑】部分有记录。

刷机的方法

刷好固件的u盘插在离电源近的usb接口,先按住遥控器右方向键(网上的教程都说是一秒钟按三次右键)然后通电,盒子就会自动从u盘引导,此时如果hdmi接口连接了显示器,显示的是如下图的花屏。

无需紧张。耐心等待一段时间之后,就可以在路由器的控制台看到多了一个名字是armbian的设备,此时就可以根据ip地址通过ssh连上盒子了。

假定ip地址是192.168.1.5,连接方式:打开ssh终端(Windows上可以直接用系统自带的cmd),输入ssh [email protected]然后回车即可。默认账户root,默认密码1234

将armbian刷入内置的emmc存储

从u盘引导系统成功以后,此时的armbian系统是跑在u盘上的,需要将系统写入到电视盒子内置的emmc存储。

输入命令

armbian-install

接下去比较重要的选项是选择设备列表

选择设备列表,重点其实是选择对应的设备树dtb文件来驱动硬件。根据ophub在【这个issuse】下的回复,选择120、122、123都可以,因为这仨编号对应的dtb文件都是一样的。

到此整个给电视盒子刷armbian的流程就结束了,你已经拥有了一个超低功耗、arm64机构、2GB内存、8GB存储、2个usb2.0接口、1一个百兆网口的超级小巧的linux服务器惹,赶紧用它来搞一些有意思的自建服务吧。


踩坑

在第一次给这个设备刷机的时候,整个过程和上面的流程记录的一样,完成的非常顺利,按遥控器右键 —— 进入u盘系统 —— 写入emmc。但在写这篇博客的时候,我想重刷一遍armbian,结果碰到了大量的坑,耗费了大量的时间去排查。在这里做简单记录。

踩坑1:已经刷入了armbian,二刷时无法从u盘引导

因为刷入armbian以后,已经不支持通过按遥控器右方向键来选择u盘引导,这个时候就要想其它办法。

看下ophub给出的【手册的12.4.2条】。

如果以上两种办法都走不通的情况下,比如不会优先从usb引导、无法登录当前armbian系统、忘记了root账号密码、获取不到root权限,要怎么处理。

这种情况其实已经说这台设备变砖了,必须要通过短接来救活,在【这个issue】下有人给出了解决方法。

但是,但是啊,不要高兴的太早了,这里接下去还有坑,因为我就碰到了刷入这个安卓tv的底包以后,能开机也能进入安卓电视系统,但是无论我怎么按遥控器右键都无法实现u盘引导,这就是第二个大坑。

踩坑2:已经通过短接刷入了安卓tv底包,但按遥控器右方向键无法实现u盘引导

这种情况下就需要通过adb工具来实现u盘引导。

查看ophub提供的【手册的12.4.1条】。

电视盒子通电,进入安卓tv系统以后,在路由器控制台获取ip地址,假定192.168.1.5,输入以下命令:

adb connect 192.168.1.5

adb shell reboot update

此时盒子会重启并从u盘引导,就可以成功的刷入armbian惹。

但是!不要开心的太早了!接下去依然有坑,这就是第三个大坑。

踩坑3:用户权限异常/sudo命令提示文件归属权异常/su切换root用户提示密码错误

踩过了上述的所有坑、耗费了大量时间和精力以后,我终于看上去成功的给这个盒子刷入了armbian,似乎已经大功告成了,但很快又一盆冷水泼面而来。

具体问题如下:

  • 从普通用户用su命令切换到root用户时,虽然输入了正确的root密码,但一直提示认证失败。同样的密码,可以正常以root用户连接ssh,说明密码是正确的。

  • 在普通用户身份下,使用sudo命令,提示sudo: /etc/sudo.conf is owned by uid 1023, should be 0,大致如下图

  • 有大量目录的所属用户和组都显示的1023,大致如下图

在查看了【armbian-software 安装docker时:sudo: /etc/sudo.conf is owned by uid 1023, should be 0】和【root用户授予不了权限及用户所属的问题】这两个issue以后,知道了bug原因是:

在盒子刷入安卓tv且开机运行的情况下插入u盘,此时u盘里的文件会被安卓tv系统改动权限,这也是1023这个用户的来源。

要解决这个问题,首先重新用rufus烧录一个干净的armbian固件,切记先不要插上刷了安卓tv的盒子。

如果盒子能直接从u盘引导,那就先断电再插u盘,然后通电。

如果盒子无法直接从u盘引导,那就通过adb shell reboot update命令重启盒子,等盒子开始重启以后,再插入新烧录的u盘,此时就不会被安卓tv系统改动文件权限了。