One-KVM 部署(S905l3a 盒子)
一、前言
因为经常需要远程访问家里的无头主机,而由于博主的财力所限,家中主机的 CPU 至今还是 AMD 的上古 APU: e350. 归功于其 40nm 制程、2C2T、1.6Ghz 带来的孱弱的性能,主机多跑点服务就能当场死机给你看(拥有千兆网卡却因处理器性能限制只能跑到 160M)。
远程主机死机了怎么办?只能打电话喊爸妈手动重启 TAT. 而 one-kvm 这一项目恰好解决了博主当前的痛点。
One-KVM 是什么?
One-KVM(官方文档) 是基于廉价计算机硬件和 PiKVM 软件二次开发的 BIOS 级远程控制项目。可以实现远程管理服务器或工作站,无需在被控机安装软件调整设置,实现无侵入式控制。
one-kvm 支持多种平台:
- 架构:x86_64、ARMv7、ARM64
- 平台:Docker
- 硬件:USB UVC 采集卡、CH9329+CH340 或 OTG 端口
其具体硬件适配情况如下所示:

二、准备
-
运行 One-KVM 的硬件设备:一个已经刷好安卓固件的 E900v22d 魔百盒电视盒子(便于进行外置 u 盘启动以及获取 adb 权限,具体刷机教程不在本文中展开)
-
操作系统:Windows11(用于使用 Rufus)
-
USB 启动盘刷写工具:Rufus(使用 balena etcher 制作启动盘时会遇到镜像压缩损坏的报错,可能是因为 be 的新版本 bug 所导致),下载 Rufus
-
下载 One-KVM 固件整合包:下载 E900v22c_241004 固件(本文所使用的硬件为搭载晶晨 S905l3a 芯片的 E900v22d 的魔百盒,故选取 E900v22c 固件,两者的区别在于 c 有 WIFI、蓝牙而 d 没有)
请按照自身的硬件型号选取对应的固件版本,官方提供的下载仓库地址如下:one-kvm 固件下载
-
一个闲置 U 盘:用于制作启动盘
-
HDMI USB 采集卡:用于获取被控机视频信号(采集卡型号选购请参考 官方文档 中关于 USB 采集卡硬件兼容性的介绍,本文所采用的采集卡方案为 MS2109,用作 1080p 的被控机画面绰绰有余)
-
USB 公对公数据线:用于连接盒子和被控机,可用来模拟鼠标和键盘
三、S905l3a 盒子刷入 One-KVM
1、使用 Rufus 将整合包写入 U 盘
在 Windows11 下打开 rufus 刷写工具,分别选择刷入设备和镜像文件,点击开始等待刷入即可。

完成刷入后拔出 u 盘备用。
2、修改 armbian 的设备树
One-KVM 在 S905l3a 盒子上的部署本质上还是运行在 armbian 上的,所以需要先在盒子上启动刷入整合包的 u 盘中的 armbian 系统。
而搭载 S905l3a 的盒子其硬件配置各不相同,所以 One-KVM 的 armbian 整合包在启动前需要先修改设备树为对应型号盒子的硬件配置。
其中,设备树(Device Tree)是描述硬件配置的数据结构,通过 .dts(源文件) 和 .dtb (二进制文件) 格式,告诉Linux内核如何与硬件交互。
而 DTB (Device Tree Blob) 文件包含完整的硬件描述,内核根据这些信息加载对应的驱动程序。
将刚刚的 u 盘再次插入到 Windows11 设备,此时在文件管理界面能够看到一个名为 BOOT 的磁盘分区。进入该分区,找到名为 dtb 的目录,进入后再打开其中的 armlogic 目录,就能看到众多型号的 .dtb 文件。
本文使用的盒子型号为 E900v22d 则找到名称中含有 s905l3a-e900v22c.dtb 的文件,在 241004 固件版本下该文件完整名称应为:meson-g12a-s905l3a-e900v22c.dtb. 其余型号的盒子则选择对应的 .dtb 文件,操作相同。
以下是支持的设备列表及其对应的 DTB 文件名:
| ID | SOC | MODEL | DTB 文件 |
|---|---|---|---|
| 301 | s905x2 | X96-Max-4GB, Tx5-Max | meson-g12a-x96-max.dtb |
| 302 | s905x2 | X96-Max-2GB, A95X-F2 | meson-g12a-x96-max-rmii.dtb |
| 303 | s905x2 | MECOOL-KM3-4G | meson-g12a-sei510.dtb |
| 304 | s905l3a | E900V22C-D, CM311-1a-CH, IP112H | meson-g12a-s905l3a-e900v22c.dtb |
| 305 | s905l3a | CM311-1a-YST | meson-g12a-s905l3a-cm311.dtb |
| 306 | s905l3a | M401A, UNT403A, B863AV3.2-M | meson-g12a-s905l3a-m401a.dtb |
| 0 | Other | 自定义 | 输入自定义 DTB 文件名 |
复制该文件的完整名称,回到 BOOT 分区下的根目录,找到该目录下的 uEnv.txt 文件,修改其中 FDT=/dtb/amlogic/meson-g12a-s905l3a-e900v22c.dtb 的值为 FDT=/dtb/amlogic/刚刚复制下来的具体设备对应dtb文件名. 然后保存即可。
其实如果使用的是同本文一样的 E900v22d 或是 E900v22c 盒子这里其实不用修改,因为这个整合包中
uEnv.txt默认的 FDT 值就是FDT=/dtb/amlogic/meson-g12a-s905l3a-e900v22c.dtb.
3、在 S905l3a 盒子上运行 u 盘中的 armbian 系统
当完成使用 rufus 将整合包正确刷入 u 盘的操作后,理论上在盒子处于关机状态下确保将 u 盘连接盒子的 usb 接口,连接 hdmi 至显示设备,连接盒子网线,那么只要通电开机就能通过 u 盘启动 armbian. 此时,显示设备应显示输出 armbian 开机系统初始化的日志,表明 armbian 正在启动。
当开机还是进入到盒子刷入的安卓固件,不要慌张,拔下 u 盘然后安装一个用于启动外置 u 盘内系统的引导 apk.
接下来先准备好 u 盘,在安卓系统中进入引导软件,此时输出画面变为黑屏,抓住黑屏间隙,插入 u 盘,输出画面应显示为 armbian 系统初始化的日志。
armbian 成功启动后会显示一个 ip 地址,记录下此时输出的 ip 地址:

