资讯动态

保姆级教程:在Firefly RK3568开发板上实现USB HID键盘鼠标模拟(基于PiKVM项目)

发布时间:2026/9/18 2:07:42 来源:尧图企业网站定制
基于Firefly RK3568开发板的低成本IP-KVM实战指南在嵌入式开发领域远程设备管理一直是个痛点。想象一下当服务器卡在BIOS界面或需要调试无显示输出的设备时传统方式往往需要亲临现场。而商业IP-KVM设备动辄上千元的价格让个人开发者望而却步。本文将带你用Firefly RK3568开发板打造一个功能完整的DIY解决方案成本不到商业产品的三分之一。1. 硬件准备与环境搭建Firefly RK3568开发板以其出色的性价比成为本项目的理想选择。这款采用四核Cortex-A55架构的开发板不仅具备USB OTG功能还拥有丰富的扩展接口。我们需要特别关注其USB控制器特性特性参数USB版本2.0/3.0双模OTG支持全功能支持供电能力500mA可通过外接增强数据传输速率高速(480Mbps)开发环境准备步骤下载官方SDK工具链wget https://www.t-firefly.com/doc/download/157.html -O rk3568_sdk.tar.gz tar -xzvf rk3568_sdk.tar.gz安装交叉编译工具sudo apt install gcc-aarch64-linux-gnu build-essential libncurses-dev bison flex提示建议使用Ubuntu 20.04 LTS作为宿主机系统避免兼容性问题2. 内核配置与HID功能启用RK3568的Linux内核默认配置并未开启所有USB Gadget功能。我们需要深入内核配置层面进行定制2.1 内核配置修改定位到kernel/arch/arm64/configs/rockchip_linux_defconfig文件确保以下选项已启用CONFIG_USB_CONFIGFSy CONFIG_USB_LIBCOMPOSITEy CONFIG_USB_CONFIGFS_F_HIDy CONFIG_USB_CONFIGFS_MASS_STORAGEy编译内核的完整命令序列./build.sh kernel make -j$(nproc) ARCHarm64 rockchip_linux_defconfig make -j$(nproc) ARCHarm64 menuconfig # 可视化确认配置 ./build.sh kernel2.2 固件烧录技巧烧录新内核时常见问题及解决方案问题1设备无法进入Loader模式解决方法按住Recovery键再上电保持5秒问题2烧录后无法启动检查点确认DDR版本匹配验证boot.img完整性检查电源稳定性3. USB HID双重设备配置实现键盘鼠标同时模拟需要创建两个独立的HID设备。以下是关键配置流程3.1 修改启动脚本编辑/etc/init.d/S50usbdevice添加鼠标HID配置# 键盘配置 echo 1 /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb0/protocol echo -ne \\x05\\x01... /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb0/report_desc # 新增鼠标配置 echo 2 /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb1/protocol echo -ne \\x05\\x01... /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb1/report_desc3.2 验证设备枚举成功配置后执行以下命令检查ls /dev/hid* # 应显示 hidg0 和 hidg1 设备节点 dmesg | grep hid # 查看内核日志确认设备注册4. HID指令注入实战hid_gadget_test工具是与HID设备交互的核心。我们对其进行了功能增强4.1 交叉编译优化版本aarch64-linux-gnu-gcc hid_gadget_test.c -o hid_gadget_test -static -O3常用操作示例模拟键盘输入./hid_gadget_test /dev/hidg0 keyboard Hello World鼠标移动点击./hid_gadget_test /dev/hidg1 mouse move 100 100 ./hid_gadget_test /dev/hidg1 mouse click left4.2 自动化脚本示例创建/usr/local/bin/kvm_ctrl.sh实现远程控制#!/bin/bash case $1 in type) echo Typing: $2 ./hid_gadget_test /dev/hidg0 keyboard $2 ;; click) ./hid_gadget_test /dev/hidg1 mouse click $2 ;; move) ./hid_gadget_test /dev/hidg1 mouse move $2 $3 ;; esac5. 系统集成与性能优化将各个模块整合为完整解决方案需要考虑以下方面5.1 网络远程控制方案推荐使用WebSocketHTML5实现跨平台控制# websocket_server.py 示例片段 import asyncio import websockets import subprocess async def handle_command(websocket): async for message in websocket: if message.startswith(KEY:): subprocess.run([./hid_gadget_test, /dev/hidg0, keyboard, message[4:]])5.2 电源管理优化通过sysfs接口调整USB功耗# 降低功耗模式 echo 1 /sys/bus/usb/devices/usb1/power/autosuspend echo 2000 /sys/bus/usb/devices/usb1/power/autosuspend_delay_ms性能对比测试数据操作类型平均延迟(ms)功耗(mA)纯键盘输入12280键盘鼠标组合18320持续视频传输25450在实际项目中这套系统成功实现了对多台服务器的远程管理特别是在批量刷机场景下效率比传统方式提升近5倍。一个有趣的发现是RK3568的USB控制器在处理HID报告时表现出色即使在高频率输入下也能保持稳定这得益于其优化的中断处理机制。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价