ipkvm之RK3568 usb gadget

电子说

1.3w人已加入

描述

PiKVM - Open and inexpensive DIY IP-KVM on Raspberry Pi

开源项目:https://github.com/pikvm

目的:在 rk3568上实现 pikvm所有功能 ,本篇主要实现 rk3568 usb Gadget (hid,ums)

硬件:

  • rk3568 / rk3399 / rk3588
  • usb otg接口

开发板既要当USB OTG口既要当键盘,又要当鼠标使用。则要生成两个hid:,一个键盘hidg0,一个鼠标hidg1。

1. 功能实现

1.1 kernel 配置

在rockchip_linux_defconfig中添加

CONFIG_USB_CONFIGFS_F_HID = y
CONFIG_USB_CONFIGFS_MASS_STORAGE=y

./build.sh 编译kernel

./build.sh kernel

确认kernel/drivers/usb/gadget/function/f_hid.c被编译 f_hid.o

烧录固件boot.img 切换到loader模式

usb

1.2 使能HID配置

进入系统后执行

echo usb_hid_en > /tmp/.usb_config & /etc/init.d/S50usbdevice restart

USB功能配置成功会有如下log,表明进入USB Ready:

[ 5662.081549] android_work: sent uevent USB_STATE=CONNECTED
[ 5662.085903] configfs-gadget gadget: high-speed config #1: b
[ 5662.086881] android_work: sent uevent USB_STATE=CONFIGURED

查看 ls -l /dev/hid*
 

usb

如果需要添加两个hid,分别做keyboard,mouse

diff --git a/external/rkscript/S50usbdevice b/external/rkscript/S50usbdevice
index 1162f296f..0ad102150 100644
--- a/external/rkscript/S50usbdevice
+++ b/external/rkscript/S50usbdevice
@@ -64,6 +64,7 @@ function_init()
    mkdir ${USB_FUNCTIONS_DIR}/mass_storage.0
    mkdir ${USB_FUNCTIONS_DIR}/uvc.gs6
    mkdir ${USB_FUNCTIONS_DIR}/hid.usb0
+   mkdir ${USB_FUNCTIONS_DIR}/hid.usb1
 }
 configfs_init()
@@ -342,11 +343,19 @@ bind_functions()
    test $RNDIS_EN = on && syslink_function rndis.gs0
    if [ $HID_EN = on ]; then
+       # Keyboard
        echo 1 > /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb0/protocol
        echo 1 > /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb0/subclass
        echo 8 > /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb0/report_length
        echo -ne x05x01x09x06xa1x01x05x07x19xe0x29xe7x15x00x25x01x75x01x95x08x81x02x95x01x75x08x81x03x95x05x75x01x05x08x19x01x29x05x91x02x95x01x75x03x91x03x95x06x75x08x15x00x25x65x05x07x19x00x29x65x81x00xc0 > /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb0/report_desc
        syslink_function hid.usb0
+       
+       # Mouse 
+       echo 2 > /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb1/protocol
+       echo 1 > /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb1/subclass
+       echo 3 > /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb1/report_length
+       echo -ne x05x01x09x02xa1x01x09x01xa1x00x05x09x19x01x29x03x15x00x25x01x95x03x75x01x81x02x95x01x75x05x81x03x05x01x09x30x09x31x15x81x25x7fx75x08x95x02x81x06xc0xc0 > /sys/kernel/config/usb_gadget/rockchip/functions/hid.usb1/report_desc
+       syslink_function hid.usb1
    fi
    if [ $UMS_EN = on ];then


改完后需要删除 buildroot/output/rockchip_rk3568,重新编译。

验证功能的话,直接改 buildroot/output/rockchip_rk3568/target/etc/init.d/S50usbdevice

buildroot/output/rockchip_rk3568/target/etc/init.d/.usb_config

usb_adb_en
usb_hid_en
usb_ums_en
ums_block=/dev/block/by-name/userdata
ums_block_auto_mount=on

./build.sh rootfs 烧录即可看到
 

usbusb

2. 测试功能

github仓库:https://github.com/aagallag/hid_gadget_test

The HID Gadget driver provides emulation of USB Human Interface
Devices (HID). The basic HID handling is done in the kernel,
and HID reports can be sent/received through I/O on the
/dev/hidgX character devices.

复制hid_gadget_test.c 到sdk,执行

rk3568-sdk/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc hid_gadget_test.c -o hid_gadget_test -static

生成 hid_gadget_test 使用adb push 到开发板

usb

即可开始测试,输入 g i s t r --left-shift 按下回车将发送数据

3. 开发板介绍

3.1 基本参数

基本参数  
微处理器 CPU RK3568 /3568J/3568M
内存 2GB/4GB/8GB 默认 4G
存储 8GB/16GB/32GB/64GB/128GB/256GB 默认 32GB
系统 linux、安卓、debian、银河麒麟操作系统
接口参数  
USB 接口 4 路 USB2.0、2 路 USB3.0
以太网 2 路 1000M 网口
串口接口 4 路 232 接口,1 路 RS232/485 转换(默认 RS232),通过贴片切换
音视频信号输入 支持 Mic in/Line in 支持 HDMI 输入
  支持 Line out
音视频信号输出 支持功放左右声道输出(8Ω,5W)
  支持 3.5MM 耳机左右声道输出
  支持 3 路显示输出。HDMI,LVDS,MIPI,EDP,其中 LVDS 和 MIPI 二选一
WIFI/蓝牙 WIFI 2.4G/5G 及蓝牙 V4.0/4.2
TF 卡 支持支持外部存储卡扩展
RTC 实时时钟 支持
SATA 供电接口 提供 12V/5v 电源;(SATA 5V/12V)
I2C/SPI/GPIO 8 路 GPIO、2 路 I2C,1 路 SPI
TP I2C 支持
SATA 3.0 接口 支持
PCIE 接口 1 路 PCIE-2X 接口,可依据需求外加扩展卡

3.2 实物图

usbusb

3.3 结构图

usb

  审核编辑:汤梓红
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分