茂名市网站建设_网站建设公司_色彩搭配_seo优化
2026/1/5 21:51:38 网站建设 项目流程

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 端口

其具体硬件适配情况如下所示:

设备适配信息表.png

二、准备

  • 运行 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 刷写工具,分别选择刷入设备和镜像文件,点击开始等待刷入即可。

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 地址:

armbian 启动输出 ip 地址

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

系统初始化配置

4、将 armbian 刷入盒子的 eMMC 闪存

先前都是通过外置 u 盘启动 armbian 系统,这样会占据一个 usb 口,使盒子本就捉襟见肘的 usb 口数量雪上加霜,无法满足后续使用一根 usb 公对公数据线连接盒子与被控机以及一个 usb hdmi采集卡采集被控机视频信号进行远控需求。所以需要将 u 盘中的 armbian 系统写入到盒子内置的 eMMC 闪存中去,实现 armbian 系统的持久化部署。

部署有两种方式:

  1. 通过 amrbian 物理机直接部署
  2. 通过 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
------------------------------------------------

作为远控设备,求稳是第一要义,选择编号为 1ext4 文件系统即可,或者根据自身需求选择 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 参数。

  1. 安装依赖(在 root 用户下)

    apt-get update
    apt-get install -y device-tree-compiler
    
  2. 进行反编译(将 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
    
  3. 编辑 meson-g12a-s905l3a-e900v22c.dts

    nano meson-g12a-s905l3a-e900v22c.dts
    

    Ctrl+F 使用搜索,搜索 mmc@ffe07000, 修改其中的 max-frequency 默认值为 <0x5f5e100>, 如下图所示:

    修改 eMMC 控制器频率

    Ctrl+O 写入文件,Ctrl+X 退出。

  4. 编译 dtb(使用修改后的 .dts 文件编译新的 .dtb 文件)

    dtc -I dts -O dtb -o meson-g12a-s905l3a-e900v22c.dtb meson-g12a-s905l3a-e900v22c.dts
    # 返回根目录
    cd
    
  5. 重新安装写入 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:

SGEYR 热键切换 KVM

2、硬件连接

如下所示:

KVM 一控多连线图

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

KVM 切换器快捷键

六、总结与后续

至此,本文关于 one-kvm 部署已经全部结束,目的是向各位分享本人部署 one-kvm 这一项目的心得体验。也由衷感谢开发 one-kvm 的大佬们,使我们能接触到一个如此好玩的项目。

one-kvm 在实现本文所提及功能的基础上,还有多种玩法,比如网络唤醒 WOL、USB 继电器实现 ATX 电源控制、添加 SSL 证书等等,这些功能在 官方文档 中都有涉及,可以尽情折腾!

七、参考

  1. One-KVM 文档
  2. 机顶盒刷armbian全程详解
  3. 没网也能用,BIOS级远程控制!利用闲置电视盒子,打造远控神器
  4. 江苏E900V22D解决从U盘启动armbian但不能写入emmc教程
  5. One-KVM FAQ帮助文档

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询