给闲置的电视盒子输入 Ubuntu 使其发光发热、变成一个 Linux 服务器?或打上 WiFi 驱动变成一个无线 AirPlay 2 接收器..
软硬件准备
- CH340G 转接板
- 公对母杜邦线*3
- HiTool
- Mobaxterm - 可以直接上传文件
- TTL线刷固件包 - TTL-hi3798mv100-20220808.zip
- WiFi 驱动配套内核、驱动、脚本 - 20220808
写入 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
执行完成后重启盒子。
- 将
rtl8188etv-0808.tar.gz
、wifi_install.sh
上传至/tmp
文件夹 - 执行
cd /tmp
进入 tmp 文件夹,执行chmod a+x wifi_install.sh
赋予脚本权限 - 使用脚本进行安装
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
- 运行命令后会提示“安装成功”,此时驱动安装完成。
如果使用了 -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 补丁后启动慢
- 插入网线正常进入系统后 SSH 连接执行
sudo vim /etc/systemd/system/network-online.target.wants/networking.service
- 将里面的
TimeoutStartSec=5min
修改为TimeoutStartSec=2sec
,执行:wq
保存。 - 再执行
sudo vim /etc/dhcp/dhclient.conf
修改timeout
为15
执行:wq
保存。
解决 WiFi 连接后主页局域网页不能打开
- 修改首页文件:
/var/www/html/index.html
- 将下面这行的
eth0
替换为wlan0
:
$lanip=shell_exec("ifconfig eth0 | grep '<inet>'| grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1' 2>&1");
- 修改后如下所示:
$lanip=shell_exec("ifconfig wlan0 | grep '<inet>'| grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1' 2>&1");
-
修改同目录下另外一个文件:
/var/www/html/index2.html
也是将类似行的eth0
替换为wlan0
-
然后重启nginx服务,命令如下:
systemctl restart nginx.service