PicoKVM
No description available
Install / Use
/learn @wl56012102/PicoKVMREADME
PicoKVM
项目说明
-
本项目用于搭建并自己DIY一个IP-KVM,底层开发板基于Luckfox Pico Ultra,采用Rockchip的RV1106G3(单核A7+内置256MB内存),和JetKVM使用的是同样的底层方案,因此很够很快速的移植和使用JetKVM的软件。
-
HDMI采集芯片采用东芝TC358743 HDMI转MIPI-CSI,最大1080p@60hz,但是因为Pico Ultra的CSI接口只接了2lanes,因此最大只能到1080p@30hz,略有遗憾,可能会有些奇怪系统不支持30FPS。
-
扩展板设计已在嘉立创开源,硬件部分见下方嘉立创链接,本项目主要用于系统和软件层面的移植说明
硬件扩展板链接:https://oshwhub.com/madbob/luckfox_tc358743 PS: Luckfox自己也出了个PicoKVM,但是貌似没开源
系统预编译
软件开发环境使用Ubuntu 22.04,系统基于Luckfox-pico的SDK
首先进行一次系统预编译,将uboot,kernel,rootfs都编译好,后续修改再编译会方便些 系统编译基础知识见官方文档:https://wiki.luckfox.com/zh/Luckfox-Pico-Ultra/SDK-Image-Compilation/
# 安装依赖
sudo apt-get install -y git ssh make gcc gcc-multilib g++-multilib module-assistant expect g++ gawk texinfo libssl-dev bison flex fakeroot cmake unzip gperf autoconf device-tree-compiler libncurses5-dev pkg-config bc python-is-python3 passwd openssl openssh-server openssh-client vim file cpio rsync
# 拉SDK
git clone https://github.com/LuckfoxTECH/luckfox-pico
cd luckfox-pico
# 选择Luckfox Ultra W的配置文件,emmc,buildroot
./build.sh lunch
# 跑一遍编译
./build.sh
编译好的镜像如何烧录参考官方教程里的Linux环境:https://wiki.luckfox.com/zh/Luckfox-Pico-Ultra/Flash-image
系统移植
系统移植需要进行以下几个步骤: 设备树: luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106-luckfox-pico-ultra-ipc.dtsi
- csi2_dphy0配置
- I2C4支持TC358743芯片
- 删除RKISP相关,因为是HDMI转的,用不到ISP
TC358743驱动:
- 复制JetKVM里的
- luckfox-pico/sysdrv/source/kernel/drivers/media/i2c/tc35874x_regs.h
- luckfox-pico/sysdrv/source/kernel/drivers/media/i2c/tc35874x.c
- luckfox-pico/sysdrv/source/kernel/include/media/tc35874x.h
- tc35874x.c里的EDID_1920x1080_60 数组代表了EDID信息,由于只支持30FPS,因此这里实际修改为1080P@30
内核: luckfox-pico/sysdrv/source/kernel/arch/arm/configs/luckfox_rv1106_linux_defconfig
- CONFIG_VIDEO_TC35874X=m 添加TC35874X编译ko选项
驱动加载:luckfox-pico/sysdrv/drv_ko/insmod_ko.sh
- 这个文件决定了系统启动后加载哪些驱动
- 删除没用的摄像头驱动
- 添加tc35874x.ko
RkLunch.sh:开机启动jetkvm软件
将src中对应的文件都复制到luckfox-pico对应的目录下,再重新编译就行了
参考install.sh脚本,也可以运行脚本直接复制文件
./install.sh
# 进入SDK目录
cd luckfox-pico
# 编译系统
./build.sh
# 烧录镜像
sudo ./rkflash.sh update
JetKVM软件移植
JetKVM软件主要分为两个项目:
1. jetkvm_native
- 原项目地址:https://github.com/jetkvm/jetkvm-native
- 采用C语言开发,负责视频编码,触摸屏控制和状态显示
- 调用瑞芯微的rockit实现对csi视频的硬件编码,与jetkvm_app程序使用/var/run/jetkvm_video.sock进行通讯
- 移植需要删除lvgl和屏幕ui相关功能,仅保留video编解码相关,简化功能
- 移植后项目见:https://github.com/wl56012102/jetkvm-native
2. jetkvm_app
- 原项目地址:https://github.com/jetkvm/kvm
- 主项目,使用go开发后端,nodejs+react做前端
- 实现WebRTC视频通讯,网页相关操作界面,HID设备模拟等功能
- 移植简化功能
- 移植后项目见:https://github.com/wl56012102/jetkvm-app
3. 软件编译
# 安装编译依赖
sudo apt-get update &&
sudo apt-get install -y --no-install-recommends \
build-essential \
device-tree-compiler \
gperf g++-multilib gcc-multilib \
libnl-3-dev libdbus-1-dev libelf-dev libmpc-dev dwarves \
bc openssl flex bison libssl-dev python3 python-is-python3 texinfo kmod cmake
# 下载jetkvm-native代码
git clone https://github.com/wl56012102/jetkvm-native
cd jetkvm-native
# 下载Jetkvm-native依赖
BUILDKIT_VERSION="v0.2.2"
wget https://github.com/jetkvm/rv1106-system/releases/download/${BUILDKIT_VERSION}/buildkit.tar.zst
mkdir -p /opt/jetkvm-native-buildkit
tar --use-compress-program="unzstd --long=31" -xvf buildkit.tar.zst -C /opt/jetkvm-native-buildkit
# 编译,可执行文件在build下
make
cd ..
git clone -b dev https://github.com/wl56012102/jetkvm-app.git
cd jetkvm-app
# 需要预先装好go和nodejs环境
# 编译前端
make frontend
# 编译整个二进制包,生成的文件在bin下
make build_release
4. 软件部署
在开发板刷好系统后,串口或者IP SSH登录,将编译出来的两个可执行文件放到/userdata/jetkvm/bin/ 目录下
# 删除没用的开机脚本和usb hid
cd /etc/init.d/
rm S99usb0config
rm S99python
rm S50usbdevice
rm S99luckfoxconfigload
rm S99luckfoxcustomoverlay
reboot
#创建目录
mkdir -p /userdata/jetkvm/bin
# 在编译的机器上将文件复制到对应目录下
scp jetkvm-native/bin/jetkvm_native root@{机器IP}:/userdata/jetkvm/bin/
scp jetkvm-app/bin/jetkvm_app root@{机器IP}:/userdata/jetkvm/bin/
# 添加可执行权限
cd /userdata/jetkvm/bin/
chmod +x jetkvm_app
chmod +x jetkvm_native
# 运行程序
./jetkvm_aop
用浏览器访问设备IP,如果网页有初始化显示,则表示移植成功,如果运行有报错,查看对应报错并处理。
开机自启
最后把开发板的HDMI和USB-C接到被控制设备上,等待几秒开机,如果成功看到画面并能控制设备,表示DIY KVM 成功!