在该界面下,连接键盘,根据提示输入期望创建的 root 密码、选择 shell 终端以及创建一个新用户。

4、将 armbian 刷入盒子的 eMMC 闪存
先前都是通过外置 u 盘启动 armbian 系统,这样会占据一个 usb 口,使盒子本就捉襟见肘的 usb 口数量雪上加霜,无法满足后续使用一根 usb 公对公数据线连接盒子与被控机以及一个 usb hdmi采集卡采集被控机视频信号进行远控需求。所以需要将 u 盘中的 armbian 系统写入到盒子内置的 eMMC 闪存中去,实现 armbian 系统的持久化部署。
部署有两种方式:
- 通过 amrbian 物理机直接部署
- 通过 one-kvm 网页终端进行部署
(1)、通过 armbian 物理机部署
a、正常安装
在刚刚修改过 root 密码的物理机 hdmi 输出页面下,使用修改后的 root 密码登入 root 用户,输入以下命令进行 armbian 写入:
armbian-install
此时会输出支持的设备编号、列表及其对应的 dtb 文件名称,并提示你输入设备型号的对应编号:
--------------------------------------------------------------------------------------
ID SOC MODEL DTB
--------------------------------------------------------------------------------------
301 s905x2 X96-Max-4GB,Tx5-Max meson-g12a-x96-max.dtb
302 s905x2 X96-Max-2GB,A95X-F2 meson-g12a-x96-max-rmii.dtb
303 s905x2 MECOOL-KM3-4G meson-g12a-sei510.dtb
304 s905l3a E900V22C-D,CM311-1a-CH,IP112H meson-g12a-s905l3a-e900v22c.dtb
305 s905l3a CM311-1a-YST meson-g12a-s905l3a-cm311.dtb
306 s905l3a M401A,UNT403A,B863AV3.2-M meson-g12a-s905l3a-m401a.dtb
0 Other Customize Enter-custom-dtb-name
--------------------------------------------------------------------------------------
本文使用的 E900v22d 盒子对应编号为 304,输入后回车即可。
接下来会提示你选择文件系统:
------------------------------------------------
ID TYPE
------------------------------------------------
1 ext4
2 btrfs
------------------------------------------------
作为远控设备,求稳是第一要义,选择编号为 1 的 ext4 文件系统即可,或者根据自身需求选择 btrfs 以便创建系统还原点。
输入选择的文件系统对应编号,回车,开始写入。
b、eMMC 写入错误解决
当遇到以下报错提示无法正常写入 eMMC 闪存:
[ INFO ] Start create MBR and partittion.
Error: Input/output error during write on /dev/mmcblk2
Error: /dev/mmcblk2: unrecognised disk label
Error: /dev/mmcblk2: unrecognised disk label
[ ERROR ] Failed to partition internal eMMC using [ parted ].
这个错误信息表明在使用 armbian-install 安装 One-KVM 时,脚本尝试对设备 /dev/mmcblk2(板载 eMMC 存储)进行分区操作失败了。
经过排查发现,这是由于 meson-g12a-s905l3a-e900v22c.dtb 这一设备树的 eMMC 控制器的默认工作频率设置过高,导致设备无法稳定地进行写入操作。
在 Amlogic S905l3a 这类芯片中,eMMC控制器的频率设置由设备树(Device Tree)中的 max-frequency 参数控制。这个参数决定了 eMMC 控制器与 eMMC 存储芯片之间的通信速度。但 E900v22d 设备的 eMMC 控制器对频率非常敏感,高频率设置会导致信号完整性问题、时序错误和 I/O 错误。
为解决以上问题,需要对 meson-g12a-s905l3a-e900v22c.dtb 这一设备树进行反编译为 .dts 源码,修改其中的 max-frequency 参数。
-
安装依赖(在 root 用户下)
apt-get update apt-get install -y device-tree-compiler -
进行反编译(将
meson-g12a-s905l3a-e900v22c.dtb反编译为meson-g12a-s905l3a-e900v22c.dts)cd /boot/dtb/amlogic dtc -I dtb -O dts -o meson-g12a-s905l3a-e900v22c.dts meson-g12a-s905l3a-e900v22c.dtb -
编辑
meson-g12a-s905l3a-e900v22c.dtsnano meson-g12a-s905l3a-e900v22c.dtsCtrl+F使用搜索,搜索mmc@ffe07000, 修改其中的max-frequency默认值为<0x5f5e100>, 如下图所示:
Ctrl+O写入文件,Ctrl+X退出。 -
编译 dtb(使用修改后的
.dts文件编译新的.dtb文件)dtc -I dts -O dtb -o meson-g12a-s905l3a-e900v22c.dtb meson-g12a-s905l3a-e900v22c.dts # 返回根目录 cd -
重新安装写入 eMMC
armbian-install重复正常安装操作即可,此时应能正常写入。
这个方法通过降低 eMMC 控制器的工作频率,使 eMMC 控制器能够在 E900v22d 设备上稳定工作,消除了I/O错误。
当出现 [Success] Installation successful 的信息时,根据提示将 armbian 关机:
poweroff
当 armbian 彻底关闭后,拔出 u 盘,开关电源,发现 armbian 已从 eMMC 正常启动。
(2)、通过 One-KVM 网页终端进行部署
访问第一次成功启动 one-kvm 记下的 ip 地址,登录用户。系统默认用户为:
用户:admin
密码:admin
登录成功后进入 one-kvm 网页,点击 Terminal 选项,即可看到终端画面。
使用命令登入 root 用户:
su root
根据提示输入 root 用户密码完成登录。
接下来的部署操作同上一节 “(1)、通过 armbian 物理机部署”.
5、修改 One-KVM 网页端登录的账户信息
在终端中通过 root 用户使用以下命令添加网页端登录的账户,如使用 gudi 作为用户名:
kvmd-htpasswd set gudi
根据提示输入密码完成用户创建。
可以使用以下命令删除用户,如删除默认的 admin 用户:
kvmd-htpasswd del admin
通过以下命令列出所有用户:
kvmd-htpasswd list
最后,重启服务使修改立即生效:
systemctl restart kvmd kvmd-nginx
接下来便可以通过新添加的用户名和密码登录 one-kvm 的网页端。
四、S905l3a 盒子接线部署
在完成了上一章的 one-kvm 的安装后,便可以将部署了 one-kvm 的 S905l3a 盒子与被控机相连了。被控机的 hdmi 视频输出连接至 usb hdmi 采集卡,采集卡连接至盒子的 usb 接口;usb 公对公数据线分别连接被控机的 usb 接口和 S905l3a 盒子的 usb 接口。访问 one-kvm 的网页端,选择 KVM 选项就可以看到被控机的视频画面了。
五、通过 KVM 切换器实现一控多
若想通过一台 one-kvm 设备同时管理两台 PC,则可以通过 KVM 切换器来实现。
根据 one-kvm 的 官方文档 说明,KVM 一控多有热键切换和 GPIO 控制两种方式。本文采用 热键切换 这一方式。
1、准备
在硬件上,需要使用支持热键控制的KVM切换器,本文选用了 SGEYR 的热键切换 KVM:

