丈母娘想看电视,我就寻思着现在有线电视不划来,网络都这么发达了,找点直播源也很简单。但是给长辈用最重要的还是简单易用最重要。
先说成果,通电后自动播放直播电视,整个过程大概25秒。
B760HV2_show
通过利用手头安徽移动送的这个中兴B760HV2智能机顶盒,安装AlexELEC系统来实现播放电视直播源,记录一下这个曲折的过程。
B760HV2_1
B760HV2_2

丈母娘家有一个移动办宽带送的电视盒子——中兴 ZXV10 B760HV2智能机顶盒(WiFi版),我想大多数电视盒子都是晶晨的主控,刷机应该不难。但是翻遍了全网,没找到这个机子的刷机教程,只找到了救砖线刷包,也算是给我吃了一颗定心丸,不怕死了,综合其他机子的刷机教程就是干。
首先要确定硬件配置,找到硬件相似的机型的刷机教程或者刷机包。拆开机子一看,Realtek RTL8818ETV + 1G RAM 的组合不出我意料,但4G NAND + Amlogic S805的Soc就让我有些傻眼了,这配置简直丐中丐。CoreELEC已经放弃了S80x系列的Soc了。本来CoreELEC刷机包都下载好了,现在要重新查资料了。最终找到了支持S805的Kodi系统AlexELEC,看样子应该是LibreELEC和CoreELEC的魔改版,但是支持S805,Kodi版本同步到目前最新的18.6,也找到了相似的机型MXQ (FW V2.0) (代号m201c),NAND闪存差了4G,不过FLASH大小应该和内核没关系,启动后可以自己识别。

进入Update模式(从TF卡启动)

按照帖子中的操作,将AlexELEC烧入TF卡(用Win32DiskImager把img烧入TF卡),然后插入机器,上电。。。按照MXQ的刷机教程,此时已经可以从TF卡启动了,然而实际情况还是进入百视通自己的系统(从NAND启动的)。看来这个机子在软件上还是做了一些防刷机的屏蔽。仔细查看机子的裸板,没有复位键,没有短接点位,没有额外的SPI Flash做NAND里面系统的引导,网上说的那些捅菊花、短接进入升级模式方法都不好使了。不过发现了6根排针,不知道能不能找到TXD和RXD,通过串口控制台进入升级模式。
万用表测出GND,固定波特率115200,用USB TTL的RXD挨个碰其他针脚观察控制台的输出,注意只有启动前几秒才能观察到,启动完成之后串口不再向外输出。所以测试每根针脚时都要重新上电。最终测试出TXD和RXD,还好这个板子留出了TTL针脚,给我留了一条活路。
B760HV2_TTL
登陆控制台之后发现这个机子的用户名也是m201,看来m201可能是Amlogic的公版代号。B760HV2的遥控器看起来跟MXQ的遥控器还是不一样,刷机之前首先保存遥控器的配置文件remote.conf(后面附具体内容),不然刷完机后,遥控器的按键编码我还要重新录制,重新设定按键响应。然后尝试重启进入刷机模式,在串口中输入

1
reboot update

结果失败了,依然直接进入自带的系统,貌似在Uboot中禁用了update模式。我彻底怒了,串口定时每0.1秒发送enter,中断Uboot启动。修改Uboot的环境变量,将重启模式改为升级模式

1
setenv reboot_mode update

断电重启,这一次不用中断Uboot,等他自然进入系统,然后输入

1
reboot update

串口输出变了,这一次终于可以从TF卡启动进入AlexELEC了,赶紧插上网线,然后尝试SSH登陆。。。哎呀,root密码不知道啊。接上键盘、显示器在AlexELEC设置中直接更改SSH的密码。(因为AlexELEC是毛子做的系统,默认语言是俄文,需要先改字体为Arial,再改语言为Chinese,别问我怎么看懂的,Kodi我玩的熟了,闭着眼都能改语言)

安装AlexELEC系统到内置NAND

简单测试一下,wifi正常,RAM、ROM容量识别正常,HDMI输出正常,声音正常,红外遥控器的大部分按键正常(数字键和方向键正常,但是也有些按键,比如确认键和音量键的映射不正常)。遥控器的问题不大,可以慢慢调整配置文件。总之,系统完全工作正常,把TF卡中的系统安装到NAND闪存中,SSH控制台中输入

1
installtointernal

一路输入yes,完成安装。安装完成之后,关机

1
poweroff

拔出TF卡,断电后再重新上电,成功进入AlexELEC,到此为止成功安装AlexELEC系统到内置NAND。

Kodi中配置PVR直播电视

启用IPTV Simple PVR Client插件(默认禁用)并配置IPTV Simple PVR Client。

  • 找到了一个可靠的有点慢的直播源(包含CCTV+地方卫视),(更新:可靠的直播源),可以直接填入IPTV Simple PVR Client的设置。
  • 更改IPTV Simple PVR Client的设置,每次切换频道无需按确认键,还原老式电视的操作方式
  • Kodi的用户设置中,启动时自动打开PVR,再也不要担心妈妈不会调

