给闲置的电视盒子输入 Ubuntu 使其发光发热、变成一个 Linux 服务器?或打上 WiFi 驱动变成一个无线 AirPlay 2 接收器..

软硬件准备

写入 Ubuntu

拆下指示灯处两枚脚垫,拧下螺丝使用撬棒等工具撬开上盖,拆机后找到 TTL 触点通过 CH340 连接板子的 GDN、TX、RX 触点、以及将盒子插入网线接入局域网内、并连接电源。

打开 HiTool 选择 Hi3798MV100 平台,检查下方配置

  • 本地 PC 配置:串口设置选择板子串口
  • 板端配置:IP 地址填写板子局域网 IP
  • 传输方式:网口

进入烧写eMMC页面,点击浏览,选择固件文件夹内的 xml 文件,并在 fastboot 项选择 fastboot-hi3798mdmo1d.bin,随后烧写

查看下方日志表根据提示重启电源来烧写固件,等待片刻。


添加 WiFi 驱动

下载配套内核 hi_kernel-mv100-0808.bin (0808版本固件) 使用 Mobaxterm 上传至根目录后执行

dd if=hi_kernel-mv100-0808.bin of=/dev/mmcblk0p6

执行完成后重启盒子

  1. rtl8188etv-0808.tar.gzwifi_install.sh 上传至 /tmp 文件夹
  2. 执行 cd /tmp 进入 tmp 文件夹,执行 chmod a+x wifi_install.sh 赋予脚本权限
  3. 使用脚本进行安装 sh wifi_install.sh -f 驱动包 [参数1] [参数1] ...
-f, --file
        驱动文件包名称 例如 rtl8188ftv.tar.gz
-s, --ssid
        可选,wifi名称
-p, --password
        可选,wifi密码
-d, --address
        可选,固定ip地址 如 192.168.1.100
-g, --gateway
        可选,网关 一般为 网段的第一个IP 如 192.168.1.1,
-m, --netmask
        可选,掩码 一般为 255.255.255.0
例如:
sh wifi_install.sh -f rtl8188ftv-0403.tar.gz -s ChineaNet-X231 -p 123456
  1. 运行命令后会提示“安装成功”,此时驱动安装完成。

如果使用了 -s 参数,脚本会尝试连接wifi,成功后提示“连接成功”
如果填入了 -d 参数,脚本会尝试修改wifi配置,成功后提示“修改地址成功”
想修改WIFI配置的话可以使用命令 nmcli connection delete "wifi名字"之后再使用本脚本重新配置,此时可无需使用 -f 参数


解决拔掉网线后不能正常访问盒子

一旦重新插网线,系统就增加一条优先级更高的默认路由,所有数据都从eth0接口出,导致通过wlan0的地址不能正常访问盒子了。

  • 笨办法就是只能拔掉网线,重新启动。
  • 聪明的办法就是手工删掉如下两条路由,命令如下:
ip route delete 192.168.3.0/24 dev eth0 //替换为自己的 IP 段地址
ip route delete default

可以用 ip route show 命令查看系统路由表


解决补完 WiFi 补丁后启动慢

  1. 插入网线正常进入系统后 SSH 连接执行
sudo vim /etc/systemd/system/network-online.target.wants/networking.service
  1. 将里面的 TimeoutStartSec=5min 修改为 TimeoutStartSec=2sec,执行 :wq 保存。
  2. 再执行 sudo vim /etc/dhcp/dhclient.conf 修改 timeout15 执行 :wq 保存。

解决 WiFi 连接后主页局域网页不能打开

  1. 修改首页文件:/var/www/html/index.html
  2. 将下面这行的 eth0 替换为 wlan0
$lanip=shell_exec("ifconfig eth0 | grep '<inet>'| grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1' 2>&1");
  1. 修改后如下所示:
$lanip=shell_exec("ifconfig wlan0 | grep '<inet>'| grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1' 2>&1");
  1. 修改同目录下另外一个文件:/var/www/html/index2.html 也是将类似行的 eth0 替换为 wlan0

  2. 然后重启nginx服务,命令如下:

systemctl restart nginx.service