2、硬件连接
如下所示:

可以在网页通过热键(虚拟键盘快捷键)进行视频画面和 USB 控制切换,实现一控多。如该款 KVM 切换器可以使用以下快捷键实现切换:

六、总结与后续
至此,本文关于 one-kvm 部署已经全部结束,目的是向各位分享本人部署 one-kvm 这一项目的心得体验。也由衷感谢开发 one-kvm 的大佬们,使我们能接触到一个如此好玩的项目。
one-kvm 在实现本文所提及功能的基础上,还有多种玩法,比如网络唤醒 WOL、USB 继电器实现 ATX 电源控制、添加 SSL 证书等等,这些功能在 官方文档 中都有涉及,可以尽情折腾!
七、参考
- One-KVM 文档
- 机顶盒刷armbian全程详解
- 没网也能用,BIOS级远程控制!利用闲置电视盒子,打造远控神器
- 江苏E900V22D解决从U盘启动armbian但不能写入emmc教程
- One-KVM FAQ帮助文档
本文详细记录了在 S905l3a 芯片的 E900v22d 魔百盒上部署 One-KVM 的全过程,包括固件刷写、设备树修改、eMMC 安装排错、账户配置及一控多 KVM 切换器接线方案,最终实现 BIOS 级无头主机远程控制。