调教红外遥控器

真的是走了很多弯路,之前用过树莓派的红外线,以为是差不多的,犯了思维定势的错误。新版的LibreELEC已经支持amremote从系统底层接管红外了,AlexELEC当然也跟上了。忘记lirc和meson-ir吧,记录红外按键也不是用ir-keytable了,因为根本没有/dev/lirc0这个设备了,取而代之的是/dev/amremote
amremote一听名字就知道是Amlogic平台的遥控器驱动,它的作用是将红外编码直接映射为键盘上的按键,所以不需要在Kodi中额外配置红外遥控器,更不需要通过keymap editor来重新设置键盘映射!amremote的工作流程是将遥控器的的红外编码(ircode)对应成key code,再触发key code代表的键盘按键。ircode与key code的对应关系在配置文件/storage/.config/amremote/remote.conf中(也就是我们之前在原厂固件中保存的那个),key code与键盘按键的对应关系在/storage/.config/amremote/Config_key.sample中(这个只是说明文件,不可更改,对应关系已经编译进驱动了)。下面记录一下如何完成一个遥控器的适配,或者说自定义。
首先停止kodi,不然kodi会产生许多我们不需要的内核调试信息,干扰我们调试

1
systemctl stop kodi

在测试遥控器按键前,丢弃我们不想要的之前的内核日志

1
dmesg -c

下面可以冲着盒子按下你想要更改的遥控器的按键,按一个按键一次,尽量手速加快,按一下就松手(不然就和我下面的图里一样,接收到多个红外编码),接着你就可以在内核日志中看到红外编码ircode

1
dmesg -c

比如我按下遥控器上红色的按钮,输出了以下内核日志
B760HV2_ircode
图中的0x0e就是ircode
下面就在remote.conf寻找ircode对应的key code,有两种情况,一种是配置文件里面已经有这个按键的ircode了,你需要更改后面的key code;另一种是没有对应的ircode,你需要自己添加。然后key code是你要去Config_key.sample查找你想要的按键。
以上面的例子ircode=0x0e为例,在remote.conf中寻找这个ircode
B760HV2_keycode
可以看到在我这个配置文件中红外编码(ircode)0xe被映射成了key code为0x18e的按键,那么这个按键到底是什么呢?我们可以进Config_key.sample查找
B760HV2_key
可以看到已经正确对应到红色按键了,所以这个按键不用修改。如果你想把这个红外按键对应到别的键盘按键,就需要在Config_key.sample查找对应的key code,替换掉remote.conf中的0x18e这个key code。
全部按键修改完成后用以下命令即时生效

1
remotecfg /storage/.config/amremote/remote.conf

然后可以在kodi里面测试

1
systemctl start kodi

下面是我最终修改过的remote.conf,大部分按键我都按照按键上面的中文意思,对应了相近的实体按键。
下载remote.conf

曲线救国实现Autossh

万一哪天直播源失效了,丈母娘看不了电视,我的高大形象毁于一旦。所以给自己留个后门,便于远程维护。首先想到的就是AutoSSH维持远程反向连接通道,可惜AlexELEC没有AutoSSH,也没有软件包管理器,不能安装软件。但是可以用Systemd托管SSH呀。

  • 先配置公网远程服务器

修改公网服务器的SSH配置文件/etc/ssh/sshd_config

1
GatewayPorts yes

这样可以把监听的端口绑定到任意IP 0.0.0.0上,否则只有本机127.0.0.1可以访问。
记得重启SSH服务器

1
sudo service restart sshd
  • 电视盒子上生成密钥
1
ssh-keygen -t rsa -f /storage/.ssh/id_rsa
  • 将电视盒子密钥添加到公网远程服务器
1
cat /storage/.ssh/id_rsa.pub | ssh 远程用户名@远程服务器地址 'cat >> .ssh/authorized_keys'
  • 测试
1
ssh -NTR [远程映射端口]:localhost:22 远程用户名@远程服务器地址 -o ExitOnForwardFailure=yes

然后直接ssh连接远程服务器的远程映射端口就可以连上电视盒子了。

  • 编写serivce文件

用你喜欢的文本编辑器,编辑/storage/.config/system.d/autossh.service

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=SSH Tunnel
After=network.target

[Service]
Restart=always
RestartSec=5
User=root
ExecStart=/bin/ssh -NTR [远程映射端口]:localhost:22 远程用户名@远程服务器地址 -o ExitOnForwardFailure=yes

[Install]
WantedBy=multi-user.target

启用这个服务,下次开机自动启动

1
systemctl enable autossh.service

加散热片和改内置WiFi天线

图片丢了,就不贴了。焊了一个号称5DB的内置PCB天线效果,效果非常不好,后来还是改用了USB无线网卡。
到此功能全部实现,折腾结束