From 57dc012d09066fec540f86cad819efc828c716a6 Mon Sep 17 00:00:00 2001 From: ThomasVon2021 <1767893964@qq.com> Date: Mon, 23 Sep 2024 17:34:50 +0800 Subject: [PATCH] chore: update some guide --- config/en/mkdocs.yml | 1 - config/zh/mkdocs.yml | 1 - docs/en/port-forwarding.md | 9 +- docs/en/update.md | 10 - docs/en/user-manager.md | 8 - docs/zh/port-forwarding.md | 7 +- docs/zh/update.md | 8 - docs/zh/user-manager.md | 5 - generated/en/404.html | 16 - generated/en/BLIHAT-Installation/index.html | 5 - generated/en/BLIKVM-CM4-guide/index.html | 5 - generated/en/BLIKVM-HAT-guide/index.html | 5 - generated/en/BLIKVM-PCIE-guide/index.html | 5 - .../en/BLIKVM-PCIe-installation/index.html | 5 - generated/en/BliKVM-v4-guide/index.html | 5 - generated/en/Datasheet-BliKVM-v4/index.html | 5 - .../en/Dev-BliKVM-v4-Allwinner/index.html | 5 - generated/en/Expand_Filesystem/index.html | 5 - generated/en/OLED-display/index.html | 5 - .../index.html | 5 - .../en/assets/images/update/update_button.png | Bin 28514 -> 0 bytes .../en/assets/images/update/update_info.png | Bin 67285 -> 0 bytes .../en/assets/images/update/update_reboot.png | Bin 51444 -> 0 bytes .../en/assets/images/update/upgrading.png | Bin 71440 -> 0 bytes generated/en/atx-guide/index.html | 5 - generated/en/atx/index.html | 5 - generated/en/dev_api/index.html | 5 - generated/en/edid/index.html | 9 +- generated/en/faq/index.html | 5 - generated/en/first_steps/index.html | 5 - generated/en/flashing_os/index.html | 5 - generated/en/hdmi-csi-i2s/index.html | 5 - generated/en/hid/index.html | 5 - generated/en/https/index.html | 5 - generated/en/index.html | 5 - generated/en/make-image/index.html | 5 - generated/en/modify_pikvm_image/index.html | 5 - generated/en/msd/index.html | 5 - generated/en/port-forwarding/index.html | 15 +- generated/en/rtc/index.html | 5 - generated/en/search/search_index.json | 2 +- generated/en/serial_over_usb/index.html | 5 - generated/en/sitemap.xml | 79 ++- generated/en/sitemap.xml.gz | Bin 218 -> 219 bytes generated/en/ssh/index.html | 5 - generated/en/static_ip/index.html | 5 - generated/en/switch-guide/index.html | 5 - generated/en/tailscale/index.html | 5 - generated/en/update/index.html | 26 - generated/en/usb-splitter-guide/index.html | 5 - generated/en/user-manager/index.html | 527 ------------------ generated/en/wake-on-lan/index.html | 9 +- generated/en/wifi/index.html | 5 - generated/en/zerotier/index.html | 5 - generated/zh/404.html | 16 - generated/zh/BLIHAT-Installation/index.html | 5 - generated/zh/BLIKVM-CM4-guide/index.html | 5 - generated/zh/BLIKVM-HAT-guide/index.html | 5 - generated/zh/BLIKVM-PCIE-guide-zh/index.html | 5 - .../zh/BLIKVM-PCIe-installation-zh/index.html | 5 - generated/zh/BliKVM-v4-guide/index.html | 5 - generated/zh/Datasheet-BliKVM-v4/index.html | 5 - generated/zh/Expand_Filesystem/index.html | 5 - generated/zh/OLED-display/index.html | 5 - .../index.html | 5 - .../zh/assets/images/update/update_button.png | Bin 28514 -> 0 bytes .../zh/assets/images/update/update_info.png | Bin 67285 -> 0 bytes .../zh/assets/images/update/update_reboot.png | Bin 51444 -> 0 bytes .../zh/assets/images/update/upgrading.png | Bin 71440 -> 0 bytes generated/zh/atx-guide/index.html | 5 - generated/zh/atx/index.html | 5 - generated/zh/dev-v4/index.html | 5 - generated/zh/dev_api/index.html | 5 - generated/zh/edid/index.html | 9 +- generated/zh/faq/index.html | 5 - generated/zh/first_steps/index.html | 5 - generated/zh/flashing_os/index.html | 5 - generated/zh/hdmi-csi-i2s/index.html | 5 - generated/zh/hid/index.html | 5 - generated/zh/https/index.html | 5 - generated/zh/index.html | 5 - generated/zh/jetson_nano_tc358743/index.html | 5 - generated/zh/make-image/index.html | 5 - generated/zh/modify_pikvm_image/index.html | 5 - generated/zh/msd/index.html | 5 - generated/zh/port-forwarding/index.html | 12 +- generated/zh/rtc/index.html | 5 - generated/zh/search/search_index.json | 2 +- generated/zh/serial_over_usb/index.html | 5 - generated/zh/sitemap.xml | 81 ++- generated/zh/sitemap.xml.gz | Bin 220 -> 218 bytes generated/zh/ssh/index.html | 5 - generated/zh/static_ip/index.html | 5 - generated/zh/switch-guide/index.html | 5 - generated/zh/tailscale/index.html | 5 - generated/zh/update/index.html | 26 - generated/zh/usb-splitter-guide/index.html | 5 - generated/zh/user-manager/index.html | 522 ----------------- generated/zh/wake-on-lan/index.html | 9 +- generated/zh/wifi/index.html | 5 - generated/zh/zerotier/index.html | 5 - .../assets/images/update/update_button.png | Bin 28514 -> 0 bytes .../assets/images/update/update_info.png | Bin 67285 -> 0 bytes .../assets/images/update/update_reboot.png | Bin 51444 -> 0 bytes overrides/assets/images/update/upgrading.png | Bin 71440 -> 0 bytes 105 files changed, 96 insertions(+), 1648 deletions(-) delete mode 100644 docs/en/user-manager.md delete mode 100644 docs/zh/user-manager.md delete mode 100644 generated/en/assets/images/update/update_button.png delete mode 100644 generated/en/assets/images/update/update_info.png delete mode 100644 generated/en/assets/images/update/update_reboot.png delete mode 100644 generated/en/assets/images/update/upgrading.png delete mode 100644 generated/en/user-manager/index.html delete mode 100644 generated/zh/assets/images/update/update_button.png delete mode 100644 generated/zh/assets/images/update/update_info.png delete mode 100644 generated/zh/assets/images/update/update_reboot.png delete mode 100644 generated/zh/assets/images/update/upgrading.png delete mode 100644 generated/zh/user-manager/index.html delete mode 100644 overrides/assets/images/update/update_button.png delete mode 100644 overrides/assets/images/update/update_info.png delete mode 100644 overrides/assets/images/update/update_reboot.png delete mode 100644 overrides/assets/images/update/upgrading.png diff --git a/config/en/mkdocs.yml b/config/en/mkdocs.yml index 93611ad7..e80dad7d 100644 --- a/config/en/mkdocs.yml +++ b/config/en/mkdocs.yml @@ -92,7 +92,6 @@ nav: - "Serial-over-USB": serial_over_usb.md - "MSD": msd.md - "HDMI EDID": edid.md - - "User Manager": user-manager.md - "Wake-on-LAN": wake-on-lan.md - "SSH Terminal": ssh.md - "Installation Instructions": diff --git a/config/zh/mkdocs.yml b/config/zh/mkdocs.yml index 01edfe6b..8e446961 100644 --- a/config/zh/mkdocs.yml +++ b/config/zh/mkdocs.yml @@ -92,7 +92,6 @@ nav: - "U盘驱动": msd.md - "串口终端": serial_over_usb.md - "HDMI EDID设置": edid.md - - "修改账号密码": user-manager.md - "Wake-on-LAN": wake-on-lan.md - "SSH终端": ssh.md - "安装说明": diff --git a/docs/en/port-forwarding.md b/docs/en/port-forwarding.md index 19b1bdd0..47fab813 100644 --- a/docs/en/port-forwarding.md +++ b/docs/en/port-forwarding.md @@ -1,10 +1,7 @@ # **Port forwarding** -If your ISP provides an external IP address for the router, you can configure Port forwarding to access BliKVM: - -* The web interface uses the HTTP protocol and occupies port 80; -* If your hardware is v1 v2 v3 and you are using web rtc transmission, the port is 8188; -* If your hardware is v4 and you are using mjepg transmission, the port is 8008; -* Note that the port does not support modification and can only be configured for forwarding; +After v1.4.7 version If your ISP provides an external IP address for the router, you can configure Port forwarding to access BliKVM: +* If the web interface uses the HTTP protocol and occupies port 80; +* If the web interface uses the HTTPS protocol and occupies port 443; If you do not have an external IP address, we suggest trying to use [Tailscale VPN](./tailscale.md)。 diff --git a/docs/en/update.md b/docs/en/update.md index a6f5fff4..2d88189b 100644 --- a/docs/en/update.md +++ b/docs/en/update.md @@ -39,13 +39,3 @@ python3 install_release.py --releasepath=./ ``` You can compare the versions before and after in `/usr/bin/blikvm/package.json`. If you have upgraded to the specified version, the installation is successful, and you can reboot for the changes to take effect. - -## **Web UI Update** - -!!! warning "The current web upgrade function is temporarily disabled. Please use the command line to update" - -!!! info "After clicking the More Options button, find the Check Update button and click it. If the available version is found, the pop-up box in the figure below will appear. Click OK to enter the upgrade process. The web interface is temporarily inoperable during the upgrade process. View the current update status by manually refreshing the page. When the message of successful update appears, it means that the update has been successful. Click the restart button, and the new version of software will take effect." - ![IMG_8366](assets/images/update/update_button.png){width="300"} - ![IMG_8366](assets/images/update/update_info.png){width="300"} - ![IMG_8366](assets/images/update/upgrading.png){width="300"} - ![IMG_8366](assets/images/update/update_reboot.png){width="300"} diff --git a/docs/en/user-manager.md b/docs/en/user-manager.md deleted file mode 100644 index 07673469..00000000 --- a/docs/en/user-manager.md +++ /dev/null @@ -1,8 +0,0 @@ -# **User Manager** - -In the 'More Settings' section, click on 'User Management' to modify your username and password. After changing your account password, it is necessary to restart the KVM system for the changes to take effect. - -Please note that after the modification, the original `admin` user will no longer be able to log in. - -The global default password path can be found at `/etc/kvm.d/conf/admin.ini`. -![change-acc](assets/images/user-manager/change_account.png){width="600"} diff --git a/docs/zh/port-forwarding.md b/docs/zh/port-forwarding.md index 4361e070..28b2daf0 100644 --- a/docs/zh/port-forwarding.md +++ b/docs/zh/port-forwarding.md @@ -1,10 +1,7 @@ # **端口转发** -如果您的ISP为路由器提供了外部IP地址,您可以配置端口转发以访问BliKVM。 +在v1.4.7版本后,如果您的ISP为路由器提供了外部IP地址,您可以配置端口转发以访问BliKVM。 -* Web界面为http协议,占用的是80端口; -* 如果您的硬件是V1 V2 V3,使用的是是web-rtc传输,端口是8188; -* 如果您的硬件是V4,使用的是mjepg传输,端口是8008; -* 注意端口不支持被修改,只能配置转发; +* Web如果选择为http协议,占用的是80端口,如果选择的为https协议占用的是443; 如果您没有外部IP地址,我们建议尝试使用[Tailscale VPN](./tailscale.md)。 diff --git a/docs/zh/update.md b/docs/zh/update.md index 5d22c739..e83bcda3 100644 --- a/docs/zh/update.md +++ b/docs/zh/update.md @@ -36,14 +36,6 @@ python3 install_release.py --releasepath=./ ``` 可以观察/usr/bin/blikvm/package.json前后的版本对比,若升级到了指定版本,则成功,重启生效。 - -## **Web界面更新** -!!! warning "当前web升级功能暂时关闭,请使用命令行更新" -!!! info "点击更多选项按钮后,找到**检查更新**按钮并点击,若发现可用版本,会出现下图中的弹框,点击**OK**,即进入升级,升级过程中web界面暂时不可操作。通过手动刷新页面,查看目前更新状态。当出现更新成功的消息提醒时,即表示更新已成功,点击重启按钮,新版本软件就会生效。" - ![IMG_8366](assets/images/update/update_button.png){width="300"} - ![IMG_8366](assets/images/update/update_info.png){width="300"} - ![IMG_8366](assets/images/update/upgrading.png){width="300"} - ![IMG_8366](assets/images/update/update_reboot.png){width="300"} diff --git a/docs/zh/user-manager.md b/docs/zh/user-manager.md deleted file mode 100644 index 8af6e350..00000000 --- a/docs/zh/user-manager.md +++ /dev/null @@ -1,5 +0,0 @@ -# **修改账号密码** -在更多设置里,点击用户管理,修改用户名和密码。修改账号密码后,需要重启kvm系统才能生效。 -修改完后原来的admin用户不可登录。 -全局默认密码路径在 ```/etc/kvm.d/conf/admin.ini``` -![](assets/images/user-manager/change_account.png){width="400"} \ No newline at end of file diff --git a/generated/en/404.html b/generated/en/404.html index 475662c7..6cbbcf59 100644 --- a/generated/en/404.html +++ b/generated/en/404.html @@ -596,8 +596,6 @@ - - @@ -746,20 +744,6 @@ -
  • - - User Manager - -
  • - - - - - - - - -
  • Wake-on-LAN diff --git a/generated/en/BLIHAT-Installation/index.html b/generated/en/BLIHAT-Installation/index.html index 2d9b1b26..c650b4d8 100644 --- a/generated/en/BLIHAT-Installation/index.html +++ b/generated/en/BLIHAT-Installation/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/BLIKVM-CM4-guide/index.html b/generated/en/BLIKVM-CM4-guide/index.html index eb1df49c..49d015c5 100644 --- a/generated/en/BLIKVM-CM4-guide/index.html +++ b/generated/en/BLIKVM-CM4-guide/index.html @@ -363,11 +363,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/BLIKVM-HAT-guide/index.html b/generated/en/BLIKVM-HAT-guide/index.html index fbebac99..413c2bb7 100644 --- a/generated/en/BLIKVM-HAT-guide/index.html +++ b/generated/en/BLIKVM-HAT-guide/index.html @@ -411,11 +411,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/BLIKVM-PCIE-guide/index.html b/generated/en/BLIKVM-PCIE-guide/index.html index a00ee6cb..5a966717 100644 --- a/generated/en/BLIKVM-PCIE-guide/index.html +++ b/generated/en/BLIKVM-PCIE-guide/index.html @@ -402,11 +402,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/BLIKVM-PCIe-installation/index.html b/generated/en/BLIKVM-PCIe-installation/index.html index 8b98477e..dda0e353 100644 --- a/generated/en/BLIKVM-PCIe-installation/index.html +++ b/generated/en/BLIKVM-PCIe-installation/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/BliKVM-v4-guide/index.html b/generated/en/BliKVM-v4-guide/index.html index 6ae2fefb..14d787b1 100644 --- a/generated/en/BliKVM-v4-guide/index.html +++ b/generated/en/BliKVM-v4-guide/index.html @@ -368,11 +368,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/Datasheet-BliKVM-v4/index.html b/generated/en/Datasheet-BliKVM-v4/index.html index 0e51b1bc..d5053021 100644 --- a/generated/en/Datasheet-BliKVM-v4/index.html +++ b/generated/en/Datasheet-BliKVM-v4/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/Dev-BliKVM-v4-Allwinner/index.html b/generated/en/Dev-BliKVM-v4-Allwinner/index.html index ce149d61..a012c2ed 100644 --- a/generated/en/Dev-BliKVM-v4-Allwinner/index.html +++ b/generated/en/Dev-BliKVM-v4-Allwinner/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/Expand_Filesystem/index.html b/generated/en/Expand_Filesystem/index.html index 9f0e4d0c..db439936 100644 --- a/generated/en/Expand_Filesystem/index.html +++ b/generated/en/Expand_Filesystem/index.html @@ -343,11 +343,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/OLED-display/index.html b/generated/en/OLED-display/index.html index b9cf0a1f..66fd2870 100644 --- a/generated/en/OLED-display/index.html +++ b/generated/en/OLED-display/index.html @@ -333,11 +333,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/Product-Datasheet-BliKVM-v1-RPI-CM4/index.html b/generated/en/Product-Datasheet-BliKVM-v1-RPI-CM4/index.html index 52896c73..9dda7286 100644 --- a/generated/en/Product-Datasheet-BliKVM-v1-RPI-CM4/index.html +++ b/generated/en/Product-Datasheet-BliKVM-v1-RPI-CM4/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/assets/images/update/update_button.png b/generated/en/assets/images/update/update_button.png deleted file mode 100644 index 56c94fa1468907ac8cdd49455ee477ddc46bb92f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28514 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 G!u$uE{=*{x diff --git a/generated/en/assets/images/update/update_info.png b/generated/en/assets/images/update/update_info.png deleted file mode 100644 index b39547b6b792842778fa06393196335a75278691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67285 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 {G3jGj(XkpZoz<%ZUa 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 diff --git a/generated/en/assets/images/update/upgrading.png b/generated/en/assets/images/update/upgrading.png deleted file mode 100644 index fa50201815e659899b08fd9c716bfea0d1f3bf5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71440 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 O0000
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/atx/index.html b/generated/en/atx/index.html index c322595b..989b634a 100644 --- a/generated/en/atx/index.html +++ b/generated/en/atx/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/dev_api/index.html b/generated/en/dev_api/index.html index 2933efc5..00e6cee5 100644 --- a/generated/en/dev_api/index.html +++ b/generated/en/dev_api/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/edid/index.html b/generated/en/edid/index.html index 1d811a85..19b2ce8a 100644 --- a/generated/en/edid/index.html +++ b/generated/en/edid/index.html @@ -348,11 +348,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN @@ -618,13 +613,13 @@

    Custom EDID

    -
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/first_steps/index.html b/generated/en/first_steps/index.html index 73ab6e29..4d709de2 100644 --- a/generated/en/first_steps/index.html +++ b/generated/en/first_steps/index.html @@ -353,11 +353,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/flashing_os/index.html b/generated/en/flashing_os/index.html index e057d60e..f5f76757 100644 --- a/generated/en/flashing_os/index.html +++ b/generated/en/flashing_os/index.html @@ -371,11 +371,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/hdmi-csi-i2s/index.html b/generated/en/hdmi-csi-i2s/index.html index c6c66481..0569bb1e 100644 --- a/generated/en/hdmi-csi-i2s/index.html +++ b/generated/en/hdmi-csi-i2s/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/hid/index.html b/generated/en/hid/index.html index 7f3fa6fe..11837d22 100644 --- a/generated/en/hid/index.html +++ b/generated/en/hid/index.html @@ -333,11 +333,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/https/index.html b/generated/en/https/index.html index d1d75bc7..23dc7603 100644 --- a/generated/en/https/index.html +++ b/generated/en/https/index.html @@ -316,11 +316,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/index.html b/generated/en/index.html index e865c04e..f4b8708f 100644 --- a/generated/en/index.html +++ b/generated/en/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/make-image/index.html b/generated/en/make-image/index.html index c44ab54e..81eb13fc 100644 --- a/generated/en/make-image/index.html +++ b/generated/en/make-image/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/modify_pikvm_image/index.html b/generated/en/modify_pikvm_image/index.html index 31bf4a72..ca535be3 100644 --- a/generated/en/modify_pikvm_image/index.html +++ b/generated/en/modify_pikvm_image/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/msd/index.html b/generated/en/msd/index.html index a5a2847c..13ccf968 100644 --- a/generated/en/msd/index.html +++ b/generated/en/msd/index.html @@ -338,11 +338,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/port-forwarding/index.html b/generated/en/port-forwarding/index.html index 50282ae8..87b3435f 100644 --- a/generated/en/port-forwarding/index.html +++ b/generated/en/port-forwarding/index.html @@ -316,11 +316,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN @@ -447,14 +442,12 @@

    Port forwarding

    -

    If your ISP provides an external IP address for the router, you can configure Port forwarding to access BliKVM:

    +

    After v1.4.7 version If your ISP provides an external IP address for the router, you can configure Port forwarding to access BliKVM:

      -
    • The web interface uses the HTTP protocol and occupies port 80;
    • -
    • If your hardware is v1 v2 v3 and you are using web rtc transmission, the port is 8188;
    • -
    • If your hardware is v4 and you are using mjepg transmission, the port is 8008;
    • -
    • Note that the port does not support modification and can only be configured for forwarding;
    • +
    • If the web interface uses the HTTP protocol and occupies port 80;
    • +
    • If the web interface uses the HTTPS protocol and occupies port 443; +If you do not have an external IP address, we suggest trying to use Tailscale VPN
    -

    If you do not have an external IP address, we suggest trying to use Tailscale VPN


    diff --git a/generated/en/rtc/index.html b/generated/en/rtc/index.html index a983e590..20d830f2 100644 --- a/generated/en/rtc/index.html +++ b/generated/en/rtc/index.html @@ -338,11 +338,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/search/search_index.json b/generated/en/search/search_index.json index 85b8fc90..2975d3d2 100644 --- a/generated/en/search/search_index.json +++ b/generated/en/search/search_index.json @@ -1 +1 @@ -{"config":{"indexing":"full","lang":["en","ja","ru"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"BLIKVM Overview BLIKVM is an open-source KVM, it has four versions: v1 CM4, v2 PCIe, v3 HAT and the v4 Allwinner. This device helps to manage servers or workstations remotely, regardless of the health of the operating system or whether one is installed. You can fix any problem, configure the BIOS, and even reinstall the OS using the virtual CD-ROM or Flash Drive. Unlike software-based remote management, you don't need to install any software on the controlled computer, providing non-intrusive control. Here you will find comprehensive information about all aspects of the operation of BLIKVM. Join our BLIKVM Discord Community for Support, FAQ & News! FEATURE BliKVM v1 CM4 BliKVM v2 PCIe BliKVM v3 HAT BliKVM v4 /H313 SOC Raspberry CM4 Raspberry CM4 Raspberry 4B Allwinner H616/H313 Supported resolutions 1920x1080@60Hz 1920x1080@60Hz 1920x1080@50Hz 3840x2160@30Hz HDMI Capture TC358743 TC358743 TC358743 MS2131 HDMI Loop Through No No No Yes POE No Yes Yes Yes DC-IN No No No Yes USB-C Power Yes Yes Yes Yes USB Power/Data Splitter Yes Yes(external) Yes Yes Serial Console No Yes Yes Yes ATX controls Yes Yes Yes Yes BIOS controls Yes Yes Yes Yes Open source system Yes Yes Yes Yes Reinstall the controlled computer system Yes Yes Yes Yes FAN Yes(Not support PWM controls) Yes Yes Optional(default with heat sink) Display Module OLED 128x64 white OLED 128x32 white OLED 128x64 white LCD 240x240 color Real Time Clock Yes(DS1307) Yes(PCF8563) Yes(PCF8563) Yes(PCF8563) Case Metallic Black No Metallic Black White Blue Orange(1U rack compatible) Metallic Black(1U rack compatible) Buzzer No No No Yes Custom button No No No Yes Software update Yes Yes Yes Yes 32GB SD Card Yes (OS included) Yes (OS included) Yes (OS included) Yes (OS included) HDMI backpower mitigation No Yes Yes Yes Professional technical support Yes Yes Yes Yes Features Video capture (1080P 60Hz) Keyboard forwarding Mouse forwarding ATX Fan Control Fullscreen mode Paste text from clipboard VPN support Mass Storage Drive (emulate a CD-ROM or Flash Drive) Multiport KVM over IP OLED to display system info, like temp, uptime, IP Password authentication Support multiple languages Wake-on-LAN Guides 1. BLIKVM v1 CM4 version 2. BLIKVM v2 PCIE version 3. BLIKVM v3 HAT version 4. BliKVM v4 Allwinner version","title":"BLIKVM Overview"},{"location":"#blikvm-overview","text":"BLIKVM is an open-source KVM, it has four versions: v1 CM4, v2 PCIe, v3 HAT and the v4 Allwinner. This device helps to manage servers or workstations remotely, regardless of the health of the operating system or whether one is installed. You can fix any problem, configure the BIOS, and even reinstall the OS using the virtual CD-ROM or Flash Drive. Unlike software-based remote management, you don't need to install any software on the controlled computer, providing non-intrusive control. Here you will find comprehensive information about all aspects of the operation of BLIKVM. Join our BLIKVM Discord Community for Support, FAQ & News! FEATURE BliKVM v1 CM4 BliKVM v2 PCIe BliKVM v3 HAT BliKVM v4 /H313 SOC Raspberry CM4 Raspberry CM4 Raspberry 4B Allwinner H616/H313 Supported resolutions 1920x1080@60Hz 1920x1080@60Hz 1920x1080@50Hz 3840x2160@30Hz HDMI Capture TC358743 TC358743 TC358743 MS2131 HDMI Loop Through No No No Yes POE No Yes Yes Yes DC-IN No No No Yes USB-C Power Yes Yes Yes Yes USB Power/Data Splitter Yes Yes(external) Yes Yes Serial Console No Yes Yes Yes ATX controls Yes Yes Yes Yes BIOS controls Yes Yes Yes Yes Open source system Yes Yes Yes Yes Reinstall the controlled computer system Yes Yes Yes Yes FAN Yes(Not support PWM controls) Yes Yes Optional(default with heat sink) Display Module OLED 128x64 white OLED 128x32 white OLED 128x64 white LCD 240x240 color Real Time Clock Yes(DS1307) Yes(PCF8563) Yes(PCF8563) Yes(PCF8563) Case Metallic Black No Metallic Black White Blue Orange(1U rack compatible) Metallic Black(1U rack compatible) Buzzer No No No Yes Custom button No No No Yes Software update Yes Yes Yes Yes 32GB SD Card Yes (OS included) Yes (OS included) Yes (OS included) Yes (OS included) HDMI backpower mitigation No Yes Yes Yes Professional technical support Yes Yes Yes Yes","title":"BLIKVM Overview"},{"location":"#features","text":"Video capture (1080P 60Hz) Keyboard forwarding Mouse forwarding ATX Fan Control Fullscreen mode Paste text from clipboard VPN support Mass Storage Drive (emulate a CD-ROM or Flash Drive) Multiport KVM over IP OLED to display system info, like temp, uptime, IP Password authentication Support multiple languages Wake-on-LAN","title":"Features"},{"location":"#guides","text":"1. BLIKVM v1 CM4 version 2. BLIKVM v2 PCIE version 3. BLIKVM v3 HAT version 4. BliKVM v4 Allwinner version","title":"Guides"},{"location":"BLIHAT-Installation/","text":"BLIHAT Installation Guide 1. Unpack and take out the devices Open the protective bag 2. Install the main device Flip to back Open the case Flip to back, unscrew the two screws on the back Open the protective bag and take out the parts Install Micro SD card Install the FFC cable Install the HAT on the Raspberry Pi 4 Install the four Hex Spacers Install the C790 module, use the long screws you just removed Install the audio cable Stick a heat conductive sheet on the back of the Raspberry Pi 4, tear off the protective film of the sheet Install the HAT into the case Pay attention to the alignment of the holes Flip to back and install 4 screws Install five case screws Install the mounting ear as needed The main device installation is complete","title":"v3 HAT Illustrated Instructions"},{"location":"BLIHAT-Installation/#blihat-installation-guide","text":"","title":"BLIHAT Installation Guide"},{"location":"BLIHAT-Installation/#1-unpack-and-take-out-the-devices","text":"Open the protective bag","title":"1. Unpack and take out the devices"},{"location":"BLIHAT-Installation/#2-install-the-main-device","text":"Flip to back Open the case Flip to back, unscrew the two screws on the back Open the protective bag and take out the parts Install Micro SD card Install the FFC cable Install the HAT on the Raspberry Pi 4 Install the four Hex Spacers Install the C790 module, use the long screws you just removed Install the audio cable Stick a heat conductive sheet on the back of the Raspberry Pi 4, tear off the protective film of the sheet Install the HAT into the case Pay attention to the alignment of the holes Flip to back and install 4 screws Install five case screws Install the mounting ear as needed The main device installation is complete","title":"2. Install the main device"},{"location":"BLIKVM-CM4-guide/","text":"BLIKVM-CM4 version guide Geerling: Engineering Test video BliKVM v1 is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! BliKVM v1 Datasheet Features Video capture (HDMI, support 1080P@60Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Serial console port OLED display Real Time Clock (RTC) FAN Installation requirements If you have an assembly kit, you will need the following things Raspberry CM4 with 1Gb RAM or more. USB-C to USB-A cable. HDMI cable. Straight Ethernet cable (for the ATX board connection). Power supply unit (5.1V 3A USB-C, recommended by the Raspberry Pi). Power supply You must use a USB-C to USB-A cable. Using a USB-C to USB-C cable will not work. This is an incompatibility in the hardware design and will be fixed in a later version. Basic setup 1. The SD card preloaded with the factory default image does not require burning. If you need to reflash the system or for DIY purposes, you can follow Flash the memory card or eMMC 2. If you have a non-plug version, refer to the video and instructions below for device installation: Use the provided screwdriver to open the metal casing and remove the PCB motherboard. Install the CM4 onto the PCB motherboard, ensuring that the two rows of card slots are aligned. Apply the thermal conductive silicone pad onto the CM4 main chip to facilitate heat dissipation using the metal casing. The fan is not connected by default as the metal casing provides sufficient heat dissipation. Depending on your CM4 version, selectively install the Wi-Fi antenna. Reassemble the PCB motherboard and the metal casing to complete the installation. Please note that translations might vary depending on context and specific terminology used in technical instructions. Video Guide: Metal case step by step Ortimo: BLIKVM with Raspberry PI CM4 16GB EMMC setup 3. Connect BLIKVM to the computer according to the diagram below: HDMI IN and otg port must be connected to the computer. ATX too, but it\u2019s optional, read below. There should be no USB hub between BLIKVM and the computer, as some UEFI/BIOS cannot detect them at the boot stage. BLIKVM supports 1080p60Hz or lower about HDMI source. Connect Ethernet to the network and PWR IN to the BLIKVM power supply. 4. ATX connection To manage the power of your computer, you will connect CN-ATX port to the computer.The user can use the ATX cable provided with the product to connect the product and the motherboard ATX switch of the controlled computer. The length of the ATX cable is 60CM, you can also use the double female Dupont cables. To accommodate ATX control boards with Ethernet ports, v1 has a dedicated ATX expansion kit available. This kit enables customers to connect the ATX board installed on the chassis panel directly using an Ethernet cable. 5. After all the connecting cables are properly set up, power on the BliKVM until the display screen shows an image, indicating that the device has successfully started. 6. Read the \"First Steps\" guide carefully. It provides instructions on how to find the device on the network, how to log in, change passwords, and more. Follow the steps described there and then return to this page. As BliKVM v1 also supports PiKVM OS, if your v1 comes with PiKVM as the factory OS, please refer to the documentation for web usage instructions . 7. Try managing your computer using the BliKVM web interface. Make sure you can see the image and that the keyboard and mouse are working properly. If you encounter any issues, check out our FAQ (it's very helpful). If you find no solution there, seek support in our Discord chat room . 8. You can explore other pages in the wiki to discover more features of BliKVM. Enjoy your experience! Wi-Fi Antenna Connection If your CM4 has Wi-Fi functionality, open the metal casing of v1 and attach the Wi-Fi antenna from the package to the IPX interface on the CM4, as shown by the red box in the diagram below; the installation location on the casing for the antenna is defined as position 11 in the interface layout diagram. Support 1080p60hz HDMI input First in V2.2 version, there is CSI channel switch. This switch is switch 2 csi channels or 4 csi channels. In other versions, the switch is obsolete. Newer keeps the factory state, ignore this switch. Only flip the switch when the device is powered off, otherwise it may cause permanent damage! The four small switches should be up or down at the same time. Product List BLIKVM v1 excluding CM4 Case 1 PCB 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 OLED 1 BLIKVM v1 including CM4102000 Case 1 PCB 1 CM4102000 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 OLED 1 WiFi antenna 1 BLIKVM v1 including CM4002000 Case 1 PCB 1 CM4002000 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 WiFi antenna 1 Buy link Buy v1","title":"BliKVM v1 CM4 Guide"},{"location":"BLIKVM-CM4-guide/#blikvm-cm4-version-guide","text":"Geerling: Engineering Test video BliKVM v1 is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! BliKVM v1 Datasheet","title":"BLIKVM-CM4 version guide"},{"location":"BLIKVM-CM4-guide/#features","text":"Video capture (HDMI, support 1080P@60Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Serial console port OLED display Real Time Clock (RTC) FAN","title":"Features"},{"location":"BLIKVM-CM4-guide/#installation-requirements","text":"If you have an assembly kit, you will need the following things Raspberry CM4 with 1Gb RAM or more. USB-C to USB-A cable. HDMI cable. Straight Ethernet cable (for the ATX board connection). Power supply unit (5.1V 3A USB-C, recommended by the Raspberry Pi). Power supply You must use a USB-C to USB-A cable. Using a USB-C to USB-C cable will not work. This is an incompatibility in the hardware design and will be fixed in a later version.","title":"Installation requirements"},{"location":"BLIKVM-CM4-guide/#basic-setup","text":"1. The SD card preloaded with the factory default image does not require burning. If you need to reflash the system or for DIY purposes, you can follow Flash the memory card or eMMC 2. If you have a non-plug version, refer to the video and instructions below for device installation: Use the provided screwdriver to open the metal casing and remove the PCB motherboard. Install the CM4 onto the PCB motherboard, ensuring that the two rows of card slots are aligned. Apply the thermal conductive silicone pad onto the CM4 main chip to facilitate heat dissipation using the metal casing. The fan is not connected by default as the metal casing provides sufficient heat dissipation. Depending on your CM4 version, selectively install the Wi-Fi antenna. Reassemble the PCB motherboard and the metal casing to complete the installation. Please note that translations might vary depending on context and specific terminology used in technical instructions. Video Guide: Metal case step by step Ortimo: BLIKVM with Raspberry PI CM4 16GB EMMC setup 3. Connect BLIKVM to the computer according to the diagram below: HDMI IN and otg port must be connected to the computer. ATX too, but it\u2019s optional, read below. There should be no USB hub between BLIKVM and the computer, as some UEFI/BIOS cannot detect them at the boot stage. BLIKVM supports 1080p60Hz or lower about HDMI source. Connect Ethernet to the network and PWR IN to the BLIKVM power supply. 4. ATX connection To manage the power of your computer, you will connect CN-ATX port to the computer.The user can use the ATX cable provided with the product to connect the product and the motherboard ATX switch of the controlled computer. The length of the ATX cable is 60CM, you can also use the double female Dupont cables. To accommodate ATX control boards with Ethernet ports, v1 has a dedicated ATX expansion kit available. This kit enables customers to connect the ATX board installed on the chassis panel directly using an Ethernet cable. 5. After all the connecting cables are properly set up, power on the BliKVM until the display screen shows an image, indicating that the device has successfully started. 6. Read the \"First Steps\" guide carefully. It provides instructions on how to find the device on the network, how to log in, change passwords, and more. Follow the steps described there and then return to this page. As BliKVM v1 also supports PiKVM OS, if your v1 comes with PiKVM as the factory OS, please refer to the documentation for web usage instructions . 7. Try managing your computer using the BliKVM web interface. Make sure you can see the image and that the keyboard and mouse are working properly. If you encounter any issues, check out our FAQ (it's very helpful). If you find no solution there, seek support in our Discord chat room . 8. You can explore other pages in the wiki to discover more features of BliKVM. Enjoy your experience!","title":"Basic setup"},{"location":"BLIKVM-CM4-guide/#wi-fi-antenna-connection","text":"If your CM4 has Wi-Fi functionality, open the metal casing of v1 and attach the Wi-Fi antenna from the package to the IPX interface on the CM4, as shown by the red box in the diagram below; the installation location on the casing for the antenna is defined as position 11 in the interface layout diagram.","title":"Wi-Fi Antenna Connection"},{"location":"BLIKVM-CM4-guide/#support-1080p60hz-hdmi-input","text":"First in V2.2 version, there is CSI channel switch. This switch is switch 2 csi channels or 4 csi channels. In other versions, the switch is obsolete. Newer keeps the factory state, ignore this switch. Only flip the switch when the device is powered off, otherwise it may cause permanent damage! The four small switches should be up or down at the same time.","title":"Support 1080p60hz HDMI input"},{"location":"BLIKVM-CM4-guide/#product-list","text":"BLIKVM v1 excluding CM4 Case 1 PCB 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 OLED 1 BLIKVM v1 including CM4102000 Case 1 PCB 1 CM4102000 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 OLED 1 WiFi antenna 1 BLIKVM v1 including CM4002000 Case 1 PCB 1 CM4002000 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 WiFi antenna 1","title":"Product List"},{"location":"BLIKVM-CM4-guide/#buy-link","text":"Buy v1","title":"Buy link"},{"location":"BLIKVM-HAT-guide/","text":"BLIKVM HAT version guide Introduction BLIKVM hat Video The Raspberry Pi IPKVM HAT is an add-on board for Raspberry Pi 4, made especially for KVM Over IP. The BLIKVM-RPI4 is a Raspberry Pi 4 PoE KVM HAT. This product\u2019s key features include video capture, ATX adapter, PoE, OLED and RTC. The product has a customized metal case to dissipate heat and provide protection for the HAT. The product can be easily installed on a standard 1U rack. The product is currently perfectly compatible with BliKVM image and PiKVM image. Features Video capture (HDMI, support 1080P@50Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Adapter : Control the server power using ATX functions Fullscreen mode Access via Web UI Multi Language switching support PoE support Serial console port OLED display Real Time Clock (RTC) PWM FAN Interface HAT part: HDMI IN ATX Port OLED PoE jumper Raspberry 4B part: SD CARD ACT LED PWR LED USB-PC HDMI 0 HDMI 1 A/V ETH(1000M) & PoE 2x USB 2.0 Ports & 2x USB 3.0 Ports Installation requirements If you have an assembly kit, you will need the following things Raspberry Pi 4B with 1Gb RAM or more. HDMI cable. Straight Ethernet cable (for the ATX board connection). Power supply unit & cable(5.1V 3A USB-C, recommended by the Raspberry Pi). Basic setup 1. Flash the memory card or eMMC 2. Build BLIKVM according to the video instructions or review the illustrated instructions : Video Guide: Metal case step by step 3. Install the ATX adapter board The board has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. Choose one as needed Use Dupont cables to connect ATX adapter board to motherboard and chassis panel. There are clear pin definitions on the board for easy wiring. Mount the ATX adapter board to the case shell Use a RJ45 network cable to connect the board to the CN-ATX interface of the HAT 4. Connect the HDMI cable Connect the HDMI output port of the computer directly to the HDMI IN port of the HAT with an HDMI cable. The HDMI pass-through EDID emulator is not necessary! If your computer does not output the correct HDMI format, plug the HDMI pass-through EDID emulator into the HDMI output port of the computer. This allows you to configure a fixed HDMI output format on your computer. 5. Install the USB cable Connect the RPI4 port to the Raspberry Pi 4 Connect the USB port to the controlled computer When using PoE power supply, there is no need to connect the PWR port. When not using PoE power supply, connect the PWR port to a standard 5V/3A USB power supply. 6. Test Powered by PoE, the HAT is connected to the router via the network cable The screen displays the current status of the device, including the machine's IP address Access the IP address of the HAT in the browser. Enjoy! Specification HDMI IN The bridge chip is Toshiba TC358743, which supports both video and audio(I2S), and the highest input resolution is 1080p@50fps. Fixed HDMI back power issue. CN-ATX The CN-ATX interface is connected to the ATX adapter board (an accessory for the HAT) through a network cable, which can turn on, off, and restart the controlled computer. Display A white OLED display with a resolution of 128x32, and the chip is SSD1306. This display can show the temperature, IP address and other information of the Raspberry Pi. PoE Standard: IEEE 802.3af PoE Input voltage: 37-57 V DC Output power: 5 V DC/2.4 A Plug in the PoE jumper cap to enable PoE power supply FAN The IPKVM HAT is fitted with a small fan that is controlled by your Raspberry Pi via GPIO12. Real Time Clock (RTC) The clock chip is PCF8563 that is controlled by your Raspberry Pi via I2C. The coin cell battery is installed under the HDMI IN module. Accessories ATX adapter board This board is connected to the switch port on the motherboard of the controlled computer with DuPont cables. The board has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. USB/PWR splitter Connect the RPI4 port to your Raspberry Pi 4. Connect the USB port to the controlled computer. When using PoE power supply, there is no need to connect the PWR port. When not using PoE power supply, connect the PWR port to a standard 5V/3A USB power supply. HDMI pass-through EDID emulator If the controlled computer does not output HDMI images correctly, please use this accessory. Connect the Source port to the controlled computer, connect the Sink port to the HAT. Then you can set the correct HDMI output on the controlled computer. Metal case The metal case protects the HAT and improve heat dissipation. There are clear port markings on the case. The case can be easily installed on a standard 1U rack. List Product List Raspberry Pi IPKVM HAT 1 ATX adapter board 1 USB/PWR splitter 1 HDMI pass-through EDID emulator 1 Metal case 1 32G TF card 1 USB Type-C to USB Type-C Cable 30cm 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Phillips screwdriver 1 Cross Wrench Sleeve 1 List of items prepared by the user Raspberry Pi 4 1 RJ45 network cable 2 USB Type-A to USB Type-C Cable 2 HDMI cable 1 PoE-sourcing equipment or 5V/3A USB adapter 1 CR1220 coin cell battery 1 Buy link Buy v3","title":"BliKVM v3 HAT Guide"},{"location":"BLIKVM-HAT-guide/#blikvm-hat-version-guide","text":"","title":"BLIKVM HAT version guide"},{"location":"BLIKVM-HAT-guide/#introduction","text":"BLIKVM hat Video The Raspberry Pi IPKVM HAT is an add-on board for Raspberry Pi 4, made especially for KVM Over IP. The BLIKVM-RPI4 is a Raspberry Pi 4 PoE KVM HAT. This product\u2019s key features include video capture, ATX adapter, PoE, OLED and RTC. The product has a customized metal case to dissipate heat and provide protection for the HAT. The product can be easily installed on a standard 1U rack. The product is currently perfectly compatible with BliKVM image and PiKVM image.","title":"Introduction"},{"location":"BLIKVM-HAT-guide/#features","text":"Video capture (HDMI, support 1080P@50Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Adapter : Control the server power using ATX functions Fullscreen mode Access via Web UI Multi Language switching support PoE support Serial console port OLED display Real Time Clock (RTC) PWM FAN","title":"Features"},{"location":"BLIKVM-HAT-guide/#interface","text":"HAT part: HDMI IN ATX Port OLED PoE jumper Raspberry 4B part: SD CARD ACT LED PWR LED USB-PC HDMI 0 HDMI 1 A/V ETH(1000M) & PoE 2x USB 2.0 Ports & 2x USB 3.0 Ports","title":"Interface"},{"location":"BLIKVM-HAT-guide/#installation-requirements","text":"If you have an assembly kit, you will need the following things Raspberry Pi 4B with 1Gb RAM or more. HDMI cable. Straight Ethernet cable (for the ATX board connection). Power supply unit & cable(5.1V 3A USB-C, recommended by the Raspberry Pi).","title":"Installation requirements"},{"location":"BLIKVM-HAT-guide/#basic-setup","text":"1. Flash the memory card or eMMC 2. Build BLIKVM according to the video instructions or review the illustrated instructions : Video Guide: Metal case step by step 3. Install the ATX adapter board The board has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. Choose one as needed Use Dupont cables to connect ATX adapter board to motherboard and chassis panel. There are clear pin definitions on the board for easy wiring. Mount the ATX adapter board to the case shell Use a RJ45 network cable to connect the board to the CN-ATX interface of the HAT 4. Connect the HDMI cable Connect the HDMI output port of the computer directly to the HDMI IN port of the HAT with an HDMI cable. The HDMI pass-through EDID emulator is not necessary! If your computer does not output the correct HDMI format, plug the HDMI pass-through EDID emulator into the HDMI output port of the computer. This allows you to configure a fixed HDMI output format on your computer. 5. Install the USB cable Connect the RPI4 port to the Raspberry Pi 4 Connect the USB port to the controlled computer When using PoE power supply, there is no need to connect the PWR port. When not using PoE power supply, connect the PWR port to a standard 5V/3A USB power supply. 6. Test Powered by PoE, the HAT is connected to the router via the network cable The screen displays the current status of the device, including the machine's IP address Access the IP address of the HAT in the browser. Enjoy!","title":"Basic setup"},{"location":"BLIKVM-HAT-guide/#specification","text":"HDMI IN The bridge chip is Toshiba TC358743, which supports both video and audio(I2S), and the highest input resolution is 1080p@50fps. Fixed HDMI back power issue. CN-ATX The CN-ATX interface is connected to the ATX adapter board (an accessory for the HAT) through a network cable, which can turn on, off, and restart the controlled computer. Display A white OLED display with a resolution of 128x32, and the chip is SSD1306. This display can show the temperature, IP address and other information of the Raspberry Pi. PoE Standard: IEEE 802.3af PoE Input voltage: 37-57 V DC Output power: 5 V DC/2.4 A Plug in the PoE jumper cap to enable PoE power supply FAN The IPKVM HAT is fitted with a small fan that is controlled by your Raspberry Pi via GPIO12. Real Time Clock (RTC) The clock chip is PCF8563 that is controlled by your Raspberry Pi via I2C. The coin cell battery is installed under the HDMI IN module.","title":"Specification"},{"location":"BLIKVM-HAT-guide/#accessories","text":"","title":"Accessories"},{"location":"BLIKVM-HAT-guide/#atx-adapter-board","text":"This board is connected to the switch port on the motherboard of the controlled computer with DuPont cables. The board has a standard PCIe I/O bracket and a low profile PCIe I/O bracket.","title":"ATX adapter board"},{"location":"BLIKVM-HAT-guide/#usbpwr-splitter","text":"Connect the RPI4 port to your Raspberry Pi 4. Connect the USB port to the controlled computer. When using PoE power supply, there is no need to connect the PWR port. When not using PoE power supply, connect the PWR port to a standard 5V/3A USB power supply.","title":"USB/PWR splitter"},{"location":"BLIKVM-HAT-guide/#hdmi-pass-through-edid-emulator","text":"If the controlled computer does not output HDMI images correctly, please use this accessory. Connect the Source port to the controlled computer, connect the Sink port to the HAT. Then you can set the correct HDMI output on the controlled computer.","title":"HDMI pass-through EDID emulator"},{"location":"BLIKVM-HAT-guide/#metal-case","text":"The metal case protects the HAT and improve heat dissipation. There are clear port markings on the case. The case can be easily installed on a standard 1U rack.","title":"Metal case"},{"location":"BLIKVM-HAT-guide/#list","text":"","title":"List"},{"location":"BLIKVM-HAT-guide/#product-list","text":"Raspberry Pi IPKVM HAT 1 ATX adapter board 1 USB/PWR splitter 1 HDMI pass-through EDID emulator 1 Metal case 1 32G TF card 1 USB Type-C to USB Type-C Cable 30cm 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Phillips screwdriver 1 Cross Wrench Sleeve 1","title":"Product List"},{"location":"BLIKVM-HAT-guide/#list-of-items-prepared-by-the-user","text":"Raspberry Pi 4 1 RJ45 network cable 2 USB Type-A to USB Type-C Cable 2 HDMI cable 1 PoE-sourcing equipment or 5V/3A USB adapter 1 CR1220 coin cell battery 1","title":"List of items prepared by the user"},{"location":"BLIKVM-HAT-guide/#buy-link","text":"Buy v3","title":"Buy link"},{"location":"BLIKVM-PCIE-guide/","text":"BLIKVM PCIe Introduction BLIKVM PCIe is a PCIe add-in card based on Raspberry Pi CM4 for KVM Over IP. This product\u2019s key features include video capture, ATX controller, PoE, OLED , UART and RTC. The card has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. The product is currently perfectly compatible with blikvm image and pikvm image. Installation requirements You will need the following things Raspberry Pi CM4(if you order PCIe card only). PoE-sourcing equipment or 5V/3A USB adapter. CR1220 coin cell battery. Features Video capture (HDMI, support 1080P@60Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Support PoE Serial console port OLED display Real Time Clock (RTC) PWM Fan Basic setup 1. If you have an assembly kit, Flash the memory card or eMMC 2.Build BLIKVM according to the illustrated instructions : Geerling: Engineering Test video Craft Computing: Never Pay For IPMI Again - BliKVM Review Specification hardware feature list 1 HDMI in 2 USB-PC port 3 Power Input 5V 3A 4 RJ45 100M Ethernet port & PoE 5 ATX control port 6 OLED Display 7 PWM FAN 8 BOOT 9 REAL TIME CLOCK(RTC) 10 UART port 11 USB-PC port HDMI IN The bridge chip is Toshiba TC358743, which supports both video and audio(I2S), and the highest input resolution is 1080p@60fps. Fixed HDMI back power issue. USB-PC The BLIKVM PCIe card provides two USB interfaces, one is PC-IN (type c interface) and the other is USB-PC2 (pin interface). The purpose of these two interfaces is to connect to the USB of the controlled computer, used to control the mouse and keyboard. At the same time, only one interface can be used. The purpose of designing two interfaces is to directly use USB PC2 when the user's PC host has a row pin USB interface, which will make the wiring more concise. POWER-IN When using PoE power supply, there is no need to connect the PWR-IN port. When not using PoE power supply, connect the PWR-IN port to a standard 5V/3A USB power supply. ETHERNET-PoE Gigabit Ethernet port Standard: IEEE 802.3af PoE Input voltage: 37-57 V DC Output power: 5 V DC/2.4 A ATX-Connecter Connect to power control interface on the motherboard of the controlled computer with DuPont cables. It can turn on, off, and restart the controlled computer. The pin is defined on the printing of the PCIe board, BTN means button. According to the instructions of the computer motherboard, first find the position of the ATX function related pins on the motherboard, and then unplug the ATX ray that has been connected to the motherboard. After unplugging, the power button of the computer will lose its function. There are two rows of 8PIN pins on the PCIe board. It is unnecessary to distinguish between the two rows of pins when they are used with the same functions. One row of pins is used for KVM to control ATX-related functions, and the other row of pins is connected to the ATX DuPont head unplugged from the main board to maintain the original chassis power button function. Connect each wire according to the specific pin definitions on the motherboard and PCIe. See the following figure for the connection relationship\uff1a OLED Display A white OLED display with a resolution of 128x64, and the chip is SSD1306. This display can show the temperature, IP address and other information of the Raspberry Pi. FAN The Card HAT is fitted with a small fan that is controlled by your Raspberry Pi CM4 via GPIO12. BOOT Fit jumper to disable eMMC Boot Real Time Clock (RTC) The clock chip is PCF8563 that is controlled by your Raspberry Pi CM4 via I2C. The CR1220 battery is installed under the HDMI IN module. UART Connect the serial port to debug your Raspberry Pi CM4. The uart of Raspberry Pi CM4. G for GND, T(GPIO 14) for TXD, R(GPIO 15) for RXD. Connect serial cable wires to G T R connectors on the PCIe board. NOTE: black wire = Ground, whiTe = Tx, and gReen = Rx; For specific methods, please refer to this document . Accessories HDMI pass-through EDID emulator If the controlled computer does not output HDMI images correctly, please use this accessory. Connect the Source port to the controlled computer, connect the Sink port to the HAT. Then you can set the correct HDMI output on the controlled computer. VGA-HDMI module When your device does not have an HDMI output interface, you can use a VGA to HDMI module. USB to TTL module Connect your computer usb interface with the serial port of BLIKVM to debug your Raspberry Pi CM4. Fan Use a cooling fan to cool the Raspberry Pi CM4, but installing a fan will make the product thicker than a standard PCIe add-in card. Dimensions Test Video BLIKVM hardware PCIe version is tested wonderful based on pikvm software. Notes To prevent the CM4 module from contacting the SD card holder, do not remove the insulating tape List Product List BLIKVM PCIe card version 1 BLIKVM PCIe add-in card 1 Cooling fan 1 OLED display 1 USB to TTL module 1 HDMI pass-through EDID emulator 1 VGA-HDMI module 1 32G Micro SD card 1 HDMI cable 0.5m 1 HDMI Coupler 1 Network cable 1m 1 USB-A to USB-C cable 1m 2 Dupont USB cable 0.4m 1 WiFi antenna 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Metal heatsink 1 Phillips screwdriver 1 Cross Wrench Sleeve 1 BLIKVM PCIe plug-n-play version 1 BLIKVM PCIe add-in card 1 CM4 102000 1 Cooling fan 1 OLED display 1 USB to TTL module 1 HDMI pass-through EDID emulator 1 VGA-HDMI module 1 32G Micro SD card 1 HDMI cable 0.5m 1 HDMI Coupler 1 Network cable 1m 1 USB-A to USB-C cable 1m 2 Dupont USB cable 0.4m 1 WiFi antenna 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Metal heatsink 1 Phillips screwdriver 1 Cross Wrench Sleeve 1 List of items prepared by the user Raspberry Pi CM4(if you order PCIe card only) 1 PoE-sourcing equipment or 5V/3A USB adapter 1 CR1220 coin cell battery 1 Buy link Buy v2 3D printable case A simple snap fit case for the PCIe. Download file","title":"BliKVM v2 PCIe Guide"},{"location":"BLIKVM-PCIE-guide/#blikvm-pcie","text":"","title":"BLIKVM PCIe"},{"location":"BLIKVM-PCIE-guide/#introduction","text":"BLIKVM PCIe is a PCIe add-in card based on Raspberry Pi CM4 for KVM Over IP. This product\u2019s key features include video capture, ATX controller, PoE, OLED , UART and RTC. The card has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. The product is currently perfectly compatible with blikvm image and pikvm image.","title":"Introduction"},{"location":"BLIKVM-PCIE-guide/#installation-requirements","text":"You will need the following things Raspberry Pi CM4(if you order PCIe card only). PoE-sourcing equipment or 5V/3A USB adapter. CR1220 coin cell battery.","title":"Installation requirements"},{"location":"BLIKVM-PCIE-guide/#features","text":"Video capture (HDMI, support 1080P@60Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Support PoE Serial console port OLED display Real Time Clock (RTC) PWM Fan","title":"Features"},{"location":"BLIKVM-PCIE-guide/#basic-setup","text":"1. If you have an assembly kit, Flash the memory card or eMMC 2.Build BLIKVM according to the illustrated instructions : Geerling: Engineering Test video Craft Computing: Never Pay For IPMI Again - BliKVM Review","title":"Basic setup"},{"location":"BLIKVM-PCIE-guide/#specification","text":"hardware feature list 1 HDMI in 2 USB-PC port 3 Power Input 5V 3A 4 RJ45 100M Ethernet port & PoE 5 ATX control port 6 OLED Display 7 PWM FAN 8 BOOT 9 REAL TIME CLOCK(RTC) 10 UART port 11 USB-PC port HDMI IN The bridge chip is Toshiba TC358743, which supports both video and audio(I2S), and the highest input resolution is 1080p@60fps. Fixed HDMI back power issue. USB-PC The BLIKVM PCIe card provides two USB interfaces, one is PC-IN (type c interface) and the other is USB-PC2 (pin interface). The purpose of these two interfaces is to connect to the USB of the controlled computer, used to control the mouse and keyboard. At the same time, only one interface can be used. The purpose of designing two interfaces is to directly use USB PC2 when the user's PC host has a row pin USB interface, which will make the wiring more concise. POWER-IN When using PoE power supply, there is no need to connect the PWR-IN port. When not using PoE power supply, connect the PWR-IN port to a standard 5V/3A USB power supply. ETHERNET-PoE Gigabit Ethernet port Standard: IEEE 802.3af PoE Input voltage: 37-57 V DC Output power: 5 V DC/2.4 A ATX-Connecter Connect to power control interface on the motherboard of the controlled computer with DuPont cables. It can turn on, off, and restart the controlled computer. The pin is defined on the printing of the PCIe board, BTN means button. According to the instructions of the computer motherboard, first find the position of the ATX function related pins on the motherboard, and then unplug the ATX ray that has been connected to the motherboard. After unplugging, the power button of the computer will lose its function. There are two rows of 8PIN pins on the PCIe board. It is unnecessary to distinguish between the two rows of pins when they are used with the same functions. One row of pins is used for KVM to control ATX-related functions, and the other row of pins is connected to the ATX DuPont head unplugged from the main board to maintain the original chassis power button function. Connect each wire according to the specific pin definitions on the motherboard and PCIe. See the following figure for the connection relationship\uff1a OLED Display A white OLED display with a resolution of 128x64, and the chip is SSD1306. This display can show the temperature, IP address and other information of the Raspberry Pi. FAN The Card HAT is fitted with a small fan that is controlled by your Raspberry Pi CM4 via GPIO12. BOOT Fit jumper to disable eMMC Boot Real Time Clock (RTC) The clock chip is PCF8563 that is controlled by your Raspberry Pi CM4 via I2C. The CR1220 battery is installed under the HDMI IN module. UART Connect the serial port to debug your Raspberry Pi CM4. The uart of Raspberry Pi CM4. G for GND, T(GPIO 14) for TXD, R(GPIO 15) for RXD. Connect serial cable wires to G T R connectors on the PCIe board. NOTE: black wire = Ground, whiTe = Tx, and gReen = Rx; For specific methods, please refer to this document .","title":"Specification"},{"location":"BLIKVM-PCIE-guide/#accessories","text":"HDMI pass-through EDID emulator If the controlled computer does not output HDMI images correctly, please use this accessory. Connect the Source port to the controlled computer, connect the Sink port to the HAT. Then you can set the correct HDMI output on the controlled computer. VGA-HDMI module When your device does not have an HDMI output interface, you can use a VGA to HDMI module. USB to TTL module Connect your computer usb interface with the serial port of BLIKVM to debug your Raspberry Pi CM4. Fan Use a cooling fan to cool the Raspberry Pi CM4, but installing a fan will make the product thicker than a standard PCIe add-in card.","title":"Accessories"},{"location":"BLIKVM-PCIE-guide/#dimensions","text":"","title":"Dimensions"},{"location":"BLIKVM-PCIE-guide/#test-video","text":"BLIKVM hardware PCIe version is tested wonderful based on pikvm software.","title":"Test Video"},{"location":"BLIKVM-PCIE-guide/#notes","text":"To prevent the CM4 module from contacting the SD card holder, do not remove the insulating tape","title":"Notes"},{"location":"BLIKVM-PCIE-guide/#list","text":"","title":"List"},{"location":"BLIKVM-PCIE-guide/#product-list","text":"BLIKVM PCIe card version 1 BLIKVM PCIe add-in card 1 Cooling fan 1 OLED display 1 USB to TTL module 1 HDMI pass-through EDID emulator 1 VGA-HDMI module 1 32G Micro SD card 1 HDMI cable 0.5m 1 HDMI Coupler 1 Network cable 1m 1 USB-A to USB-C cable 1m 2 Dupont USB cable 0.4m 1 WiFi antenna 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Metal heatsink 1 Phillips screwdriver 1 Cross Wrench Sleeve 1 BLIKVM PCIe plug-n-play version 1 BLIKVM PCIe add-in card 1 CM4 102000 1 Cooling fan 1 OLED display 1 USB to TTL module 1 HDMI pass-through EDID emulator 1 VGA-HDMI module 1 32G Micro SD card 1 HDMI cable 0.5m 1 HDMI Coupler 1 Network cable 1m 1 USB-A to USB-C cable 1m 2 Dupont USB cable 0.4m 1 WiFi antenna 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Metal heatsink 1 Phillips screwdriver 1 Cross Wrench Sleeve 1","title":"Product List"},{"location":"BLIKVM-PCIE-guide/#list-of-items-prepared-by-the-user","text":"Raspberry Pi CM4(if you order PCIe card only) 1 PoE-sourcing equipment or 5V/3A USB adapter 1 CR1220 coin cell battery 1","title":"List of items prepared by the user"},{"location":"BLIKVM-PCIE-guide/#buy-link","text":"Buy v2","title":"Buy link"},{"location":"BLIKVM-PCIE-guide/#3d-printable-case","text":"A simple snap fit case for the PCIe. Download file","title":"3D printable case"},{"location":"BLIKVM-PCIe-installation/","text":"BLIKVM PCIe CM4 Installation Guide 1. Unpack and take out the devices Product List 2. Install the main device Install CM4 and 4 Hex spacers (This article takes CM4 lite as an example, using the image in the Micro SD card, CM4 eMMC user need to burn the image by yourself.)Stick a heat conductive sheet on the top of CM4 , tear off the protective film of the sheet. The main device installation is complete. 3. Connect USB and ATX The motherboard used in this article is Asus H520M-E, the interface definition of different motherboards may be different, please refer to your motherboard manual. 4. Connect OLED The OLED you received does not have a bracket installed. Please refer to the picture for installation. In addition, OLED support is made of acrylic material, which needs to be used after removing the protective film on the surface. The above is the installation steps, and the effect of not tearing the film is as follows. In actual use, please remove the protective film. 5. Connect the HDMI cable Connect the HDMI output port of the computer directly to the HDMI IN port of the product with an HDMI cable. The HDMI pass-through EDID emulator is not necessary! If your computer does not output the correct HDMI format, plug the HDMI pass-through EDID emulator into the HDMI output port of the computer. This allows you to configure a fixed HDMI output format on your computer. 6. Connect the network cable Gigabit Ethernet port standard: IEEE 802.3af PoE input voltage:37v-57v. When using PoE power supply, there is no need to connect the PWR-IN port. 7. Connect PWR-IN When not using PoE power supply, connect the PWR-IN port to a standard 5V/3A USB power supply. 8. Test OLED screen showing device IP and other information. Access the IP address in browser. After passing the test, install the product into the computer case. 9. Install the product into the computer case Disconnect power and wiring, install the product on the motherboard, and reconnect the cables after installation is complete. The color of ATX cable received in different batches may be different. Please directly refer to the pin definition for connection Enjoy! Appendix 1. Install a low profile PCIe I/O bracket Note Appendix 2. Install the cooling fan Usually the metal heatsink is sufficient, the cooling fan is not necessary. The cooling fan is controlled by CM4 via GPIO12. Appendix 3. Install wifi antenna Note","title":"v2 PCIe Illustrated Instructions"},{"location":"BLIKVM-PCIe-installation/#blikvm-pcie-cm4-installation-guide","text":"","title":"BLIKVM PCIe CM4 Installation Guide"},{"location":"BLIKVM-PCIe-installation/#1-unpack-and-take-out-the-devices","text":"Product List","title":"1. Unpack and take out the devices"},{"location":"BLIKVM-PCIe-installation/#2-install-the-main-device","text":"Install CM4 and 4 Hex spacers (This article takes CM4 lite as an example, using the image in the Micro SD card, CM4 eMMC user need to burn the image by yourself.)Stick a heat conductive sheet on the top of CM4 , tear off the protective film of the sheet. The main device installation is complete.","title":"2. Install the main device"},{"location":"BLIKVM-PCIe-installation/#3-connect-usb-and-atx","text":"The motherboard used in this article is Asus H520M-E, the interface definition of different motherboards may be different, please refer to your motherboard manual.","title":"3. Connect USB and ATX"},{"location":"BLIKVM-PCIe-installation/#4-connect-oled","text":"The OLED you received does not have a bracket installed. Please refer to the picture for installation. In addition, OLED support is made of acrylic material, which needs to be used after removing the protective film on the surface. The above is the installation steps, and the effect of not tearing the film is as follows. In actual use, please remove the protective film.","title":"4. Connect OLED"},{"location":"BLIKVM-PCIe-installation/#5-connect-the-hdmi-cable","text":"Connect the HDMI output port of the computer directly to the HDMI IN port of the product with an HDMI cable. The HDMI pass-through EDID emulator is not necessary! If your computer does not output the correct HDMI format, plug the HDMI pass-through EDID emulator into the HDMI output port of the computer. This allows you to configure a fixed HDMI output format on your computer.","title":"5. Connect the HDMI cable"},{"location":"BLIKVM-PCIe-installation/#6-connect-the-network-cable","text":"Gigabit Ethernet port standard: IEEE 802.3af PoE input voltage:37v-57v. When using PoE power supply, there is no need to connect the PWR-IN port.","title":"6. Connect the network cable"},{"location":"BLIKVM-PCIe-installation/#7-connect-pwr-in","text":"When not using PoE power supply, connect the PWR-IN port to a standard 5V/3A USB power supply.","title":"7. Connect PWR-IN"},{"location":"BLIKVM-PCIe-installation/#8-test","text":"OLED screen showing device IP and other information. Access the IP address in browser. After passing the test, install the product into the computer case.","title":"8. Test"},{"location":"BLIKVM-PCIe-installation/#9-install-the-product-into-the-computer-case","text":"Disconnect power and wiring, install the product on the motherboard, and reconnect the cables after installation is complete. The color of ATX cable received in different batches may be different. Please directly refer to the pin definition for connection Enjoy!","title":"9. Install the product into the computer case"},{"location":"BLIKVM-PCIe-installation/#appendix-1-install-a-low-profile-pcie-io-bracket","text":"Note","title":"Appendix 1. Install a low profile PCIe I/O bracket"},{"location":"BLIKVM-PCIe-installation/#appendix-2-install-the-cooling-fan","text":"Usually the metal heatsink is sufficient, the cooling fan is not necessary. The cooling fan is controlled by CM4 via GPIO12.","title":"Appendix 2. Install the cooling fan"},{"location":"BLIKVM-PCIe-installation/#appendix-3-install-wifi-antenna","text":"Note","title":"Appendix 3. Install wifi antenna"},{"location":"BliKVM-v4-guide/","text":"BliKVM v4 Allwinner BliKVM v4 is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! BliKVM V4 Datasheet Craft Computing: Goodbye IPMI - Blicube BliKVM V4 Review Lawrence Systems: Blicube BliKVM V4: Is This the Best Linux IP KVM Yet? RainCat: How to install PiKVM on BliKVM v4 Allwinner Features Video capture (HDMI, support 4K@30Hz input) Keyboard forwarding Mouse forwarding HDMI video loop through ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Support PoE & DC Support WiFi Serial console port 1.33 inch color display Real Time Clock (RTC) HDMI input supported resolution types Installation Requirements In addition to the v4 kit, you will need the following equipment: Power adapter (5V 3A, USB-C port, or 12V 2A DC port). If you plan to use PoE (Power over Ethernet) or if the USB ports on your controlled computers provide sufficient power, a separate power adapter is not required. HDMI cables (at least one). If you also need to use the HDMI loop-out interface, you will need two cables. Ethernet cable(s) (provide based on your requirements). One cable is required for using the ATX power switch function, and one cable is required for using the Ethernet connection. USB-C to USB-A cable (for mouse and keyboard data transmission). Terminal Upgrade Notice! Before upgrading, execute the following command, otherwise, after running apt-get update and apt-get upgrade, the image will fail to start. apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64 Video Guide: Unpacking and connecting case step by step Installation Steps 1. Open the v4 kit package and connect the BliKVM to the controlled computer according to the connection diagram shown below: ATX Connection Please refer to the ATX Connection Guide . 2. Once all the cables are connected, power on the BliKVM. Wait until the display shows the interface, indicating that the device has started up successfully. 3. Read the \"First Steps\" guide carefully. It provides instructions on how to find the device on the network, how to log in, change passwords, and more. Follow the steps described there and then return to this page. 4. Try managing your computer using the BliKVM web interface. Make sure you can see the image and that the keyboard and mouse are working properly. If you encounter any issues, check out our FAQ (it's very helpful). If you find no solution there, seek support in our Discord chat room . 5. You can explore other pages in the wiki to discover more features of BliKVM. Enjoy your experience! Video Mode v4 supports a maximum video input of 4K30Hz, and the default transmission resolution is 1920x1080. Packing List BLIKVM v4 1 WiFi Antenna 1 ATX adapter board 1 ATX Dupont Cables 8pin Male to Male 60cm 1 ATX Dupont Cables 8pin Male to Female 60cm 1 1U Rack Mounting Ears 2 M2.5x5 Screws 8 Silicone Bumper Pellets 1 Serial Console Access via the 5V Port The 5V port can be used both for power supply and serial console access at the same time. The default baud rate is 115200. There is an onboard CH341-based USB to UART converter present inside BliKVM v4 which is connected to UART0 of the mCore-H616 SoC , so you can connect a USB port of a PC to the 5V port without an external UART and a USB-C to dupont adapter. PC USB port current output Be careful when trying to use the 5V port because a PC USB port alone may not be able to provide 3A (5V) which is a documented requirement for the board to work. Either use a 12V 2A DC port at the same time as using the 5V port for serial communication without a USB Splitter board, or use the splitter board to split out the VCC pin and use a separate 5V 3A power supply to provide power to the 5V port's VCC pin. Likewise, when disconnecting a cable from the 12V 2A DC port while BliKVM is powered on, make sure to disconnect the cable from the 5V port first (because that will become the power source for BliKVM v4 after the 12V 2A source is disconnected unless a splitter is used). You should see something like this in your host kernel log (if you are using a Linux-based OS) when attaching a USB cable to the 5V port of BliKVM v4: usb 1-1.2: new full-speed USB device number 12 using xhci_hcd usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.34 usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1.2: Product: USB Serial ch341 1-1.2:1.0: ch341-uart converter detected usb 1-1.2: ch341-uart converter now attached to ttyUSB0 Accessing this port can then be done using GNU screen or TIO : tio /dev/ttyUSB0 mangopimcore login: blikvm # ... If you need to check how much data is received over UART0 you can do this by looking at the counters exposed via proc as follows (the rx counter should increase when the data is sent from an external host if the built-in USB to UART converter is working properly): root@mangopimcore:~# grep '0: uart' /proc/tty/driver/serial 0: uart:16550A mmio:0x05000000 irq:284 tx:20306 rx:40 pe:1 RTS|DTR Dev If you want to develop or port software on v4 hardware yourself, you can refer to this hardware resource description . Buy link Buy v4","title":"BliKVM v4 Allwinner Guide"},{"location":"BliKVM-v4-guide/#blikvm-v4-allwinner","text":"BliKVM v4 is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! BliKVM V4 Datasheet Craft Computing: Goodbye IPMI - Blicube BliKVM V4 Review Lawrence Systems: Blicube BliKVM V4: Is This the Best Linux IP KVM Yet? RainCat: How to install PiKVM on BliKVM v4 Allwinner","title":"BliKVM v4 Allwinner"},{"location":"BliKVM-v4-guide/#features","text":"Video capture (HDMI, support 4K@30Hz input) Keyboard forwarding Mouse forwarding HDMI video loop through ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Support PoE & DC Support WiFi Serial console port 1.33 inch color display Real Time Clock (RTC) HDMI input supported resolution types","title":"Features"},{"location":"BliKVM-v4-guide/#installation-requirements","text":"In addition to the v4 kit, you will need the following equipment: Power adapter (5V 3A, USB-C port, or 12V 2A DC port). If you plan to use PoE (Power over Ethernet) or if the USB ports on your controlled computers provide sufficient power, a separate power adapter is not required. HDMI cables (at least one). If you also need to use the HDMI loop-out interface, you will need two cables. Ethernet cable(s) (provide based on your requirements). One cable is required for using the ATX power switch function, and one cable is required for using the Ethernet connection. USB-C to USB-A cable (for mouse and keyboard data transmission). Terminal Upgrade Notice! Before upgrading, execute the following command, otherwise, after running apt-get update and apt-get upgrade, the image will fail to start. apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64 Video Guide: Unpacking and connecting case step by step","title":"Installation Requirements"},{"location":"BliKVM-v4-guide/#installation-steps","text":"1. Open the v4 kit package and connect the BliKVM to the controlled computer according to the connection diagram shown below: ATX Connection Please refer to the ATX Connection Guide . 2. Once all the cables are connected, power on the BliKVM. Wait until the display shows the interface, indicating that the device has started up successfully. 3. Read the \"First Steps\" guide carefully. It provides instructions on how to find the device on the network, how to log in, change passwords, and more. Follow the steps described there and then return to this page. 4. Try managing your computer using the BliKVM web interface. Make sure you can see the image and that the keyboard and mouse are working properly. If you encounter any issues, check out our FAQ (it's very helpful). If you find no solution there, seek support in our Discord chat room . 5. You can explore other pages in the wiki to discover more features of BliKVM. Enjoy your experience!","title":"Installation Steps"},{"location":"BliKVM-v4-guide/#video-mode","text":"v4 supports a maximum video input of 4K30Hz, and the default transmission resolution is 1920x1080.","title":"Video Mode"},{"location":"BliKVM-v4-guide/#packing-list","text":"BLIKVM v4 1 WiFi Antenna 1 ATX adapter board 1 ATX Dupont Cables 8pin Male to Male 60cm 1 ATX Dupont Cables 8pin Male to Female 60cm 1 1U Rack Mounting Ears 2 M2.5x5 Screws 8 Silicone Bumper Pellets 1","title":"Packing List"},{"location":"BliKVM-v4-guide/#serial-console-access-via-the-5v-port","text":"The 5V port can be used both for power supply and serial console access at the same time. The default baud rate is 115200. There is an onboard CH341-based USB to UART converter present inside BliKVM v4 which is connected to UART0 of the mCore-H616 SoC , so you can connect a USB port of a PC to the 5V port without an external UART and a USB-C to dupont adapter. PC USB port current output Be careful when trying to use the 5V port because a PC USB port alone may not be able to provide 3A (5V) which is a documented requirement for the board to work. Either use a 12V 2A DC port at the same time as using the 5V port for serial communication without a USB Splitter board, or use the splitter board to split out the VCC pin and use a separate 5V 3A power supply to provide power to the 5V port's VCC pin. Likewise, when disconnecting a cable from the 12V 2A DC port while BliKVM is powered on, make sure to disconnect the cable from the 5V port first (because that will become the power source for BliKVM v4 after the 12V 2A source is disconnected unless a splitter is used). You should see something like this in your host kernel log (if you are using a Linux-based OS) when attaching a USB cable to the 5V port of BliKVM v4: usb 1-1.2: new full-speed USB device number 12 using xhci_hcd usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.34 usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1.2: Product: USB Serial ch341 1-1.2:1.0: ch341-uart converter detected usb 1-1.2: ch341-uart converter now attached to ttyUSB0 Accessing this port can then be done using GNU screen or TIO : tio /dev/ttyUSB0 mangopimcore login: blikvm # ... If you need to check how much data is received over UART0 you can do this by looking at the counters exposed via proc as follows (the rx counter should increase when the data is sent from an external host if the built-in USB to UART converter is working properly): root@mangopimcore:~# grep '0: uart' /proc/tty/driver/serial 0: uart:16550A mmio:0x05000000 irq:284 tx:20306 rx:40 pe:1 RTS|DTR","title":"Serial Console Access via the 5V Port"},{"location":"BliKVM-v4-guide/#dev","text":"If you want to develop or port software on v4 hardware yourself, you can refer to this hardware resource description .","title":"Dev"},{"location":"BliKVM-v4-guide/#buy-link","text":"Buy v4","title":"Buy link"},{"location":"Datasheet-BliKVM-v4/","text":"BliKVM v4 Allwinner (H616/H313 SOC) BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! Connectivity Diagram 1 USB 2.0 port 10 Antenna interface 2 Power Input 5V 3A & UART 11 RJ45 100M Ethernet port & PoE 3 RJ45 ATX control port 12 Display 1.33 inch LCD 4 HDMI video loop through port 13 Power LED (red) 5 USB-PC port 14 User defined button SW1 6 Power Input 12V 2A 5.5*2.1mm 15 ACT LED (green) 7 HDMI video input port 16 Display ON/OFF button 8 HDMI input status LED (green) 17 Micro SD card slot 9 HDMI output status LED (yellow) Specifications Parameter name Characteristics Power 5V 3A 5V port, USB-PC port 12V 2A 12V port PoE Power over Ethernet (IEEE802.3af compliant) 48V DC Connectivity/Interfaces HDMI-IN HDMI video input port HDMI-OUT HDMI video loop through port USB-PC Keyboard, mouse, mass storage, and other external device emulation) ATX Turn on/off or restart the controlled computer WiFi & Bluetooth IEEE802.11 b/g/n + BLE4.2 Micro SD card slot Persistent storage for OS and your data 5V port 5V 3A power or serial console management port Displays and indicators LED indicators Power LED, ACT LED, HDMI input status LED (green)\uff0c HDMI output status LED (yellow) LCD display LCD 240x240 1.33 inch User defined button SW1 Buzzer Find me Video Supported resolutions Up to 4k@30Hz Video compression methods MJPEG Core Chip ALLWINNER H616/H313 RAM 1GB Power consumption Up to 15W Environmental Operating temperature 0\u00b0C to 70\u00b0C Storage temperature -20\u00b0C to 60\u00b0C Dimensions and weight Size 100 (L) x 134 (W) x 44.4 (H) mm Weight 0.45 kg BLIKVM CM4 version OLED display The product comes standard with a monochrome OLED display with a resolution of 128x64, and the chip is SSD1306. The user connects the display to the product with the wiring of the display. The module is connected to CM4 through the I^2^C interface. The wiring definition is shown in the following table. This is a library for the monochrome OLEDs based on SSD1306 drivers. Display(SSD1306) CM4 GND GND VCC 3.3V SCL GPIO3(SCL1,I^2^C) SDA GPIO2(SDA1,I^2^C) Dimensions Schematic Diagram","title":"BliKVM v4 Allwinner (H616/H313 SOC)"},{"location":"Datasheet-BliKVM-v4/#blikvm-v4-allwinner-h616h313-soc","text":"BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals!","title":"BliKVM v4 Allwinner (H616/H313 SOC)"},{"location":"Datasheet-BliKVM-v4/#connectivity-diagram","text":"1 USB 2.0 port 10 Antenna interface 2 Power Input 5V 3A & UART 11 RJ45 100M Ethernet port & PoE 3 RJ45 ATX control port 12 Display 1.33 inch LCD 4 HDMI video loop through port 13 Power LED (red) 5 USB-PC port 14 User defined button SW1 6 Power Input 12V 2A 5.5*2.1mm 15 ACT LED (green) 7 HDMI video input port 16 Display ON/OFF button 8 HDMI input status LED (green) 17 Micro SD card slot 9 HDMI output status LED (yellow)","title":"Connectivity Diagram"},{"location":"Datasheet-BliKVM-v4/#specifications","text":"Parameter name Characteristics Power 5V 3A 5V port, USB-PC port 12V 2A 12V port PoE Power over Ethernet (IEEE802.3af compliant) 48V DC Connectivity/Interfaces HDMI-IN HDMI video input port HDMI-OUT HDMI video loop through port USB-PC Keyboard, mouse, mass storage, and other external device emulation) ATX Turn on/off or restart the controlled computer WiFi & Bluetooth IEEE802.11 b/g/n + BLE4.2 Micro SD card slot Persistent storage for OS and your data 5V port 5V 3A power or serial console management port Displays and indicators LED indicators Power LED, ACT LED, HDMI input status LED (green)\uff0c HDMI output status LED (yellow) LCD display LCD 240x240 1.33 inch User defined button SW1 Buzzer Find me Video Supported resolutions Up to 4k@30Hz Video compression methods MJPEG Core Chip ALLWINNER H616/H313 RAM 1GB Power consumption Up to 15W Environmental Operating temperature 0\u00b0C to 70\u00b0C Storage temperature -20\u00b0C to 60\u00b0C Dimensions and weight Size 100 (L) x 134 (W) x 44.4 (H) mm Weight 0.45 kg BLIKVM CM4 version OLED display The product comes standard with a monochrome OLED display with a resolution of 128x64, and the chip is SSD1306. The user connects the display to the product with the wiring of the display. The module is connected to CM4 through the I^2^C interface. The wiring definition is shown in the following table. This is a library for the monochrome OLEDs based on SSD1306 drivers. Display(SSD1306) CM4 GND GND VCC 3.3V SCL GPIO3(SCL1,I^2^C) SDA GPIO2(SDA1,I^2^C)","title":"Specifications"},{"location":"Datasheet-BliKVM-v4/#dimensions-schematic-diagram","text":"","title":"Dimensions Schematic Diagram"},{"location":"Dev-BliKVM-v4-Allwinner/","text":"Dev BliKVM v4 Allwinner (H616/H313 SOC) BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! System Block Diagram Functional Module Panel Function Pin Description Button SW1 GPIOI1(257) Press for high level Button SW1 GPIOI2(258) Press for high level LED ACT GPIOI5(261) Low level enable LED LED PWR 3V3 PWR LED is always on after power on ATX Function Pin Description LED-PWR GPIOH10(234) Light on for high level LED-HDD GPIOH9(233) Light on for high level SW-PWR GPIOH4(228) High level enable SW-RST GPIOI16(272) High level enable BUZZER Function Pin Description Buzzer GPIOI15(271) High level enable FAN Function Pin Description Fan GPIOI13(269) High level enable LCD Display 1.33-inch LCD display module, driver chip ST7789, resolution 240x240. Function Pin Description LCD_EN GPIOI4(260) Backlight high level enable LCD_RST GPIOI6(262) Reset Low level enable LCD_DC GPIOI3(259) Data/command control pin SPI1_CS GPIOH5 SPI1_CLK GPIOH6 SPI1_MOSI GPIOH7 GND GND 3V3 3V3","title":"v4 Allwinner Dev Guide"},{"location":"Dev-BliKVM-v4-Allwinner/#dev-blikvm-v4-allwinner-h616h313-soc","text":"BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals!","title":"Dev BliKVM v4 Allwinner (H616/H313 SOC)"},{"location":"Dev-BliKVM-v4-Allwinner/#system-block-diagram","text":"","title":"System Block Diagram"},{"location":"Dev-BliKVM-v4-Allwinner/#functional-module","text":"","title":"Functional Module"},{"location":"Dev-BliKVM-v4-Allwinner/#panel","text":"Function Pin Description Button SW1 GPIOI1(257) Press for high level Button SW1 GPIOI2(258) Press for high level LED ACT GPIOI5(261) Low level enable LED LED PWR 3V3 PWR LED is always on after power on","title":"Panel"},{"location":"Dev-BliKVM-v4-Allwinner/#atx","text":"Function Pin Description LED-PWR GPIOH10(234) Light on for high level LED-HDD GPIOH9(233) Light on for high level SW-PWR GPIOH4(228) High level enable SW-RST GPIOI16(272) High level enable","title":"ATX"},{"location":"Dev-BliKVM-v4-Allwinner/#buzzer","text":"Function Pin Description Buzzer GPIOI15(271) High level enable","title":"BUZZER"},{"location":"Dev-BliKVM-v4-Allwinner/#fan","text":"Function Pin Description Fan GPIOI13(269) High level enable","title":"FAN"},{"location":"Dev-BliKVM-v4-Allwinner/#lcd-display","text":"1.33-inch LCD display module, driver chip ST7789, resolution 240x240. Function Pin Description LCD_EN GPIOI4(260) Backlight high level enable LCD_RST GPIOI6(262) Reset Low level enable LCD_DC GPIOI3(259) Data/command control pin SPI1_CS GPIOH5 SPI1_CLK GPIOH6 SPI1_MOSI GPIOH7 GND GND 3V3 3V3","title":"LCD Display"},{"location":"Expand_Filesystem/","text":"Expand Filesystem If you find that the free space of the raspberry pi SD card or eMMC is smaller than the capacity of the actual SD card or eMMC, you need to do the following to expand the raspberry pi. If you find that the system does not have the raspi config tool, you can use Method 2 (use the GParted partition tool). Method 1: Use raspi-config tool If you are using a mirror after June 2023 and have added a third read-write partition, this method is no longer applicable. Please refer to method 2 and method 3. 1. Open raspi-config. sudo raspi-config 2. Choose Advancd Options\uff1a 3. Choose Expand Filesystem\uff1a 4. Ok: 5. Execute the command resize2fs /dev/mmcblk0p2 in the terminal to see that the SD card has been successfully expanded. Method 2: Use GParted tool 1. Connect the SD card or EMMc that has burned the image to the computer through USB. Take the GParted partition tool on Linux as an example. Other platforms also have similar partition tools. Open GParted software and select SD card: 2. By observing the partition of the SD card in the above figure, we can find that 2.01GB and 21.87GB of space are unused before and after the sdb3 partition, which is the space we want to expand. Select the sdb3 partition and click Resize. 3. You can drag the white partition of sdb3 to the leftmost and rightmost, or fill in 25958 with \"Previous Free Space\" as \"0\" and \"New Size\" as \"Maximum Size\", and then click Resize in the lower right corner. Then click OK to see that all unused space of sd has been used. 4. Insert the SD card into the device and start it. Method 3: Use script If you are using a BliKVM image, you can run the following script on KVM to automatically expand the space. 1. Log in to the KVM terminal, confirm that the system has read and write permissions, run vim expand.sh on any path, and write the following content to expand.sh. If your hardware is v1 , v2 or v3 , use: #!/bin/bash set -x resize_mmcblk0p3 () { echo \"Resizing mmcblk0p3 partition...\" parted /dev/mmcblk0 resizepart 3 100 % resize2fs /dev/mmcblk0p3 echo \"mmcblk0p3 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p3 echo \"Partition resizing completed.\" If your hardware is v4 , use: #!/bin/bash set -x resize_mmcblk0p1 () { echo \"Resizing mmcblk0p1 partition...\" parted /dev/mmcblk0 resizepart 1 100 % resize2fs /dev/mmcblk0p1 echo \"mmcblk0p1 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p1 echo \"Partition resizing completed.\" If you are using a PiKVM image, you can run the script below on the KVM to automatically expand the space. 1. Log in to the KVM terminal, confirm that the system has read and write permissions, run vim expand.sh on any path, and write the following content to expand.sh #!/bin/bash set -x if grep -q 'X-kvmd\\.otgmsd' /etc/fstab ; then part = $( grep 'X-kvmd\\.otgmsd' /etc/fstab | awk '{print $1}' ) # shellcheck disable=SC2206 splitted =( ${ part //=/ } ) if [ \" ${ splitted [0] } \" == LABEL ] ; then label = ${ splitted [1] } part = $( blkid -c /dev/null -L \" $label \" ) else label = PIMSD fi unset splitted disk = /dev/ $( lsblk -no pkname \" $part \" ) npart = $( cat \"/sys/class/block/ ${ part // \\/ dev \\/ / } /partition\" ) umount \" $part \" parted \" $disk \" -a optimal -s resizepart \" $npart \" 100 % yes | mkfs.ext4 -L \" $label \" -F -m 0 \" $part \" mount \" $part \" unset disk part npart label fi 2. Execute bash expand.sh on the terminal and wait for the execution to complete.","title":"Expand Filesystem"},{"location":"Expand_Filesystem/#expand-filesystem","text":"If you find that the free space of the raspberry pi SD card or eMMC is smaller than the capacity of the actual SD card or eMMC, you need to do the following to expand the raspberry pi. If you find that the system does not have the raspi config tool, you can use Method 2 (use the GParted partition tool).","title":"Expand Filesystem"},{"location":"Expand_Filesystem/#method-1-use-raspi-config-tool","text":"If you are using a mirror after June 2023 and have added a third read-write partition, this method is no longer applicable. Please refer to method 2 and method 3. 1. Open raspi-config. sudo raspi-config 2. Choose Advancd Options\uff1a 3. Choose Expand Filesystem\uff1a 4. Ok: 5. Execute the command resize2fs /dev/mmcblk0p2 in the terminal to see that the SD card has been successfully expanded.","title":"Method 1: Use raspi-config tool"},{"location":"Expand_Filesystem/#method-2-use-gparted-tool","text":"1. Connect the SD card or EMMc that has burned the image to the computer through USB. Take the GParted partition tool on Linux as an example. Other platforms also have similar partition tools. Open GParted software and select SD card: 2. By observing the partition of the SD card in the above figure, we can find that 2.01GB and 21.87GB of space are unused before and after the sdb3 partition, which is the space we want to expand. Select the sdb3 partition and click Resize. 3. You can drag the white partition of sdb3 to the leftmost and rightmost, or fill in 25958 with \"Previous Free Space\" as \"0\" and \"New Size\" as \"Maximum Size\", and then click Resize in the lower right corner. Then click OK to see that all unused space of sd has been used. 4. Insert the SD card into the device and start it.","title":"Method 2: Use GParted tool"},{"location":"Expand_Filesystem/#method-3-use-script","text":"If you are using a BliKVM image, you can run the following script on KVM to automatically expand the space. 1. Log in to the KVM terminal, confirm that the system has read and write permissions, run vim expand.sh on any path, and write the following content to expand.sh. If your hardware is v1 , v2 or v3 , use: #!/bin/bash set -x resize_mmcblk0p3 () { echo \"Resizing mmcblk0p3 partition...\" parted /dev/mmcblk0 resizepart 3 100 % resize2fs /dev/mmcblk0p3 echo \"mmcblk0p3 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p3 echo \"Partition resizing completed.\" If your hardware is v4 , use: #!/bin/bash set -x resize_mmcblk0p1 () { echo \"Resizing mmcblk0p1 partition...\" parted /dev/mmcblk0 resizepart 1 100 % resize2fs /dev/mmcblk0p1 echo \"mmcblk0p1 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p1 echo \"Partition resizing completed.\" If you are using a PiKVM image, you can run the script below on the KVM to automatically expand the space. 1. Log in to the KVM terminal, confirm that the system has read and write permissions, run vim expand.sh on any path, and write the following content to expand.sh #!/bin/bash set -x if grep -q 'X-kvmd\\.otgmsd' /etc/fstab ; then part = $( grep 'X-kvmd\\.otgmsd' /etc/fstab | awk '{print $1}' ) # shellcheck disable=SC2206 splitted =( ${ part //=/ } ) if [ \" ${ splitted [0] } \" == LABEL ] ; then label = ${ splitted [1] } part = $( blkid -c /dev/null -L \" $label \" ) else label = PIMSD fi unset splitted disk = /dev/ $( lsblk -no pkname \" $part \" ) npart = $( cat \"/sys/class/block/ ${ part // \\/ dev \\/ / } /partition\" ) umount \" $part \" parted \" $disk \" -a optimal -s resizepart \" $npart \" 100 % yes | mkfs.ext4 -L \" $label \" -F -m 0 \" $part \" mount \" $part \" unset disk part npart label fi 2. Execute bash expand.sh on the terminal and wait for the execution to complete.","title":"Method 3: Use script"},{"location":"OLED-display/","text":"OLED display Due to prolonged operation, issues such as screen burn-in may occur with the OLED. Therefore, the OLED has the following logic: upon initial startup, oled_enable is set to 1 by default, meaning the OLED screen will remain constantly on. If oled_enable is set to 0 , the screen will display every 5 minutes after the device has been running for 300 minutes, significantly extending the screen's lifespan. To customize this behavior, you can locate the following configuration in /usr/bin/blikvm/package.json . \"oled\" :{ \"oled_enable\" : 1 , \"restart_show_time\" : 300 , \"interval_display_time\" : 5 } Modify the values of restart_show_time and interval_display_time in minutes to achieve different control effects. BliKVM v4 Allwinner To power ON/OFF the display manually, please press and hold the SW2 button on the front panel.","title":"OLED Display"},{"location":"OLED-display/#oled-display","text":"Due to prolonged operation, issues such as screen burn-in may occur with the OLED. Therefore, the OLED has the following logic: upon initial startup, oled_enable is set to 1 by default, meaning the OLED screen will remain constantly on. If oled_enable is set to 0 , the screen will display every 5 minutes after the device has been running for 300 minutes, significantly extending the screen's lifespan. To customize this behavior, you can locate the following configuration in /usr/bin/blikvm/package.json . \"oled\" :{ \"oled_enable\" : 1 , \"restart_show_time\" : 300 , \"interval_display_time\" : 5 } Modify the values of restart_show_time and interval_display_time in minutes to achieve different control effects.","title":"OLED display"},{"location":"OLED-display/#blikvm-v4-allwinner","text":"To power ON/OFF the display manually, please press and hold the SW2 button on the front panel.","title":"BliKVM v4 Allwinner"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/","text":"BliKVM v1 (RPI CM4) BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! Connectivity diagram 1 OTG port 7 Micro SD card slot 2 USB3.0 x2 8 ACT LED (green) 3 ATX control port 9 Ethernet port 4 HDMI video input port 10 OLED Display 5 PWR IN port 11 Antenna mounting hole 6 Power LED (red) Specifications Parameter name Characteristics Power 5V 3A PWR IN port Connectivity/Interfaces HDMI IN HDMI video input port OTG Keyboard, mouse, mass storage, and other external device emulation CN-ATX Turn on/off or restart the controlled computer Micro SD card slot Persistent storage for OS and your data PWR IN port 5V 3A power port Displays and indicators LED indicators Power LED (red), ACT LED (green) OLED display OLED 128x64 0.96 inch Video Supported resolutions Up to 1920x1200@60Hz Video compression methods H.264, MJPEG Core Chip Raspberry Pi Compute Module 4 Power consumption Up to 15W Environmental Operating temperature 0\u00b0C to 70\u00b0C Storage temperature -20\u00b0C to 60\u00b0C Dimensions and weight Size 120(L) x 70W) x 37(H) mm Weight 0.45 kg Dimensions Schematic Diagram","title":"BliKVM v1 (RPI CM4)"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/#blikvm-v1-rpi-cm4","text":"BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals!","title":"BliKVM v1 (RPI CM4)"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/#connectivity-diagram","text":"1 OTG port 7 Micro SD card slot 2 USB3.0 x2 8 ACT LED (green) 3 ATX control port 9 Ethernet port 4 HDMI video input port 10 OLED Display 5 PWR IN port 11 Antenna mounting hole 6 Power LED (red)","title":"Connectivity diagram"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/#specifications","text":"Parameter name Characteristics Power 5V 3A PWR IN port Connectivity/Interfaces HDMI IN HDMI video input port OTG Keyboard, mouse, mass storage, and other external device emulation CN-ATX Turn on/off or restart the controlled computer Micro SD card slot Persistent storage for OS and your data PWR IN port 5V 3A power port Displays and indicators LED indicators Power LED (red), ACT LED (green) OLED display OLED 128x64 0.96 inch Video Supported resolutions Up to 1920x1200@60Hz Video compression methods H.264, MJPEG Core Chip Raspberry Pi Compute Module 4 Power consumption Up to 15W Environmental Operating temperature 0\u00b0C to 70\u00b0C Storage temperature -20\u00b0C to 60\u00b0C Dimensions and weight Size 120(L) x 70W) x 37(H) mm Weight 0.45 kg","title":"Specifications"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/#dimensions-schematic-diagram","text":"","title":"Dimensions Schematic Diagram"},{"location":"atx-guide/","text":"ATXA guide 1. Introduction ATXA is an ATX adapter board to manage the power of your computer. The product includes two modules; A-board and B-board. A-board is connected to the Raspberry Pi, B-board is connected to the computer's motherboard, and A-board is connected to B-board through a network cable. Join the Discord Community Chat for news, questions and support! ATXA_A ATXA_B 2. A-board A-board is connected to the Raspberry Pi. The following table is a typical connection method in PiKVM application. A-board RPI4 GND GND 3V3 3V3 LED PWR GPIO24 LED HDD GPIO22 SW PWR GPIO23 SW RST GPIO27 A-board is connected to B-board through a network cable. The following table is the corresponding relationship between the pin status of A-board and B-board. Pins on A-board Pins on B-board LED PWR is HIGH LED PWR+ is HIGH, LED PWR- is LOW LED PWR is LOW LED PWR+ is LOW, LED PWR- is LOW LED HDD is HIGH LED HDD+ is HIGH, LED HDD- is LOW LED HDD is LOW LED HDD+ is LOW, LED HDD- is LOW SW PWR is HIGH BTN PWR+ and BTN PWR- connected, the power button is pressed SW PWR is LOW BTN PWR+ and BTN PWR- disconnected, the power button is unpressed SW RST is HIGH BTN RST+ and BTN RST- connected, the reset button is pressed SW RST is LOW BTN RST+ and BTN RST- disconnected, the reset button is unpressed 3. B-board The b-board has an adapted full-height and half-height metal PCI mounting plate, which can be installed on the computer case. The user connects the pins on the B-board to the ATX control interface on the computer motherboard using the color DuPont cables provided with the product. ATXA-B Instructions for connecting to the computer motherboard According to the instructions of the computer motherboard, first find the position of the ATX function related pins on the motherboard, and then unplug the ATX ray that has been connected to the motherboard. After unplugging, the power button of the computer will lose its function. There are two rows of 8PIN pins on the ATXA-B motherboard. It is unnecessary to distinguish between the two rows of pins when they are used with the same functions. One row of pins is used for KVM to control ATX-related functions, and the other row of pins is connected to the ATX DuPont head unplugged from the main board to maintain the original chassis power button function. Connect each wire according to the specific pin definitions on the motherboard and ATXA-B. See the following figure for the connection relationship\uff1a 4.Mechanical Diagram 5. Test video YouTube: ATX 6. Purchase Purchase\uff1a ATX","title":"ATX Guide"},{"location":"atx-guide/#atxa-guide","text":"","title":"ATXA guide"},{"location":"atx-guide/#1-introduction","text":"ATXA is an ATX adapter board to manage the power of your computer. The product includes two modules; A-board and B-board. A-board is connected to the Raspberry Pi, B-board is connected to the computer's motherboard, and A-board is connected to B-board through a network cable. Join the Discord Community Chat for news, questions and support! ATXA_A ATXA_B","title":"1. Introduction"},{"location":"atx-guide/#2-a-board","text":"A-board is connected to the Raspberry Pi. The following table is a typical connection method in PiKVM application. A-board RPI4 GND GND 3V3 3V3 LED PWR GPIO24 LED HDD GPIO22 SW PWR GPIO23 SW RST GPIO27 A-board is connected to B-board through a network cable. The following table is the corresponding relationship between the pin status of A-board and B-board. Pins on A-board Pins on B-board LED PWR is HIGH LED PWR+ is HIGH, LED PWR- is LOW LED PWR is LOW LED PWR+ is LOW, LED PWR- is LOW LED HDD is HIGH LED HDD+ is HIGH, LED HDD- is LOW LED HDD is LOW LED HDD+ is LOW, LED HDD- is LOW SW PWR is HIGH BTN PWR+ and BTN PWR- connected, the power button is pressed SW PWR is LOW BTN PWR+ and BTN PWR- disconnected, the power button is unpressed SW RST is HIGH BTN RST+ and BTN RST- connected, the reset button is pressed SW RST is LOW BTN RST+ and BTN RST- disconnected, the reset button is unpressed","title":"2. A-board"},{"location":"atx-guide/#3-b-board","text":"The b-board has an adapted full-height and half-height metal PCI mounting plate, which can be installed on the computer case. The user connects the pins on the B-board to the ATX control interface on the computer motherboard using the color DuPont cables provided with the product. ATXA-B Instructions for connecting to the computer motherboard According to the instructions of the computer motherboard, first find the position of the ATX function related pins on the motherboard, and then unplug the ATX ray that has been connected to the motherboard. After unplugging, the power button of the computer will lose its function. There are two rows of 8PIN pins on the ATXA-B motherboard. It is unnecessary to distinguish between the two rows of pins when they are used with the same functions. One row of pins is used for KVM to control ATX-related functions, and the other row of pins is connected to the ATX DuPont head unplugged from the main board to maintain the original chassis power button function. Connect each wire according to the specific pin definitions on the motherboard and ATXA-B. See the following figure for the connection relationship\uff1a","title":"3. B-board"},{"location":"atx-guide/#4mechanical-diagram","text":"","title":"4.Mechanical Diagram"},{"location":"atx-guide/#5-test-video","text":"YouTube: ATX","title":"5. Test video"},{"location":"atx-guide/#6-purchase","text":"Purchase\uff1a ATX","title":"6. Purchase"},{"location":"atx/","text":"ATX Control Board To manage the power of your computer, you need to install an ATX control board inside the chassis and connect it to the motherboard (to enable KVM control of power on/off via the ATX switch). There is a female-to-female cable that connects from the motherboard to the ATX control board and a male-to-female cable that connects from the ATX control board to the front panel (to keep the power on/off button on the chassis functional). The interface on the ATX control board has two ports (TO CASE, TO MB), and both ports have the same functionality, so they can be used interchangeably. ATX compatibility Laptops are not compatible with ATX as they lack the required ATX pins. This method is only applicable to Desktop PC's and servers. Detailed Instructions 1. Connect the two cables to the ATX control board. To secure the ATX control board inside the chassis, you can choose to mount it on a bracket attached to a PCIe slot. Example 2. Locate the motherboard pins responsible for connecting the front panel buttons and LEDs and disconnect them. Usually, the cables and connectors on the motherboard are labeled. If you're unsure, you can refer to your motherboard's documentation. Example 3. Connect the DuPont male connector from the front panel to the DuPont female connector on the ATX cable, following the pin definitions and paying attention to the labels and polarity (+ or -). Example 4. Using the same method, connect the female pins from the ATX board to the corresponding connector on the motherboard. Refer to your motherboard's documentation to determine which pins on the motherboard connect to which pins on the ATX control board. Sometimes, this information is printed on the motherboard. Example 5. Install the ATX board into a PCI slot on the chassis and secure it with screws or use alternative mounting methods according to your preference. Example 6. Arrange the cables neatly and secure them as needed. Make sure the cables do not come into contact with any fans inside the chassis. Use an Ethernet cable to connect the ATX board to the ATX interface of the BliKVM. With this, the hardware connection of the ATX control board is complete.","title":"ATX Control Board"},{"location":"atx/#atx-control-board","text":"To manage the power of your computer, you need to install an ATX control board inside the chassis and connect it to the motherboard (to enable KVM control of power on/off via the ATX switch). There is a female-to-female cable that connects from the motherboard to the ATX control board and a male-to-female cable that connects from the ATX control board to the front panel (to keep the power on/off button on the chassis functional). The interface on the ATX control board has two ports (TO CASE, TO MB), and both ports have the same functionality, so they can be used interchangeably. ATX compatibility Laptops are not compatible with ATX as they lack the required ATX pins. This method is only applicable to Desktop PC's and servers.","title":"ATX Control Board"},{"location":"atx/#detailed-instructions","text":"1. Connect the two cables to the ATX control board. To secure the ATX control board inside the chassis, you can choose to mount it on a bracket attached to a PCIe slot. Example 2. Locate the motherboard pins responsible for connecting the front panel buttons and LEDs and disconnect them. Usually, the cables and connectors on the motherboard are labeled. If you're unsure, you can refer to your motherboard's documentation. Example 3. Connect the DuPont male connector from the front panel to the DuPont female connector on the ATX cable, following the pin definitions and paying attention to the labels and polarity (+ or -). Example 4. Using the same method, connect the female pins from the ATX board to the corresponding connector on the motherboard. Refer to your motherboard's documentation to determine which pins on the motherboard connect to which pins on the ATX control board. Sometimes, this information is printed on the motherboard. Example 5. Install the ATX board into a PCI slot on the chassis and secure it with screws or use alternative mounting methods according to your preference. Example 6. Arrange the cables neatly and secure them as needed. Make sure the cables do not come into contact with any fans inside the chassis. Use an Ethernet cable to connect the ATX board to the ATX interface of the BliKVM. With this, the hardware connection of the ATX control board is complete.","title":"Detailed Instructions"},{"location":"dev_api/","text":"API DISCLAIMER: This API is experimental and subject to change at any moment! This document is only valid for v1.4.0 and earlier versions, and will be updated soon This document is the HTTP API development manual for BLIKVM OS. If you have new API requirements not covered in this document, you can submit a pull request on GitHub to seek support. Please replace the kvmip in the request URL with the actual IP address of your KVM. Authentication This API is used for user login and returns an access token. Some APIs within the system require a valid token for access. Request URL: http://kvmip/login_api Request Method: GET Request Body: JSON format, for example: { \"username\": \"admin\", \"password\": \"admin\" } The response is as follows; if the status is not 1, the authentication has failed. { \"status\": 1, \"info\": \"login success\", \"data\": { \"token\": \"2sscdada6a97a774fcd4714c\" } } MJPEG Video This API is used to obtain the MJPEG video stream when the image mode is set to MJPEG. Request URL: http://kvmip:8008/stream This API is used to capture a frame of MJPEG in image mode. Request URL: http://kvmip:8008/snapshot Request Method: GET Keyboard For specific keyboard encoding, please refer to the following: \"KeyA\"=> 4, \"KeyB\"=> 5, \"KeyC\"=> 6, \"KeyD\"=> 7, \"KeyE\"=> 8, \"KeyF\"=> 9, \"KeyG\"=> 10, \"KeyH\"=> 11, \"KeyI\"=> 12, \"KeyJ\"=> 13, \"KeyK\"=> 14, \"KeyL\"=> 15, \"KeyM\"=> 16, \"KeyN\"=> 17, \"KeyO\"=> 18, \"KeyP\"=> 19, \"KeyQ\"=> 20, \"KeyR\"=> 21, \"KeyS\"=> 22, \"KeyT\"=> 23, \"KeyU\"=> 24, \"KeyV\"=> 25, \"KeyW\"=> 26, \"KeyX\"=> 27, \"KeyY\"=> 28, \"KeyZ\"=> 29, \"Digit1\"=> 30, \"Digit2\"=> 31, \"Digit3\"=> 32, \"Digit4\"=> 33, \"Digit5\"=> 34, \"Digit6\"=> 35, \"Digit7\"=> 36, \"Digit8\"=> 37, \"Digit9\"=> 38, \"Digit0\"=> 39, \"Enter\"=> 40, \"Escape\"=> 41, \"Backspace\"=> 42, \"Tab\"=> 43, \"Space\"=> 44, \"Minus\"=> 45, \"Equal\"=> 46, \"BracketLeft\"=> 47, \"BracketRight\"=> 48, \"Backslash\"=> 49, \"Semicolon\"=> 51, \"Quote\"=> 52, \"Backquote\"=> 53, \"Comma\"=> 54, \"Period\"=> 55, \"Slash\"=> 56, \"CapsLock\"=> 57, \"F1\"=> 58, \"F2\"=> 59, \"F3\"=> 60, \"F4\"=> 61, \"F5\"=> 62, \"F6\"=> 63, \"F7\"=> 64, \"F8\"=> 65, \"F9\"=> 66, \"F10\"=> 67, \"F11\"=> 68, \"F12\"=> 69, \"PrtSc\"=> 70, \"ScrollLock\"=> 71, \"Pause\"=> 72, \"Insert\"=> 73, \"Home\"=> 74, \"PageUp\"=> 75, \"Delete\"=> 76, \"End\"=> 77, \"PageDown\"=> 78, \"ArrowRight\"=> 79, \"ArrowLeft\"=> 80, \"ArrowDown\"=> 81, \"ArrowUp\"=> 82, \"NumLock\"=> 83, \"NumpadDivide\"=> 84, \"NumpadMultiply\"=> 85, \"NumpadSubtract\"=> 86, \"NumpadAdd\"=> 87, \"NumpadEnter\"=> 88, \"Numpad1\"=> 89, \"Numpad2\"=> 90, \"Numpad3\"=> 91, \"Numpad4\"=> 92, \"Numpad5\"=> 93, \"Numpad6\"=> 94, \"Numpad7\"=> 95, \"Numpad8\"=> 96, \"Numpad9\"=> 97, \"Numpad0\"=> 98, \"NumpadDecimal\"=> 99 Request URL: http://kvmip/keyboard Request Method: GET Request Body: JSON format, where \"keycodes\" is a string array supporting multiple inputs at once. For example: { \"keycodes\": [\"Digit1\"] } The response result is as follows: { \"status\": 1, \"info\": \"key input success\", \"data\": [] }","title":"HTTP API"},{"location":"dev_api/#api","text":"DISCLAIMER: This API is experimental and subject to change at any moment! This document is only valid for v1.4.0 and earlier versions, and will be updated soon This document is the HTTP API development manual for BLIKVM OS. If you have new API requirements not covered in this document, you can submit a pull request on GitHub to seek support. Please replace the kvmip in the request URL with the actual IP address of your KVM.","title":"API"},{"location":"dev_api/#authentication","text":"This API is used for user login and returns an access token. Some APIs within the system require a valid token for access. Request URL: http://kvmip/login_api Request Method: GET Request Body: JSON format, for example: { \"username\": \"admin\", \"password\": \"admin\" } The response is as follows; if the status is not 1, the authentication has failed. { \"status\": 1, \"info\": \"login success\", \"data\": { \"token\": \"2sscdada6a97a774fcd4714c\" } }","title":"Authentication"},{"location":"dev_api/#mjpeg-video","text":"This API is used to obtain the MJPEG video stream when the image mode is set to MJPEG. Request URL: http://kvmip:8008/stream This API is used to capture a frame of MJPEG in image mode. Request URL: http://kvmip:8008/snapshot Request Method: GET","title":"MJPEG Video"},{"location":"dev_api/#keyboard","text":"For specific keyboard encoding, please refer to the following: \"KeyA\"=> 4, \"KeyB\"=> 5, \"KeyC\"=> 6, \"KeyD\"=> 7, \"KeyE\"=> 8, \"KeyF\"=> 9, \"KeyG\"=> 10, \"KeyH\"=> 11, \"KeyI\"=> 12, \"KeyJ\"=> 13, \"KeyK\"=> 14, \"KeyL\"=> 15, \"KeyM\"=> 16, \"KeyN\"=> 17, \"KeyO\"=> 18, \"KeyP\"=> 19, \"KeyQ\"=> 20, \"KeyR\"=> 21, \"KeyS\"=> 22, \"KeyT\"=> 23, \"KeyU\"=> 24, \"KeyV\"=> 25, \"KeyW\"=> 26, \"KeyX\"=> 27, \"KeyY\"=> 28, \"KeyZ\"=> 29, \"Digit1\"=> 30, \"Digit2\"=> 31, \"Digit3\"=> 32, \"Digit4\"=> 33, \"Digit5\"=> 34, \"Digit6\"=> 35, \"Digit7\"=> 36, \"Digit8\"=> 37, \"Digit9\"=> 38, \"Digit0\"=> 39, \"Enter\"=> 40, \"Escape\"=> 41, \"Backspace\"=> 42, \"Tab\"=> 43, \"Space\"=> 44, \"Minus\"=> 45, \"Equal\"=> 46, \"BracketLeft\"=> 47, \"BracketRight\"=> 48, \"Backslash\"=> 49, \"Semicolon\"=> 51, \"Quote\"=> 52, \"Backquote\"=> 53, \"Comma\"=> 54, \"Period\"=> 55, \"Slash\"=> 56, \"CapsLock\"=> 57, \"F1\"=> 58, \"F2\"=> 59, \"F3\"=> 60, \"F4\"=> 61, \"F5\"=> 62, \"F6\"=> 63, \"F7\"=> 64, \"F8\"=> 65, \"F9\"=> 66, \"F10\"=> 67, \"F11\"=> 68, \"F12\"=> 69, \"PrtSc\"=> 70, \"ScrollLock\"=> 71, \"Pause\"=> 72, \"Insert\"=> 73, \"Home\"=> 74, \"PageUp\"=> 75, \"Delete\"=> 76, \"End\"=> 77, \"PageDown\"=> 78, \"ArrowRight\"=> 79, \"ArrowLeft\"=> 80, \"ArrowDown\"=> 81, \"ArrowUp\"=> 82, \"NumLock\"=> 83, \"NumpadDivide\"=> 84, \"NumpadMultiply\"=> 85, \"NumpadSubtract\"=> 86, \"NumpadAdd\"=> 87, \"NumpadEnter\"=> 88, \"Numpad1\"=> 89, \"Numpad2\"=> 90, \"Numpad3\"=> 91, \"Numpad4\"=> 92, \"Numpad5\"=> 93, \"Numpad6\"=> 94, \"Numpad7\"=> 95, \"Numpad8\"=> 96, \"Numpad9\"=> 97, \"Numpad0\"=> 98, \"NumpadDecimal\"=> 99 Request URL: http://kvmip/keyboard Request Method: GET Request Body: JSON format, where \"keycodes\" is a string array supporting multiple inputs at once. For example: { \"keycodes\": [\"Digit1\"] } The response result is as follows: { \"status\": 1, \"info\": \"key input success\", \"data\": [] }","title":"Keyboard"},{"location":"edid/","text":"EDID The EDID file in BliKVM serves the purpose of informing the controlled computer about the expected HDMI output resolution. For example, if the EDID is set to 1080P60Hz, and the controlled computer supports this resolution, it will output at 1080P60Hz. Additionally, EDID can be used to disable audio, modify the display model, name, manufacturer, and other information. In most cases, you don't need to change it, but sometimes, especially with strange UEFI/BIOS behavior, it may be necessary. Note BliKVM v1, v2, and v3 use the CSI video capture scheme, which supports EDID settings. However, BliKVM v4 uses the USB video capture scheme, which does not support EDID settings. For v3 HAT, there is a limitation of two CSI channels on the Raspberry Pi 4B, which means it can only capture video input with a maximum resolution of 1080P50Hz. Therefore, if you set 1080P60Hz EDID for v3, it will not be able to capture the image. If you are using PiKVM OS, you can refer to this link for modification instructions. If you are using BliKVM OS, the EDID file is located at /usr/bin/blikvm/edid.txt . Open this file, and replace the EDID contents with the desired resolution's EDID. EDID Examples for 1080P60Hz The following EDID is suitable for v1 and v2 hardware. 1920x1080 60Hz, with audio 00FFFFFFFFFFFF0031D8888800888888 1C150103800000780AEE91A3544C9926 0F50543FCD0001000101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0050 694B564D0A20202020202020000000FD 003B3D0F2E0F1E0A202020202020013C 02031E434F041303021211012021A23C 3D3E1F1066030C00300080E2007F8C0A D08A20E02D10103E9600C48E21000018 8C0AD08A20E02D10103E9600138E2100 00189729A0D051842230509816009A01 11000018000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000001C EDID Examples for 1080P50Hz The following EDID is suitable for v1, v2, and v3 hardware, especially when you want v3 HAT to capture 1080P resolution. 1920x1080 50Hz, with audio 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a202020202020014f 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000028 EDID Examples for 720P60Hz The following EDID is suitable for v1, v2, and v3 hardware. 1280x720 60Hz, with audio 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 Custom EDID To customize the EDID, it is best to use third-party utilities, such as the recommended advanced AW EDID Editor (works well in Windows and can be used in wine) or wxEDID . Both editors work with the binary EDID format. Using these tools, you can modify the EDID information like editing a file, similar to changing the information on an identity card. By editing the EDID, you can adjust the parameters and characteristics of the display to suit different usage requirements, and thus achieve better display performance.","title":"HDMI EDID"},{"location":"edid/#edid","text":"The EDID file in BliKVM serves the purpose of informing the controlled computer about the expected HDMI output resolution. For example, if the EDID is set to 1080P60Hz, and the controlled computer supports this resolution, it will output at 1080P60Hz. Additionally, EDID can be used to disable audio, modify the display model, name, manufacturer, and other information. In most cases, you don't need to change it, but sometimes, especially with strange UEFI/BIOS behavior, it may be necessary. Note BliKVM v1, v2, and v3 use the CSI video capture scheme, which supports EDID settings. However, BliKVM v4 uses the USB video capture scheme, which does not support EDID settings. For v3 HAT, there is a limitation of two CSI channels on the Raspberry Pi 4B, which means it can only capture video input with a maximum resolution of 1080P50Hz. Therefore, if you set 1080P60Hz EDID for v3, it will not be able to capture the image. If you are using PiKVM OS, you can refer to this link for modification instructions. If you are using BliKVM OS, the EDID file is located at /usr/bin/blikvm/edid.txt . Open this file, and replace the EDID contents with the desired resolution's EDID.","title":"EDID"},{"location":"edid/#edid-examples-for-1080p60hz","text":"The following EDID is suitable for v1 and v2 hardware. 1920x1080 60Hz, with audio 00FFFFFFFFFFFF0031D8888800888888 1C150103800000780AEE91A3544C9926 0F50543FCD0001000101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0050 694B564D0A20202020202020000000FD 003B3D0F2E0F1E0A202020202020013C 02031E434F041303021211012021A23C 3D3E1F1066030C00300080E2007F8C0A D08A20E02D10103E9600C48E21000018 8C0AD08A20E02D10103E9600138E2100 00189729A0D051842230509816009A01 11000018000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000001C","title":"EDID Examples for 1080P60Hz"},{"location":"edid/#edid-examples-for-1080p50hz","text":"The following EDID is suitable for v1, v2, and v3 hardware, especially when you want v3 HAT to capture 1080P resolution. 1920x1080 50Hz, with audio 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a202020202020014f 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000028","title":"EDID Examples for 1080P50Hz"},{"location":"edid/#edid-examples-for-720p60hz","text":"The following EDID is suitable for v1, v2, and v3 hardware. 1280x720 60Hz, with audio 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000","title":"EDID Examples for 720P60Hz"},{"location":"edid/#custom-edid","text":"To customize the EDID, it is best to use third-party utilities, such as the recommended advanced AW EDID Editor (works well in Windows and can be used in wine) or wxEDID . Both editors work with the binary EDID format. Using these tools, you can modify the EDID information like editing a file, similar to changing the information on an identity card. By editing the EDID, you can adjust the parameters and characteristics of the display to suit different usage requirements, and thus achieve better display performance.","title":"Custom EDID"},{"location":"faq/","text":"FAQ & Troubleshooting As a first step, we recommend carefully reading our documentation. Most steps to successfully set up your BLIKVM are already described there. If you run into any issues you can check this page which will list common errors. If that still doesn't help you you're welcome to raise an issue ticket or join our Discord for further help. Common Questions Can I connect multiple servers to a single BLIKVM? Yes, but it requires additional work to set up. See this page . How can I get the access to PiKVM in my local network over Internet? If your router has an external IP address, you can use port forwarding to forward port 80 (Web), port 8008 (mjpeg), and port 8188 (webrtc) In all other cases, you can use the excellent free VPN service Tailscale. Which BLiKVM hardware version should I choose, such as BLiKVM V1 CM4, BLiKVM V2 PCIe, and BLiKVM V3 Hat? First, please refer to this page for a comparison of the main parameters of each version. V1 and V3 are external solutions, while V2 is an internal chassis solution. If you have a chassis and there is space inside, choosing the V2 PCIe version would be a better option. So how do you choose between the external solutions V1 and V3? V1 is based on the CM4 platform, with higher integration and ready-to-use versions available. V3 is based on the Raspberry Pi 4B platform, with all IO ports exposed and greater expandability. Another key difference is that V1 supports up to 1080P60Hz input, while V3 supports up to 1080P50Hz input. Of course, you also need to consider whether you already have a CM4 or 4B, as purchasing the corresponding baseboard would offer better cost-effectiveness. Can I use BLIKVM for gaming? No, because: For HDMI-CSI bridge, bus bandwidth is not enough to transmit more than 1080p60. For HDMI-USB dongle, high latency and low video quality. General hardware video capture differs from software streaming and introduces additional latency. Can BLIKVM do 4K video? For HDMI-CSI bridge, no. There is not enough bandwidth in the CSI bus for that much data. 1080p60 will max out the bandwidth. For the USB capture devices: technically yes, they will downsample to something smaller to meet the USB 2.0 bandwidth limitations, so the source may be 4k, but the stream will not. The 4K real-time video will not fit through the network anyway. Where does the cursor/video latency come from? Here is the chain of transferring an image to your browser or VNC client. Capture device -> Compression -> Network -> Decompression -> Rendering 100-200ms is very, very fast for this. But we are working to speed things up even more. Does BLIKVM support sound? BliKVM v1 CM4, v2 PCIe, v3 HAT version supported\uff0c v4 Allwinner not support now. Can I power the Pi via PoE? Yes! Hat and PCIe version supported. First Steps What is the default password? How do I change it? If you use PiKVM, there are two types of accounts: OS and PiKVM (web interface) accounts. The system account blikvm can be used for SSH/UART access and has the password blikvm . The web interface account is called admin and has the password admin . The PiKVM account cannot be used for SSH access and vice versa. To change passwords, use the following commands (become the root user): su - # If you're in the webterm rw # Switch filesystem to read-write mode passwd blikvm # Change blikvm user password kvmd-htpasswd set admin # Change web ui admin password ro # Back to read-only How do I add another user? If you use PiKVM software, as stated above you need to make 2 accounts, 1 for the shell, the other for the PiKVM Web UI. If you require additional users for PiKVM UI, you can use the following: # su - # rw # kvmd-htpasswd set # Adds a new user # kvmd-htpasswd set # Sets the password as long as the user exists # kvmd-htpasswd del # Removes/deletes a user To add a shell/terminal account: # su - # rw # adduser # passwd Keep in mind that the more users that are added and accessing the screen stream at the same time, the FPS will drop. Video Problems BLIKVM does not show the video from the computer at all If the output of dmesg | grep tc358743 does not show something similar as tc358743 found @ ... , then this means that the TC358743 HDMI input bridge is not detected. Verify that the flex flat cable (ffc) is correctly connected. Double-check that the video capture device is connected correctly. For the CSI bridge, this should be exactly the camera port. Some laptops do not output any signal until you switch the output (usually via the FN + and an F5 key on the keyboard). Your computer may have turned on sleep mode for the monitor. Move the mouse to turn it off. For windows you might need to check for the active signal resolution. To change the active signal resolution you have to go to Settings>System>Display>Advanced display settings>Display adapter properties then, click \"List All Models\" and choose the one you want. Keep trying different Hz settings. The video works in the booted OS, but not in the BIOS/UEFI This problem appears on Intel NUC, GA-H77-DS3H, and some other devices when using a CSI bridge. All you need to do is change the EDID data. This is the information about supported resolutions that the CSI bridge reports to your computer. Glitchy or wrong BIOS/UEFI resolution On some motherboards, the BIOS may be displayed at a lower resolution, or with some rendering issues/glitches, specially on newer ASUS ones. Like this: This can be solved by enabling the Compatibility Support Module (CSM) in your BIOS, usually under the Boot options. If you can't or don't want to enable the CSM, you can try connecting a DisplayPort (DP) monitor, or a dummy plug . If you remove the DP cable/adapter the bug will reappear. If none of this works, try connecting the DP cable first, boot into the BIOS, disable the CSM and shutdown (do not restart) your PC. Then, boot into the BIOS and enable the CSM before shutting down your PC. Then connect the HDMI and turn your PC on again. There is no video in GRUB2, but there is before and after Sometimes this can be caused by the specifics of the BIOS/UEFI and how GRUB2 works with video. This can be solved by enabling the Compatibility Support Module (CSM) in your BIOS, usually under the Boot options. The video mode will be located in the same section. Switch the Video mode from UEFI to Legacy . No image from computer with Linux + Awesome WM Sometimes Awesome WM on Linux can't recognize a video output change on a cable. That is, if the cable was first inserted into the monitor, and then you reconnected it to BLIKVM - it may happen that you will not see the image. It seems that the problem is Awesome WM, since for example with KDE, it is not reproducable. If you turn on your workstation with BLIKVM already connected, everything will work fine. USB Problems (keyboard, mouse, mass storage, etc) What speed is the USB OTG port? Per the official RPI documentation, this is a limitation of the SoC. The OTG port is only USB2.0, so is limited to 455 Mbit/s. Why can't some keyboard shortcuts of physical keyboards be captured while virtual keyboards can? For example, the F11 key on a Mac computer cannot be captured. This is because some shortcuts are already in use by the system, such as in macOS, where F11 is assigned to the \"Show Desktop\" function by default. When you press F11 in a web interface, the KeyboardEvent is first captured by the system, and if a callback is registered in the system, the event will not be passed to the application. To solve this issue, you can disable the system's assigned shortcut or use a virtual keyboard. Hardware Problems (Wi-Fi, ATX, etc) If you use PiKVM software, the web UI show FAN error! Because the fan model used by BLIKVM hardware is different from that of PIKVM hardware, viewing the fan status through the web interface may fail in the latest system of pikvm. However, this will not affect the normal operation of BLIKVM fan. Therefore, when using the PIKVM image, as long as you ensure that the install script displays OK, it means that the update of the kvmd fan program is successful. The threshold temperature set by the default program is 60 degrees Celsius. When the CPU temperature is detected to exceed 60 degrees Celsius, the fan will start rotating at 85% speed. If you want to modify the threshold temperature and speed, you can modify the kvmd-fan.py script, and then re-execute install.sh. I can't connect to Wi-Fi at all! If your device is unable to connect to the Wi-Fi network that you have set up, check the 2.4 GHz Wi-Fi channel used by your Wi-Fi access point. If channels 12 to 14 are used (some countries have banned these channels) try to use a channel between 1 and 11. BLIKVM complains about low power warnings Are you using a \"proper\" power supply? Not one you hacked together? Some USB power bricks advertise 5V 2.1A or higher, but can't deliver consistent 5V. Best to use Raspberry Pi Foundation recommended power supplies. It should be 5.1v and 3A DC output. When I use the PoE, do I still need to use the power OTG splitter to prevent back power on the machine usb? Only HAT version you need to use power OTG splitter to prevent back power. Generally, most hosts computer are protected back power, you do not need to usr power OTG splitter in this case. BLIKVM-CM4-V2.2 and BLIKVM-PCIe version don't need. In some board like BLIKVM-PCIe or BLIKVM-CM4-V2.2 has boot pin, how do I connect? If you short them, CM4 will not start normally, but will enter the burning image mode. If your hardware version of boot has only two pins, use the jumper cap to connect the two pins as a short circuit. If you do not use the jumper cap or plug it into one pin, CM4 will start normally. If you use three boot pins of the hardware version, use the jumper cap to connect GND and another non-GND pin to indicate short circuit, and plug the jumper cap on the two GND pins or do not use it, CM4 will start normally. Web Problems What ports does BliKVM OS occupy, and how should it be forwarded when using a public server? The web interface uses the HTTP protocol and occupies port 80. If you are using hardware versions V1, V2, or V3 with web-rtc transmission, the port is 8188. If you are using hardware version V4 with MJPEG transmission, the port is 8008. Please note that the ports cannot be modified; only port forwarding can be configured. Raspberry Problems Can I use both the CM4 version with EMMC and the SD card at the same time? No, you can't, When designing the CM4 hardware, several pins of the SD card are only valid in the lite version. You can find instructions on the official website of Raspberry Pi.","title":"FAQ"},{"location":"faq/#faq-troubleshooting","text":"As a first step, we recommend carefully reading our documentation. Most steps to successfully set up your BLIKVM are already described there. If you run into any issues you can check this page which will list common errors. If that still doesn't help you you're welcome to raise an issue ticket or join our Discord for further help.","title":"FAQ & Troubleshooting"},{"location":"faq/#common-questions","text":"Can I connect multiple servers to a single BLIKVM? Yes, but it requires additional work to set up. See this page . How can I get the access to PiKVM in my local network over Internet? If your router has an external IP address, you can use port forwarding to forward port 80 (Web), port 8008 (mjpeg), and port 8188 (webrtc) In all other cases, you can use the excellent free VPN service Tailscale. Which BLiKVM hardware version should I choose, such as BLiKVM V1 CM4, BLiKVM V2 PCIe, and BLiKVM V3 Hat? First, please refer to this page for a comparison of the main parameters of each version. V1 and V3 are external solutions, while V2 is an internal chassis solution. If you have a chassis and there is space inside, choosing the V2 PCIe version would be a better option. So how do you choose between the external solutions V1 and V3? V1 is based on the CM4 platform, with higher integration and ready-to-use versions available. V3 is based on the Raspberry Pi 4B platform, with all IO ports exposed and greater expandability. Another key difference is that V1 supports up to 1080P60Hz input, while V3 supports up to 1080P50Hz input. Of course, you also need to consider whether you already have a CM4 or 4B, as purchasing the corresponding baseboard would offer better cost-effectiveness. Can I use BLIKVM for gaming? No, because: For HDMI-CSI bridge, bus bandwidth is not enough to transmit more than 1080p60. For HDMI-USB dongle, high latency and low video quality. General hardware video capture differs from software streaming and introduces additional latency. Can BLIKVM do 4K video? For HDMI-CSI bridge, no. There is not enough bandwidth in the CSI bus for that much data. 1080p60 will max out the bandwidth. For the USB capture devices: technically yes, they will downsample to something smaller to meet the USB 2.0 bandwidth limitations, so the source may be 4k, but the stream will not. The 4K real-time video will not fit through the network anyway. Where does the cursor/video latency come from? Here is the chain of transferring an image to your browser or VNC client. Capture device -> Compression -> Network -> Decompression -> Rendering 100-200ms is very, very fast for this. But we are working to speed things up even more. Does BLIKVM support sound? BliKVM v1 CM4, v2 PCIe, v3 HAT version supported\uff0c v4 Allwinner not support now. Can I power the Pi via PoE? Yes! Hat and PCIe version supported.","title":"Common Questions"},{"location":"faq/#first-steps","text":"What is the default password? How do I change it? If you use PiKVM, there are two types of accounts: OS and PiKVM (web interface) accounts. The system account blikvm can be used for SSH/UART access and has the password blikvm . The web interface account is called admin and has the password admin . The PiKVM account cannot be used for SSH access and vice versa. To change passwords, use the following commands (become the root user): su - # If you're in the webterm rw # Switch filesystem to read-write mode passwd blikvm # Change blikvm user password kvmd-htpasswd set admin # Change web ui admin password ro # Back to read-only How do I add another user? If you use PiKVM software, as stated above you need to make 2 accounts, 1 for the shell, the other for the PiKVM Web UI. If you require additional users for PiKVM UI, you can use the following: # su - # rw # kvmd-htpasswd set # Adds a new user # kvmd-htpasswd set # Sets the password as long as the user exists # kvmd-htpasswd del # Removes/deletes a user To add a shell/terminal account: # su - # rw # adduser # passwd Keep in mind that the more users that are added and accessing the screen stream at the same time, the FPS will drop.","title":"First Steps"},{"location":"faq/#video-problems","text":"BLIKVM does not show the video from the computer at all If the output of dmesg | grep tc358743 does not show something similar as tc358743 found @ ... , then this means that the TC358743 HDMI input bridge is not detected. Verify that the flex flat cable (ffc) is correctly connected. Double-check that the video capture device is connected correctly. For the CSI bridge, this should be exactly the camera port. Some laptops do not output any signal until you switch the output (usually via the FN + and an F5 key on the keyboard). Your computer may have turned on sleep mode for the monitor. Move the mouse to turn it off. For windows you might need to check for the active signal resolution. To change the active signal resolution you have to go to Settings>System>Display>Advanced display settings>Display adapter properties then, click \"List All Models\" and choose the one you want. Keep trying different Hz settings. The video works in the booted OS, but not in the BIOS/UEFI This problem appears on Intel NUC, GA-H77-DS3H, and some other devices when using a CSI bridge. All you need to do is change the EDID data. This is the information about supported resolutions that the CSI bridge reports to your computer. Glitchy or wrong BIOS/UEFI resolution On some motherboards, the BIOS may be displayed at a lower resolution, or with some rendering issues/glitches, specially on newer ASUS ones. Like this: This can be solved by enabling the Compatibility Support Module (CSM) in your BIOS, usually under the Boot options. If you can't or don't want to enable the CSM, you can try connecting a DisplayPort (DP) monitor, or a dummy plug . If you remove the DP cable/adapter the bug will reappear. If none of this works, try connecting the DP cable first, boot into the BIOS, disable the CSM and shutdown (do not restart) your PC. Then, boot into the BIOS and enable the CSM before shutting down your PC. Then connect the HDMI and turn your PC on again. There is no video in GRUB2, but there is before and after Sometimes this can be caused by the specifics of the BIOS/UEFI and how GRUB2 works with video. This can be solved by enabling the Compatibility Support Module (CSM) in your BIOS, usually under the Boot options. The video mode will be located in the same section. Switch the Video mode from UEFI to Legacy . No image from computer with Linux + Awesome WM Sometimes Awesome WM on Linux can't recognize a video output change on a cable. That is, if the cable was first inserted into the monitor, and then you reconnected it to BLIKVM - it may happen that you will not see the image. It seems that the problem is Awesome WM, since for example with KDE, it is not reproducable. If you turn on your workstation with BLIKVM already connected, everything will work fine.","title":"Video Problems"},{"location":"faq/#usb-problems-keyboard-mouse-mass-storage-etc","text":"What speed is the USB OTG port? Per the official RPI documentation, this is a limitation of the SoC. The OTG port is only USB2.0, so is limited to 455 Mbit/s. Why can't some keyboard shortcuts of physical keyboards be captured while virtual keyboards can? For example, the F11 key on a Mac computer cannot be captured. This is because some shortcuts are already in use by the system, such as in macOS, where F11 is assigned to the \"Show Desktop\" function by default. When you press F11 in a web interface, the KeyboardEvent is first captured by the system, and if a callback is registered in the system, the event will not be passed to the application. To solve this issue, you can disable the system's assigned shortcut or use a virtual keyboard.","title":"USB Problems (keyboard, mouse, mass storage, etc)"},{"location":"faq/#hardware-problems-wi-fi-atx-etc","text":"If you use PiKVM software, the web UI show FAN error! Because the fan model used by BLIKVM hardware is different from that of PIKVM hardware, viewing the fan status through the web interface may fail in the latest system of pikvm. However, this will not affect the normal operation of BLIKVM fan. Therefore, when using the PIKVM image, as long as you ensure that the install script displays OK, it means that the update of the kvmd fan program is successful. The threshold temperature set by the default program is 60 degrees Celsius. When the CPU temperature is detected to exceed 60 degrees Celsius, the fan will start rotating at 85% speed. If you want to modify the threshold temperature and speed, you can modify the kvmd-fan.py script, and then re-execute install.sh. I can't connect to Wi-Fi at all! If your device is unable to connect to the Wi-Fi network that you have set up, check the 2.4 GHz Wi-Fi channel used by your Wi-Fi access point. If channels 12 to 14 are used (some countries have banned these channels) try to use a channel between 1 and 11. BLIKVM complains about low power warnings Are you using a \"proper\" power supply? Not one you hacked together? Some USB power bricks advertise 5V 2.1A or higher, but can't deliver consistent 5V. Best to use Raspberry Pi Foundation recommended power supplies. It should be 5.1v and 3A DC output. When I use the PoE, do I still need to use the power OTG splitter to prevent back power on the machine usb? Only HAT version you need to use power OTG splitter to prevent back power. Generally, most hosts computer are protected back power, you do not need to usr power OTG splitter in this case. BLIKVM-CM4-V2.2 and BLIKVM-PCIe version don't need. In some board like BLIKVM-PCIe or BLIKVM-CM4-V2.2 has boot pin, how do I connect? If you short them, CM4 will not start normally, but will enter the burning image mode. If your hardware version of boot has only two pins, use the jumper cap to connect the two pins as a short circuit. If you do not use the jumper cap or plug it into one pin, CM4 will start normally. If you use three boot pins of the hardware version, use the jumper cap to connect GND and another non-GND pin to indicate short circuit, and plug the jumper cap on the two GND pins or do not use it, CM4 will start normally.","title":"Hardware Problems (Wi-Fi, ATX, etc)"},{"location":"faq/#web-problems","text":"What ports does BliKVM OS occupy, and how should it be forwarded when using a public server? The web interface uses the HTTP protocol and occupies port 80. If you are using hardware versions V1, V2, or V3 with web-rtc transmission, the port is 8188. If you are using hardware version V4 with MJPEG transmission, the port is 8008. Please note that the ports cannot be modified; only port forwarding can be configured.","title":"Web Problems"},{"location":"faq/#raspberry-problems","text":"Can I use both the CM4 version with EMMC and the SD card at the same time? No, you can't, When designing the CM4 hardware, several pins of the SD card are only valid in the lite version. You can find instructions on the official website of Raspberry Pi.","title":"Raspberry Problems"},{"location":"first_steps/","text":"First steps First power on Power up the device. Do not turn off the device until it's fully booted for the first time After turning on the power, BLIKVM OS will perform the necessary operations on the memory card. Getting access to BLIKVM By default, BliKVM receives a dynamic IP address via DHCP. The IP address will be displayed on the BliKVM monitor. If you are using DIY hardware without a monitor, use the following tips: Finding BliKVM in the network You can determine the IP address of BliKVM using the following methods: Common Method: Access the web interface of your router and look for the allocated IP address list. The specific method depends on the router model. Linux Only: Use the command arp-scan --localnet . Linux, macOS, Windows: Download and run Angry IP Scanner . Windows PowerShell: Use the command arp -a . In the example below, let's assume your BliKVM has obtained the address 192.168.0.100 , and you have successfully found that address using the instructions above. Accessing BliKVM Web Interface In most networks, you can access BliKVM in any browser using the following URL: http://192.168.0.100/ . Google Chrome (Chromium), Firefox, and Safari work best with no extensions enabled. If one works and the other does not, it may be an issue with the browser or extensions. It is recommended to use a private browsing window or incognito mode. Internet Explorer and early versions of Microsoft Edge (non-Chromium version) are not supported. The default username is admin , and the password is also admin . Once logged in, you will have access to the main menu with essential functions. You can change system settings and passwords using the web interface's account management feature. Note: The BliKVM Web interface should be accessed via http, not https Accessing BliKVM via SSH SSH is the most common method for remote access in the Linux world. You can access BliKVM via SSH. This method is used for managing the device: Linux, macOS: Open any terminal application and run: ssh blikvm@192.168.0.100 . Windows: Use PuTTY for the operation. The default blikvm user password is blikvm . You can use sudo -i to obtain root privileges. Optional: Updating BliKVM Software This section is not mandatory and should only be performed if you have physical access to the BliKVM for recovery purposes. Refer to the Software Update Guide for instructions. Note on BliKVM OS Terminal Usage Some configuration changes must be made under the root user (i.e., administrator). Obtaining Root Privileges If you are logged in via SSH, use sudo -i to obtain root privileges. BliKVM storage cards in versions v1 , v2 , and v3 are mounted in read-only mode . This protects the file system from being corrupted in the event of a sudden power outage. To edit any files and make changes, you need to remount the file system in read-write mode. You can determine the current mode by checking if ro or rw is displayed in the terminal. Enabling Write Mode To enable write mode, run the command rw . To disable write mode, run the command ro . If you receive a \"Device is busy\" message, execute the reboot command. What's next? Set up internet access using Port Forwarding or Tailscale VPN . Explore BLIKVM features using the table of contents on the left. Join our Discord to connect with the community and developers. Check out the GitHub - BLIKVM is a Open Source project! FAQ and Troubleshooting If you have any questions or run into problems, take a look at the FAQ . Seriously, it's really useful! We've probably already found a solution for it :) For any other help and support, you can contact us via the Discord chat .","title":"First Steps"},{"location":"first_steps/#first-steps","text":"","title":"First steps"},{"location":"first_steps/#first-power-on","text":"Power up the device. Do not turn off the device until it's fully booted for the first time After turning on the power, BLIKVM OS will perform the necessary operations on the memory card.","title":"First power on"},{"location":"first_steps/#getting-access-to-blikvm","text":"By default, BliKVM receives a dynamic IP address via DHCP. The IP address will be displayed on the BliKVM monitor. If you are using DIY hardware without a monitor, use the following tips: Finding BliKVM in the network You can determine the IP address of BliKVM using the following methods: Common Method: Access the web interface of your router and look for the allocated IP address list. The specific method depends on the router model. Linux Only: Use the command arp-scan --localnet . Linux, macOS, Windows: Download and run Angry IP Scanner . Windows PowerShell: Use the command arp -a . In the example below, let's assume your BliKVM has obtained the address 192.168.0.100 , and you have successfully found that address using the instructions above. Accessing BliKVM Web Interface In most networks, you can access BliKVM in any browser using the following URL: http://192.168.0.100/ . Google Chrome (Chromium), Firefox, and Safari work best with no extensions enabled. If one works and the other does not, it may be an issue with the browser or extensions. It is recommended to use a private browsing window or incognito mode. Internet Explorer and early versions of Microsoft Edge (non-Chromium version) are not supported. The default username is admin , and the password is also admin . Once logged in, you will have access to the main menu with essential functions. You can change system settings and passwords using the web interface's account management feature. Note: The BliKVM Web interface should be accessed via http, not https Accessing BliKVM via SSH SSH is the most common method for remote access in the Linux world. You can access BliKVM via SSH. This method is used for managing the device: Linux, macOS: Open any terminal application and run: ssh blikvm@192.168.0.100 . Windows: Use PuTTY for the operation. The default blikvm user password is blikvm . You can use sudo -i to obtain root privileges. Optional: Updating BliKVM Software This section is not mandatory and should only be performed if you have physical access to the BliKVM for recovery purposes. Refer to the Software Update Guide for instructions.","title":"Getting access to BLIKVM"},{"location":"first_steps/#note-on-blikvm-os-terminal-usage","text":"Some configuration changes must be made under the root user (i.e., administrator). Obtaining Root Privileges If you are logged in via SSH, use sudo -i to obtain root privileges. BliKVM storage cards in versions v1 , v2 , and v3 are mounted in read-only mode . This protects the file system from being corrupted in the event of a sudden power outage. To edit any files and make changes, you need to remount the file system in read-write mode. You can determine the current mode by checking if ro or rw is displayed in the terminal. Enabling Write Mode To enable write mode, run the command rw . To disable write mode, run the command ro . If you receive a \"Device is busy\" message, execute the reboot command.","title":"Note on BliKVM OS Terminal Usage"},{"location":"first_steps/#whats-next","text":"Set up internet access using Port Forwarding or Tailscale VPN . Explore BLIKVM features using the table of contents on the left. Join our Discord to connect with the community and developers. Check out the GitHub - BLIKVM is a Open Source project!","title":"What's next?"},{"location":"first_steps/#faq-and-troubleshooting","text":"If you have any questions or run into problems, take a look at the FAQ . Seriously, it's really useful! We've probably already found a solution for it :) For any other help and support, you can contact us via the Discord chat .","title":"FAQ and Troubleshooting"},{"location":"flashing_os/","text":"Flasing the OS image Micro-SD Card Requirements Minimum 16 Gb Class 10 is strongly recommended Why are there two versions of software, BLIKVM and PiKVM? What is the difference between the two versions? Which one should I choose? Can I use the official image of PiKVM? At the beginning of the BLIKVM project, the hardware was developed, and the software directly used PiKVM. With the continuous progress of the project, BLIKVM has developed its own software version of new architecture, which also lays the foundation for deeper cooperation with its own hardware; The core functions of BLIKVM and PiKVM are the same for users. Some subdivision functions are not the same. For example, BLIKVM supports multiple languages; Select according to your own use experience; You can use the PiKVM official image, but you need to make some adaptations according to the different hardware, mainly involving screens, fans, etc. Since the PiKVM official image is always updated, the specific adaptations need to be seen according to the specific situation you encounter at that time; Download the image Users who need to run PiKVM on v4 by yourself can refer to this doc . BLIKVM software You can find BliKVM v1 CM4, v2 PCIe, v3 HAT, v4 Allwinner BLIKVM software image, v1 v2 v3 use a same image. BLIKVM image The web UI style is as follows: Base on PiKVM software Raspberry 4B and CM4 board use different PiKVM software image. After entering the link, you can see the image named with each hardware version (HAT CM4 PCIe) PiKVM image Flash the image Tip Ignore request to format your sd card, this step is not nessessary. Choose the most suitable method for you. How to flash the eMMC on a Raspberry Pi Compute Module 4 Board Link If you use a CM4 with eMMC (like the CM4102016). You can use the v1 or v2 board to flash the eMMC. If your CM4 doesn't have eMMC, your device can just use a SD card to boot from. You don't need to look into this any further. Just flash to the SD card instead. First, use the jumper cap to short the boot pin (allowing you flash the EMMC memory). If you use BLIKVM CM4 version Then connect the data cable to the USB OTG interface. Power on blikvm and observe the act light, the green light is always on. If you use BLIKVM PCIe version Then connect the data cable to the USB-PC interface. Power on blikvm and observe the ACT and PWR LED isn't light. After initialize EMMC through the usbboot/rpiboot, the ACT and PWR LED light is always on. EMMC knowledge If you use Raspberry Pi compute modules such as CM3 eMMC or CM4 eMMC version\uff0cyou can initialize eMMC through the usbboot project. Note that the eMMC board version cannot use the SD card to boot the image. Instead, you need to flash the eMMC storage by using the usbboot project that emulates USB Mass Storage Device (MSD). From this video you can learn how-to flash the image quickly. How to flash the eMMC on a Raspberry Pi Compute Module 4 video Taking Ubuntu system as an example: Linux usbboot If you use an Micro-SD Card, you can skip the following steps and go to the next chapter down below. sudo apt install git libusb-1.0-0-dev pkg-config build-essential git clone --depth = 1 https://github.com/raspberrypi/usbboot cd usbboot make sudo ./rpiboot If the content in the image below appears, that indicates that the eMMC initialization was successful. The next step is to flash the image to your eMMC chip. Flash the Image (Linux, MacOS and Windows) We are using the \"RPi Imager\" application to flash the image in this example. Download and install the latest version of RPi Imager . Run RPi Imager: Press CHOOSE OS and select Use custom image at bottom of the list: After clicking on this item, select the image file ( .img.xz ), then click CHOOSE STORAGE : Insert the memory card into the card reader. Choose the card reader from this list (or eMMC flash storage, in case you are using a Raspberry Pi Compute module with a eMMC chip). Be careful and choose the right device: After choosing the memory card, press the WRITE button. Confirm the operation when you are asked about it: Wait for the process to finish. Get yourself a coffee or do some stretching :) Tip The process may hang at 99% for a long time, this is okay, just wait for it to complete 8.Remove the memory card after successful completion: Tip If an error occurs during flashing or booting PiKVM, repeat the process.","title":"Flashing OS"},{"location":"flashing_os/#flasing-the-os-image","text":"Micro-SD Card Requirements Minimum 16 Gb Class 10 is strongly recommended Why are there two versions of software, BLIKVM and PiKVM? What is the difference between the two versions? Which one should I choose? Can I use the official image of PiKVM? At the beginning of the BLIKVM project, the hardware was developed, and the software directly used PiKVM. With the continuous progress of the project, BLIKVM has developed its own software version of new architecture, which also lays the foundation for deeper cooperation with its own hardware; The core functions of BLIKVM and PiKVM are the same for users. Some subdivision functions are not the same. For example, BLIKVM supports multiple languages; Select according to your own use experience; You can use the PiKVM official image, but you need to make some adaptations according to the different hardware, mainly involving screens, fans, etc. Since the PiKVM official image is always updated, the specific adaptations need to be seen according to the specific situation you encounter at that time;","title":"Flasing the OS image"},{"location":"flashing_os/#download-the-image","text":"Users who need to run PiKVM on v4 by yourself can refer to this doc .","title":"Download the image"},{"location":"flashing_os/#blikvm-software","text":"You can find BliKVM v1 CM4, v2 PCIe, v3 HAT, v4 Allwinner BLIKVM software image, v1 v2 v3 use a same image. BLIKVM image The web UI style is as follows:","title":"BLIKVM software"},{"location":"flashing_os/#base-on-pikvm-software","text":"Raspberry 4B and CM4 board use different PiKVM software image. After entering the link, you can see the image named with each hardware version (HAT CM4 PCIe) PiKVM image","title":"Base on PiKVM software"},{"location":"flashing_os/#flash-the-image","text":"Tip Ignore request to format your sd card, this step is not nessessary. Choose the most suitable method for you. How to flash the eMMC on a Raspberry Pi Compute Module 4","title":"Flash the image"},{"location":"flashing_os/#board-link","text":"If you use a CM4 with eMMC (like the CM4102016). You can use the v1 or v2 board to flash the eMMC. If your CM4 doesn't have eMMC, your device can just use a SD card to boot from. You don't need to look into this any further. Just flash to the SD card instead. First, use the jumper cap to short the boot pin (allowing you flash the EMMC memory). If you use BLIKVM CM4 version Then connect the data cable to the USB OTG interface. Power on blikvm and observe the act light, the green light is always on. If you use BLIKVM PCIe version Then connect the data cable to the USB-PC interface. Power on blikvm and observe the ACT and PWR LED isn't light. After initialize EMMC through the usbboot/rpiboot, the ACT and PWR LED light is always on. EMMC knowledge If you use Raspberry Pi compute modules such as CM3 eMMC or CM4 eMMC version\uff0cyou can initialize eMMC through the usbboot project. Note that the eMMC board version cannot use the SD card to boot the image. Instead, you need to flash the eMMC storage by using the usbboot project that emulates USB Mass Storage Device (MSD). From this video you can learn how-to flash the image quickly. How to flash the eMMC on a Raspberry Pi Compute Module 4 video Taking Ubuntu system as an example:","title":"Board Link"},{"location":"flashing_os/#linux-usbboot","text":"If you use an Micro-SD Card, you can skip the following steps and go to the next chapter down below. sudo apt install git libusb-1.0-0-dev pkg-config build-essential git clone --depth = 1 https://github.com/raspberrypi/usbboot cd usbboot make sudo ./rpiboot If the content in the image below appears, that indicates that the eMMC initialization was successful. The next step is to flash the image to your eMMC chip.","title":"Linux usbboot"},{"location":"flashing_os/#flash-the-image-linux-macos-and-windows","text":"We are using the \"RPi Imager\" application to flash the image in this example. Download and install the latest version of RPi Imager . Run RPi Imager: Press CHOOSE OS and select Use custom image at bottom of the list: After clicking on this item, select the image file ( .img.xz ), then click CHOOSE STORAGE : Insert the memory card into the card reader. Choose the card reader from this list (or eMMC flash storage, in case you are using a Raspberry Pi Compute module with a eMMC chip). Be careful and choose the right device: After choosing the memory card, press the WRITE button. Confirm the operation when you are asked about it: Wait for the process to finish. Get yourself a coffee or do some stretching :) Tip The process may hang at 99% for a long time, this is okay, just wait for it to complete 8.Remove the memory card after successful completion: Tip If an error occurs during flashing or booting PiKVM, repeat the process.","title":"Flash the Image (Linux, MacOS and Windows)"},{"location":"hdmi-csi-i2s/","text":"HDMI to CSI&I2S bridge guide Convert HDMI signal acquisition into CSI signal and I2S audio signal. Currently, all platforms are supported (Zero, Pi3B, Pi4B, CM4, Pi5B), and the maximum capture resolution not only depends on the HDMI to CSI converter board you are using but also on the Raspberry Pi hardware version you have. Raspberry Pi hardware versions are primarily divided into two series, one supporting a maximum of 1080P60Hz and the other supporting a maximum of 1080P50Hz. The Raspberry Pi versions that support a maximum of 1080P60Hz are CM3, CM4, and Pi5B. The Raspberry Pi versions that support a maximum of 1080P50Hz are Zero, Zero 2, Pi3B, Pi4B, and so on. Introduction This module takes the incoming HDMI signal and converts it into a separate CSI signal and I2S audio signal. HDMI input supports up to 1080P60Hz. It works well on Raspberry Pi, there are three versions of this module in history (C779, C780, C790). C790 is the latest version. C790 has mitigated HDMI backpowering, and also has two csi channels and four csi channels at the same time. Features C790 Hardware Parameters HDMI input: supports up to 1080P60Hz on Raspberry Pi HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 4 CSI-2 channels & clock The CSI-2 interface, with 15 pin FPC seat, spacing 1.0 mm, is located on the front of the C790 module. The CSI-2 interface, with 22 pin FPC seat, spacing 0.5 mm, is located on the back of the C790 module. Size: 30 x 45 mm Install: 4 x M2.5 Power supply: 3.3V Weight: 10g Pi 4B only support 1080P50Hz, limited by the number of CSI-2 channels. CM4 support 1080P60HZ, So if you must use 1080P60Hz input, please use CM4 and C790 together. Interface C790 has two CSI output interfaces. In front of C790, the CSI-2 interface is 15 pin FPC seat, spacing 1.0 mm. In back of C790, the CSI-2 interface is 22 pin FPC seat, spacing 0.5 mm. Size Install C790 on Raspberry Pi for reference C780 C780A Hardware Parameters HDMI input: supports up to 1080P50Hz on Raspberry Pi(Limited by the number of CSI-2 channels) HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 2 CSI-2 channels & clock CSI-2 interface: 15 pin FPC seat, spacing 1.0 mm Size: 30 x 65 mm (unbroken PCB size); 30 x 45 mm (PCB size after breaking) Install: 6 x M2.5 Power supply: 3.3V Weight: 10g C780B Hardware Parameters HDMI input: supports up to 1080P60Hz on Raspberry Pi HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 4 CSI-2 channels & clock CSI-2 interface: 22 pin FPC seat, spacing 0.5 mm Size: 30 x 65 mm (unbroken PCB size); 30 x 45 mm (PCB size after breaking) Install: 6 x M2.5 Power supply: 3.3V Weight: 10g Interface The wiring of audio part is shown in Figure. Size The size of C780 is shown in the image below. There are 6 mounting holes with a diameter of 2.75mm, which are suitable for M2.5 screws. As shown in the image below, the user can directly fix the module on the Raspberry Pi Zero. C780 is designed to be broken, and the hole spacing before breaking can be perfectly installed with most series of Raspberry Pi. C779 Hardware Parameters HDMI input: supports up to 1080P50Hz on Raspberry Pi(Limited by the number of CSI-2 channels) HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 2 CSI-2 channels & clock CSI-2 interface: 15 pin FPC seat, spacing 1.0 mm Size: 35 x 50 mm Install: 4 x M2.5 Power supply: 3.3V Weight: 10g Size The size of C779 is shown in Figure. There are 4 mounting holes with a diameter of 2.75mm, which are suitable for M2.5 screws. CSI Interface Definitions The CSI (Camera Serial Interface) interfaces C779 and C780A have 15 pins each, while the C780B interface has 22 pins. The C790 interface is unique as it supports both 15 and 22 PIN configurations. Software Demo The use guide of C790/C780/C779 depends on the official Raspberry Pi OS version you are using. Different versions have different usage methods. If you have some questions, Join our BLIKVM Discord Community for Support, FAQ & News! To use the kernel drivers, please update your system. There are a few things that have changed with the 5.4 kernel, so these instructions are for 5.4 or later. If uname -a reports anything less, then fix this before proceeding. pi@raspberrypi:~ $ uname -a Linux raspberrypi 5 .10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux 1. Update & upgrade the Raspberry Pi system (It will take a long time depend on the different country) sudo apt-get update sudo apt-get upgrade 2. Enable camera module (the camera is enabled by default in Raspberry pi Bullseys OS) sudo raspi-config sudo reboot Navigate to \u2018Interfacing Options\u2019 and hit Enter. Now select the \u2018Camera\u2019 option, and hit the Enter key to enable it. Select \u201cFinish\u201d and select to reboot your Raspberry Pi. reboot is important!! Due to the absence of hardware encoding on the Pi5B, the software usage instructions for Pi platforms are currently divided into two sections: Pi5B configuration and configuration for other Pi platforms. In platforms such as Zero, Zero 2, Pi3B, Pi4B, etc., there is a reference for testing HDMI to CSI module demo. Edit /boot/config.txt (that will need sudo) sudo nano /boot/config.txt Add the line: dtoverlay=tc358743 Add the line if your shield support audio like C780 or C790. dtoverlay=tc358743-audio If (and only if) you have a device such as the C780 or C790 that supports the 22pin connector with all 4 lanes wired out, and are using a Compute Module with the CAM1 connector that also has all 4 lanes wired up, you can use: dtoverlay=tc358743,4lane=1 Check the amount of memory assigned to the CMA heap with \u201cdmesg | grep cma\u201d. The first line should be along the lines of: pi@raspberrypi:~ $ dmesg | grep cma [0.000000] cma: Reserved 256 MiB at 0x000000001ec00000 If it reports less than 96MB assigned to CMA, then edit /boot/cmdline.txt and add to the start of the line. Do NOT add any carriage returns. cma=96M Reboot. If all is well you should get a /dev/video0 device, and \u201cv4l2-ctl \u2013list-devices\u201d will tell you that it is provided by Unicam. After connecting all the cables, power on the Raspberry Pi, the C790 indicator light is normally green, and after opening the Raspberry Pi terminal, enter the following command: pi@raspberrypi:~ $ ls /dev/video0 /dev/video0 pi@raspberrypi:~ $ v4l2-ctl --list-devices bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/video18 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 unicam (platform:fe801000.csi): /dev/video0 /dev/video1 /dev/media2 This driver puts all the control in the hands of the user, or the user\u2019s application. By default there is no EDID loaded into the chip to allow it to tell the HDMI source what resolutions are supported. There are EDID editors around. If you create a file edid.txt, then you can push this to the device using the comment of edid.txt file: 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 cd ~ sudo nano edid.txt #copy the above commend in edid.txt, save&exit; pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums CTA-861 Header IT Formats Underscanned: yes Audio: yes YCbCr 4:4:4: no YCbCr 4:2:2: no HDMI Vendor-Specific Data Block Physical Address: 3.0.0.0 YCbCr 4:4:4 Deep Color: no 30-bit: no 36-bit: no 48-bit: no CTA-861 Video Capability Descriptor RGB Quantization Range: yes YCC Quantization Range: no PT: Supports both over- and underscan IT: Supports both over- and underscan CE: Supports both over- and underscan The driver does NOT automatically switch to the resolution detected. Use the command: pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings Active width: 1280 Active height: 720 Total width: 1650 Total height: 750 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (60.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 370 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 30 Vertical backporch: 0 Standards: Flags: You MUST set the timings via \u201cv4l2-ctl \u2013set-dv-bt-timings\u201d. You can pass in an index to the detected mode, or use: v4l2-ctl --set-dv-bt-timings query to select the currently detected timings. v4l2-ctl -V should now reflect the resolution detected. The chip supports two formats \u2013 BGR3 (the default) and UYVY. BGR3 is 24bpp, and UYVY is YUV4:2:2 16bpp. Over the normal 2 CSI-2 lanes the data rate is such that BGR3 can run at a maximum of 1080p30, whilst UYVY will go up to 1080p50. Use the following command to select UYVY, however your application may override that. v4l2-ctl -v pixelformat=UYVY Check that the audio drivers / card is available to ALSA. pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0 Note: card 1 means that the card number for the TC358743XBG is \u201c1\u201d and it might be different. Install GStreamer tool. sudo apt install gstreamer1.0-tools Check gstreamer tool version: pi@raspberrypi:~ $ gst-launch-1.0 --version gst-launch-1.0 version 1.18.4 GStreamer 1.18.4 http://packages.qa.debian.org/gstreamer1.0 Note: Different versions have different command line parameters, which is very annoying. Use gstreamer to record video and audio #GStreamer v1.14 command gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. foo.mkv is the output file. If your gstreamer is version 1.8 or above, you can try the following test command. In addition, alsasrc device=hw:1 represents the sound card of TC358743, you can use \u201carecord -l\u201d to query. #The command to recode a video with audio. (GStreamer 1.18.4) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. #The sample command to recode a video without audio. (C779 doesn't support audio) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Press CTRL+C to end recording. PS: We recommend that you modify the above framerate parameter to the actual frame rate of your HDMI signal, the actual frame rate value is from the result of \u2018v4l2-ctl \u2013query-dv-timings\u2019 command. For the above HDMI device, because the frame rate is 60, so we modify the framerate parameter to 60 like the followint command. Record the video only: gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Record the video and audio: (if your shield supports audio also) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. Note: alsasrc device=hw:1 \u2013 \u201c1\u201d means the audio card number, You must change to correct audio card number. (Query the car number via \u2018arecord \u2013l\u2019, refer to step 9) Pi5B platforms HDMI to CSI module test demo reference. Edit /boot/config.txt (sudo permission required). sudo nano /boot/config.txt Add the following content: dtoverlay=tc358743 If your modules (C780 and C790) support audio, add the following content to enable audio support. dtoverlay=tc358743-audio Reboot the Raspberry Pi and execute the following command to find the media node corresponding to the CSI as media0, under the rp1-cfe (platform: 1f00128000.csi) field: blikvm@blikvm:~ $ v4l2-ctl --list-devices pispbe (platform:1000880000.pisp_be): /dev/video20 /dev/video21 /dev/video22 /dev/video23 /dev/video24 /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31 /dev/video32 /dev/video33 /dev/video34 /dev/video35 /dev/video36 /dev/video37 /dev/media1 /dev/media2 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/media0 rpivid (platform:rpivid): /dev/video19 /dev/media3 Locate the node corresponding to tc358743 as v4l-subdev2, and the pad0 of rp1-cfe-csi2_ch0 as video0: blikvm@blikvm:~ $ media-ctl -d /dev/media0 -p Media controller API version 6.1.63 Media device information ------------------------ driver rp1-cfe model rp1-cfe serial bus info platform:1f00128000.csi hw revision 0x114666 driver version 6.1.63 Device topology - entity 1: csi2 (8 pads, 8 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev0 pad0: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"tc358743 4-000f\":0 [ENABLED,IMMUTABLE] pad1: Sink [fmt:unknown/8192x1 field:none] pad2: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad3: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad4: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch0\":0 [] -> \"pisp-fe\":0 [] pad5: Source [fmt:unknown/8192x1 field:none] -> \"rp1-cfe-embedded\":0 [] pad6: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch2\":0 [] -> \"pisp-fe\":0 [] pad7: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch3\":0 [] -> \"pisp-fe\":0 [] - entity 10: pisp-fe (5 pads, 7 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Sink [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"csi2\":4 [] <- \"csi2\":6 [] <- \"csi2\":7 [] pad1: Sink [fmt:FIXED/8192x1 field:none] <- \"rp1-cfe-fe_config\":0 [] pad2: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image0\":0 [] pad3: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image1\":0 [] pad4: Source [fmt:FIXED/8192x1 field:none] -> \"rp1-cfe-fe_stats\":0 [] - entity 16: tc358743 4-000f (1 pad, 1 link) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev2 pad0: Source [fmt:RGB888_1X24/640x480 field:none colorspace:srgb] [dv.caps:BT.656/1120 min:640x350@13000000 max:1920x1200@165000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom] [dv.detect:BT.656/1120 1920x1080p24 (2750x1125) stds: flags:] [dv.current:BT.656/1120 640x480p59 (800x525) stds:CEA-861,DMT flags:has-cea861-vic] -> \"csi2\":0 [ENABLED,IMMUTABLE] - entity 18: rp1-cfe-csi2_ch0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 pad0: Sink <- \"csi2\":4 [] - entity 22: rp1-cfe-embedded (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video1 pad0: Sink <- \"csi2\":5 [] - entity 26: rp1-cfe-csi2_ch2 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video2 pad0: Sink <- \"csi2\":6 [] - entity 30: rp1-cfe-csi2_ch3 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video3 pad0: Sink <- \"csi2\":7 [] - entity 34: rp1-cfe-fe_image0 (1 pad, 1 link) type Node subtype V4L flags 1 device node name /dev/video4 pad0: Sink <- \"pisp-fe\":2 [] - entity 38: rp1-cfe-fe_image1 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video5 pad0: Sink <- \"pisp-fe\":3 [] - entity 42: rp1-cfe-fe_stats (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video6 pad0: Sink <- \"pisp-fe\":4 [] - entity 46: rp1-cfe-fe_config (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video7 pad0: Source -> \"pisp-fe\":1 [] To query the current input source information, if the resolution displays as 0, it indicates that no input source signal has been detected. In this case, you should check the hardware connections and follow the steps mentioned above to troubleshoot. blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings Active width: 1920 Active height: 1080 Total width: 2750 Total height: 1125 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (24.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 830 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 45 Vertical backporch: 0 Standards: Flags: Confirm the current input source information. blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query BT timings set Initialize media0. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -r Connect CSI2's pad4 to rp1-cfe-csi2_ch0's pad0. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -l ''\\''csi2'\\'':4 -> '\\''rp1-cfe-csi2_ch0'\\'':0 [1]' Configure the media node. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' Set the output format. v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3 Capture two frames for testing to verify if tc358743 is functioning properly. Other methods, such as using GStreamer, are not currently available. v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='RGB3' --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll If you have installed a desktop version of Raspberry Pi, you can use ffplay to directly play YUV files. ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 hdmiin.yuv On a Windows computer, you can use software like 7yuv to view .yuv files. For the tutorial with an input format of 1920 1080, you should select BGR888 in the top right corner of 7yuv and set the resolution to 1920 1080 to view the two frames you just captured. Chip Docs TC358743 Documentation Packing List C790 Test Video C780A Test C780B Test Purchase Link Purchase C780 & C790 Purchase C779","title":"HDMI to CSI & Audio"},{"location":"hdmi-csi-i2s/#hdmi-to-csii2s-bridge-guide","text":"Convert HDMI signal acquisition into CSI signal and I2S audio signal. Currently, all platforms are supported (Zero, Pi3B, Pi4B, CM4, Pi5B), and the maximum capture resolution not only depends on the HDMI to CSI converter board you are using but also on the Raspberry Pi hardware version you have. Raspberry Pi hardware versions are primarily divided into two series, one supporting a maximum of 1080P60Hz and the other supporting a maximum of 1080P50Hz. The Raspberry Pi versions that support a maximum of 1080P60Hz are CM3, CM4, and Pi5B. The Raspberry Pi versions that support a maximum of 1080P50Hz are Zero, Zero 2, Pi3B, Pi4B, and so on.","title":"HDMI to CSI&I2S bridge guide"},{"location":"hdmi-csi-i2s/#introduction","text":"This module takes the incoming HDMI signal and converts it into a separate CSI signal and I2S audio signal. HDMI input supports up to 1080P60Hz. It works well on Raspberry Pi, there are three versions of this module in history (C779, C780, C790). C790 is the latest version. C790 has mitigated HDMI backpowering, and also has two csi channels and four csi channels at the same time.","title":"Introduction"},{"location":"hdmi-csi-i2s/#features","text":"","title":"Features"},{"location":"hdmi-csi-i2s/#c790","text":"Hardware Parameters HDMI input: supports up to 1080P60Hz on Raspberry Pi HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 4 CSI-2 channels & clock The CSI-2 interface, with 15 pin FPC seat, spacing 1.0 mm, is located on the front of the C790 module. The CSI-2 interface, with 22 pin FPC seat, spacing 0.5 mm, is located on the back of the C790 module. Size: 30 x 45 mm Install: 4 x M2.5 Power supply: 3.3V Weight: 10g Pi 4B only support 1080P50Hz, limited by the number of CSI-2 channels. CM4 support 1080P60HZ, So if you must use 1080P60Hz input, please use CM4 and C790 together. Interface C790 has two CSI output interfaces. In front of C790, the CSI-2 interface is 15 pin FPC seat, spacing 1.0 mm. In back of C790, the CSI-2 interface is 22 pin FPC seat, spacing 0.5 mm. Size Install C790 on Raspberry Pi for reference","title":"C790"},{"location":"hdmi-csi-i2s/#c780","text":"C780A Hardware Parameters HDMI input: supports up to 1080P50Hz on Raspberry Pi(Limited by the number of CSI-2 channels) HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 2 CSI-2 channels & clock CSI-2 interface: 15 pin FPC seat, spacing 1.0 mm Size: 30 x 65 mm (unbroken PCB size); 30 x 45 mm (PCB size after breaking) Install: 6 x M2.5 Power supply: 3.3V Weight: 10g C780B Hardware Parameters HDMI input: supports up to 1080P60Hz on Raspberry Pi HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 4 CSI-2 channels & clock CSI-2 interface: 22 pin FPC seat, spacing 0.5 mm Size: 30 x 65 mm (unbroken PCB size); 30 x 45 mm (PCB size after breaking) Install: 6 x M2.5 Power supply: 3.3V Weight: 10g Interface The wiring of audio part is shown in Figure. Size The size of C780 is shown in the image below. There are 6 mounting holes with a diameter of 2.75mm, which are suitable for M2.5 screws. As shown in the image below, the user can directly fix the module on the Raspberry Pi Zero. C780 is designed to be broken, and the hole spacing before breaking can be perfectly installed with most series of Raspberry Pi.","title":"C780"},{"location":"hdmi-csi-i2s/#c779","text":"Hardware Parameters HDMI input: supports up to 1080P50Hz on Raspberry Pi(Limited by the number of CSI-2 channels) HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 2 CSI-2 channels & clock CSI-2 interface: 15 pin FPC seat, spacing 1.0 mm Size: 35 x 50 mm Install: 4 x M2.5 Power supply: 3.3V Weight: 10g Size The size of C779 is shown in Figure. There are 4 mounting holes with a diameter of 2.75mm, which are suitable for M2.5 screws.","title":"C779"},{"location":"hdmi-csi-i2s/#csi-interface-definitions","text":"The CSI (Camera Serial Interface) interfaces C779 and C780A have 15 pins each, while the C780B interface has 22 pins. The C790 interface is unique as it supports both 15 and 22 PIN configurations.","title":"CSI Interface Definitions"},{"location":"hdmi-csi-i2s/#software-demo","text":"The use guide of C790/C780/C779 depends on the official Raspberry Pi OS version you are using. Different versions have different usage methods. If you have some questions, Join our BLIKVM Discord Community for Support, FAQ & News! To use the kernel drivers, please update your system. There are a few things that have changed with the 5.4 kernel, so these instructions are for 5.4 or later. If uname -a reports anything less, then fix this before proceeding. pi@raspberrypi:~ $ uname -a Linux raspberrypi 5 .10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux 1. Update & upgrade the Raspberry Pi system (It will take a long time depend on the different country) sudo apt-get update sudo apt-get upgrade 2. Enable camera module (the camera is enabled by default in Raspberry pi Bullseys OS) sudo raspi-config sudo reboot Navigate to \u2018Interfacing Options\u2019 and hit Enter. Now select the \u2018Camera\u2019 option, and hit the Enter key to enable it. Select \u201cFinish\u201d and select to reboot your Raspberry Pi. reboot is important!! Due to the absence of hardware encoding on the Pi5B, the software usage instructions for Pi platforms are currently divided into two sections: Pi5B configuration and configuration for other Pi platforms. In platforms such as Zero, Zero 2, Pi3B, Pi4B, etc., there is a reference for testing HDMI to CSI module demo. Edit /boot/config.txt (that will need sudo) sudo nano /boot/config.txt Add the line: dtoverlay=tc358743 Add the line if your shield support audio like C780 or C790. dtoverlay=tc358743-audio If (and only if) you have a device such as the C780 or C790 that supports the 22pin connector with all 4 lanes wired out, and are using a Compute Module with the CAM1 connector that also has all 4 lanes wired up, you can use: dtoverlay=tc358743,4lane=1 Check the amount of memory assigned to the CMA heap with \u201cdmesg | grep cma\u201d. The first line should be along the lines of: pi@raspberrypi:~ $ dmesg | grep cma [0.000000] cma: Reserved 256 MiB at 0x000000001ec00000 If it reports less than 96MB assigned to CMA, then edit /boot/cmdline.txt and add to the start of the line. Do NOT add any carriage returns. cma=96M Reboot. If all is well you should get a /dev/video0 device, and \u201cv4l2-ctl \u2013list-devices\u201d will tell you that it is provided by Unicam. After connecting all the cables, power on the Raspberry Pi, the C790 indicator light is normally green, and after opening the Raspberry Pi terminal, enter the following command: pi@raspberrypi:~ $ ls /dev/video0 /dev/video0 pi@raspberrypi:~ $ v4l2-ctl --list-devices bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/video18 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 unicam (platform:fe801000.csi): /dev/video0 /dev/video1 /dev/media2 This driver puts all the control in the hands of the user, or the user\u2019s application. By default there is no EDID loaded into the chip to allow it to tell the HDMI source what resolutions are supported. There are EDID editors around. If you create a file edid.txt, then you can push this to the device using the comment of edid.txt file: 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 cd ~ sudo nano edid.txt #copy the above commend in edid.txt, save&exit; pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums CTA-861 Header IT Formats Underscanned: yes Audio: yes YCbCr 4:4:4: no YCbCr 4:2:2: no HDMI Vendor-Specific Data Block Physical Address: 3.0.0.0 YCbCr 4:4:4 Deep Color: no 30-bit: no 36-bit: no 48-bit: no CTA-861 Video Capability Descriptor RGB Quantization Range: yes YCC Quantization Range: no PT: Supports both over- and underscan IT: Supports both over- and underscan CE: Supports both over- and underscan The driver does NOT automatically switch to the resolution detected. Use the command: pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings Active width: 1280 Active height: 720 Total width: 1650 Total height: 750 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (60.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 370 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 30 Vertical backporch: 0 Standards: Flags: You MUST set the timings via \u201cv4l2-ctl \u2013set-dv-bt-timings\u201d. You can pass in an index to the detected mode, or use: v4l2-ctl --set-dv-bt-timings query to select the currently detected timings. v4l2-ctl -V should now reflect the resolution detected. The chip supports two formats \u2013 BGR3 (the default) and UYVY. BGR3 is 24bpp, and UYVY is YUV4:2:2 16bpp. Over the normal 2 CSI-2 lanes the data rate is such that BGR3 can run at a maximum of 1080p30, whilst UYVY will go up to 1080p50. Use the following command to select UYVY, however your application may override that. v4l2-ctl -v pixelformat=UYVY Check that the audio drivers / card is available to ALSA. pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0 Note: card 1 means that the card number for the TC358743XBG is \u201c1\u201d and it might be different. Install GStreamer tool. sudo apt install gstreamer1.0-tools Check gstreamer tool version: pi@raspberrypi:~ $ gst-launch-1.0 --version gst-launch-1.0 version 1.18.4 GStreamer 1.18.4 http://packages.qa.debian.org/gstreamer1.0 Note: Different versions have different command line parameters, which is very annoying. Use gstreamer to record video and audio #GStreamer v1.14 command gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. foo.mkv is the output file. If your gstreamer is version 1.8 or above, you can try the following test command. In addition, alsasrc device=hw:1 represents the sound card of TC358743, you can use \u201carecord -l\u201d to query. #The command to recode a video with audio. (GStreamer 1.18.4) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. #The sample command to recode a video without audio. (C779 doesn't support audio) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Press CTRL+C to end recording. PS: We recommend that you modify the above framerate parameter to the actual frame rate of your HDMI signal, the actual frame rate value is from the result of \u2018v4l2-ctl \u2013query-dv-timings\u2019 command. For the above HDMI device, because the frame rate is 60, so we modify the framerate parameter to 60 like the followint command. Record the video only: gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Record the video and audio: (if your shield supports audio also) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. Note: alsasrc device=hw:1 \u2013 \u201c1\u201d means the audio card number, You must change to correct audio card number. (Query the car number via \u2018arecord \u2013l\u2019, refer to step 9) Pi5B platforms HDMI to CSI module test demo reference. Edit /boot/config.txt (sudo permission required). sudo nano /boot/config.txt Add the following content: dtoverlay=tc358743 If your modules (C780 and C790) support audio, add the following content to enable audio support. dtoverlay=tc358743-audio Reboot the Raspberry Pi and execute the following command to find the media node corresponding to the CSI as media0, under the rp1-cfe (platform: 1f00128000.csi) field: blikvm@blikvm:~ $ v4l2-ctl --list-devices pispbe (platform:1000880000.pisp_be): /dev/video20 /dev/video21 /dev/video22 /dev/video23 /dev/video24 /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31 /dev/video32 /dev/video33 /dev/video34 /dev/video35 /dev/video36 /dev/video37 /dev/media1 /dev/media2 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/media0 rpivid (platform:rpivid): /dev/video19 /dev/media3 Locate the node corresponding to tc358743 as v4l-subdev2, and the pad0 of rp1-cfe-csi2_ch0 as video0: blikvm@blikvm:~ $ media-ctl -d /dev/media0 -p Media controller API version 6.1.63 Media device information ------------------------ driver rp1-cfe model rp1-cfe serial bus info platform:1f00128000.csi hw revision 0x114666 driver version 6.1.63 Device topology - entity 1: csi2 (8 pads, 8 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev0 pad0: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"tc358743 4-000f\":0 [ENABLED,IMMUTABLE] pad1: Sink [fmt:unknown/8192x1 field:none] pad2: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad3: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad4: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch0\":0 [] -> \"pisp-fe\":0 [] pad5: Source [fmt:unknown/8192x1 field:none] -> \"rp1-cfe-embedded\":0 [] pad6: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch2\":0 [] -> \"pisp-fe\":0 [] pad7: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch3\":0 [] -> \"pisp-fe\":0 [] - entity 10: pisp-fe (5 pads, 7 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Sink [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"csi2\":4 [] <- \"csi2\":6 [] <- \"csi2\":7 [] pad1: Sink [fmt:FIXED/8192x1 field:none] <- \"rp1-cfe-fe_config\":0 [] pad2: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image0\":0 [] pad3: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image1\":0 [] pad4: Source [fmt:FIXED/8192x1 field:none] -> \"rp1-cfe-fe_stats\":0 [] - entity 16: tc358743 4-000f (1 pad, 1 link) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev2 pad0: Source [fmt:RGB888_1X24/640x480 field:none colorspace:srgb] [dv.caps:BT.656/1120 min:640x350@13000000 max:1920x1200@165000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom] [dv.detect:BT.656/1120 1920x1080p24 (2750x1125) stds: flags:] [dv.current:BT.656/1120 640x480p59 (800x525) stds:CEA-861,DMT flags:has-cea861-vic] -> \"csi2\":0 [ENABLED,IMMUTABLE] - entity 18: rp1-cfe-csi2_ch0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 pad0: Sink <- \"csi2\":4 [] - entity 22: rp1-cfe-embedded (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video1 pad0: Sink <- \"csi2\":5 [] - entity 26: rp1-cfe-csi2_ch2 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video2 pad0: Sink <- \"csi2\":6 [] - entity 30: rp1-cfe-csi2_ch3 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video3 pad0: Sink <- \"csi2\":7 [] - entity 34: rp1-cfe-fe_image0 (1 pad, 1 link) type Node subtype V4L flags 1 device node name /dev/video4 pad0: Sink <- \"pisp-fe\":2 [] - entity 38: rp1-cfe-fe_image1 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video5 pad0: Sink <- \"pisp-fe\":3 [] - entity 42: rp1-cfe-fe_stats (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video6 pad0: Sink <- \"pisp-fe\":4 [] - entity 46: rp1-cfe-fe_config (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video7 pad0: Source -> \"pisp-fe\":1 [] To query the current input source information, if the resolution displays as 0, it indicates that no input source signal has been detected. In this case, you should check the hardware connections and follow the steps mentioned above to troubleshoot. blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings Active width: 1920 Active height: 1080 Total width: 2750 Total height: 1125 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (24.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 830 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 45 Vertical backporch: 0 Standards: Flags: Confirm the current input source information. blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query BT timings set Initialize media0. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -r Connect CSI2's pad4 to rp1-cfe-csi2_ch0's pad0. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -l ''\\''csi2'\\'':4 -> '\\''rp1-cfe-csi2_ch0'\\'':0 [1]' Configure the media node. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' Set the output format. v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3 Capture two frames for testing to verify if tc358743 is functioning properly. Other methods, such as using GStreamer, are not currently available. v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='RGB3' --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll If you have installed a desktop version of Raspberry Pi, you can use ffplay to directly play YUV files. ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 hdmiin.yuv On a Windows computer, you can use software like 7yuv to view .yuv files. For the tutorial with an input format of 1920 1080, you should select BGR888 in the top right corner of 7yuv and set the resolution to 1920 1080 to view the two frames you just captured.","title":"Software Demo"},{"location":"hdmi-csi-i2s/#chip-docs","text":"TC358743 Documentation","title":"Chip Docs"},{"location":"hdmi-csi-i2s/#packing-list","text":"C790","title":"Packing List"},{"location":"hdmi-csi-i2s/#test-video","text":"C780A Test C780B Test","title":"Test Video"},{"location":"hdmi-csi-i2s/#purchase-link","text":"Purchase C780 & C790 Purchase C779","title":"Purchase Link"},{"location":"hid/","text":"Video Mouse Keyboard Shortcuts After v1.4.5, custom shortcut keys are supported. Find the shortcuts configuration item, where key is the button name on the web UI and value is the specific button. sudo -s vim /mnt/exec/release/config/app.json ## default config\uff1a \"shortcuts\": { \"Ctrl+Alt+Del\": [\"ControlLeft\",\"AltLeft\",\"Delete\"], \"Alt+Tab\": [\"AltLeft\",\"Tab\"], \"Alt+F4\": [\"AltLeft\",\"F4\"], \"Alt+Enter\": [\"AltLeft\",\"Enter\"], \"Ctrl+W\": [\"ControlLeft\",\"KeyW\"] } The key names have uniqueness, and the specific key names are provided below \"{backspace}\": \"Backspace\", \"{tab}\": \"Tab\", \"{enter}\": \"Enter\", \"{shiftleft}\": \"ShiftLeft\", \"{shiftright}\": \"ShiftRight\", \"{altleft}\": \"AltLeft\", \"{altright}\": \"AltRight\", \"{prtscr}\": \"PrtScr\", \"{pause}\": \"Pause\", \"{scrolllock}\": \"ScrollLock\", \"{controlleft}\": \"ControlLeft\", \"{controlright}\": \"ControlRight\", \"{metaleft}\": \"MetaLeft\", \"{metaright}\": \"MetaRight\", \"{capslock}\": \"CapsLock\", \"{escape}\": \"Escape\", \"{space}\": \"Space\", \"{pageup}\": \"PageUp\", \"{pagedown}\": \"PageDown\", \"{end}\": \"End\", \"{home}\": \"Home\", \"{arrowleft}\": \"ArrowLeft\", \"{arrowup}\": \"ArrowUp\", \"{arrowright}\": \"ArrowRight\", \"{arrowdown}\": \"ArrowDown\", \"{insert}\": \"Insert\", \"{delete}\": \"Delete\", // Digits keys 1: \"Digit1\", 2: \"Digit2\", 3: \"Digit3\", 4: \"Digit4\", 5: \"Digit5\", 6: \"Digit6\", 7: \"Digit7\", 8: \"Digit8\", 9: \"Digit9\", 0: \"Digit0\", // \"!\": \"Digit1\", // ! maps to the '1' key \"@\": \"Digit2\", // @ maps to the '2' key \"#\": \"Digit3\", // # maps to the '3' key $: \"Digit4\", // $ maps to the '4' key \"%\": \"Digit5\", // % maps to the '5' key \"^\": \"Digit6\", // ^ maps to the '6' key \"&\": \"Digit7\", // & maps to the '7' key \"*\": \"Digit8\", // * maps to the '8' key \"(\": \"Digit9\", // ( maps to the '9' key \")\": \"Digit0\", // ) maps to the '0' key a: \"KeyA\", b: \"KeyB\", c: \"KeyC\", d: \"KeyD\", e: \"KeyE\", f: \"KeyF\", g: \"KeyG\", h: \"KeyH\", i: \"KeyI\", j: \"KeyJ\", k: \"KeyK\", l: \"KeyL\", m: \"KeyM\", n: \"KeyN\", o: \"KeyO\", p: \"KeyP\", q: \"KeyQ\", r: \"KeyR\", s: \"KeyS\", t: \"KeyT\", u: \"KeyU\", v: \"KeyV\", w: \"KeyW\", x: \"KeyX\", y: \"KeyY\", z: \"KeyZ\", // A: \"KeyA\", B: \"KeyB\", C: \"KeyC\", D: \"KeyD\", E: \"KeyE\", F: \"KeyF\", G: \"KeyG\", H: \"KeyH\", I: \"KeyI\", J: \"KeyJ\", K: \"KeyK\", L: \"KeyL\", M: \"KeyM\", N: \"KeyN\", O: \"KeyO\", P: \"KeyP\", Q: \"KeyQ\", R: \"KeyR\", S: \"KeyS\", T: \"KeyT\", U: \"KeyU\", V: \"KeyV\", W: \"KeyW\", X: \"KeyX\", Y: \"KeyY\", Z: \"KeyZ\", \"-\": \"Minus\", _: \"Minus\", \"=\": \"Equal\", \"+\": \"Equal\", \"[\": \"BracketLeft\", \"{\": \"BracketLeft\", \"]\": \"BracketRight\", \"}\": \"BracketRight\", \"|\": \"Backslash\", \"\\\\\": \"Backslash\", \"`\": \"Backquote\", \"~\": \"Backquote\", \";\": \"Semicolon\", \":\": \"Semicolon\", \"'\": \"Quote\", '\"': \"Quote\", \",\": \"Comma\", \"<\": \"Comma\", \".\": \"Period\", \">\": \"Period\", \"/\": \"Slash\", \"?\": \"Slash\", // Numpad keys \"{numpad0}\": \"Numpad0\", \"{numpad1}\": \"Numpad1\", \"{numpad2}\": \"Numpad2\", \"{numpad3}\": \"Numpad3\", \"{numpad4}\": \"Numpad4\", \"{numpad5}\": \"Numpad5\", \"{numpad6}\": \"Numpad6\", \"{numpad7}\": \"Numpad7\", \"{numpad8}\": \"Numpad8\", \"{numpad9}\": \"Numpad9\", \"{numlock}\": \"numlock\", \"{numpadmultiply}\": \"NumpadMultiply\", \"{numpadadd}\": \"NumpadAdd\", \"{numpadsubtract}\": \"NumpadSubtract\", \"{numpaddecimal}\": \"NumpadDecimal\", \"{numpaddivide}\": \"NumpadDivide\", \"{numpadenter}\": \"NumpadEnter\", // Function keys \"{f1}\": \"F1\", \"{f2}\": \"F2\", \"{f3}\": \"F3\", \"{f4}\": \"F4\", \"{f5}\": \"F5\", \"{f6}\": \"F6\", \"{f7}\": \"F7\", \"{f8}\": \"F8\", \"{f9}\": \"F9\", \"{f10}\": \"F10\", \"{f11}\": \"F11\", \"{f12}\": \"F12\"","title":"Keyboard"},{"location":"hid/#video-mouse-keyboard","text":"","title":"Video Mouse Keyboard"},{"location":"hid/#shortcuts","text":"After v1.4.5, custom shortcut keys are supported. Find the shortcuts configuration item, where key is the button name on the web UI and value is the specific button. sudo -s vim /mnt/exec/release/config/app.json ## default config\uff1a \"shortcuts\": { \"Ctrl+Alt+Del\": [\"ControlLeft\",\"AltLeft\",\"Delete\"], \"Alt+Tab\": [\"AltLeft\",\"Tab\"], \"Alt+F4\": [\"AltLeft\",\"F4\"], \"Alt+Enter\": [\"AltLeft\",\"Enter\"], \"Ctrl+W\": [\"ControlLeft\",\"KeyW\"] } The key names have uniqueness, and the specific key names are provided below \"{backspace}\": \"Backspace\", \"{tab}\": \"Tab\", \"{enter}\": \"Enter\", \"{shiftleft}\": \"ShiftLeft\", \"{shiftright}\": \"ShiftRight\", \"{altleft}\": \"AltLeft\", \"{altright}\": \"AltRight\", \"{prtscr}\": \"PrtScr\", \"{pause}\": \"Pause\", \"{scrolllock}\": \"ScrollLock\", \"{controlleft}\": \"ControlLeft\", \"{controlright}\": \"ControlRight\", \"{metaleft}\": \"MetaLeft\", \"{metaright}\": \"MetaRight\", \"{capslock}\": \"CapsLock\", \"{escape}\": \"Escape\", \"{space}\": \"Space\", \"{pageup}\": \"PageUp\", \"{pagedown}\": \"PageDown\", \"{end}\": \"End\", \"{home}\": \"Home\", \"{arrowleft}\": \"ArrowLeft\", \"{arrowup}\": \"ArrowUp\", \"{arrowright}\": \"ArrowRight\", \"{arrowdown}\": \"ArrowDown\", \"{insert}\": \"Insert\", \"{delete}\": \"Delete\", // Digits keys 1: \"Digit1\", 2: \"Digit2\", 3: \"Digit3\", 4: \"Digit4\", 5: \"Digit5\", 6: \"Digit6\", 7: \"Digit7\", 8: \"Digit8\", 9: \"Digit9\", 0: \"Digit0\", // \"!\": \"Digit1\", // ! maps to the '1' key \"@\": \"Digit2\", // @ maps to the '2' key \"#\": \"Digit3\", // # maps to the '3' key $: \"Digit4\", // $ maps to the '4' key \"%\": \"Digit5\", // % maps to the '5' key \"^\": \"Digit6\", // ^ maps to the '6' key \"&\": \"Digit7\", // & maps to the '7' key \"*\": \"Digit8\", // * maps to the '8' key \"(\": \"Digit9\", // ( maps to the '9' key \")\": \"Digit0\", // ) maps to the '0' key a: \"KeyA\", b: \"KeyB\", c: \"KeyC\", d: \"KeyD\", e: \"KeyE\", f: \"KeyF\", g: \"KeyG\", h: \"KeyH\", i: \"KeyI\", j: \"KeyJ\", k: \"KeyK\", l: \"KeyL\", m: \"KeyM\", n: \"KeyN\", o: \"KeyO\", p: \"KeyP\", q: \"KeyQ\", r: \"KeyR\", s: \"KeyS\", t: \"KeyT\", u: \"KeyU\", v: \"KeyV\", w: \"KeyW\", x: \"KeyX\", y: \"KeyY\", z: \"KeyZ\", // A: \"KeyA\", B: \"KeyB\", C: \"KeyC\", D: \"KeyD\", E: \"KeyE\", F: \"KeyF\", G: \"KeyG\", H: \"KeyH\", I: \"KeyI\", J: \"KeyJ\", K: \"KeyK\", L: \"KeyL\", M: \"KeyM\", N: \"KeyN\", O: \"KeyO\", P: \"KeyP\", Q: \"KeyQ\", R: \"KeyR\", S: \"KeyS\", T: \"KeyT\", U: \"KeyU\", V: \"KeyV\", W: \"KeyW\", X: \"KeyX\", Y: \"KeyY\", Z: \"KeyZ\", \"-\": \"Minus\", _: \"Minus\", \"=\": \"Equal\", \"+\": \"Equal\", \"[\": \"BracketLeft\", \"{\": \"BracketLeft\", \"]\": \"BracketRight\", \"}\": \"BracketRight\", \"|\": \"Backslash\", \"\\\\\": \"Backslash\", \"`\": \"Backquote\", \"~\": \"Backquote\", \";\": \"Semicolon\", \":\": \"Semicolon\", \"'\": \"Quote\", '\"': \"Quote\", \",\": \"Comma\", \"<\": \"Comma\", \".\": \"Period\", \">\": \"Period\", \"/\": \"Slash\", \"?\": \"Slash\", // Numpad keys \"{numpad0}\": \"Numpad0\", \"{numpad1}\": \"Numpad1\", \"{numpad2}\": \"Numpad2\", \"{numpad3}\": \"Numpad3\", \"{numpad4}\": \"Numpad4\", \"{numpad5}\": \"Numpad5\", \"{numpad6}\": \"Numpad6\", \"{numpad7}\": \"Numpad7\", \"{numpad8}\": \"Numpad8\", \"{numpad9}\": \"Numpad9\", \"{numlock}\": \"numlock\", \"{numpadmultiply}\": \"NumpadMultiply\", \"{numpadadd}\": \"NumpadAdd\", \"{numpadsubtract}\": \"NumpadSubtract\", \"{numpaddecimal}\": \"NumpadDecimal\", \"{numpaddivide}\": \"NumpadDivide\", \"{numpadenter}\": \"NumpadEnter\", // Function keys \"{f1}\": \"F1\", \"{f2}\": \"F2\", \"{f3}\": \"F3\", \"{f4}\": \"F4\", \"{f5}\": \"F5\", \"{f6}\": \"F6\", \"{f7}\": \"F7\", \"{f8}\": \"F8\", \"{f9}\": \"F9\", \"{f10}\": \"F10\", \"{f11}\": \"F11\", \"{f12}\": \"F12\"","title":"Shortcuts"},{"location":"https/","text":"Encryption Certificate Starting from version 1.4.4, BlikVM supports both HTTP and HTTPS modes. By default, it starts in HTTP mode. To start in HTTPS mode, modify the following configuration: sudo -s vim /mnt/exec/release/config/app.json Find the configuration below and change the protocol field from http to https, and change the port from 80 to 443. The key and cert are located in /mnt/exec/release/lib/https/, and users can replace them with their own. \"server\": { \"protocol\": \"http\", \"port\":80, \"ssl\": { \"key\": \"./lib/https/key.pem\", \"cert\": \"./lib/https/cert.pem\" }","title":"Encrypt certificates"},{"location":"https/#encryption-certificate","text":"Starting from version 1.4.4, BlikVM supports both HTTP and HTTPS modes. By default, it starts in HTTP mode. To start in HTTPS mode, modify the following configuration: sudo -s vim /mnt/exec/release/config/app.json Find the configuration below and change the protocol field from http to https, and change the port from 80 to 443. The key and cert are located in /mnt/exec/release/lib/https/, and users can replace them with their own. \"server\": { \"protocol\": \"http\", \"port\":80, \"ssl\": { \"key\": \"./lib/https/key.pem\", \"cert\": \"./lib/https/cert.pem\" }","title":"Encryption Certificate"},{"location":"make-image/","text":"Make your own image When you have made modifications to an image and want to create your own image, you can follow the steps below on Linux to create a minimal image. Firstly, use the gparted software to open the SD card of the image you want to create. Use gparted to partition the unused space and set it as unallocated. This ensures that this portion of empty space without any valid content is not included in the image creation. Next, use the fdisk command to view the size of the available space, as shown in the following image, which is 10151935. Then, use the dd command to write to an empty img file. Set the count value to be greater than the size of the volume end obtained from fdisk by at least 1. touch blikvm-armbian-v4-20230623.img sudo dd if = /dev/sdb of = ./blikvm-armbian-v4-20230623.img bs = 512 count = 10151936 Wait for the dd command to finish executing.","title":"Make Image"},{"location":"make-image/#make-your-own-image","text":"When you have made modifications to an image and want to create your own image, you can follow the steps below on Linux to create a minimal image. Firstly, use the gparted software to open the SD card of the image you want to create. Use gparted to partition the unused space and set it as unallocated. This ensures that this portion of empty space without any valid content is not included in the image creation. Next, use the fdisk command to view the size of the available space, as shown in the following image, which is 10151935. Then, use the dd command to write to an empty img file. Set the count value to be greater than the size of the volume end obtained from fdisk by at least 1. touch blikvm-armbian-v4-20230623.img sudo dd if = /dev/sdb of = ./blikvm-armbian-v4-20230623.img bs = 512 count = 10151936 Wait for the dd command to finish executing.","title":"Make your own image"},{"location":"modify_pikvm_image/","text":"Modifying PiKVM image to work with BliKVM hardware Because the blikvm hardware implementation scheme and PiKVM hardware implementation scheme are not exactly the same, you need to modify some errors through the following configuration for the official image of PiKVM. Of course, you can use the configured image . Fan config Since BliKVM's fan hardware is different to PiKVM's, you need to replace the control fan script first. The following default starting fan temperature is 40 degrees Celsius su - rw git clone https://github.com/ThomasVon2021/blikvm.git cd blikvm/package/kvmd-fan bash install-kvmd-fan.sh ro Edit the /etc/kvmd/override.yaml file and add the following content to remove the web UI error warning about fans. kvmd: info: fan: unix: '' Check EDID file for 1080P60Hz input The function of the EDID file is to set the controlled computer to input according to the expected resolution. Since the image EDID file of PiKVM in different periods does not necessarily meet 1080P60Hz, when you use the CM4 version of hardware, it is found that the default output of the controlled computer is not 1080P60Hz, you can modify /etc/kvmd/tc358743-edid.hex to the following contents 00FFFFFFFFFFFF005262888800888888 1C150103800000780AEE91A3544C9926 0F505400000001010101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0054 6F73686962612D4832430A20000000FD 003B3D0F2E0F1E0A202020202020014F 020323454F041303021211012021A23C 3D3E1F102309070766030C00300080E3 007F8C8C0AD08A20E02D10103E9600C4 8E210000188C0AD08A20E02D10103E96 00138E210000188C0AA01451F0160026 7C4300138E2100009800000000000000 00000000000000000000000000000000 00000000000000000000000000000087 make sure /boot/config.txt has the 4lane=1 entry in it for 1080p60hz support # Video and audio dtoverlay=tc358743,4lane=1 dtoverlay=tc358743-audio If you use webrtc can't get audio, try to edit /etc/kvmd/janus/janus.plugin.ustreamer.jcfg to add audio support. audio: { device = \"hw:0,0\" tc358743 = \"/dev/kvmd-video\" } OLED Follow the method below to enable OLED. If you use PiKVM official image, log in to PiKVM and run these commands: # rw # systemctl enable --now kvmd-oled //Enable OLED # ro If the oled still can't work, you need to check whether there has \"dtparam=i2c_arm=on\" in \"/boot/config.txt\" file, and whether there has \"i2c-dev\" in \"/etc/modules-load.d/i2c.conf\" file. If not, please create and add them. If it still does not work after the above configuration, please burn the image provided by blikvm for testing to check whether the OLED hardware is damaged. Config about v4mini image If you want to PiKVM v4mini image for blikvm v1 and v2, because v4mini image uses different gpio pins for ATX controls, so you will need the following override if you want to run v4mini image on your blikvm v1 or v2 version and be able to use ATX controls; if you don't make this change, ATX controls won't work properly (the led pins are different); Edit the /etc/kvmd/override.yaml file and add the following: kvmd: ### disable fan socket check ### info: fan: unix: '' atx: hdd_led_pin: 22 power_led_pin: 24 power_switch_pin: 23 reset_switch_pin: 27 type: gpio gpio: scheme: __v3_usb_breaker__: pin: 5 mode: output initial: false pulse: delay: 0","title":"Config for PiKVM OS"},{"location":"modify_pikvm_image/#modifying-pikvm-image-to-work-with-blikvm-hardware","text":"Because the blikvm hardware implementation scheme and PiKVM hardware implementation scheme are not exactly the same, you need to modify some errors through the following configuration for the official image of PiKVM. Of course, you can use the configured image .","title":"Modifying PiKVM image to work with BliKVM hardware"},{"location":"modify_pikvm_image/#fan-config","text":"Since BliKVM's fan hardware is different to PiKVM's, you need to replace the control fan script first. The following default starting fan temperature is 40 degrees Celsius su - rw git clone https://github.com/ThomasVon2021/blikvm.git cd blikvm/package/kvmd-fan bash install-kvmd-fan.sh ro Edit the /etc/kvmd/override.yaml file and add the following content to remove the web UI error warning about fans. kvmd: info: fan: unix: ''","title":"Fan config"},{"location":"modify_pikvm_image/#check-edid-file-for-1080p60hz-input","text":"The function of the EDID file is to set the controlled computer to input according to the expected resolution. Since the image EDID file of PiKVM in different periods does not necessarily meet 1080P60Hz, when you use the CM4 version of hardware, it is found that the default output of the controlled computer is not 1080P60Hz, you can modify /etc/kvmd/tc358743-edid.hex to the following contents 00FFFFFFFFFFFF005262888800888888 1C150103800000780AEE91A3544C9926 0F505400000001010101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0054 6F73686962612D4832430A20000000FD 003B3D0F2E0F1E0A202020202020014F 020323454F041303021211012021A23C 3D3E1F102309070766030C00300080E3 007F8C8C0AD08A20E02D10103E9600C4 8E210000188C0AD08A20E02D10103E96 00138E210000188C0AA01451F0160026 7C4300138E2100009800000000000000 00000000000000000000000000000000 00000000000000000000000000000087 make sure /boot/config.txt has the 4lane=1 entry in it for 1080p60hz support # Video and audio dtoverlay=tc358743,4lane=1 dtoverlay=tc358743-audio If you use webrtc can't get audio, try to edit /etc/kvmd/janus/janus.plugin.ustreamer.jcfg to add audio support. audio: { device = \"hw:0,0\" tc358743 = \"/dev/kvmd-video\" }","title":"Check EDID file for 1080P60Hz input"},{"location":"modify_pikvm_image/#oled","text":"Follow the method below to enable OLED. If you use PiKVM official image, log in to PiKVM and run these commands: # rw # systemctl enable --now kvmd-oled //Enable OLED # ro If the oled still can't work, you need to check whether there has \"dtparam=i2c_arm=on\" in \"/boot/config.txt\" file, and whether there has \"i2c-dev\" in \"/etc/modules-load.d/i2c.conf\" file. If not, please create and add them. If it still does not work after the above configuration, please burn the image provided by blikvm for testing to check whether the OLED hardware is damaged.","title":"OLED"},{"location":"modify_pikvm_image/#config-about-v4mini-image","text":"If you want to PiKVM v4mini image for blikvm v1 and v2, because v4mini image uses different gpio pins for ATX controls, so you will need the following override if you want to run v4mini image on your blikvm v1 or v2 version and be able to use ATX controls; if you don't make this change, ATX controls won't work properly (the led pins are different); Edit the /etc/kvmd/override.yaml file and add the following: kvmd: ### disable fan socket check ### info: fan: unix: '' atx: hdd_led_pin: 22 power_led_pin: 24 power_switch_pin: 23 reset_switch_pin: 27 type: gpio gpio: scheme: __v3_usb_breaker__: pin: 5 mode: output initial: false pulse: delay: 0","title":"Config about v4mini image"},{"location":"msd/","text":"Mass Storage Drive Reinstall the system Video BliKVM's USB device simulation feature allows you to remotely mount images on the virtual machine's mass storage drive, making it easy to install or reinstall operating systems and other software. This can be a useful feature for system administrators who need to manage multiple virtual machines remotely. By mounting an image on the mass storage drive, you can quickly and easily set up or configure a new virtual machine without having to physically connect a USB drive or other external storage device. Note: the size of the MSD is limited by the size of your sd card or eMMC module. Web UI The entrance to the MSD virtual USB drive is as follows: Using the web to upload images and create bootable drives are both synchronous processes. If you exit the MSD UI interface after uploading an image, you can resume the upload from where it left off the next time you select the same image. However, once you exit the bootable drive creation process, you cannot resume it; you will need to start over. The default upload path for images is /mnt/upload . If an upload fails, you can manually delete the cache files that were not successfully uploaded. Due to the large size of some image files, image uploads are divided into slices and then merged. The merging process cannot be resumed, so please ensure you wait for the merge to complete (which may take some time) before proceeding to the next step. Creating a bootable drive involves two steps: creating a virtual USB drive and copying the selected ISO image into the created virtual USB drive. Both steps have progress indicators. Please wait until both steps show 100% progress before clicking Next. Upload images manually (without Web UI) Confirm that the following four paths exist. If you are using the official latest image of blikvm, and it is fully configured, there is no need to check. /usr/bin/blikvm/ventoy-1.0.88 /usr/bin/blikvm/kvmd-msd.sh /mnt/msd/user /mnt/msd/ventoy SSH logs in to blikvm, executes the rw command, and changes the system permission to writable. rw In your PC ,use scp cmd send iso file to kvm board. scp ***.iso blikvm@xxx.xxx.xxx.xxx:/mnt/msd/user/ excute msd cmd.wait until excute end. If you don't use option paramter\uff1a The default size of the USB flash disk is 5GB. The default filename is scan /mnt/msd/user dir. The default msd name is ventoy. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make If your iso is large than 5GB.You can specify the optional parameter - s xxx, xxx is the Size. If you need specify iso ,you can use -f xxx.iso. If you want to specify the msd name, you can use -n xxx. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 5 -n ventoy -f xxx.iso Tips: cp progresses slowly, please be patient. If you want to excute other cmd, you can use other option. c option contains : make/conn/disconn/clean Connect msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c conn Disconnect msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c disconn Clean msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c clean Through the WebUI restart PC, enter BIOS, modify boot priority, set BliKVM USB first. According to the steps, select operating system, format partition and install.","title":"MSD"},{"location":"msd/#mass-storage-drive","text":"Reinstall the system Video BliKVM's USB device simulation feature allows you to remotely mount images on the virtual machine's mass storage drive, making it easy to install or reinstall operating systems and other software. This can be a useful feature for system administrators who need to manage multiple virtual machines remotely. By mounting an image on the mass storage drive, you can quickly and easily set up or configure a new virtual machine without having to physically connect a USB drive or other external storage device. Note: the size of the MSD is limited by the size of your sd card or eMMC module.","title":"Mass Storage Drive"},{"location":"msd/#web-ui","text":"The entrance to the MSD virtual USB drive is as follows: Using the web to upload images and create bootable drives are both synchronous processes. If you exit the MSD UI interface after uploading an image, you can resume the upload from where it left off the next time you select the same image. However, once you exit the bootable drive creation process, you cannot resume it; you will need to start over. The default upload path for images is /mnt/upload . If an upload fails, you can manually delete the cache files that were not successfully uploaded. Due to the large size of some image files, image uploads are divided into slices and then merged. The merging process cannot be resumed, so please ensure you wait for the merge to complete (which may take some time) before proceeding to the next step. Creating a bootable drive involves two steps: creating a virtual USB drive and copying the selected ISO image into the created virtual USB drive. Both steps have progress indicators. Please wait until both steps show 100% progress before clicking Next.","title":"Web UI"},{"location":"msd/#upload-images-manually-without-web-ui","text":"Confirm that the following four paths exist. If you are using the official latest image of blikvm, and it is fully configured, there is no need to check. /usr/bin/blikvm/ventoy-1.0.88 /usr/bin/blikvm/kvmd-msd.sh /mnt/msd/user /mnt/msd/ventoy SSH logs in to blikvm, executes the rw command, and changes the system permission to writable. rw In your PC ,use scp cmd send iso file to kvm board. scp ***.iso blikvm@xxx.xxx.xxx.xxx:/mnt/msd/user/ excute msd cmd.wait until excute end. If you don't use option paramter\uff1a The default size of the USB flash disk is 5GB. The default filename is scan /mnt/msd/user dir. The default msd name is ventoy. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make If your iso is large than 5GB.You can specify the optional parameter - s xxx, xxx is the Size. If you need specify iso ,you can use -f xxx.iso. If you want to specify the msd name, you can use -n xxx. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 5 -n ventoy -f xxx.iso Tips: cp progresses slowly, please be patient. If you want to excute other cmd, you can use other option. c option contains : make/conn/disconn/clean Connect msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c conn Disconnect msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c disconn Clean msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c clean Through the WebUI restart PC, enter BIOS, modify boot priority, set BliKVM USB first. According to the steps, select operating system, format partition and install.","title":"Upload images manually (without Web UI)"},{"location":"port-forwarding/","text":"Port forwarding If your ISP provides an external IP address for the router, you can configure Port forwarding to access BliKVM: The web interface uses the HTTP protocol and occupies port 80; If your hardware is v1 v2 v3 and you are using web rtc transmission, the port is 8188; If your hardware is v4 and you are using mjepg transmission, the port is 8008; Note that the port does not support modification and can only be configured for forwarding; If you do not have an external IP address, we suggest trying to use Tailscale VPN \u3002","title":"Port Forwarding"},{"location":"port-forwarding/#port-forwarding","text":"If your ISP provides an external IP address for the router, you can configure Port forwarding to access BliKVM: The web interface uses the HTTP protocol and occupies port 80; If your hardware is v1 v2 v3 and you are using web rtc transmission, the port is 8188; If your hardware is v4 and you are using mjepg transmission, the port is 8008; Note that the port does not support modification and can only be configured for forwarding; If you do not have an external IP address, we suggest trying to use Tailscale VPN \u3002","title":"Port forwarding"},{"location":"rtc/","text":"RTC Clock The purpose of an RTC (Real-Time Clock) is to provide real-time information about the current date and time for a device or system. It is an independent clock chip or module that has its own power source, allowing it to maintain accurate time even when the device is powered off or experiences a power outage. Due to shipping restrictions on international deliveries, the RTC hardware is shipped without a battery, and users need to purchase a CR1220 button cell battery themselves. The specific RTC clock model used in different versions of BliKVM may vary, and the usage methods may differ slightly. BliKVM V2 PCIe and BliKVM V3 Hat - pcf8563 1. Check if the pcf8563 RTC clock hardware is properly recognized on the i2c bus. The pcf8563 RTC clock has an i2c address of 0x51. Execute the following command as root to verify if the rtc clock is correctly detected on the i2c bus: root@mangopimcore:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. Register a new i2c device with the Linux system's i2c subsystem. The device is a pcf8563 with an i2c address of 0x51. Use the command ls /dev | grep rtc to verify if the rtc1 device appears, indicating a successful registration. echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 3. Set the current system time to the RTC clock time. hwclock -f /dev/rtc0 -w 4. Read the time from the RTC clock. If the time can be read, it indicates that the RTC module is functioning correctly. root@mangopimcore:~# hwclock -f /dev/rtc0 -r 2023-05-28 05:04:08.679152-02:30 BliKVM V4 - pcf8563 1. Check if the pcf8563 RTC clock hardware is properly recognized on the i2c bus. The pcf8563 RTC clock has an i2c address of 0x51. Execute the following command as root to verify if the rtc clock is correctly detected on the i2c bus: root@mangopimcore:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. Register a new i2c device with the Linux system's i2c subsystem. The device is a pcf8563 with an i2c address of 0x51. Use the command ls /dev | grep rtc to verify if the rtc1 device appears, indicating a successful registration. echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-0/new_device 3. Set the current system time to the RTC clock time. hwclock -f /dev/rtc1 -w 4. Read the time from the RTC clock. If the time can be read, it indicates that the RTC module is functioning correctly. root@mangopimcore:~# hwclock -f /dev/rtc1 -r 2023-05-28 05:04:08.679152-02:30","title":"RTC clock"},{"location":"rtc/#rtc-clock","text":"The purpose of an RTC (Real-Time Clock) is to provide real-time information about the current date and time for a device or system. It is an independent clock chip or module that has its own power source, allowing it to maintain accurate time even when the device is powered off or experiences a power outage. Due to shipping restrictions on international deliveries, the RTC hardware is shipped without a battery, and users need to purchase a CR1220 button cell battery themselves. The specific RTC clock model used in different versions of BliKVM may vary, and the usage methods may differ slightly.","title":"RTC Clock"},{"location":"rtc/#blikvm-v2-pcie-and-blikvm-v3-hat-pcf8563","text":"1. Check if the pcf8563 RTC clock hardware is properly recognized on the i2c bus. The pcf8563 RTC clock has an i2c address of 0x51. Execute the following command as root to verify if the rtc clock is correctly detected on the i2c bus: root@mangopimcore:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. Register a new i2c device with the Linux system's i2c subsystem. The device is a pcf8563 with an i2c address of 0x51. Use the command ls /dev | grep rtc to verify if the rtc1 device appears, indicating a successful registration. echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 3. Set the current system time to the RTC clock time. hwclock -f /dev/rtc0 -w 4. Read the time from the RTC clock. If the time can be read, it indicates that the RTC module is functioning correctly. root@mangopimcore:~# hwclock -f /dev/rtc0 -r 2023-05-28 05:04:08.679152-02:30","title":"BliKVM V2 PCIe and BliKVM V3 Hat - pcf8563"},{"location":"rtc/#blikvm-v4-pcf8563","text":"1. Check if the pcf8563 RTC clock hardware is properly recognized on the i2c bus. The pcf8563 RTC clock has an i2c address of 0x51. Execute the following command as root to verify if the rtc clock is correctly detected on the i2c bus: root@mangopimcore:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. Register a new i2c device with the Linux system's i2c subsystem. The device is a pcf8563 with an i2c address of 0x51. Use the command ls /dev | grep rtc to verify if the rtc1 device appears, indicating a successful registration. echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-0/new_device 3. Set the current system time to the RTC clock time. hwclock -f /dev/rtc1 -w 4. Read the time from the RTC clock. If the time can be read, it indicates that the RTC module is functioning correctly. root@mangopimcore:~# hwclock -f /dev/rtc1 -r 2023-05-28 05:04:08.679152-02:30","title":"BliKVM V4 - pcf8563"},{"location":"serial_over_usb/","text":"Serial-over-USB connection The BliKVM device can be accessed through the serial port terminal. 1. For hardware connection, you should use the USB to TTL module to connect the USB of the computer to the uart of BliKVM. If you are using the Hat version, please connect the serial ports GPIO14 and GPIO15. If you are using the PCIe version, connect the GTR pin marked by the PCB 2. Install terminal login tools on the computer. For example, Putty for Windows 3. Use the Putty instructions. Enter the correct COM port. The default baud rate is 115200 . Select serial as the connection method, and then click Open\uff08Use PiKVM firmware as an example If your computer cannot correctly recognize the USB to TTL module, please follow the steps below to install the driver for your computer Connect the USB-A connector to your admin host (in this example, it's on a Windows host). As a result, Device Manager will show a new USB Serial device in Other Devices. Download and extract/run drivers. In this example, I downloaded and extracted the ZIP file. https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all Update driver for the new USB Serial device, point it to where you extracted the files, and click Next then Close. If done right, the new USB serial device should now show up under Ports as USB-SERIAL CH340 (COMX).","title":"Serial-over-USB"},{"location":"serial_over_usb/#serial-over-usb-connection","text":"The BliKVM device can be accessed through the serial port terminal. 1. For hardware connection, you should use the USB to TTL module to connect the USB of the computer to the uart of BliKVM. If you are using the Hat version, please connect the serial ports GPIO14 and GPIO15. If you are using the PCIe version, connect the GTR pin marked by the PCB 2. Install terminal login tools on the computer. For example, Putty for Windows 3. Use the Putty instructions. Enter the correct COM port. The default baud rate is 115200 . Select serial as the connection method, and then click Open\uff08Use PiKVM firmware as an example If your computer cannot correctly recognize the USB to TTL module, please follow the steps below to install the driver for your computer Connect the USB-A connector to your admin host (in this example, it's on a Windows host). As a result, Device Manager will show a new USB Serial device in Other Devices. Download and extract/run drivers. In this example, I downloaded and extracted the ZIP file. https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all Update driver for the new USB Serial device, point it to where you extracted the files, and click Next then Close. If done right, the new USB serial device should now show up under Ports as USB-SERIAL CH340 (COMX).","title":"Serial-over-USB connection"},{"location":"ssh/","text":"SSH Config Starting from version 1.4.7, the web interface supports direct access to the blikvm SSH terminal. The default username and password to access the terminal are blikvm/blikvm. If you have changed the password for this user, you will need to update the corresponding username and password in the app.json file. sudo -s vim /mnt/exec/release/config/app.json # Locate the following configuration and update it with your new credentials. \"sshUser\": \"blikvm\", \"sshPassword\": \"blikvm\"","title":"SSH Terminal"},{"location":"ssh/#ssh-config","text":"Starting from version 1.4.7, the web interface supports direct access to the blikvm SSH terminal. The default username and password to access the terminal are blikvm/blikvm. If you have changed the password for this user, you will need to update the corresponding username and password in the app.json file. sudo -s vim /mnt/exec/release/config/app.json # Locate the following configuration and update it with your new credentials. \"sshUser\": \"blikvm\", \"sshPassword\": \"blikvm\"","title":"SSH Config"},{"location":"static_ip/","text":"Set static IP To configure a static IP address on a BliKVM image, you can follow these steps: v1 v2 v3 versions - Debian SSH into the BliKVM, If it is a read-only system, please use the rw command to make the system writable. Edit the network interfaces configuration file using the following command: sudo vim /etc/dhcpcd.conf Within the file, locate the section that starts with # Example static IP configuration . Uncomment the lines below that section and modify them to set your desired static IP address, gateway, DNS servers, and other network settings. For example: interface eth0 static ip_address = 192 .168.1.100/24 static routers = 192 .168.1.1 static domain_name_servers = 192 .168.1.1 Adjust the values according to your network configuration. Save the changes. Restart the BliKVM for the changes to take effect: sudo reboot v4 version - armbian SSH into the BliKVM, If it is a read-only system, please use the rw command to make the system writable. Edit the network interfaces configuration file using the following command: sudo vim /etc/network/interfaces Within the file, locate the section that starts with # Example static IP configuration . Uncomment the lines below that section and modify them to set your desired static IP address, gateway, DNS servers, and other network settings. For example: source /etc/network/interfaces.d/* auto eth0 allow-hotplug eth0 iface eth0 inet static address 192 .168.0.100 netmask 255 .255.255.0 gateway 192 .168.0.1 dns-nameservers 192 .168.0.1 Adjust the values according to your network configuration. Save the changes. Restart the BliKVM for the changes to take effect: sudo reboot After the reboot, your BliKVM will use the configured static IP address instead of obtaining one dynamically from a DHCP server. Make sure the static IP address you choose is not already assigned to another device on the network and is within the same subnet.","title":"Set Static IP "},{"location":"static_ip/#set-static-ip","text":"To configure a static IP address on a BliKVM image, you can follow these steps:","title":"Set static IP"},{"location":"static_ip/#v1-v2-v3-versions-debian","text":"SSH into the BliKVM, If it is a read-only system, please use the rw command to make the system writable. Edit the network interfaces configuration file using the following command: sudo vim /etc/dhcpcd.conf Within the file, locate the section that starts with # Example static IP configuration . Uncomment the lines below that section and modify them to set your desired static IP address, gateway, DNS servers, and other network settings. For example: interface eth0 static ip_address = 192 .168.1.100/24 static routers = 192 .168.1.1 static domain_name_servers = 192 .168.1.1 Adjust the values according to your network configuration. Save the changes. Restart the BliKVM for the changes to take effect: sudo reboot","title":"v1 v2 v3 versions - Debian"},{"location":"static_ip/#v4-version-armbian","text":"SSH into the BliKVM, If it is a read-only system, please use the rw command to make the system writable. Edit the network interfaces configuration file using the following command: sudo vim /etc/network/interfaces Within the file, locate the section that starts with # Example static IP configuration . Uncomment the lines below that section and modify them to set your desired static IP address, gateway, DNS servers, and other network settings. For example: source /etc/network/interfaces.d/* auto eth0 allow-hotplug eth0 iface eth0 inet static address 192 .168.0.100 netmask 255 .255.255.0 gateway 192 .168.0.1 dns-nameservers 192 .168.0.1 Adjust the values according to your network configuration. Save the changes. Restart the BliKVM for the changes to take effect: sudo reboot After the reboot, your BliKVM will use the configured static IP address instead of obtaining one dynamically from a DHCP server. Make sure the static IP address you choose is not already assigned to another device on the network and is within the same subnet.","title":"v4 version - armbian"},{"location":"switch-guide/","text":"HDMI Switch Manual BliKVM-Switch-V1.0 uses and tests video, supporting BliKVM and PiKVM Introduction BliKVM-Switch-V1.0 is a four channel HDMI+USB switch, which supports panel button, desktop controller and KVM remote to switch between computers. Maximum support of the switch itself 4K@60HZ Plug and play, driver free. BliKVM-Switch-V1.0 uses the same hardware solution as XH-HK4401, AG7210 HDMI switching chip supports up to 4K@60Hz, CH444G USB switching chip supports USB2.0. The difference is that BliKVM-Switch-V1.0 is equipped with KVM USB cable, which can realize KVM port selection. BliKVM-Switch-V1.0 is compatible with BliKVM and PiKVM. points for attention The switch can be powered directly from the USB input to the computer, that is, the switch can work normally without power supply. If the USB power supply of the controlled computer cannot make the switch work, the switch can be powered independently. The switch package only provides a USB power cable, but does not provide a power adapter. The customer needs to configure a power adapter (5V). Desktop controller can control HDMI switch with USB cable. For customers who do not use KVM, this is another way of switching for easy cable management. HDMI input support up to 4096x2160/60Hz resolution 4K 60Hz input, the power is about 200 mW. Interface Diagram There must be 2 USB cables from KVM to BliKVM, one for controller, and second from USB on KVM to USB-PC on BliKVM. Front and back interface diagram, the control interface in the right figure is the remote control interface.A cable with one end being USB-A and the other end being micro USB, labeled with the word \"KVM,\" serves as the control cable. The micro USB end is connected to the control interface of the switch, while the USB-A end is connected to the USB port of the KVM. Schematic Diagram of Side Interface. Equipment connection diagram. Software Configuration If you are using BliKVM software and have powered on the switch and connected the cables before starting BliKVM, no additional configuration is needed. BliKVM will automatically detect the switch when it starts. If automatic detection fails, you can manually specify the switch device: Confirm the device descriptor name of the switch by using the terminal, such as /dev/ttyUSB0 . Edit the switch_handle field in /usr/bin/blikvm/package.json . Set switch_enable to 1 and switch_path to /dev/ttyUSB0 in the configuration. Restart BliKVM. Click MORE in the lower left corner, find the BliKVM switch column, and then switch. Note that the flashing blue dot of the corresponding channel indicates that the switch insertion is recognized and is in the current channel. If there is no blue dot, the switch insertion is not recognized. If you use PiKVM software, please configure it according to the following instructions. Log in to PiKVM through SSH. The user name and password are root; Uses the rw command on the terminal to change the system to a read-write system; Edit /etc/kvmd/override.yaml . After the original content, add: kvmd: gpio: drivers: hk: type: xh_hk4401 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk pin: 0 mode: input ch1_led: driver: hk pin: 1 mode: input ch2_led: driver: hk pin: 2 mode: input ch3_led: driver: hk pin: 3 mode: input ch0_button: driver: hk pin: 0 mode: output switch: false ch1_button: driver: hk pin: 1 mode: output switch: false ch2_button: driver: hk pin: 2 mode: output switch: false ch3_button: driver: hk pin: 3 mode: output switch: false view: table: - [\"#Input 1\", ch0_led, ch0_button] - [\"#Input 2\", ch1_led, ch1_button] - [\"#Input 3\", ch2_led, ch2_button] - [\"#Input 4\", ch3_led, ch3_button] The above configuration is based on the 2022 PiKVM image. If you are using the latest PiKVM image or latest software version, edit /etc/kvmd/override.yaml and add the line: protocol: 2 . Example: kvmd: gpio: drivers: hk: type: xh_hk4401 protocol: 2 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk ... Use the ro command on the terminal to reset the system to a read-only system; Use systemctl restart kvmd on the terminal to restart the service; Enter the PiKVM web interface and click the \"GPIO\" menu. You should see 4 inputs, one of which has a green circle to indicate that it is currently selected. Click a different input to change the selected host. Control Protocol If you want to use the blicube switch on other platforms, please refer to the following protocol The communication baud rate is 19200 The message sent to switch by switching to channel 1 is SW1\\r\\nG01gA The message sent to switch by switching to channel 2 is SW2\\r\\nG02gA The message sent to switch by switching to channel 3 is SW3\\r\\nG03gA The message sent to switch by switching to channel 4 is SW4\\r\\nG04gA The message returned by the switch for the current channel is: G01gA , G02gA , G03gA , G04gA Packing List product quantity note HDMI KVM Switch(4-channel) 1 110mm * 60mm * 33mm Desktop controller 1 USB cable of Desktop controller 4 length: 1.2m HDMI(Standard) cable 5 length: 1.5m USB power cable 1 length: 0.8m USB cable of KVM 1 length: 1.5m USB cable of Desktop controller 1 length: 1m","title":"Multiport KVM-over-IP"},{"location":"switch-guide/#hdmi-switch-manual","text":"BliKVM-Switch-V1.0 uses and tests video, supporting BliKVM and PiKVM","title":"HDMI Switch Manual"},{"location":"switch-guide/#introduction","text":"BliKVM-Switch-V1.0 is a four channel HDMI+USB switch, which supports panel button, desktop controller and KVM remote to switch between computers. Maximum support of the switch itself 4K@60HZ Plug and play, driver free. BliKVM-Switch-V1.0 uses the same hardware solution as XH-HK4401, AG7210 HDMI switching chip supports up to 4K@60Hz, CH444G USB switching chip supports USB2.0. The difference is that BliKVM-Switch-V1.0 is equipped with KVM USB cable, which can realize KVM port selection. BliKVM-Switch-V1.0 is compatible with BliKVM and PiKVM. points for attention The switch can be powered directly from the USB input to the computer, that is, the switch can work normally without power supply. If the USB power supply of the controlled computer cannot make the switch work, the switch can be powered independently. The switch package only provides a USB power cable, but does not provide a power adapter. The customer needs to configure a power adapter (5V). Desktop controller can control HDMI switch with USB cable. For customers who do not use KVM, this is another way of switching for easy cable management. HDMI input support up to 4096x2160/60Hz resolution 4K 60Hz input, the power is about 200 mW.","title":"Introduction"},{"location":"switch-guide/#interface-diagram","text":"There must be 2 USB cables from KVM to BliKVM, one for controller, and second from USB on KVM to USB-PC on BliKVM. Front and back interface diagram, the control interface in the right figure is the remote control interface.A cable with one end being USB-A and the other end being micro USB, labeled with the word \"KVM,\" serves as the control cable. The micro USB end is connected to the control interface of the switch, while the USB-A end is connected to the USB port of the KVM. Schematic Diagram of Side Interface. Equipment connection diagram.","title":"Interface Diagram"},{"location":"switch-guide/#software-configuration","text":"If you are using BliKVM software and have powered on the switch and connected the cables before starting BliKVM, no additional configuration is needed. BliKVM will automatically detect the switch when it starts. If automatic detection fails, you can manually specify the switch device: Confirm the device descriptor name of the switch by using the terminal, such as /dev/ttyUSB0 . Edit the switch_handle field in /usr/bin/blikvm/package.json . Set switch_enable to 1 and switch_path to /dev/ttyUSB0 in the configuration. Restart BliKVM. Click MORE in the lower left corner, find the BliKVM switch column, and then switch. Note that the flashing blue dot of the corresponding channel indicates that the switch insertion is recognized and is in the current channel. If there is no blue dot, the switch insertion is not recognized. If you use PiKVM software, please configure it according to the following instructions. Log in to PiKVM through SSH. The user name and password are root; Uses the rw command on the terminal to change the system to a read-write system; Edit /etc/kvmd/override.yaml . After the original content, add: kvmd: gpio: drivers: hk: type: xh_hk4401 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk pin: 0 mode: input ch1_led: driver: hk pin: 1 mode: input ch2_led: driver: hk pin: 2 mode: input ch3_led: driver: hk pin: 3 mode: input ch0_button: driver: hk pin: 0 mode: output switch: false ch1_button: driver: hk pin: 1 mode: output switch: false ch2_button: driver: hk pin: 2 mode: output switch: false ch3_button: driver: hk pin: 3 mode: output switch: false view: table: - [\"#Input 1\", ch0_led, ch0_button] - [\"#Input 2\", ch1_led, ch1_button] - [\"#Input 3\", ch2_led, ch2_button] - [\"#Input 4\", ch3_led, ch3_button] The above configuration is based on the 2022 PiKVM image. If you are using the latest PiKVM image or latest software version, edit /etc/kvmd/override.yaml and add the line: protocol: 2 . Example: kvmd: gpio: drivers: hk: type: xh_hk4401 protocol: 2 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk ... Use the ro command on the terminal to reset the system to a read-only system; Use systemctl restart kvmd on the terminal to restart the service; Enter the PiKVM web interface and click the \"GPIO\" menu. You should see 4 inputs, one of which has a green circle to indicate that it is currently selected. Click a different input to change the selected host.","title":"Software Configuration"},{"location":"switch-guide/#control-protocol","text":"If you want to use the blicube switch on other platforms, please refer to the following protocol The communication baud rate is 19200 The message sent to switch by switching to channel 1 is SW1\\r\\nG01gA The message sent to switch by switching to channel 2 is SW2\\r\\nG02gA The message sent to switch by switching to channel 3 is SW3\\r\\nG03gA The message sent to switch by switching to channel 4 is SW4\\r\\nG04gA The message returned by the switch for the current channel is: G01gA , G02gA , G03gA , G04gA","title":"Control Protocol"},{"location":"switch-guide/#packing-list","text":"product quantity note HDMI KVM Switch(4-channel) 1 110mm * 60mm * 33mm Desktop controller 1 USB cable of Desktop controller 4 length: 1.2m HDMI(Standard) cable 5 length: 1.5m USB power cable 1 length: 0.8m USB cable of KVM 1 length: 1.5m USB cable of Desktop controller 1 length: 1m","title":"Packing List"},{"location":"tailscale/","text":"Tailscale VPN Tailscale can be used to access your BliKVM from the public internet. It is a convenient and free networking tool for setting up a small VPN network. This document provides an example for accessing your BliKVM over the internet, but you can also use Zerotier or other VPN solutions. The following is a basic example, and for any specific settings or functionalities, please refer to the Tailscale documentation. BliKVM Installation First, make sure that your system has read-write access. If it's a read-only system, use the rw command to make it writable. Then, proceed with the Tailscale installation by running the following command: curl -fsSL https://tailscale.com/install.sh | sh Note that in some regions, such as China, downloading Tailscale directly might be problematic due to network restrictions. Please configure your network accordingly. Adding BliKVM to your Tailscale Network Register an account on the Tailscale website and generate your own keys in the settings. On the BliKVM terminal, use the following command to add BliKVM to your Tailscale network: sudo tailscale up --authkey = your-auth-key --accept-routes If everything goes well, you can run ip addr show tailscale0 on the BliKVM terminal to view the IP address assigned by Tailscale for the virtual network. Here's an example output: 3 : tailscale0: mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 100 .126.223.28/32 scope global tailscale0 valid_lft forever preferred_lft forever inet6 fd7a:115c:a1e0:ab12:4843:cd96:627e:df1c/128 scope global valid_lft forever preferred_lft forever inet6 fe80::8955:99dc:4e7d:b08b/64 scope link stable-privacy valid_lft forever preferred_lft forever The IP address, such as 100.126.223.28 , can be used to access the BliKVM web interface from your host machine. Host Installation Download and install Tailscale from the Tailscale website on your controlling host machine. Log in with your Tailscale account, and then you can check the Tailscale admin page to verify if both your machines are online. Once they are online, you can use the following address to access BliKVM from your controlling host machine: http://","title":"Tailscale VPN"},{"location":"tailscale/#tailscale-vpn","text":"Tailscale can be used to access your BliKVM from the public internet. It is a convenient and free networking tool for setting up a small VPN network. This document provides an example for accessing your BliKVM over the internet, but you can also use Zerotier or other VPN solutions. The following is a basic example, and for any specific settings or functionalities, please refer to the Tailscale documentation.","title":"Tailscale VPN"},{"location":"tailscale/#blikvm-installation","text":"First, make sure that your system has read-write access. If it's a read-only system, use the rw command to make it writable. Then, proceed with the Tailscale installation by running the following command: curl -fsSL https://tailscale.com/install.sh | sh Note that in some regions, such as China, downloading Tailscale directly might be problematic due to network restrictions. Please configure your network accordingly.","title":"BliKVM Installation"},{"location":"tailscale/#adding-blikvm-to-your-tailscale-network","text":"Register an account on the Tailscale website and generate your own keys in the settings. On the BliKVM terminal, use the following command to add BliKVM to your Tailscale network: sudo tailscale up --authkey = your-auth-key --accept-routes If everything goes well, you can run ip addr show tailscale0 on the BliKVM terminal to view the IP address assigned by Tailscale for the virtual network. Here's an example output: 3 : tailscale0: mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 100 .126.223.28/32 scope global tailscale0 valid_lft forever preferred_lft forever inet6 fd7a:115c:a1e0:ab12:4843:cd96:627e:df1c/128 scope global valid_lft forever preferred_lft forever inet6 fe80::8955:99dc:4e7d:b08b/64 scope link stable-privacy valid_lft forever preferred_lft forever The IP address, such as 100.126.223.28 , can be used to access the BliKVM web interface from your host machine.","title":"Adding BliKVM to your Tailscale Network"},{"location":"tailscale/#host-installation","text":"Download and install Tailscale from the Tailscale website on your controlling host machine. Log in with your Tailscale account, and then you can check the Tailscale admin page to verify if both your machines are online. Once they are online, you can use the following address to access BliKVM from your controlling host machine: http://","title":"Host Installation"},{"location":"update/","text":"Software update introduction Introduction The currently available versions of the BLIKVM project are hosted in the release package of the GitHub. The update software function needs to keep the device connected. There are currently two ways to update the software. Method 1: Click the update button through the web interface, and the program will be updated automatically. A restart is required after the update. Method 2: Manually run the script on the KVM terminal to update, and restart after the update. Common causes of upgrade errors The device is not connected to the network; Network access to GitHub is limited; We strongly recommend performing the update while you are in close proximity to the BliKVM hardware you are upgrading. This way if anything goes wrong you can intervene. If you are familiar with command-line operations, we recommend manually updating so that you can monitor the command-line status in real time. If the update is abnormal and the web interface cannot exit the update status, use ssh to get you a terminal and reboot to recover. Manually run the script to update In the terminal\uff0cif the system terminal shows the ro keyword that means your system is currently in read-only, it is necessary to use the rw command to make the system writable. sudo -i cd /opt/bin/blikvm/ git stash git pull --rebase python3 /opt/bin/blikvm/script/update.py # If you want test the newest alpha version, use: python3 /opt/bin/blikvm/script/update.py alpha Observe the output of the terminal. When you see the message of a successful upgrade, enter in the terminal the: reboot command and the reboot should take effect. If you are unable to update successfully due to network issues, you can download the latest release.tar.gz package on another PC with a stable network connection and follow the instructions below for installation. Download Address: https://github.com/ThomasVon2021/blikvm/releases v1 v2 v3 hardware use release.tar.gz v4 hardware use release-h616-v4.tar.gz SSH into the device terminal and use tar -zxvf release.tar.gz to extract the release.tar.gz file. sudo -i cd /your release path/ python3 install_release.py --releasepath=./ You can compare the versions before and after in /usr/bin/blikvm/package.json . If you have upgraded to the specified version, the installation is successful, and you can reboot for the changes to take effect. Web UI Update The current web upgrade function is temporarily disabled. Please use the command line to update After clicking the More Options button, find the Check Update button and click it. If the available version is found, the pop-up box in the figure below will appear. Click OK to enter the upgrade process. The web interface is temporarily inoperable during the upgrade process. View the current update status by manually refreshing the page. When the message of successful update appears, it means that the update has been successful. Click the restart button, and the new version of software will take effect.","title":"Upgrade"},{"location":"update/#software-update-introduction","text":"","title":"Software update introduction"},{"location":"update/#introduction","text":"The currently available versions of the BLIKVM project are hosted in the release package of the GitHub. The update software function needs to keep the device connected. There are currently two ways to update the software. Method 1: Click the update button through the web interface, and the program will be updated automatically. A restart is required after the update. Method 2: Manually run the script on the KVM terminal to update, and restart after the update. Common causes of upgrade errors The device is not connected to the network; Network access to GitHub is limited; We strongly recommend performing the update while you are in close proximity to the BliKVM hardware you are upgrading. This way if anything goes wrong you can intervene. If you are familiar with command-line operations, we recommend manually updating so that you can monitor the command-line status in real time. If the update is abnormal and the web interface cannot exit the update status, use ssh to get you a terminal and reboot to recover.","title":"Introduction"},{"location":"update/#manually-run-the-script-to-update","text":"In the terminal\uff0cif the system terminal shows the ro keyword that means your system is currently in read-only, it is necessary to use the rw command to make the system writable. sudo -i cd /opt/bin/blikvm/ git stash git pull --rebase python3 /opt/bin/blikvm/script/update.py # If you want test the newest alpha version, use: python3 /opt/bin/blikvm/script/update.py alpha Observe the output of the terminal. When you see the message of a successful upgrade, enter in the terminal the: reboot command and the reboot should take effect. If you are unable to update successfully due to network issues, you can download the latest release.tar.gz package on another PC with a stable network connection and follow the instructions below for installation. Download Address: https://github.com/ThomasVon2021/blikvm/releases v1 v2 v3 hardware use release.tar.gz v4 hardware use release-h616-v4.tar.gz SSH into the device terminal and use tar -zxvf release.tar.gz to extract the release.tar.gz file. sudo -i cd /your release path/ python3 install_release.py --releasepath=./ You can compare the versions before and after in /usr/bin/blikvm/package.json . If you have upgraded to the specified version, the installation is successful, and you can reboot for the changes to take effect.","title":"Manually run the script to update"},{"location":"update/#web-ui-update","text":"The current web upgrade function is temporarily disabled. Please use the command line to update After clicking the More Options button, find the Check Update button and click it. If the available version is found, the pop-up box in the figure below will appear. Click OK to enter the upgrade process. The web interface is temporarily inoperable during the upgrade process. View the current update status by manually refreshing the page. When the message of successful update appears, it means that the update has been successful. Click the restart button, and the new version of software will take effect.","title":"Web UI Update"},{"location":"usb-splitter-guide/","text":"USB/PWR Splitter guide 1. Introduction The adaptor allows the Raspberry Pi 4 to be used with a Pi USB-C power supply while allowing access to USB OTG data over a separate USB-C connection. USB-C (RPI4) <> USB-C (USB) and USB-C (PWR) USB-C(RPI4) USB Type-C(USB) USB Type-C(PWR) 5V 5V D- D- D+ D+ CC1 10k to 5V CC1 5.1k to GND CC1 5.1k to GND CC2 10k to 5V CC2 5.1k to GND CC2 5.1k to GND GND GND GND To use the adaptor with the Raspberry Pi 4 you need. USB-C to USB-C cable[1] between Pi4 and the adaptor board USB-C to USB-C or Type-A between adaptor board and PC Power[2] via Official Raspberry Pi USB Type-C Power Supply. [1] Whilst USB-C cables are generally designed for higher current I still advise using short power cable to the Pi where possible to reduce voltage drop. [2] PLEASE NOTE With the Pu/Pd resistors on this board it can only be used with 5V supply to power a 5V device. An adaptor of this kind does not fall within the USB specification. It's designed for use with the official Raspberry Pi USB-C power supply and raspberry pi, use with other power supplies/chargers and devices may cause issues/damage. 2.Mechanical Diagram 3.Test video USB splitter Video 4.3D printable case A simple snap fit case for the USB splitter. Download file","title":"USB Splitter"},{"location":"usb-splitter-guide/#usbpwr-splitter-guide","text":"","title":"USB/PWR Splitter guide"},{"location":"usb-splitter-guide/#1-introduction","text":"The adaptor allows the Raspberry Pi 4 to be used with a Pi USB-C power supply while allowing access to USB OTG data over a separate USB-C connection. USB-C (RPI4) <> USB-C (USB) and USB-C (PWR) USB-C(RPI4) USB Type-C(USB) USB Type-C(PWR) 5V 5V D- D- D+ D+ CC1 10k to 5V CC1 5.1k to GND CC1 5.1k to GND CC2 10k to 5V CC2 5.1k to GND CC2 5.1k to GND GND GND GND To use the adaptor with the Raspberry Pi 4 you need. USB-C to USB-C cable[1] between Pi4 and the adaptor board USB-C to USB-C or Type-A between adaptor board and PC Power[2] via Official Raspberry Pi USB Type-C Power Supply. [1] Whilst USB-C cables are generally designed for higher current I still advise using short power cable to the Pi where possible to reduce voltage drop. [2] PLEASE NOTE With the Pu/Pd resistors on this board it can only be used with 5V supply to power a 5V device. An adaptor of this kind does not fall within the USB specification. It's designed for use with the official Raspberry Pi USB-C power supply and raspberry pi, use with other power supplies/chargers and devices may cause issues/damage.","title":"1. Introduction"},{"location":"usb-splitter-guide/#2mechanical-diagram","text":"","title":"2.Mechanical Diagram"},{"location":"usb-splitter-guide/#3test-video","text":"USB splitter Video","title":"3.Test video"},{"location":"usb-splitter-guide/#43d-printable-case","text":"A simple snap fit case for the USB splitter. Download file","title":"4.3D printable case"},{"location":"user-manager/","text":"User Manager In the 'More Settings' section, click on 'User Management' to modify your username and password. After changing your account password, it is necessary to restart the KVM system for the changes to take effect. Please note that after the modification, the original admin user will no longer be able to log in. The global default password path can be found at /etc/kvm.d/conf/admin.ini .","title":"User Manager"},{"location":"user-manager/#user-manager","text":"In the 'More Settings' section, click on 'User Management' to modify your username and password. After changing your account password, it is necessary to restart the KVM system for the changes to take effect. Please note that after the modification, the original admin user will no longer be able to log in. The global default password path can be found at /etc/kvm.d/conf/admin.ini .","title":"User Manager"},{"location":"wake-on-lan/","text":"Wake-on-LAN Introduction Wake-on-LAN, abbreviated as WOL or WoL, is a feature that allows a computer that is in sleep or shutdown state to be powered on remotely by KVM through a local network by sending a specific message. WoL requires support from the controlled computer; otherwise, the feature won't work. Additionally, it needs to be ensured that WoL is enabled and configured correctly. With this feature, you can power on the computer without needing to use the ATX function. If users encounter anomalies when using KVM's WoL, they can try testing it using software that supports WoL. How to Use","title":"Wake-on-LAN"},{"location":"wake-on-lan/#wake-on-lan","text":"","title":"Wake-on-LAN"},{"location":"wake-on-lan/#introduction","text":"Wake-on-LAN, abbreviated as WOL or WoL, is a feature that allows a computer that is in sleep or shutdown state to be powered on remotely by KVM through a local network by sending a specific message. WoL requires support from the controlled computer; otherwise, the feature won't work. Additionally, it needs to be ensured that WoL is enabled and configured correctly. With this feature, you can power on the computer without needing to use the ATX function. If users encounter anomalies when using KVM's WoL, they can try testing it using software that supports WoL.","title":"Introduction"},{"location":"wake-on-lan/#how-to-use","text":"","title":"How to Use"},{"location":"wifi/","text":"Wifi Configure Because BLIKVM has many kinds of hardware and supports different OS, such as BLIKVM OS and PiKVM OS, different OS confifure wifi methods may not be the same. Please confirm the hardware and OS usage before using the method in this document. Please confirm that the hardware you use supports wifi function, for example, the CM400200 version does not have wifi function; If the SOC of KVM hardware is CM4, please confirm whether wifi antenna is connected; PiKVM OS is arch linux; BLIKVM OS raspberry pi series is debian system, and v4 series is armbian system; v1 v2 v3 Use raspi-config for Wi-Fi config on Raspberry Pi Debian systems Log in to SSH. Command: ssh blikvm@ip Mount the system as writable. Command: rw Start raspi-config. Command: sudo raspi-config Select System Options Select Wireless LAN Select the country where Wi-Fi is located, and China will select CN. If it has been set before, this step will skip to 7 Enter the Wi-Fi SSID (name) Enter the Wi-Fi password. If there is no password, press Enter directly At this time, you will return to the interface in Step 4, press the tab key to select Finish , then press Enter Check whether to connect to wifi. Command: ifconfig wlan0. If you see the ip obtained, you are connected Mount the system as read-only. Command: ro v4 Hardware using Armbian System with armbian-config Log in via SSH using the command: ssh blikvm@ip to access the Armbian system. Enter the following command to launch the armbian-config tool: sudo armbian-config In the armbian-config menu, navigate and select options using the arrow keys and press Enter . Scroll down to the \"Network\" option using the arrow keys and press Enter to enter the submenu. In the \"Network\" submenu, select the \"Wireless\" option and press Enter to enter the Wi-Fi configuration menu. In the Wi-Fi configuration menu, select the \"Connect to Wi-Fi\" option and press Enter to enter the Wi-Fi connection setup. armbian-config will list the available wireless interfaces and already configured networks. Select the wireless interface you want to connect to and press Enter . armbian-config will display the list of available Wi-Fi networks. Use the arrow keys to select the Wi-Fi network you want to connect to and press Enter . If the Wi-Fi network is password-protected, armbian-config will prompt you to enter the Wi-Fi password. Enter the password and press Enter . Wait for a moment while the Armbian system attempts to connect to the specified Wi-Fi network. If the connection is successful, you will see a corresponding message on the screen. Exit the armbian-config tool. Please note that the menu options and configurations mentioned above may vary slightly depending on the specific version of the Armbian system. Make sure to follow the appropriate steps based on your system version and configuration.","title":"Wifi Config"},{"location":"wifi/#wifi-configure","text":"Because BLIKVM has many kinds of hardware and supports different OS, such as BLIKVM OS and PiKVM OS, different OS confifure wifi methods may not be the same. Please confirm the hardware and OS usage before using the method in this document. Please confirm that the hardware you use supports wifi function, for example, the CM400200 version does not have wifi function; If the SOC of KVM hardware is CM4, please confirm whether wifi antenna is connected; PiKVM OS is arch linux; BLIKVM OS raspberry pi series is debian system, and v4 series is armbian system;","title":"Wifi Configure"},{"location":"wifi/#v1-v2-v3-use-raspi-config-for-wi-fi-config-on-raspberry-pi-debian-systems","text":"Log in to SSH. Command: ssh blikvm@ip Mount the system as writable. Command: rw Start raspi-config. Command: sudo raspi-config Select System Options Select Wireless LAN Select the country where Wi-Fi is located, and China will select CN. If it has been set before, this step will skip to 7 Enter the Wi-Fi SSID (name) Enter the Wi-Fi password. If there is no password, press Enter directly At this time, you will return to the interface in Step 4, press the tab key to select Finish , then press Enter Check whether to connect to wifi. Command: ifconfig wlan0. If you see the ip obtained, you are connected Mount the system as read-only. Command: ro","title":"v1 v2 v3 Use raspi-config for Wi-Fi config on Raspberry Pi Debian systems"},{"location":"wifi/#v4-hardware-using-armbian-system-with-armbian-config","text":"Log in via SSH using the command: ssh blikvm@ip to access the Armbian system. Enter the following command to launch the armbian-config tool: sudo armbian-config In the armbian-config menu, navigate and select options using the arrow keys and press Enter . Scroll down to the \"Network\" option using the arrow keys and press Enter to enter the submenu. In the \"Network\" submenu, select the \"Wireless\" option and press Enter to enter the Wi-Fi configuration menu. In the Wi-Fi configuration menu, select the \"Connect to Wi-Fi\" option and press Enter to enter the Wi-Fi connection setup. armbian-config will list the available wireless interfaces and already configured networks. Select the wireless interface you want to connect to and press Enter . armbian-config will display the list of available Wi-Fi networks. Use the arrow keys to select the Wi-Fi network you want to connect to and press Enter . If the Wi-Fi network is password-protected, armbian-config will prompt you to enter the Wi-Fi password. Enter the password and press Enter . Wait for a moment while the Armbian system attempts to connect to the specified Wi-Fi network. If the connection is successful, you will see a corresponding message on the screen. Exit the armbian-config tool. Please note that the menu options and configurations mentioned above may vary slightly depending on the specific version of the Armbian system. Make sure to follow the appropriate steps based on your system version and configuration.","title":"v4 Hardware using Armbian System with armbian-config"},{"location":"zerotier/","text":"ZeroTier VPN ZeroTier allows secure access to your BliKVM even throught NAT on both sides. It lets you build modern, secure multi-point virtualized networks of almost any type. This document provides an example for accessing your BliKVM over the internet, but you can also use Tailscale or other VPN solutions. The following is a basic example, and for any specific settings or functionalities, please refer to the ZeroTier documentation . Installing ZeroTier on BliKVM First of all, prepare account and VPN network at ZeroTier with instructions here: Create a Network , save Network ID for later usage. Next, connect with BliKVM terminal using SSH protocol, and check for read-write access. If it's a read-only system, use the rw command to make it writable. Now install ZeroTier client using the command below: curl -s https://install.zerotier.com | sudo bash Note that in some regions, such as China, downloading ZeroTier directly might be problematic due to network restrictions. Please configure your network accordingly. Adding BliKVM to your ZeroTier Network On the BliKVM terminal, use the following command to add BliKVM to your ZeroTier network (using your ZeoroTier Network ID, for example d5e04297a16fa690): sudo zerotier-cli join d5e04297a16fa690 If everything goes well, you can run ip addr show zerotier network device (name is starting with zt) on the BliKVM terminal to view the IP address assigned by ZeroTier for the virtual network. Here's an example output: 3 : zt6ovrlscs: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether d6:e4:eb:ae:db:64 brd ff:ff:ff:ff:ff:ff inet 172 .25.96.75/16 brd 172 .25.255.255 scope global zt6ovrlscs valid_lft forever preferred_lft forever inet6 fe80::d4e4:ebff:feae:db64/64 scope link valid_lft forever preferred_lft forever The IP address, such as 172.25.96.75 , can be used to access the BliKVM web interface from your host machine. Installing ZeroTier on client computer Go to Download section at ZeroTier website and install ZeroTier on your controlling host machine. Join your ZeroTier Network ID, and then you can check your network page to verify if both your machines are online. Check if they are authorzied to connect to network there (Auth? column). Once they are online, you can use the following address to access BliKVM from your controlling host machine: http://","title":"ZeroTier VPN"},{"location":"zerotier/#zerotier-vpn","text":"ZeroTier allows secure access to your BliKVM even throught NAT on both sides. It lets you build modern, secure multi-point virtualized networks of almost any type. This document provides an example for accessing your BliKVM over the internet, but you can also use Tailscale or other VPN solutions. The following is a basic example, and for any specific settings or functionalities, please refer to the ZeroTier documentation .","title":"ZeroTier VPN"},{"location":"zerotier/#installing-zerotier-on-blikvm","text":"First of all, prepare account and VPN network at ZeroTier with instructions here: Create a Network , save Network ID for later usage. Next, connect with BliKVM terminal using SSH protocol, and check for read-write access. If it's a read-only system, use the rw command to make it writable. Now install ZeroTier client using the command below: curl -s https://install.zerotier.com | sudo bash Note that in some regions, such as China, downloading ZeroTier directly might be problematic due to network restrictions. Please configure your network accordingly.","title":"Installing ZeroTier on BliKVM"},{"location":"zerotier/#adding-blikvm-to-your-zerotier-network","text":"On the BliKVM terminal, use the following command to add BliKVM to your ZeroTier network (using your ZeoroTier Network ID, for example d5e04297a16fa690): sudo zerotier-cli join d5e04297a16fa690 If everything goes well, you can run ip addr show zerotier network device (name is starting with zt) on the BliKVM terminal to view the IP address assigned by ZeroTier for the virtual network. Here's an example output: 3 : zt6ovrlscs: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether d6:e4:eb:ae:db:64 brd ff:ff:ff:ff:ff:ff inet 172 .25.96.75/16 brd 172 .25.255.255 scope global zt6ovrlscs valid_lft forever preferred_lft forever inet6 fe80::d4e4:ebff:feae:db64/64 scope link valid_lft forever preferred_lft forever The IP address, such as 172.25.96.75 , can be used to access the BliKVM web interface from your host machine.","title":"Adding BliKVM to your ZeroTier Network"},{"location":"zerotier/#installing-zerotier-on-client-computer","text":"Go to Download section at ZeroTier website and install ZeroTier on your controlling host machine. Join your ZeroTier Network ID, and then you can check your network page to verify if both your machines are online. Check if they are authorzied to connect to network there (Auth? column). Once they are online, you can use the following address to access BliKVM from your controlling host machine: http://","title":"Installing ZeroTier on client computer"}]} \ No newline at end of file +{"config":{"indexing":"full","lang":["en","ja","ru"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"BLIKVM Overview BLIKVM is an open-source KVM, it has four versions: v1 CM4, v2 PCIe, v3 HAT and the v4 Allwinner. This device helps to manage servers or workstations remotely, regardless of the health of the operating system or whether one is installed. You can fix any problem, configure the BIOS, and even reinstall the OS using the virtual CD-ROM or Flash Drive. Unlike software-based remote management, you don't need to install any software on the controlled computer, providing non-intrusive control. Here you will find comprehensive information about all aspects of the operation of BLIKVM. Join our BLIKVM Discord Community for Support, FAQ & News! FEATURE BliKVM v1 CM4 BliKVM v2 PCIe BliKVM v3 HAT BliKVM v4 /H313 SOC Raspberry CM4 Raspberry CM4 Raspberry 4B Allwinner H616/H313 Supported resolutions 1920x1080@60Hz 1920x1080@60Hz 1920x1080@50Hz 3840x2160@30Hz HDMI Capture TC358743 TC358743 TC358743 MS2131 HDMI Loop Through No No No Yes POE No Yes Yes Yes DC-IN No No No Yes USB-C Power Yes Yes Yes Yes USB Power/Data Splitter Yes Yes(external) Yes Yes Serial Console No Yes Yes Yes ATX controls Yes Yes Yes Yes BIOS controls Yes Yes Yes Yes Open source system Yes Yes Yes Yes Reinstall the controlled computer system Yes Yes Yes Yes FAN Yes(Not support PWM controls) Yes Yes Optional(default with heat sink) Display Module OLED 128x64 white OLED 128x32 white OLED 128x64 white LCD 240x240 color Real Time Clock Yes(DS1307) Yes(PCF8563) Yes(PCF8563) Yes(PCF8563) Case Metallic Black No Metallic Black White Blue Orange(1U rack compatible) Metallic Black(1U rack compatible) Buzzer No No No Yes Custom button No No No Yes Software update Yes Yes Yes Yes 32GB SD Card Yes (OS included) Yes (OS included) Yes (OS included) Yes (OS included) HDMI backpower mitigation No Yes Yes Yes Professional technical support Yes Yes Yes Yes Features Video capture (1080P 60Hz) Keyboard forwarding Mouse forwarding ATX Fan Control Fullscreen mode Paste text from clipboard VPN support Mass Storage Drive (emulate a CD-ROM or Flash Drive) Multiport KVM over IP OLED to display system info, like temp, uptime, IP Password authentication Support multiple languages Wake-on-LAN Guides 1. BLIKVM v1 CM4 version 2. BLIKVM v2 PCIE version 3. BLIKVM v3 HAT version 4. BliKVM v4 Allwinner version","title":"BLIKVM Overview"},{"location":"#blikvm-overview","text":"BLIKVM is an open-source KVM, it has four versions: v1 CM4, v2 PCIe, v3 HAT and the v4 Allwinner. This device helps to manage servers or workstations remotely, regardless of the health of the operating system or whether one is installed. You can fix any problem, configure the BIOS, and even reinstall the OS using the virtual CD-ROM or Flash Drive. Unlike software-based remote management, you don't need to install any software on the controlled computer, providing non-intrusive control. Here you will find comprehensive information about all aspects of the operation of BLIKVM. Join our BLIKVM Discord Community for Support, FAQ & News! FEATURE BliKVM v1 CM4 BliKVM v2 PCIe BliKVM v3 HAT BliKVM v4 /H313 SOC Raspberry CM4 Raspberry CM4 Raspberry 4B Allwinner H616/H313 Supported resolutions 1920x1080@60Hz 1920x1080@60Hz 1920x1080@50Hz 3840x2160@30Hz HDMI Capture TC358743 TC358743 TC358743 MS2131 HDMI Loop Through No No No Yes POE No Yes Yes Yes DC-IN No No No Yes USB-C Power Yes Yes Yes Yes USB Power/Data Splitter Yes Yes(external) Yes Yes Serial Console No Yes Yes Yes ATX controls Yes Yes Yes Yes BIOS controls Yes Yes Yes Yes Open source system Yes Yes Yes Yes Reinstall the controlled computer system Yes Yes Yes Yes FAN Yes(Not support PWM controls) Yes Yes Optional(default with heat sink) Display Module OLED 128x64 white OLED 128x32 white OLED 128x64 white LCD 240x240 color Real Time Clock Yes(DS1307) Yes(PCF8563) Yes(PCF8563) Yes(PCF8563) Case Metallic Black No Metallic Black White Blue Orange(1U rack compatible) Metallic Black(1U rack compatible) Buzzer No No No Yes Custom button No No No Yes Software update Yes Yes Yes Yes 32GB SD Card Yes (OS included) Yes (OS included) Yes (OS included) Yes (OS included) HDMI backpower mitigation No Yes Yes Yes Professional technical support Yes Yes Yes Yes","title":"BLIKVM Overview"},{"location":"#features","text":"Video capture (1080P 60Hz) Keyboard forwarding Mouse forwarding ATX Fan Control Fullscreen mode Paste text from clipboard VPN support Mass Storage Drive (emulate a CD-ROM or Flash Drive) Multiport KVM over IP OLED to display system info, like temp, uptime, IP Password authentication Support multiple languages Wake-on-LAN","title":"Features"},{"location":"#guides","text":"1. BLIKVM v1 CM4 version 2. BLIKVM v2 PCIE version 3. BLIKVM v3 HAT version 4. BliKVM v4 Allwinner version","title":"Guides"},{"location":"BLIHAT-Installation/","text":"BLIHAT Installation Guide 1. Unpack and take out the devices Open the protective bag 2. Install the main device Flip to back Open the case Flip to back, unscrew the two screws on the back Open the protective bag and take out the parts Install Micro SD card Install the FFC cable Install the HAT on the Raspberry Pi 4 Install the four Hex Spacers Install the C790 module, use the long screws you just removed Install the audio cable Stick a heat conductive sheet on the back of the Raspberry Pi 4, tear off the protective film of the sheet Install the HAT into the case Pay attention to the alignment of the holes Flip to back and install 4 screws Install five case screws Install the mounting ear as needed The main device installation is complete","title":"v3 HAT Illustrated Instructions"},{"location":"BLIHAT-Installation/#blihat-installation-guide","text":"","title":"BLIHAT Installation Guide"},{"location":"BLIHAT-Installation/#1-unpack-and-take-out-the-devices","text":"Open the protective bag","title":"1. Unpack and take out the devices"},{"location":"BLIHAT-Installation/#2-install-the-main-device","text":"Flip to back Open the case Flip to back, unscrew the two screws on the back Open the protective bag and take out the parts Install Micro SD card Install the FFC cable Install the HAT on the Raspberry Pi 4 Install the four Hex Spacers Install the C790 module, use the long screws you just removed Install the audio cable Stick a heat conductive sheet on the back of the Raspberry Pi 4, tear off the protective film of the sheet Install the HAT into the case Pay attention to the alignment of the holes Flip to back and install 4 screws Install five case screws Install the mounting ear as needed The main device installation is complete","title":"2. Install the main device"},{"location":"BLIKVM-CM4-guide/","text":"BLIKVM-CM4 version guide Geerling: Engineering Test video BliKVM v1 is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! BliKVM v1 Datasheet Features Video capture (HDMI, support 1080P@60Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Serial console port OLED display Real Time Clock (RTC) FAN Installation requirements If you have an assembly kit, you will need the following things Raspberry CM4 with 1Gb RAM or more. USB-C to USB-A cable. HDMI cable. Straight Ethernet cable (for the ATX board connection). Power supply unit (5.1V 3A USB-C, recommended by the Raspberry Pi). Power supply You must use a USB-C to USB-A cable. Using a USB-C to USB-C cable will not work. This is an incompatibility in the hardware design and will be fixed in a later version. Basic setup 1. The SD card preloaded with the factory default image does not require burning. If you need to reflash the system or for DIY purposes, you can follow Flash the memory card or eMMC 2. If you have a non-plug version, refer to the video and instructions below for device installation: Use the provided screwdriver to open the metal casing and remove the PCB motherboard. Install the CM4 onto the PCB motherboard, ensuring that the two rows of card slots are aligned. Apply the thermal conductive silicone pad onto the CM4 main chip to facilitate heat dissipation using the metal casing. The fan is not connected by default as the metal casing provides sufficient heat dissipation. Depending on your CM4 version, selectively install the Wi-Fi antenna. Reassemble the PCB motherboard and the metal casing to complete the installation. Please note that translations might vary depending on context and specific terminology used in technical instructions. Video Guide: Metal case step by step Ortimo: BLIKVM with Raspberry PI CM4 16GB EMMC setup 3. Connect BLIKVM to the computer according to the diagram below: HDMI IN and otg port must be connected to the computer. ATX too, but it\u2019s optional, read below. There should be no USB hub between BLIKVM and the computer, as some UEFI/BIOS cannot detect them at the boot stage. BLIKVM supports 1080p60Hz or lower about HDMI source. Connect Ethernet to the network and PWR IN to the BLIKVM power supply. 4. ATX connection To manage the power of your computer, you will connect CN-ATX port to the computer.The user can use the ATX cable provided with the product to connect the product and the motherboard ATX switch of the controlled computer. The length of the ATX cable is 60CM, you can also use the double female Dupont cables. To accommodate ATX control boards with Ethernet ports, v1 has a dedicated ATX expansion kit available. This kit enables customers to connect the ATX board installed on the chassis panel directly using an Ethernet cable. 5. After all the connecting cables are properly set up, power on the BliKVM until the display screen shows an image, indicating that the device has successfully started. 6. Read the \"First Steps\" guide carefully. It provides instructions on how to find the device on the network, how to log in, change passwords, and more. Follow the steps described there and then return to this page. As BliKVM v1 also supports PiKVM OS, if your v1 comes with PiKVM as the factory OS, please refer to the documentation for web usage instructions . 7. Try managing your computer using the BliKVM web interface. Make sure you can see the image and that the keyboard and mouse are working properly. If you encounter any issues, check out our FAQ (it's very helpful). If you find no solution there, seek support in our Discord chat room . 8. You can explore other pages in the wiki to discover more features of BliKVM. Enjoy your experience! Wi-Fi Antenna Connection If your CM4 has Wi-Fi functionality, open the metal casing of v1 and attach the Wi-Fi antenna from the package to the IPX interface on the CM4, as shown by the red box in the diagram below; the installation location on the casing for the antenna is defined as position 11 in the interface layout diagram. Support 1080p60hz HDMI input First in V2.2 version, there is CSI channel switch. This switch is switch 2 csi channels or 4 csi channels. In other versions, the switch is obsolete. Newer keeps the factory state, ignore this switch. Only flip the switch when the device is powered off, otherwise it may cause permanent damage! The four small switches should be up or down at the same time. Product List BLIKVM v1 excluding CM4 Case 1 PCB 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 OLED 1 BLIKVM v1 including CM4102000 Case 1 PCB 1 CM4102000 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 OLED 1 WiFi antenna 1 BLIKVM v1 including CM4002000 Case 1 PCB 1 CM4002000 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 WiFi antenna 1 Buy link Buy v1","title":"BliKVM v1 CM4 Guide"},{"location":"BLIKVM-CM4-guide/#blikvm-cm4-version-guide","text":"Geerling: Engineering Test video BliKVM v1 is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! BliKVM v1 Datasheet","title":"BLIKVM-CM4 version guide"},{"location":"BLIKVM-CM4-guide/#features","text":"Video capture (HDMI, support 1080P@60Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Serial console port OLED display Real Time Clock (RTC) FAN","title":"Features"},{"location":"BLIKVM-CM4-guide/#installation-requirements","text":"If you have an assembly kit, you will need the following things Raspberry CM4 with 1Gb RAM or more. USB-C to USB-A cable. HDMI cable. Straight Ethernet cable (for the ATX board connection). Power supply unit (5.1V 3A USB-C, recommended by the Raspberry Pi). Power supply You must use a USB-C to USB-A cable. Using a USB-C to USB-C cable will not work. This is an incompatibility in the hardware design and will be fixed in a later version.","title":"Installation requirements"},{"location":"BLIKVM-CM4-guide/#basic-setup","text":"1. The SD card preloaded with the factory default image does not require burning. If you need to reflash the system or for DIY purposes, you can follow Flash the memory card or eMMC 2. If you have a non-plug version, refer to the video and instructions below for device installation: Use the provided screwdriver to open the metal casing and remove the PCB motherboard. Install the CM4 onto the PCB motherboard, ensuring that the two rows of card slots are aligned. Apply the thermal conductive silicone pad onto the CM4 main chip to facilitate heat dissipation using the metal casing. The fan is not connected by default as the metal casing provides sufficient heat dissipation. Depending on your CM4 version, selectively install the Wi-Fi antenna. Reassemble the PCB motherboard and the metal casing to complete the installation. Please note that translations might vary depending on context and specific terminology used in technical instructions. Video Guide: Metal case step by step Ortimo: BLIKVM with Raspberry PI CM4 16GB EMMC setup 3. Connect BLIKVM to the computer according to the diagram below: HDMI IN and otg port must be connected to the computer. ATX too, but it\u2019s optional, read below. There should be no USB hub between BLIKVM and the computer, as some UEFI/BIOS cannot detect them at the boot stage. BLIKVM supports 1080p60Hz or lower about HDMI source. Connect Ethernet to the network and PWR IN to the BLIKVM power supply. 4. ATX connection To manage the power of your computer, you will connect CN-ATX port to the computer.The user can use the ATX cable provided with the product to connect the product and the motherboard ATX switch of the controlled computer. The length of the ATX cable is 60CM, you can also use the double female Dupont cables. To accommodate ATX control boards with Ethernet ports, v1 has a dedicated ATX expansion kit available. This kit enables customers to connect the ATX board installed on the chassis panel directly using an Ethernet cable. 5. After all the connecting cables are properly set up, power on the BliKVM until the display screen shows an image, indicating that the device has successfully started. 6. Read the \"First Steps\" guide carefully. It provides instructions on how to find the device on the network, how to log in, change passwords, and more. Follow the steps described there and then return to this page. As BliKVM v1 also supports PiKVM OS, if your v1 comes with PiKVM as the factory OS, please refer to the documentation for web usage instructions . 7. Try managing your computer using the BliKVM web interface. Make sure you can see the image and that the keyboard and mouse are working properly. If you encounter any issues, check out our FAQ (it's very helpful). If you find no solution there, seek support in our Discord chat room . 8. You can explore other pages in the wiki to discover more features of BliKVM. Enjoy your experience!","title":"Basic setup"},{"location":"BLIKVM-CM4-guide/#wi-fi-antenna-connection","text":"If your CM4 has Wi-Fi functionality, open the metal casing of v1 and attach the Wi-Fi antenna from the package to the IPX interface on the CM4, as shown by the red box in the diagram below; the installation location on the casing for the antenna is defined as position 11 in the interface layout diagram.","title":"Wi-Fi Antenna Connection"},{"location":"BLIKVM-CM4-guide/#support-1080p60hz-hdmi-input","text":"First in V2.2 version, there is CSI channel switch. This switch is switch 2 csi channels or 4 csi channels. In other versions, the switch is obsolete. Newer keeps the factory state, ignore this switch. Only flip the switch when the device is powered off, otherwise it may cause permanent damage! The four small switches should be up or down at the same time.","title":"Support 1080p60hz HDMI input"},{"location":"BLIKVM-CM4-guide/#product-list","text":"BLIKVM v1 excluding CM4 Case 1 PCB 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 OLED 1 BLIKVM v1 including CM4102000 Case 1 PCB 1 CM4102000 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 OLED 1 WiFi antenna 1 BLIKVM v1 including CM4002000 Case 1 PCB 1 CM4002000 1 Fan 1 SD card 32G 1 ATX Dupont Cables 1 WiFi antenna 1","title":"Product List"},{"location":"BLIKVM-CM4-guide/#buy-link","text":"Buy v1","title":"Buy link"},{"location":"BLIKVM-HAT-guide/","text":"BLIKVM HAT version guide Introduction BLIKVM hat Video The Raspberry Pi IPKVM HAT is an add-on board for Raspberry Pi 4, made especially for KVM Over IP. The BLIKVM-RPI4 is a Raspberry Pi 4 PoE KVM HAT. This product\u2019s key features include video capture, ATX adapter, PoE, OLED and RTC. The product has a customized metal case to dissipate heat and provide protection for the HAT. The product can be easily installed on a standard 1U rack. The product is currently perfectly compatible with BliKVM image and PiKVM image. Features Video capture (HDMI, support 1080P@50Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Adapter : Control the server power using ATX functions Fullscreen mode Access via Web UI Multi Language switching support PoE support Serial console port OLED display Real Time Clock (RTC) PWM FAN Interface HAT part: HDMI IN ATX Port OLED PoE jumper Raspberry 4B part: SD CARD ACT LED PWR LED USB-PC HDMI 0 HDMI 1 A/V ETH(1000M) & PoE 2x USB 2.0 Ports & 2x USB 3.0 Ports Installation requirements If you have an assembly kit, you will need the following things Raspberry Pi 4B with 1Gb RAM or more. HDMI cable. Straight Ethernet cable (for the ATX board connection). Power supply unit & cable(5.1V 3A USB-C, recommended by the Raspberry Pi). Basic setup 1. Flash the memory card or eMMC 2. Build BLIKVM according to the video instructions or review the illustrated instructions : Video Guide: Metal case step by step 3. Install the ATX adapter board The board has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. Choose one as needed Use Dupont cables to connect ATX adapter board to motherboard and chassis panel. There are clear pin definitions on the board for easy wiring. Mount the ATX adapter board to the case shell Use a RJ45 network cable to connect the board to the CN-ATX interface of the HAT 4. Connect the HDMI cable Connect the HDMI output port of the computer directly to the HDMI IN port of the HAT with an HDMI cable. The HDMI pass-through EDID emulator is not necessary! If your computer does not output the correct HDMI format, plug the HDMI pass-through EDID emulator into the HDMI output port of the computer. This allows you to configure a fixed HDMI output format on your computer. 5. Install the USB cable Connect the RPI4 port to the Raspberry Pi 4 Connect the USB port to the controlled computer When using PoE power supply, there is no need to connect the PWR port. When not using PoE power supply, connect the PWR port to a standard 5V/3A USB power supply. 6. Test Powered by PoE, the HAT is connected to the router via the network cable The screen displays the current status of the device, including the machine's IP address Access the IP address of the HAT in the browser. Enjoy! Specification HDMI IN The bridge chip is Toshiba TC358743, which supports both video and audio(I2S), and the highest input resolution is 1080p@50fps. Fixed HDMI back power issue. CN-ATX The CN-ATX interface is connected to the ATX adapter board (an accessory for the HAT) through a network cable, which can turn on, off, and restart the controlled computer. Display A white OLED display with a resolution of 128x32, and the chip is SSD1306. This display can show the temperature, IP address and other information of the Raspberry Pi. PoE Standard: IEEE 802.3af PoE Input voltage: 37-57 V DC Output power: 5 V DC/2.4 A Plug in the PoE jumper cap to enable PoE power supply FAN The IPKVM HAT is fitted with a small fan that is controlled by your Raspberry Pi via GPIO12. Real Time Clock (RTC) The clock chip is PCF8563 that is controlled by your Raspberry Pi via I2C. The coin cell battery is installed under the HDMI IN module. Accessories ATX adapter board This board is connected to the switch port on the motherboard of the controlled computer with DuPont cables. The board has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. USB/PWR splitter Connect the RPI4 port to your Raspberry Pi 4. Connect the USB port to the controlled computer. When using PoE power supply, there is no need to connect the PWR port. When not using PoE power supply, connect the PWR port to a standard 5V/3A USB power supply. HDMI pass-through EDID emulator If the controlled computer does not output HDMI images correctly, please use this accessory. Connect the Source port to the controlled computer, connect the Sink port to the HAT. Then you can set the correct HDMI output on the controlled computer. Metal case The metal case protects the HAT and improve heat dissipation. There are clear port markings on the case. The case can be easily installed on a standard 1U rack. List Product List Raspberry Pi IPKVM HAT 1 ATX adapter board 1 USB/PWR splitter 1 HDMI pass-through EDID emulator 1 Metal case 1 32G TF card 1 USB Type-C to USB Type-C Cable 30cm 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Phillips screwdriver 1 Cross Wrench Sleeve 1 List of items prepared by the user Raspberry Pi 4 1 RJ45 network cable 2 USB Type-A to USB Type-C Cable 2 HDMI cable 1 PoE-sourcing equipment or 5V/3A USB adapter 1 CR1220 coin cell battery 1 Buy link Buy v3","title":"BliKVM v3 HAT Guide"},{"location":"BLIKVM-HAT-guide/#blikvm-hat-version-guide","text":"","title":"BLIKVM HAT version guide"},{"location":"BLIKVM-HAT-guide/#introduction","text":"BLIKVM hat Video The Raspberry Pi IPKVM HAT is an add-on board for Raspberry Pi 4, made especially for KVM Over IP. The BLIKVM-RPI4 is a Raspberry Pi 4 PoE KVM HAT. This product\u2019s key features include video capture, ATX adapter, PoE, OLED and RTC. The product has a customized metal case to dissipate heat and provide protection for the HAT. The product can be easily installed on a standard 1U rack. The product is currently perfectly compatible with BliKVM image and PiKVM image.","title":"Introduction"},{"location":"BLIKVM-HAT-guide/#features","text":"Video capture (HDMI, support 1080P@50Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Adapter : Control the server power using ATX functions Fullscreen mode Access via Web UI Multi Language switching support PoE support Serial console port OLED display Real Time Clock (RTC) PWM FAN","title":"Features"},{"location":"BLIKVM-HAT-guide/#interface","text":"HAT part: HDMI IN ATX Port OLED PoE jumper Raspberry 4B part: SD CARD ACT LED PWR LED USB-PC HDMI 0 HDMI 1 A/V ETH(1000M) & PoE 2x USB 2.0 Ports & 2x USB 3.0 Ports","title":"Interface"},{"location":"BLIKVM-HAT-guide/#installation-requirements","text":"If you have an assembly kit, you will need the following things Raspberry Pi 4B with 1Gb RAM or more. HDMI cable. Straight Ethernet cable (for the ATX board connection). Power supply unit & cable(5.1V 3A USB-C, recommended by the Raspberry Pi).","title":"Installation requirements"},{"location":"BLIKVM-HAT-guide/#basic-setup","text":"1. Flash the memory card or eMMC 2. Build BLIKVM according to the video instructions or review the illustrated instructions : Video Guide: Metal case step by step 3. Install the ATX adapter board The board has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. Choose one as needed Use Dupont cables to connect ATX adapter board to motherboard and chassis panel. There are clear pin definitions on the board for easy wiring. Mount the ATX adapter board to the case shell Use a RJ45 network cable to connect the board to the CN-ATX interface of the HAT 4. Connect the HDMI cable Connect the HDMI output port of the computer directly to the HDMI IN port of the HAT with an HDMI cable. The HDMI pass-through EDID emulator is not necessary! If your computer does not output the correct HDMI format, plug the HDMI pass-through EDID emulator into the HDMI output port of the computer. This allows you to configure a fixed HDMI output format on your computer. 5. Install the USB cable Connect the RPI4 port to the Raspberry Pi 4 Connect the USB port to the controlled computer When using PoE power supply, there is no need to connect the PWR port. When not using PoE power supply, connect the PWR port to a standard 5V/3A USB power supply. 6. Test Powered by PoE, the HAT is connected to the router via the network cable The screen displays the current status of the device, including the machine's IP address Access the IP address of the HAT in the browser. Enjoy!","title":"Basic setup"},{"location":"BLIKVM-HAT-guide/#specification","text":"HDMI IN The bridge chip is Toshiba TC358743, which supports both video and audio(I2S), and the highest input resolution is 1080p@50fps. Fixed HDMI back power issue. CN-ATX The CN-ATX interface is connected to the ATX adapter board (an accessory for the HAT) through a network cable, which can turn on, off, and restart the controlled computer. Display A white OLED display with a resolution of 128x32, and the chip is SSD1306. This display can show the temperature, IP address and other information of the Raspberry Pi. PoE Standard: IEEE 802.3af PoE Input voltage: 37-57 V DC Output power: 5 V DC/2.4 A Plug in the PoE jumper cap to enable PoE power supply FAN The IPKVM HAT is fitted with a small fan that is controlled by your Raspberry Pi via GPIO12. Real Time Clock (RTC) The clock chip is PCF8563 that is controlled by your Raspberry Pi via I2C. The coin cell battery is installed under the HDMI IN module.","title":"Specification"},{"location":"BLIKVM-HAT-guide/#accessories","text":"","title":"Accessories"},{"location":"BLIKVM-HAT-guide/#atx-adapter-board","text":"This board is connected to the switch port on the motherboard of the controlled computer with DuPont cables. The board has a standard PCIe I/O bracket and a low profile PCIe I/O bracket.","title":"ATX adapter board"},{"location":"BLIKVM-HAT-guide/#usbpwr-splitter","text":"Connect the RPI4 port to your Raspberry Pi 4. Connect the USB port to the controlled computer. When using PoE power supply, there is no need to connect the PWR port. When not using PoE power supply, connect the PWR port to a standard 5V/3A USB power supply.","title":"USB/PWR splitter"},{"location":"BLIKVM-HAT-guide/#hdmi-pass-through-edid-emulator","text":"If the controlled computer does not output HDMI images correctly, please use this accessory. Connect the Source port to the controlled computer, connect the Sink port to the HAT. Then you can set the correct HDMI output on the controlled computer.","title":"HDMI pass-through EDID emulator"},{"location":"BLIKVM-HAT-guide/#metal-case","text":"The metal case protects the HAT and improve heat dissipation. There are clear port markings on the case. The case can be easily installed on a standard 1U rack.","title":"Metal case"},{"location":"BLIKVM-HAT-guide/#list","text":"","title":"List"},{"location":"BLIKVM-HAT-guide/#product-list","text":"Raspberry Pi IPKVM HAT 1 ATX adapter board 1 USB/PWR splitter 1 HDMI pass-through EDID emulator 1 Metal case 1 32G TF card 1 USB Type-C to USB Type-C Cable 30cm 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Phillips screwdriver 1 Cross Wrench Sleeve 1","title":"Product List"},{"location":"BLIKVM-HAT-guide/#list-of-items-prepared-by-the-user","text":"Raspberry Pi 4 1 RJ45 network cable 2 USB Type-A to USB Type-C Cable 2 HDMI cable 1 PoE-sourcing equipment or 5V/3A USB adapter 1 CR1220 coin cell battery 1","title":"List of items prepared by the user"},{"location":"BLIKVM-HAT-guide/#buy-link","text":"Buy v3","title":"Buy link"},{"location":"BLIKVM-PCIE-guide/","text":"BLIKVM PCIe Introduction BLIKVM PCIe is a PCIe add-in card based on Raspberry Pi CM4 for KVM Over IP. This product\u2019s key features include video capture, ATX controller, PoE, OLED , UART and RTC. The card has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. The product is currently perfectly compatible with blikvm image and pikvm image. Installation requirements You will need the following things Raspberry Pi CM4(if you order PCIe card only). PoE-sourcing equipment or 5V/3A USB adapter. CR1220 coin cell battery. Features Video capture (HDMI, support 1080P@60Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Support PoE Serial console port OLED display Real Time Clock (RTC) PWM Fan Basic setup 1. If you have an assembly kit, Flash the memory card or eMMC 2.Build BLIKVM according to the illustrated instructions : Geerling: Engineering Test video Craft Computing: Never Pay For IPMI Again - BliKVM Review Specification hardware feature list 1 HDMI in 2 USB-PC port 3 Power Input 5V 3A 4 RJ45 100M Ethernet port & PoE 5 ATX control port 6 OLED Display 7 PWM FAN 8 BOOT 9 REAL TIME CLOCK(RTC) 10 UART port 11 USB-PC port HDMI IN The bridge chip is Toshiba TC358743, which supports both video and audio(I2S), and the highest input resolution is 1080p@60fps. Fixed HDMI back power issue. USB-PC The BLIKVM PCIe card provides two USB interfaces, one is PC-IN (type c interface) and the other is USB-PC2 (pin interface). The purpose of these two interfaces is to connect to the USB of the controlled computer, used to control the mouse and keyboard. At the same time, only one interface can be used. The purpose of designing two interfaces is to directly use USB PC2 when the user's PC host has a row pin USB interface, which will make the wiring more concise. POWER-IN When using PoE power supply, there is no need to connect the PWR-IN port. When not using PoE power supply, connect the PWR-IN port to a standard 5V/3A USB power supply. ETHERNET-PoE Gigabit Ethernet port Standard: IEEE 802.3af PoE Input voltage: 37-57 V DC Output power: 5 V DC/2.4 A ATX-Connecter Connect to power control interface on the motherboard of the controlled computer with DuPont cables. It can turn on, off, and restart the controlled computer. The pin is defined on the printing of the PCIe board, BTN means button. According to the instructions of the computer motherboard, first find the position of the ATX function related pins on the motherboard, and then unplug the ATX ray that has been connected to the motherboard. After unplugging, the power button of the computer will lose its function. There are two rows of 8PIN pins on the PCIe board. It is unnecessary to distinguish between the two rows of pins when they are used with the same functions. One row of pins is used for KVM to control ATX-related functions, and the other row of pins is connected to the ATX DuPont head unplugged from the main board to maintain the original chassis power button function. Connect each wire according to the specific pin definitions on the motherboard and PCIe. See the following figure for the connection relationship\uff1a OLED Display A white OLED display with a resolution of 128x64, and the chip is SSD1306. This display can show the temperature, IP address and other information of the Raspberry Pi. FAN The Card HAT is fitted with a small fan that is controlled by your Raspberry Pi CM4 via GPIO12. BOOT Fit jumper to disable eMMC Boot Real Time Clock (RTC) The clock chip is PCF8563 that is controlled by your Raspberry Pi CM4 via I2C. The CR1220 battery is installed under the HDMI IN module. UART Connect the serial port to debug your Raspberry Pi CM4. The uart of Raspberry Pi CM4. G for GND, T(GPIO 14) for TXD, R(GPIO 15) for RXD. Connect serial cable wires to G T R connectors on the PCIe board. NOTE: black wire = Ground, whiTe = Tx, and gReen = Rx; For specific methods, please refer to this document . Accessories HDMI pass-through EDID emulator If the controlled computer does not output HDMI images correctly, please use this accessory. Connect the Source port to the controlled computer, connect the Sink port to the HAT. Then you can set the correct HDMI output on the controlled computer. VGA-HDMI module When your device does not have an HDMI output interface, you can use a VGA to HDMI module. USB to TTL module Connect your computer usb interface with the serial port of BLIKVM to debug your Raspberry Pi CM4. Fan Use a cooling fan to cool the Raspberry Pi CM4, but installing a fan will make the product thicker than a standard PCIe add-in card. Dimensions Test Video BLIKVM hardware PCIe version is tested wonderful based on pikvm software. Notes To prevent the CM4 module from contacting the SD card holder, do not remove the insulating tape List Product List BLIKVM PCIe card version 1 BLIKVM PCIe add-in card 1 Cooling fan 1 OLED display 1 USB to TTL module 1 HDMI pass-through EDID emulator 1 VGA-HDMI module 1 32G Micro SD card 1 HDMI cable 0.5m 1 HDMI Coupler 1 Network cable 1m 1 USB-A to USB-C cable 1m 2 Dupont USB cable 0.4m 1 WiFi antenna 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Metal heatsink 1 Phillips screwdriver 1 Cross Wrench Sleeve 1 BLIKVM PCIe plug-n-play version 1 BLIKVM PCIe add-in card 1 CM4 102000 1 Cooling fan 1 OLED display 1 USB to TTL module 1 HDMI pass-through EDID emulator 1 VGA-HDMI module 1 32G Micro SD card 1 HDMI cable 0.5m 1 HDMI Coupler 1 Network cable 1m 1 USB-A to USB-C cable 1m 2 Dupont USB cable 0.4m 1 WiFi antenna 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Metal heatsink 1 Phillips screwdriver 1 Cross Wrench Sleeve 1 List of items prepared by the user Raspberry Pi CM4(if you order PCIe card only) 1 PoE-sourcing equipment or 5V/3A USB adapter 1 CR1220 coin cell battery 1 Buy link Buy v2 3D printable case A simple snap fit case for the PCIe. Download file","title":"BliKVM v2 PCIe Guide"},{"location":"BLIKVM-PCIE-guide/#blikvm-pcie","text":"","title":"BLIKVM PCIe"},{"location":"BLIKVM-PCIE-guide/#introduction","text":"BLIKVM PCIe is a PCIe add-in card based on Raspberry Pi CM4 for KVM Over IP. This product\u2019s key features include video capture, ATX controller, PoE, OLED , UART and RTC. The card has a standard PCIe I/O bracket and a low profile PCIe I/O bracket. The product is currently perfectly compatible with blikvm image and pikvm image.","title":"Introduction"},{"location":"BLIKVM-PCIE-guide/#installation-requirements","text":"You will need the following things Raspberry Pi CM4(if you order PCIe card only). PoE-sourcing equipment or 5V/3A USB adapter. CR1220 coin cell battery.","title":"Installation requirements"},{"location":"BLIKVM-PCIE-guide/#features","text":"Video capture (HDMI, support 1080P@60Hz input) Keyboard forwarding Mouse forwarding Mass Storage Drive ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Support PoE Serial console port OLED display Real Time Clock (RTC) PWM Fan","title":"Features"},{"location":"BLIKVM-PCIE-guide/#basic-setup","text":"1. If you have an assembly kit, Flash the memory card or eMMC 2.Build BLIKVM according to the illustrated instructions : Geerling: Engineering Test video Craft Computing: Never Pay For IPMI Again - BliKVM Review","title":"Basic setup"},{"location":"BLIKVM-PCIE-guide/#specification","text":"hardware feature list 1 HDMI in 2 USB-PC port 3 Power Input 5V 3A 4 RJ45 100M Ethernet port & PoE 5 ATX control port 6 OLED Display 7 PWM FAN 8 BOOT 9 REAL TIME CLOCK(RTC) 10 UART port 11 USB-PC port HDMI IN The bridge chip is Toshiba TC358743, which supports both video and audio(I2S), and the highest input resolution is 1080p@60fps. Fixed HDMI back power issue. USB-PC The BLIKVM PCIe card provides two USB interfaces, one is PC-IN (type c interface) and the other is USB-PC2 (pin interface). The purpose of these two interfaces is to connect to the USB of the controlled computer, used to control the mouse and keyboard. At the same time, only one interface can be used. The purpose of designing two interfaces is to directly use USB PC2 when the user's PC host has a row pin USB interface, which will make the wiring more concise. POWER-IN When using PoE power supply, there is no need to connect the PWR-IN port. When not using PoE power supply, connect the PWR-IN port to a standard 5V/3A USB power supply. ETHERNET-PoE Gigabit Ethernet port Standard: IEEE 802.3af PoE Input voltage: 37-57 V DC Output power: 5 V DC/2.4 A ATX-Connecter Connect to power control interface on the motherboard of the controlled computer with DuPont cables. It can turn on, off, and restart the controlled computer. The pin is defined on the printing of the PCIe board, BTN means button. According to the instructions of the computer motherboard, first find the position of the ATX function related pins on the motherboard, and then unplug the ATX ray that has been connected to the motherboard. After unplugging, the power button of the computer will lose its function. There are two rows of 8PIN pins on the PCIe board. It is unnecessary to distinguish between the two rows of pins when they are used with the same functions. One row of pins is used for KVM to control ATX-related functions, and the other row of pins is connected to the ATX DuPont head unplugged from the main board to maintain the original chassis power button function. Connect each wire according to the specific pin definitions on the motherboard and PCIe. See the following figure for the connection relationship\uff1a OLED Display A white OLED display with a resolution of 128x64, and the chip is SSD1306. This display can show the temperature, IP address and other information of the Raspberry Pi. FAN The Card HAT is fitted with a small fan that is controlled by your Raspberry Pi CM4 via GPIO12. BOOT Fit jumper to disable eMMC Boot Real Time Clock (RTC) The clock chip is PCF8563 that is controlled by your Raspberry Pi CM4 via I2C. The CR1220 battery is installed under the HDMI IN module. UART Connect the serial port to debug your Raspberry Pi CM4. The uart of Raspberry Pi CM4. G for GND, T(GPIO 14) for TXD, R(GPIO 15) for RXD. Connect serial cable wires to G T R connectors on the PCIe board. NOTE: black wire = Ground, whiTe = Tx, and gReen = Rx; For specific methods, please refer to this document .","title":"Specification"},{"location":"BLIKVM-PCIE-guide/#accessories","text":"HDMI pass-through EDID emulator If the controlled computer does not output HDMI images correctly, please use this accessory. Connect the Source port to the controlled computer, connect the Sink port to the HAT. Then you can set the correct HDMI output on the controlled computer. VGA-HDMI module When your device does not have an HDMI output interface, you can use a VGA to HDMI module. USB to TTL module Connect your computer usb interface with the serial port of BLIKVM to debug your Raspberry Pi CM4. Fan Use a cooling fan to cool the Raspberry Pi CM4, but installing a fan will make the product thicker than a standard PCIe add-in card.","title":"Accessories"},{"location":"BLIKVM-PCIE-guide/#dimensions","text":"","title":"Dimensions"},{"location":"BLIKVM-PCIE-guide/#test-video","text":"BLIKVM hardware PCIe version is tested wonderful based on pikvm software.","title":"Test Video"},{"location":"BLIKVM-PCIE-guide/#notes","text":"To prevent the CM4 module from contacting the SD card holder, do not remove the insulating tape","title":"Notes"},{"location":"BLIKVM-PCIE-guide/#list","text":"","title":"List"},{"location":"BLIKVM-PCIE-guide/#product-list","text":"BLIKVM PCIe card version 1 BLIKVM PCIe add-in card 1 Cooling fan 1 OLED display 1 USB to TTL module 1 HDMI pass-through EDID emulator 1 VGA-HDMI module 1 32G Micro SD card 1 HDMI cable 0.5m 1 HDMI Coupler 1 Network cable 1m 1 USB-A to USB-C cable 1m 2 Dupont USB cable 0.4m 1 WiFi antenna 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Metal heatsink 1 Phillips screwdriver 1 Cross Wrench Sleeve 1 BLIKVM PCIe plug-n-play version 1 BLIKVM PCIe add-in card 1 CM4 102000 1 Cooling fan 1 OLED display 1 USB to TTL module 1 HDMI pass-through EDID emulator 1 VGA-HDMI module 1 32G Micro SD card 1 HDMI cable 0.5m 1 HDMI Coupler 1 Network cable 1m 1 USB-A to USB-C cable 1m 2 Dupont USB cable 0.4m 1 WiFi antenna 1 Dupont Cables 8pin Male to Male 40cm 1 Dupont Cables 8pin Male to Female 40cm 1 Metal heatsink 1 Phillips screwdriver 1 Cross Wrench Sleeve 1","title":"Product List"},{"location":"BLIKVM-PCIE-guide/#list-of-items-prepared-by-the-user","text":"Raspberry Pi CM4(if you order PCIe card only) 1 PoE-sourcing equipment or 5V/3A USB adapter 1 CR1220 coin cell battery 1","title":"List of items prepared by the user"},{"location":"BLIKVM-PCIE-guide/#buy-link","text":"Buy v2","title":"Buy link"},{"location":"BLIKVM-PCIE-guide/#3d-printable-case","text":"A simple snap fit case for the PCIe. Download file","title":"3D printable case"},{"location":"BLIKVM-PCIe-installation/","text":"BLIKVM PCIe CM4 Installation Guide 1. Unpack and take out the devices Product List 2. Install the main device Install CM4 and 4 Hex spacers (This article takes CM4 lite as an example, using the image in the Micro SD card, CM4 eMMC user need to burn the image by yourself.)Stick a heat conductive sheet on the top of CM4 , tear off the protective film of the sheet. The main device installation is complete. 3. Connect USB and ATX The motherboard used in this article is Asus H520M-E, the interface definition of different motherboards may be different, please refer to your motherboard manual. 4. Connect OLED The OLED you received does not have a bracket installed. Please refer to the picture for installation. In addition, OLED support is made of acrylic material, which needs to be used after removing the protective film on the surface. The above is the installation steps, and the effect of not tearing the film is as follows. In actual use, please remove the protective film. 5. Connect the HDMI cable Connect the HDMI output port of the computer directly to the HDMI IN port of the product with an HDMI cable. The HDMI pass-through EDID emulator is not necessary! If your computer does not output the correct HDMI format, plug the HDMI pass-through EDID emulator into the HDMI output port of the computer. This allows you to configure a fixed HDMI output format on your computer. 6. Connect the network cable Gigabit Ethernet port standard: IEEE 802.3af PoE input voltage:37v-57v. When using PoE power supply, there is no need to connect the PWR-IN port. 7. Connect PWR-IN When not using PoE power supply, connect the PWR-IN port to a standard 5V/3A USB power supply. 8. Test OLED screen showing device IP and other information. Access the IP address in browser. After passing the test, install the product into the computer case. 9. Install the product into the computer case Disconnect power and wiring, install the product on the motherboard, and reconnect the cables after installation is complete. The color of ATX cable received in different batches may be different. Please directly refer to the pin definition for connection Enjoy! Appendix 1. Install a low profile PCIe I/O bracket Note Appendix 2. Install the cooling fan Usually the metal heatsink is sufficient, the cooling fan is not necessary. The cooling fan is controlled by CM4 via GPIO12. Appendix 3. Install wifi antenna Note","title":"v2 PCIe Illustrated Instructions"},{"location":"BLIKVM-PCIe-installation/#blikvm-pcie-cm4-installation-guide","text":"","title":"BLIKVM PCIe CM4 Installation Guide"},{"location":"BLIKVM-PCIe-installation/#1-unpack-and-take-out-the-devices","text":"Product List","title":"1. Unpack and take out the devices"},{"location":"BLIKVM-PCIe-installation/#2-install-the-main-device","text":"Install CM4 and 4 Hex spacers (This article takes CM4 lite as an example, using the image in the Micro SD card, CM4 eMMC user need to burn the image by yourself.)Stick a heat conductive sheet on the top of CM4 , tear off the protective film of the sheet. The main device installation is complete.","title":"2. Install the main device"},{"location":"BLIKVM-PCIe-installation/#3-connect-usb-and-atx","text":"The motherboard used in this article is Asus H520M-E, the interface definition of different motherboards may be different, please refer to your motherboard manual.","title":"3. Connect USB and ATX"},{"location":"BLIKVM-PCIe-installation/#4-connect-oled","text":"The OLED you received does not have a bracket installed. Please refer to the picture for installation. In addition, OLED support is made of acrylic material, which needs to be used after removing the protective film on the surface. The above is the installation steps, and the effect of not tearing the film is as follows. In actual use, please remove the protective film.","title":"4. Connect OLED"},{"location":"BLIKVM-PCIe-installation/#5-connect-the-hdmi-cable","text":"Connect the HDMI output port of the computer directly to the HDMI IN port of the product with an HDMI cable. The HDMI pass-through EDID emulator is not necessary! If your computer does not output the correct HDMI format, plug the HDMI pass-through EDID emulator into the HDMI output port of the computer. This allows you to configure a fixed HDMI output format on your computer.","title":"5. Connect the HDMI cable"},{"location":"BLIKVM-PCIe-installation/#6-connect-the-network-cable","text":"Gigabit Ethernet port standard: IEEE 802.3af PoE input voltage:37v-57v. When using PoE power supply, there is no need to connect the PWR-IN port.","title":"6. Connect the network cable"},{"location":"BLIKVM-PCIe-installation/#7-connect-pwr-in","text":"When not using PoE power supply, connect the PWR-IN port to a standard 5V/3A USB power supply.","title":"7. Connect PWR-IN"},{"location":"BLIKVM-PCIe-installation/#8-test","text":"OLED screen showing device IP and other information. Access the IP address in browser. After passing the test, install the product into the computer case.","title":"8. Test"},{"location":"BLIKVM-PCIe-installation/#9-install-the-product-into-the-computer-case","text":"Disconnect power and wiring, install the product on the motherboard, and reconnect the cables after installation is complete. The color of ATX cable received in different batches may be different. Please directly refer to the pin definition for connection Enjoy!","title":"9. Install the product into the computer case"},{"location":"BLIKVM-PCIe-installation/#appendix-1-install-a-low-profile-pcie-io-bracket","text":"Note","title":"Appendix 1. Install a low profile PCIe I/O bracket"},{"location":"BLIKVM-PCIe-installation/#appendix-2-install-the-cooling-fan","text":"Usually the metal heatsink is sufficient, the cooling fan is not necessary. The cooling fan is controlled by CM4 via GPIO12.","title":"Appendix 2. Install the cooling fan"},{"location":"BLIKVM-PCIe-installation/#appendix-3-install-wifi-antenna","text":"Note","title":"Appendix 3. Install wifi antenna"},{"location":"BliKVM-v4-guide/","text":"BliKVM v4 Allwinner BliKVM v4 is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! BliKVM V4 Datasheet Craft Computing: Goodbye IPMI - Blicube BliKVM V4 Review Lawrence Systems: Blicube BliKVM V4: Is This the Best Linux IP KVM Yet? RainCat: How to install PiKVM on BliKVM v4 Allwinner Features Video capture (HDMI, support 4K@30Hz input) Keyboard forwarding Mouse forwarding HDMI video loop through ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Support PoE & DC Support WiFi Serial console port 1.33 inch color display Real Time Clock (RTC) HDMI input supported resolution types Installation Requirements In addition to the v4 kit, you will need the following equipment: Power adapter (5V 3A, USB-C port, or 12V 2A DC port). If you plan to use PoE (Power over Ethernet) or if the USB ports on your controlled computers provide sufficient power, a separate power adapter is not required. HDMI cables (at least one). If you also need to use the HDMI loop-out interface, you will need two cables. Ethernet cable(s) (provide based on your requirements). One cable is required for using the ATX power switch function, and one cable is required for using the Ethernet connection. USB-C to USB-A cable (for mouse and keyboard data transmission). Terminal Upgrade Notice! Before upgrading, execute the following command, otherwise, after running apt-get update and apt-get upgrade, the image will fail to start. apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64 Video Guide: Unpacking and connecting case step by step Installation Steps 1. Open the v4 kit package and connect the BliKVM to the controlled computer according to the connection diagram shown below: ATX Connection Please refer to the ATX Connection Guide . 2. Once all the cables are connected, power on the BliKVM. Wait until the display shows the interface, indicating that the device has started up successfully. 3. Read the \"First Steps\" guide carefully. It provides instructions on how to find the device on the network, how to log in, change passwords, and more. Follow the steps described there and then return to this page. 4. Try managing your computer using the BliKVM web interface. Make sure you can see the image and that the keyboard and mouse are working properly. If you encounter any issues, check out our FAQ (it's very helpful). If you find no solution there, seek support in our Discord chat room . 5. You can explore other pages in the wiki to discover more features of BliKVM. Enjoy your experience! Video Mode v4 supports a maximum video input of 4K30Hz, and the default transmission resolution is 1920x1080. Packing List BLIKVM v4 1 WiFi Antenna 1 ATX adapter board 1 ATX Dupont Cables 8pin Male to Male 60cm 1 ATX Dupont Cables 8pin Male to Female 60cm 1 1U Rack Mounting Ears 2 M2.5x5 Screws 8 Silicone Bumper Pellets 1 Serial Console Access via the 5V Port The 5V port can be used both for power supply and serial console access at the same time. The default baud rate is 115200. There is an onboard CH341-based USB to UART converter present inside BliKVM v4 which is connected to UART0 of the mCore-H616 SoC , so you can connect a USB port of a PC to the 5V port without an external UART and a USB-C to dupont adapter. PC USB port current output Be careful when trying to use the 5V port because a PC USB port alone may not be able to provide 3A (5V) which is a documented requirement for the board to work. Either use a 12V 2A DC port at the same time as using the 5V port for serial communication without a USB Splitter board, or use the splitter board to split out the VCC pin and use a separate 5V 3A power supply to provide power to the 5V port's VCC pin. Likewise, when disconnecting a cable from the 12V 2A DC port while BliKVM is powered on, make sure to disconnect the cable from the 5V port first (because that will become the power source for BliKVM v4 after the 12V 2A source is disconnected unless a splitter is used). You should see something like this in your host kernel log (if you are using a Linux-based OS) when attaching a USB cable to the 5V port of BliKVM v4: usb 1-1.2: new full-speed USB device number 12 using xhci_hcd usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.34 usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1.2: Product: USB Serial ch341 1-1.2:1.0: ch341-uart converter detected usb 1-1.2: ch341-uart converter now attached to ttyUSB0 Accessing this port can then be done using GNU screen or TIO : tio /dev/ttyUSB0 mangopimcore login: blikvm # ... If you need to check how much data is received over UART0 you can do this by looking at the counters exposed via proc as follows (the rx counter should increase when the data is sent from an external host if the built-in USB to UART converter is working properly): root@mangopimcore:~# grep '0: uart' /proc/tty/driver/serial 0: uart:16550A mmio:0x05000000 irq:284 tx:20306 rx:40 pe:1 RTS|DTR Dev If you want to develop or port software on v4 hardware yourself, you can refer to this hardware resource description . Buy link Buy v4","title":"BliKVM v4 Allwinner Guide"},{"location":"BliKVM-v4-guide/#blikvm-v4-allwinner","text":"BliKVM v4 is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! BliKVM V4 Datasheet Craft Computing: Goodbye IPMI - Blicube BliKVM V4 Review Lawrence Systems: Blicube BliKVM V4: Is This the Best Linux IP KVM Yet? RainCat: How to install PiKVM on BliKVM v4 Allwinner","title":"BliKVM v4 Allwinner"},{"location":"BliKVM-v4-guide/#features","text":"Video capture (HDMI, support 4K@30Hz input) Keyboard forwarding Mouse forwarding HDMI video loop through ATX Control the server power using ATX functions Fullscreen mode Access via Web UI Support multi language switching Support PoE & DC Support WiFi Serial console port 1.33 inch color display Real Time Clock (RTC) HDMI input supported resolution types","title":"Features"},{"location":"BliKVM-v4-guide/#installation-requirements","text":"In addition to the v4 kit, you will need the following equipment: Power adapter (5V 3A, USB-C port, or 12V 2A DC port). If you plan to use PoE (Power over Ethernet) or if the USB ports on your controlled computers provide sufficient power, a separate power adapter is not required. HDMI cables (at least one). If you also need to use the HDMI loop-out interface, you will need two cables. Ethernet cable(s) (provide based on your requirements). One cable is required for using the ATX power switch function, and one cable is required for using the Ethernet connection. USB-C to USB-A cable (for mouse and keyboard data transmission). Terminal Upgrade Notice! Before upgrading, execute the following command, otherwise, after running apt-get update and apt-get upgrade, the image will fail to start. apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64 Video Guide: Unpacking and connecting case step by step","title":"Installation Requirements"},{"location":"BliKVM-v4-guide/#installation-steps","text":"1. Open the v4 kit package and connect the BliKVM to the controlled computer according to the connection diagram shown below: ATX Connection Please refer to the ATX Connection Guide . 2. Once all the cables are connected, power on the BliKVM. Wait until the display shows the interface, indicating that the device has started up successfully. 3. Read the \"First Steps\" guide carefully. It provides instructions on how to find the device on the network, how to log in, change passwords, and more. Follow the steps described there and then return to this page. 4. Try managing your computer using the BliKVM web interface. Make sure you can see the image and that the keyboard and mouse are working properly. If you encounter any issues, check out our FAQ (it's very helpful). If you find no solution there, seek support in our Discord chat room . 5. You can explore other pages in the wiki to discover more features of BliKVM. Enjoy your experience!","title":"Installation Steps"},{"location":"BliKVM-v4-guide/#video-mode","text":"v4 supports a maximum video input of 4K30Hz, and the default transmission resolution is 1920x1080.","title":"Video Mode"},{"location":"BliKVM-v4-guide/#packing-list","text":"BLIKVM v4 1 WiFi Antenna 1 ATX adapter board 1 ATX Dupont Cables 8pin Male to Male 60cm 1 ATX Dupont Cables 8pin Male to Female 60cm 1 1U Rack Mounting Ears 2 M2.5x5 Screws 8 Silicone Bumper Pellets 1","title":"Packing List"},{"location":"BliKVM-v4-guide/#serial-console-access-via-the-5v-port","text":"The 5V port can be used both for power supply and serial console access at the same time. The default baud rate is 115200. There is an onboard CH341-based USB to UART converter present inside BliKVM v4 which is connected to UART0 of the mCore-H616 SoC , so you can connect a USB port of a PC to the 5V port without an external UART and a USB-C to dupont adapter. PC USB port current output Be careful when trying to use the 5V port because a PC USB port alone may not be able to provide 3A (5V) which is a documented requirement for the board to work. Either use a 12V 2A DC port at the same time as using the 5V port for serial communication without a USB Splitter board, or use the splitter board to split out the VCC pin and use a separate 5V 3A power supply to provide power to the 5V port's VCC pin. Likewise, when disconnecting a cable from the 12V 2A DC port while BliKVM is powered on, make sure to disconnect the cable from the 5V port first (because that will become the power source for BliKVM v4 after the 12V 2A source is disconnected unless a splitter is used). You should see something like this in your host kernel log (if you are using a Linux-based OS) when attaching a USB cable to the 5V port of BliKVM v4: usb 1-1.2: new full-speed USB device number 12 using xhci_hcd usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.34 usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1.2: Product: USB Serial ch341 1-1.2:1.0: ch341-uart converter detected usb 1-1.2: ch341-uart converter now attached to ttyUSB0 Accessing this port can then be done using GNU screen or TIO : tio /dev/ttyUSB0 mangopimcore login: blikvm # ... If you need to check how much data is received over UART0 you can do this by looking at the counters exposed via proc as follows (the rx counter should increase when the data is sent from an external host if the built-in USB to UART converter is working properly): root@mangopimcore:~# grep '0: uart' /proc/tty/driver/serial 0: uart:16550A mmio:0x05000000 irq:284 tx:20306 rx:40 pe:1 RTS|DTR","title":"Serial Console Access via the 5V Port"},{"location":"BliKVM-v4-guide/#dev","text":"If you want to develop or port software on v4 hardware yourself, you can refer to this hardware resource description .","title":"Dev"},{"location":"BliKVM-v4-guide/#buy-link","text":"Buy v4","title":"Buy link"},{"location":"Datasheet-BliKVM-v4/","text":"BliKVM v4 Allwinner (H616/H313 SOC) BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! Connectivity Diagram 1 USB 2.0 port 10 Antenna interface 2 Power Input 5V 3A & UART 11 RJ45 100M Ethernet port & PoE 3 RJ45 ATX control port 12 Display 1.33 inch LCD 4 HDMI video loop through port 13 Power LED (red) 5 USB-PC port 14 User defined button SW1 6 Power Input 12V 2A 5.5*2.1mm 15 ACT LED (green) 7 HDMI video input port 16 Display ON/OFF button 8 HDMI input status LED (green) 17 Micro SD card slot 9 HDMI output status LED (yellow) Specifications Parameter name Characteristics Power 5V 3A 5V port, USB-PC port 12V 2A 12V port PoE Power over Ethernet (IEEE802.3af compliant) 48V DC Connectivity/Interfaces HDMI-IN HDMI video input port HDMI-OUT HDMI video loop through port USB-PC Keyboard, mouse, mass storage, and other external device emulation) ATX Turn on/off or restart the controlled computer WiFi & Bluetooth IEEE802.11 b/g/n + BLE4.2 Micro SD card slot Persistent storage for OS and your data 5V port 5V 3A power or serial console management port Displays and indicators LED indicators Power LED, ACT LED, HDMI input status LED (green)\uff0c HDMI output status LED (yellow) LCD display LCD 240x240 1.33 inch User defined button SW1 Buzzer Find me Video Supported resolutions Up to 4k@30Hz Video compression methods MJPEG Core Chip ALLWINNER H616/H313 RAM 1GB Power consumption Up to 15W Environmental Operating temperature 0\u00b0C to 70\u00b0C Storage temperature -20\u00b0C to 60\u00b0C Dimensions and weight Size 100 (L) x 134 (W) x 44.4 (H) mm Weight 0.45 kg BLIKVM CM4 version OLED display The product comes standard with a monochrome OLED display with a resolution of 128x64, and the chip is SSD1306. The user connects the display to the product with the wiring of the display. The module is connected to CM4 through the I^2^C interface. The wiring definition is shown in the following table. This is a library for the monochrome OLEDs based on SSD1306 drivers. Display(SSD1306) CM4 GND GND VCC 3.3V SCL GPIO3(SCL1,I^2^C) SDA GPIO2(SDA1,I^2^C) Dimensions Schematic Diagram","title":"BliKVM v4 Allwinner (H616/H313 SOC)"},{"location":"Datasheet-BliKVM-v4/#blikvm-v4-allwinner-h616h313-soc","text":"BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals!","title":"BliKVM v4 Allwinner (H616/H313 SOC)"},{"location":"Datasheet-BliKVM-v4/#connectivity-diagram","text":"1 USB 2.0 port 10 Antenna interface 2 Power Input 5V 3A & UART 11 RJ45 100M Ethernet port & PoE 3 RJ45 ATX control port 12 Display 1.33 inch LCD 4 HDMI video loop through port 13 Power LED (red) 5 USB-PC port 14 User defined button SW1 6 Power Input 12V 2A 5.5*2.1mm 15 ACT LED (green) 7 HDMI video input port 16 Display ON/OFF button 8 HDMI input status LED (green) 17 Micro SD card slot 9 HDMI output status LED (yellow)","title":"Connectivity Diagram"},{"location":"Datasheet-BliKVM-v4/#specifications","text":"Parameter name Characteristics Power 5V 3A 5V port, USB-PC port 12V 2A 12V port PoE Power over Ethernet (IEEE802.3af compliant) 48V DC Connectivity/Interfaces HDMI-IN HDMI video input port HDMI-OUT HDMI video loop through port USB-PC Keyboard, mouse, mass storage, and other external device emulation) ATX Turn on/off or restart the controlled computer WiFi & Bluetooth IEEE802.11 b/g/n + BLE4.2 Micro SD card slot Persistent storage for OS and your data 5V port 5V 3A power or serial console management port Displays and indicators LED indicators Power LED, ACT LED, HDMI input status LED (green)\uff0c HDMI output status LED (yellow) LCD display LCD 240x240 1.33 inch User defined button SW1 Buzzer Find me Video Supported resolutions Up to 4k@30Hz Video compression methods MJPEG Core Chip ALLWINNER H616/H313 RAM 1GB Power consumption Up to 15W Environmental Operating temperature 0\u00b0C to 70\u00b0C Storage temperature -20\u00b0C to 60\u00b0C Dimensions and weight Size 100 (L) x 134 (W) x 44.4 (H) mm Weight 0.45 kg BLIKVM CM4 version OLED display The product comes standard with a monochrome OLED display with a resolution of 128x64, and the chip is SSD1306. The user connects the display to the product with the wiring of the display. The module is connected to CM4 through the I^2^C interface. The wiring definition is shown in the following table. This is a library for the monochrome OLEDs based on SSD1306 drivers. Display(SSD1306) CM4 GND GND VCC 3.3V SCL GPIO3(SCL1,I^2^C) SDA GPIO2(SDA1,I^2^C)","title":"Specifications"},{"location":"Datasheet-BliKVM-v4/#dimensions-schematic-diagram","text":"","title":"Dimensions Schematic Diagram"},{"location":"Dev-BliKVM-v4-Allwinner/","text":"Dev BliKVM v4 Allwinner (H616/H313 SOC) BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! System Block Diagram Functional Module Panel Function Pin Description Button SW1 GPIOI1(257) Press for high level Button SW1 GPIOI2(258) Press for high level LED ACT GPIOI5(261) Low level enable LED LED PWR 3V3 PWR LED is always on after power on ATX Function Pin Description LED-PWR GPIOH10(234) Light on for high level LED-HDD GPIOH9(233) Light on for high level SW-PWR GPIOH4(228) High level enable SW-RST GPIOI16(272) High level enable BUZZER Function Pin Description Buzzer GPIOI15(271) High level enable FAN Function Pin Description Fan GPIOI13(269) High level enable LCD Display 1.33-inch LCD display module, driver chip ST7789, resolution 240x240. Function Pin Description LCD_EN GPIOI4(260) Backlight high level enable LCD_RST GPIOI6(262) Reset Low level enable LCD_DC GPIOI3(259) Data/command control pin SPI1_CS GPIOH5 SPI1_CLK GPIOH6 SPI1_MOSI GPIOH7 GND GND 3V3 3V3","title":"v4 Allwinner Dev Guide"},{"location":"Dev-BliKVM-v4-Allwinner/#dev-blikvm-v4-allwinner-h616h313-soc","text":"BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals!","title":"Dev BliKVM v4 Allwinner (H616/H313 SOC)"},{"location":"Dev-BliKVM-v4-Allwinner/#system-block-diagram","text":"","title":"System Block Diagram"},{"location":"Dev-BliKVM-v4-Allwinner/#functional-module","text":"","title":"Functional Module"},{"location":"Dev-BliKVM-v4-Allwinner/#panel","text":"Function Pin Description Button SW1 GPIOI1(257) Press for high level Button SW1 GPIOI2(258) Press for high level LED ACT GPIOI5(261) Low level enable LED LED PWR 3V3 PWR LED is always on after power on","title":"Panel"},{"location":"Dev-BliKVM-v4-Allwinner/#atx","text":"Function Pin Description LED-PWR GPIOH10(234) Light on for high level LED-HDD GPIOH9(233) Light on for high level SW-PWR GPIOH4(228) High level enable SW-RST GPIOI16(272) High level enable","title":"ATX"},{"location":"Dev-BliKVM-v4-Allwinner/#buzzer","text":"Function Pin Description Buzzer GPIOI15(271) High level enable","title":"BUZZER"},{"location":"Dev-BliKVM-v4-Allwinner/#fan","text":"Function Pin Description Fan GPIOI13(269) High level enable","title":"FAN"},{"location":"Dev-BliKVM-v4-Allwinner/#lcd-display","text":"1.33-inch LCD display module, driver chip ST7789, resolution 240x240. Function Pin Description LCD_EN GPIOI4(260) Backlight high level enable LCD_RST GPIOI6(262) Reset Low level enable LCD_DC GPIOI3(259) Data/command control pin SPI1_CS GPIOH5 SPI1_CLK GPIOH6 SPI1_MOSI GPIOH7 GND GND 3V3 3V3","title":"LCD Display"},{"location":"Expand_Filesystem/","text":"Expand Filesystem If you find that the free space of the raspberry pi SD card or eMMC is smaller than the capacity of the actual SD card or eMMC, you need to do the following to expand the raspberry pi. If you find that the system does not have the raspi config tool, you can use Method 2 (use the GParted partition tool). Method 1: Use raspi-config tool If you are using a mirror after June 2023 and have added a third read-write partition, this method is no longer applicable. Please refer to method 2 and method 3. 1. Open raspi-config. sudo raspi-config 2. Choose Advancd Options\uff1a 3. Choose Expand Filesystem\uff1a 4. Ok: 5. Execute the command resize2fs /dev/mmcblk0p2 in the terminal to see that the SD card has been successfully expanded. Method 2: Use GParted tool 1. Connect the SD card or EMMc that has burned the image to the computer through USB. Take the GParted partition tool on Linux as an example. Other platforms also have similar partition tools. Open GParted software and select SD card: 2. By observing the partition of the SD card in the above figure, we can find that 2.01GB and 21.87GB of space are unused before and after the sdb3 partition, which is the space we want to expand. Select the sdb3 partition and click Resize. 3. You can drag the white partition of sdb3 to the leftmost and rightmost, or fill in 25958 with \"Previous Free Space\" as \"0\" and \"New Size\" as \"Maximum Size\", and then click Resize in the lower right corner. Then click OK to see that all unused space of sd has been used. 4. Insert the SD card into the device and start it. Method 3: Use script If you are using a BliKVM image, you can run the following script on KVM to automatically expand the space. 1. Log in to the KVM terminal, confirm that the system has read and write permissions, run vim expand.sh on any path, and write the following content to expand.sh. If your hardware is v1 , v2 or v3 , use: #!/bin/bash set -x resize_mmcblk0p3 () { echo \"Resizing mmcblk0p3 partition...\" parted /dev/mmcblk0 resizepart 3 100 % resize2fs /dev/mmcblk0p3 echo \"mmcblk0p3 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p3 echo \"Partition resizing completed.\" If your hardware is v4 , use: #!/bin/bash set -x resize_mmcblk0p1 () { echo \"Resizing mmcblk0p1 partition...\" parted /dev/mmcblk0 resizepart 1 100 % resize2fs /dev/mmcblk0p1 echo \"mmcblk0p1 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p1 echo \"Partition resizing completed.\" If you are using a PiKVM image, you can run the script below on the KVM to automatically expand the space. 1. Log in to the KVM terminal, confirm that the system has read and write permissions, run vim expand.sh on any path, and write the following content to expand.sh #!/bin/bash set -x if grep -q 'X-kvmd\\.otgmsd' /etc/fstab ; then part = $( grep 'X-kvmd\\.otgmsd' /etc/fstab | awk '{print $1}' ) # shellcheck disable=SC2206 splitted =( ${ part //=/ } ) if [ \" ${ splitted [0] } \" == LABEL ] ; then label = ${ splitted [1] } part = $( blkid -c /dev/null -L \" $label \" ) else label = PIMSD fi unset splitted disk = /dev/ $( lsblk -no pkname \" $part \" ) npart = $( cat \"/sys/class/block/ ${ part // \\/ dev \\/ / } /partition\" ) umount \" $part \" parted \" $disk \" -a optimal -s resizepart \" $npart \" 100 % yes | mkfs.ext4 -L \" $label \" -F -m 0 \" $part \" mount \" $part \" unset disk part npart label fi 2. Execute bash expand.sh on the terminal and wait for the execution to complete.","title":"Expand Filesystem"},{"location":"Expand_Filesystem/#expand-filesystem","text":"If you find that the free space of the raspberry pi SD card or eMMC is smaller than the capacity of the actual SD card or eMMC, you need to do the following to expand the raspberry pi. If you find that the system does not have the raspi config tool, you can use Method 2 (use the GParted partition tool).","title":"Expand Filesystem"},{"location":"Expand_Filesystem/#method-1-use-raspi-config-tool","text":"If you are using a mirror after June 2023 and have added a third read-write partition, this method is no longer applicable. Please refer to method 2 and method 3. 1. Open raspi-config. sudo raspi-config 2. Choose Advancd Options\uff1a 3. Choose Expand Filesystem\uff1a 4. Ok: 5. Execute the command resize2fs /dev/mmcblk0p2 in the terminal to see that the SD card has been successfully expanded.","title":"Method 1: Use raspi-config tool"},{"location":"Expand_Filesystem/#method-2-use-gparted-tool","text":"1. Connect the SD card or EMMc that has burned the image to the computer through USB. Take the GParted partition tool on Linux as an example. Other platforms also have similar partition tools. Open GParted software and select SD card: 2. By observing the partition of the SD card in the above figure, we can find that 2.01GB and 21.87GB of space are unused before and after the sdb3 partition, which is the space we want to expand. Select the sdb3 partition and click Resize. 3. You can drag the white partition of sdb3 to the leftmost and rightmost, or fill in 25958 with \"Previous Free Space\" as \"0\" and \"New Size\" as \"Maximum Size\", and then click Resize in the lower right corner. Then click OK to see that all unused space of sd has been used. 4. Insert the SD card into the device and start it.","title":"Method 2: Use GParted tool"},{"location":"Expand_Filesystem/#method-3-use-script","text":"If you are using a BliKVM image, you can run the following script on KVM to automatically expand the space. 1. Log in to the KVM terminal, confirm that the system has read and write permissions, run vim expand.sh on any path, and write the following content to expand.sh. If your hardware is v1 , v2 or v3 , use: #!/bin/bash set -x resize_mmcblk0p3 () { echo \"Resizing mmcblk0p3 partition...\" parted /dev/mmcblk0 resizepart 3 100 % resize2fs /dev/mmcblk0p3 echo \"mmcblk0p3 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p3 echo \"Partition resizing completed.\" If your hardware is v4 , use: #!/bin/bash set -x resize_mmcblk0p1 () { echo \"Resizing mmcblk0p1 partition...\" parted /dev/mmcblk0 resizepart 1 100 % resize2fs /dev/mmcblk0p1 echo \"mmcblk0p1 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p1 echo \"Partition resizing completed.\" If you are using a PiKVM image, you can run the script below on the KVM to automatically expand the space. 1. Log in to the KVM terminal, confirm that the system has read and write permissions, run vim expand.sh on any path, and write the following content to expand.sh #!/bin/bash set -x if grep -q 'X-kvmd\\.otgmsd' /etc/fstab ; then part = $( grep 'X-kvmd\\.otgmsd' /etc/fstab | awk '{print $1}' ) # shellcheck disable=SC2206 splitted =( ${ part //=/ } ) if [ \" ${ splitted [0] } \" == LABEL ] ; then label = ${ splitted [1] } part = $( blkid -c /dev/null -L \" $label \" ) else label = PIMSD fi unset splitted disk = /dev/ $( lsblk -no pkname \" $part \" ) npart = $( cat \"/sys/class/block/ ${ part // \\/ dev \\/ / } /partition\" ) umount \" $part \" parted \" $disk \" -a optimal -s resizepart \" $npart \" 100 % yes | mkfs.ext4 -L \" $label \" -F -m 0 \" $part \" mount \" $part \" unset disk part npart label fi 2. Execute bash expand.sh on the terminal and wait for the execution to complete.","title":"Method 3: Use script"},{"location":"OLED-display/","text":"OLED display Due to prolonged operation, issues such as screen burn-in may occur with the OLED. Therefore, the OLED has the following logic: upon initial startup, oled_enable is set to 1 by default, meaning the OLED screen will remain constantly on. If oled_enable is set to 0 , the screen will display every 5 minutes after the device has been running for 300 minutes, significantly extending the screen's lifespan. To customize this behavior, you can locate the following configuration in /usr/bin/blikvm/package.json . \"oled\" :{ \"oled_enable\" : 1 , \"restart_show_time\" : 300 , \"interval_display_time\" : 5 } Modify the values of restart_show_time and interval_display_time in minutes to achieve different control effects. BliKVM v4 Allwinner To power ON/OFF the display manually, please press and hold the SW2 button on the front panel.","title":"OLED Display"},{"location":"OLED-display/#oled-display","text":"Due to prolonged operation, issues such as screen burn-in may occur with the OLED. Therefore, the OLED has the following logic: upon initial startup, oled_enable is set to 1 by default, meaning the OLED screen will remain constantly on. If oled_enable is set to 0 , the screen will display every 5 minutes after the device has been running for 300 minutes, significantly extending the screen's lifespan. To customize this behavior, you can locate the following configuration in /usr/bin/blikvm/package.json . \"oled\" :{ \"oled_enable\" : 1 , \"restart_show_time\" : 300 , \"interval_display_time\" : 5 } Modify the values of restart_show_time and interval_display_time in minutes to achieve different control effects.","title":"OLED display"},{"location":"OLED-display/#blikvm-v4-allwinner","text":"To power ON/OFF the display manually, please press and hold the SW2 button on the front panel.","title":"BliKVM v4 Allwinner"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/","text":"BliKVM v1 (RPI CM4) BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals! Connectivity diagram 1 OTG port 7 Micro SD card slot 2 USB3.0 x2 8 ACT LED (green) 3 ATX control port 9 Ethernet port 4 HDMI video input port 10 OLED Display 5 PWR IN port 11 Antenna mounting hole 6 Power LED (red) Specifications Parameter name Characteristics Power 5V 3A PWR IN port Connectivity/Interfaces HDMI IN HDMI video input port OTG Keyboard, mouse, mass storage, and other external device emulation CN-ATX Turn on/off or restart the controlled computer Micro SD card slot Persistent storage for OS and your data PWR IN port 5V 3A power port Displays and indicators LED indicators Power LED (red), ACT LED (green) OLED display OLED 128x64 0.96 inch Video Supported resolutions Up to 1920x1200@60Hz Video compression methods H.264, MJPEG Core Chip Raspberry Pi Compute Module 4 Power consumption Up to 15W Environmental Operating temperature 0\u00b0C to 70\u00b0C Storage temperature -20\u00b0C to 60\u00b0C Dimensions and weight Size 120(L) x 70W) x 37(H) mm Weight 0.45 kg Dimensions Schematic Diagram","title":"BliKVM v1 (RPI CM4)"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/#blikvm-v1-rpi-cm4","text":"BliKVM is a production-ready, plug and play KVM-over-IP device that offers professional users a convenient solution for remote server or workstation management . It is based on Linux and fully open source. With BliKVM, you can easily power on/off, restart your computer, configure UEFI/BIOS settings, and perform OS reinstallation using an emulated Mass Storage Device . BliKVM simulates a keyboard, mouse, and monitor, all accessible through a web browser, ensuring a seamless user experience. Its hardware-level access guarantees independence from specific remote ports, protocols, or services , making it a highly flexible and reliable remote management solution for professionals!","title":"BliKVM v1 (RPI CM4)"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/#connectivity-diagram","text":"1 OTG port 7 Micro SD card slot 2 USB3.0 x2 8 ACT LED (green) 3 ATX control port 9 Ethernet port 4 HDMI video input port 10 OLED Display 5 PWR IN port 11 Antenna mounting hole 6 Power LED (red)","title":"Connectivity diagram"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/#specifications","text":"Parameter name Characteristics Power 5V 3A PWR IN port Connectivity/Interfaces HDMI IN HDMI video input port OTG Keyboard, mouse, mass storage, and other external device emulation CN-ATX Turn on/off or restart the controlled computer Micro SD card slot Persistent storage for OS and your data PWR IN port 5V 3A power port Displays and indicators LED indicators Power LED (red), ACT LED (green) OLED display OLED 128x64 0.96 inch Video Supported resolutions Up to 1920x1200@60Hz Video compression methods H.264, MJPEG Core Chip Raspberry Pi Compute Module 4 Power consumption Up to 15W Environmental Operating temperature 0\u00b0C to 70\u00b0C Storage temperature -20\u00b0C to 60\u00b0C Dimensions and weight Size 120(L) x 70W) x 37(H) mm Weight 0.45 kg","title":"Specifications"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4/#dimensions-schematic-diagram","text":"","title":"Dimensions Schematic Diagram"},{"location":"atx-guide/","text":"ATXA guide 1. Introduction ATXA is an ATX adapter board to manage the power of your computer. The product includes two modules; A-board and B-board. A-board is connected to the Raspberry Pi, B-board is connected to the computer's motherboard, and A-board is connected to B-board through a network cable. Join the Discord Community Chat for news, questions and support! ATXA_A ATXA_B 2. A-board A-board is connected to the Raspberry Pi. The following table is a typical connection method in PiKVM application. A-board RPI4 GND GND 3V3 3V3 LED PWR GPIO24 LED HDD GPIO22 SW PWR GPIO23 SW RST GPIO27 A-board is connected to B-board through a network cable. The following table is the corresponding relationship between the pin status of A-board and B-board. Pins on A-board Pins on B-board LED PWR is HIGH LED PWR+ is HIGH, LED PWR- is LOW LED PWR is LOW LED PWR+ is LOW, LED PWR- is LOW LED HDD is HIGH LED HDD+ is HIGH, LED HDD- is LOW LED HDD is LOW LED HDD+ is LOW, LED HDD- is LOW SW PWR is HIGH BTN PWR+ and BTN PWR- connected, the power button is pressed SW PWR is LOW BTN PWR+ and BTN PWR- disconnected, the power button is unpressed SW RST is HIGH BTN RST+ and BTN RST- connected, the reset button is pressed SW RST is LOW BTN RST+ and BTN RST- disconnected, the reset button is unpressed 3. B-board The b-board has an adapted full-height and half-height metal PCI mounting plate, which can be installed on the computer case. The user connects the pins on the B-board to the ATX control interface on the computer motherboard using the color DuPont cables provided with the product. ATXA-B Instructions for connecting to the computer motherboard According to the instructions of the computer motherboard, first find the position of the ATX function related pins on the motherboard, and then unplug the ATX ray that has been connected to the motherboard. After unplugging, the power button of the computer will lose its function. There are two rows of 8PIN pins on the ATXA-B motherboard. It is unnecessary to distinguish between the two rows of pins when they are used with the same functions. One row of pins is used for KVM to control ATX-related functions, and the other row of pins is connected to the ATX DuPont head unplugged from the main board to maintain the original chassis power button function. Connect each wire according to the specific pin definitions on the motherboard and ATXA-B. See the following figure for the connection relationship\uff1a 4.Mechanical Diagram 5. Test video YouTube: ATX 6. Purchase Purchase\uff1a ATX","title":"ATX Guide"},{"location":"atx-guide/#atxa-guide","text":"","title":"ATXA guide"},{"location":"atx-guide/#1-introduction","text":"ATXA is an ATX adapter board to manage the power of your computer. The product includes two modules; A-board and B-board. A-board is connected to the Raspberry Pi, B-board is connected to the computer's motherboard, and A-board is connected to B-board through a network cable. Join the Discord Community Chat for news, questions and support! ATXA_A ATXA_B","title":"1. Introduction"},{"location":"atx-guide/#2-a-board","text":"A-board is connected to the Raspberry Pi. The following table is a typical connection method in PiKVM application. A-board RPI4 GND GND 3V3 3V3 LED PWR GPIO24 LED HDD GPIO22 SW PWR GPIO23 SW RST GPIO27 A-board is connected to B-board through a network cable. The following table is the corresponding relationship between the pin status of A-board and B-board. Pins on A-board Pins on B-board LED PWR is HIGH LED PWR+ is HIGH, LED PWR- is LOW LED PWR is LOW LED PWR+ is LOW, LED PWR- is LOW LED HDD is HIGH LED HDD+ is HIGH, LED HDD- is LOW LED HDD is LOW LED HDD+ is LOW, LED HDD- is LOW SW PWR is HIGH BTN PWR+ and BTN PWR- connected, the power button is pressed SW PWR is LOW BTN PWR+ and BTN PWR- disconnected, the power button is unpressed SW RST is HIGH BTN RST+ and BTN RST- connected, the reset button is pressed SW RST is LOW BTN RST+ and BTN RST- disconnected, the reset button is unpressed","title":"2. A-board"},{"location":"atx-guide/#3-b-board","text":"The b-board has an adapted full-height and half-height metal PCI mounting plate, which can be installed on the computer case. The user connects the pins on the B-board to the ATX control interface on the computer motherboard using the color DuPont cables provided with the product. ATXA-B Instructions for connecting to the computer motherboard According to the instructions of the computer motherboard, first find the position of the ATX function related pins on the motherboard, and then unplug the ATX ray that has been connected to the motherboard. After unplugging, the power button of the computer will lose its function. There are two rows of 8PIN pins on the ATXA-B motherboard. It is unnecessary to distinguish between the two rows of pins when they are used with the same functions. One row of pins is used for KVM to control ATX-related functions, and the other row of pins is connected to the ATX DuPont head unplugged from the main board to maintain the original chassis power button function. Connect each wire according to the specific pin definitions on the motherboard and ATXA-B. See the following figure for the connection relationship\uff1a","title":"3. B-board"},{"location":"atx-guide/#4mechanical-diagram","text":"","title":"4.Mechanical Diagram"},{"location":"atx-guide/#5-test-video","text":"YouTube: ATX","title":"5. Test video"},{"location":"atx-guide/#6-purchase","text":"Purchase\uff1a ATX","title":"6. Purchase"},{"location":"atx/","text":"ATX Control Board To manage the power of your computer, you need to install an ATX control board inside the chassis and connect it to the motherboard (to enable KVM control of power on/off via the ATX switch). There is a female-to-female cable that connects from the motherboard to the ATX control board and a male-to-female cable that connects from the ATX control board to the front panel (to keep the power on/off button on the chassis functional). The interface on the ATX control board has two ports (TO CASE, TO MB), and both ports have the same functionality, so they can be used interchangeably. ATX compatibility Laptops are not compatible with ATX as they lack the required ATX pins. This method is only applicable to Desktop PC's and servers. Detailed Instructions 1. Connect the two cables to the ATX control board. To secure the ATX control board inside the chassis, you can choose to mount it on a bracket attached to a PCIe slot. Example 2. Locate the motherboard pins responsible for connecting the front panel buttons and LEDs and disconnect them. Usually, the cables and connectors on the motherboard are labeled. If you're unsure, you can refer to your motherboard's documentation. Example 3. Connect the DuPont male connector from the front panel to the DuPont female connector on the ATX cable, following the pin definitions and paying attention to the labels and polarity (+ or -). Example 4. Using the same method, connect the female pins from the ATX board to the corresponding connector on the motherboard. Refer to your motherboard's documentation to determine which pins on the motherboard connect to which pins on the ATX control board. Sometimes, this information is printed on the motherboard. Example 5. Install the ATX board into a PCI slot on the chassis and secure it with screws or use alternative mounting methods according to your preference. Example 6. Arrange the cables neatly and secure them as needed. Make sure the cables do not come into contact with any fans inside the chassis. Use an Ethernet cable to connect the ATX board to the ATX interface of the BliKVM. With this, the hardware connection of the ATX control board is complete.","title":"ATX Control Board"},{"location":"atx/#atx-control-board","text":"To manage the power of your computer, you need to install an ATX control board inside the chassis and connect it to the motherboard (to enable KVM control of power on/off via the ATX switch). There is a female-to-female cable that connects from the motherboard to the ATX control board and a male-to-female cable that connects from the ATX control board to the front panel (to keep the power on/off button on the chassis functional). The interface on the ATX control board has two ports (TO CASE, TO MB), and both ports have the same functionality, so they can be used interchangeably. ATX compatibility Laptops are not compatible with ATX as they lack the required ATX pins. This method is only applicable to Desktop PC's and servers.","title":"ATX Control Board"},{"location":"atx/#detailed-instructions","text":"1. Connect the two cables to the ATX control board. To secure the ATX control board inside the chassis, you can choose to mount it on a bracket attached to a PCIe slot. Example 2. Locate the motherboard pins responsible for connecting the front panel buttons and LEDs and disconnect them. Usually, the cables and connectors on the motherboard are labeled. If you're unsure, you can refer to your motherboard's documentation. Example 3. Connect the DuPont male connector from the front panel to the DuPont female connector on the ATX cable, following the pin definitions and paying attention to the labels and polarity (+ or -). Example 4. Using the same method, connect the female pins from the ATX board to the corresponding connector on the motherboard. Refer to your motherboard's documentation to determine which pins on the motherboard connect to which pins on the ATX control board. Sometimes, this information is printed on the motherboard. Example 5. Install the ATX board into a PCI slot on the chassis and secure it with screws or use alternative mounting methods according to your preference. Example 6. Arrange the cables neatly and secure them as needed. Make sure the cables do not come into contact with any fans inside the chassis. Use an Ethernet cable to connect the ATX board to the ATX interface of the BliKVM. With this, the hardware connection of the ATX control board is complete.","title":"Detailed Instructions"},{"location":"dev_api/","text":"API DISCLAIMER: This API is experimental and subject to change at any moment! This document is only valid for v1.4.0 and earlier versions, and will be updated soon This document is the HTTP API development manual for BLIKVM OS. If you have new API requirements not covered in this document, you can submit a pull request on GitHub to seek support. Please replace the kvmip in the request URL with the actual IP address of your KVM. Authentication This API is used for user login and returns an access token. Some APIs within the system require a valid token for access. Request URL: http://kvmip/login_api Request Method: GET Request Body: JSON format, for example: { \"username\": \"admin\", \"password\": \"admin\" } The response is as follows; if the status is not 1, the authentication has failed. { \"status\": 1, \"info\": \"login success\", \"data\": { \"token\": \"2sscdada6a97a774fcd4714c\" } } MJPEG Video This API is used to obtain the MJPEG video stream when the image mode is set to MJPEG. Request URL: http://kvmip:8008/stream This API is used to capture a frame of MJPEG in image mode. Request URL: http://kvmip:8008/snapshot Request Method: GET Keyboard For specific keyboard encoding, please refer to the following: \"KeyA\"=> 4, \"KeyB\"=> 5, \"KeyC\"=> 6, \"KeyD\"=> 7, \"KeyE\"=> 8, \"KeyF\"=> 9, \"KeyG\"=> 10, \"KeyH\"=> 11, \"KeyI\"=> 12, \"KeyJ\"=> 13, \"KeyK\"=> 14, \"KeyL\"=> 15, \"KeyM\"=> 16, \"KeyN\"=> 17, \"KeyO\"=> 18, \"KeyP\"=> 19, \"KeyQ\"=> 20, \"KeyR\"=> 21, \"KeyS\"=> 22, \"KeyT\"=> 23, \"KeyU\"=> 24, \"KeyV\"=> 25, \"KeyW\"=> 26, \"KeyX\"=> 27, \"KeyY\"=> 28, \"KeyZ\"=> 29, \"Digit1\"=> 30, \"Digit2\"=> 31, \"Digit3\"=> 32, \"Digit4\"=> 33, \"Digit5\"=> 34, \"Digit6\"=> 35, \"Digit7\"=> 36, \"Digit8\"=> 37, \"Digit9\"=> 38, \"Digit0\"=> 39, \"Enter\"=> 40, \"Escape\"=> 41, \"Backspace\"=> 42, \"Tab\"=> 43, \"Space\"=> 44, \"Minus\"=> 45, \"Equal\"=> 46, \"BracketLeft\"=> 47, \"BracketRight\"=> 48, \"Backslash\"=> 49, \"Semicolon\"=> 51, \"Quote\"=> 52, \"Backquote\"=> 53, \"Comma\"=> 54, \"Period\"=> 55, \"Slash\"=> 56, \"CapsLock\"=> 57, \"F1\"=> 58, \"F2\"=> 59, \"F3\"=> 60, \"F4\"=> 61, \"F5\"=> 62, \"F6\"=> 63, \"F7\"=> 64, \"F8\"=> 65, \"F9\"=> 66, \"F10\"=> 67, \"F11\"=> 68, \"F12\"=> 69, \"PrtSc\"=> 70, \"ScrollLock\"=> 71, \"Pause\"=> 72, \"Insert\"=> 73, \"Home\"=> 74, \"PageUp\"=> 75, \"Delete\"=> 76, \"End\"=> 77, \"PageDown\"=> 78, \"ArrowRight\"=> 79, \"ArrowLeft\"=> 80, \"ArrowDown\"=> 81, \"ArrowUp\"=> 82, \"NumLock\"=> 83, \"NumpadDivide\"=> 84, \"NumpadMultiply\"=> 85, \"NumpadSubtract\"=> 86, \"NumpadAdd\"=> 87, \"NumpadEnter\"=> 88, \"Numpad1\"=> 89, \"Numpad2\"=> 90, \"Numpad3\"=> 91, \"Numpad4\"=> 92, \"Numpad5\"=> 93, \"Numpad6\"=> 94, \"Numpad7\"=> 95, \"Numpad8\"=> 96, \"Numpad9\"=> 97, \"Numpad0\"=> 98, \"NumpadDecimal\"=> 99 Request URL: http://kvmip/keyboard Request Method: GET Request Body: JSON format, where \"keycodes\" is a string array supporting multiple inputs at once. For example: { \"keycodes\": [\"Digit1\"] } The response result is as follows: { \"status\": 1, \"info\": \"key input success\", \"data\": [] }","title":"HTTP API"},{"location":"dev_api/#api","text":"DISCLAIMER: This API is experimental and subject to change at any moment! This document is only valid for v1.4.0 and earlier versions, and will be updated soon This document is the HTTP API development manual for BLIKVM OS. If you have new API requirements not covered in this document, you can submit a pull request on GitHub to seek support. Please replace the kvmip in the request URL with the actual IP address of your KVM.","title":"API"},{"location":"dev_api/#authentication","text":"This API is used for user login and returns an access token. Some APIs within the system require a valid token for access. Request URL: http://kvmip/login_api Request Method: GET Request Body: JSON format, for example: { \"username\": \"admin\", \"password\": \"admin\" } The response is as follows; if the status is not 1, the authentication has failed. { \"status\": 1, \"info\": \"login success\", \"data\": { \"token\": \"2sscdada6a97a774fcd4714c\" } }","title":"Authentication"},{"location":"dev_api/#mjpeg-video","text":"This API is used to obtain the MJPEG video stream when the image mode is set to MJPEG. Request URL: http://kvmip:8008/stream This API is used to capture a frame of MJPEG in image mode. Request URL: http://kvmip:8008/snapshot Request Method: GET","title":"MJPEG Video"},{"location":"dev_api/#keyboard","text":"For specific keyboard encoding, please refer to the following: \"KeyA\"=> 4, \"KeyB\"=> 5, \"KeyC\"=> 6, \"KeyD\"=> 7, \"KeyE\"=> 8, \"KeyF\"=> 9, \"KeyG\"=> 10, \"KeyH\"=> 11, \"KeyI\"=> 12, \"KeyJ\"=> 13, \"KeyK\"=> 14, \"KeyL\"=> 15, \"KeyM\"=> 16, \"KeyN\"=> 17, \"KeyO\"=> 18, \"KeyP\"=> 19, \"KeyQ\"=> 20, \"KeyR\"=> 21, \"KeyS\"=> 22, \"KeyT\"=> 23, \"KeyU\"=> 24, \"KeyV\"=> 25, \"KeyW\"=> 26, \"KeyX\"=> 27, \"KeyY\"=> 28, \"KeyZ\"=> 29, \"Digit1\"=> 30, \"Digit2\"=> 31, \"Digit3\"=> 32, \"Digit4\"=> 33, \"Digit5\"=> 34, \"Digit6\"=> 35, \"Digit7\"=> 36, \"Digit8\"=> 37, \"Digit9\"=> 38, \"Digit0\"=> 39, \"Enter\"=> 40, \"Escape\"=> 41, \"Backspace\"=> 42, \"Tab\"=> 43, \"Space\"=> 44, \"Minus\"=> 45, \"Equal\"=> 46, \"BracketLeft\"=> 47, \"BracketRight\"=> 48, \"Backslash\"=> 49, \"Semicolon\"=> 51, \"Quote\"=> 52, \"Backquote\"=> 53, \"Comma\"=> 54, \"Period\"=> 55, \"Slash\"=> 56, \"CapsLock\"=> 57, \"F1\"=> 58, \"F2\"=> 59, \"F3\"=> 60, \"F4\"=> 61, \"F5\"=> 62, \"F6\"=> 63, \"F7\"=> 64, \"F8\"=> 65, \"F9\"=> 66, \"F10\"=> 67, \"F11\"=> 68, \"F12\"=> 69, \"PrtSc\"=> 70, \"ScrollLock\"=> 71, \"Pause\"=> 72, \"Insert\"=> 73, \"Home\"=> 74, \"PageUp\"=> 75, \"Delete\"=> 76, \"End\"=> 77, \"PageDown\"=> 78, \"ArrowRight\"=> 79, \"ArrowLeft\"=> 80, \"ArrowDown\"=> 81, \"ArrowUp\"=> 82, \"NumLock\"=> 83, \"NumpadDivide\"=> 84, \"NumpadMultiply\"=> 85, \"NumpadSubtract\"=> 86, \"NumpadAdd\"=> 87, \"NumpadEnter\"=> 88, \"Numpad1\"=> 89, \"Numpad2\"=> 90, \"Numpad3\"=> 91, \"Numpad4\"=> 92, \"Numpad5\"=> 93, \"Numpad6\"=> 94, \"Numpad7\"=> 95, \"Numpad8\"=> 96, \"Numpad9\"=> 97, \"Numpad0\"=> 98, \"NumpadDecimal\"=> 99 Request URL: http://kvmip/keyboard Request Method: GET Request Body: JSON format, where \"keycodes\" is a string array supporting multiple inputs at once. For example: { \"keycodes\": [\"Digit1\"] } The response result is as follows: { \"status\": 1, \"info\": \"key input success\", \"data\": [] }","title":"Keyboard"},{"location":"edid/","text":"EDID The EDID file in BliKVM serves the purpose of informing the controlled computer about the expected HDMI output resolution. For example, if the EDID is set to 1080P60Hz, and the controlled computer supports this resolution, it will output at 1080P60Hz. Additionally, EDID can be used to disable audio, modify the display model, name, manufacturer, and other information. In most cases, you don't need to change it, but sometimes, especially with strange UEFI/BIOS behavior, it may be necessary. Note BliKVM v1, v2, and v3 use the CSI video capture scheme, which supports EDID settings. However, BliKVM v4 uses the USB video capture scheme, which does not support EDID settings. For v3 HAT, there is a limitation of two CSI channels on the Raspberry Pi 4B, which means it can only capture video input with a maximum resolution of 1080P50Hz. Therefore, if you set 1080P60Hz EDID for v3, it will not be able to capture the image. If you are using PiKVM OS, you can refer to this link for modification instructions. If you are using BliKVM OS, the EDID file is located at /usr/bin/blikvm/edid.txt . Open this file, and replace the EDID contents with the desired resolution's EDID. EDID Examples for 1080P60Hz The following EDID is suitable for v1 and v2 hardware. 1920x1080 60Hz, with audio 00FFFFFFFFFFFF0031D8888800888888 1C150103800000780AEE91A3544C9926 0F50543FCD0001000101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0050 694B564D0A20202020202020000000FD 003B3D0F2E0F1E0A202020202020013C 02031E434F041303021211012021A23C 3D3E1F1066030C00300080E2007F8C0A D08A20E02D10103E9600C48E21000018 8C0AD08A20E02D10103E9600138E2100 00189729A0D051842230509816009A01 11000018000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000001C EDID Examples for 1080P50Hz The following EDID is suitable for v1, v2, and v3 hardware, especially when you want v3 HAT to capture 1080P resolution. 1920x1080 50Hz, with audio 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a202020202020014f 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000028 EDID Examples for 720P60Hz The following EDID is suitable for v1, v2, and v3 hardware. 1280x720 60Hz, with audio 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 Custom EDID To customize the EDID, it is best to use third-party utilities, such as the recommended advanced AW EDID Editor (works well in Windows and can be used in wine) or wxEDID . Both editors work with the binary EDID format. Using these tools, you can modify the EDID information like editing a file, similar to changing the information on an identity card. By editing the EDID, you can adjust the parameters and characteristics of the display to suit different usage requirements, and thus achieve better display performance.","title":"HDMI EDID"},{"location":"edid/#edid","text":"The EDID file in BliKVM serves the purpose of informing the controlled computer about the expected HDMI output resolution. For example, if the EDID is set to 1080P60Hz, and the controlled computer supports this resolution, it will output at 1080P60Hz. Additionally, EDID can be used to disable audio, modify the display model, name, manufacturer, and other information. In most cases, you don't need to change it, but sometimes, especially with strange UEFI/BIOS behavior, it may be necessary. Note BliKVM v1, v2, and v3 use the CSI video capture scheme, which supports EDID settings. However, BliKVM v4 uses the USB video capture scheme, which does not support EDID settings. For v3 HAT, there is a limitation of two CSI channels on the Raspberry Pi 4B, which means it can only capture video input with a maximum resolution of 1080P50Hz. Therefore, if you set 1080P60Hz EDID for v3, it will not be able to capture the image. If you are using PiKVM OS, you can refer to this link for modification instructions. If you are using BliKVM OS, the EDID file is located at /usr/bin/blikvm/edid.txt . Open this file, and replace the EDID contents with the desired resolution's EDID.","title":"EDID"},{"location":"edid/#edid-examples-for-1080p60hz","text":"The following EDID is suitable for v1 and v2 hardware. 1920x1080 60Hz, with audio 00FFFFFFFFFFFF0031D8888800888888 1C150103800000780AEE91A3544C9926 0F50543FCD0001000101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0050 694B564D0A20202020202020000000FD 003B3D0F2E0F1E0A202020202020013C 02031E434F041303021211012021A23C 3D3E1F1066030C00300080E2007F8C0A D08A20E02D10103E9600C48E21000018 8C0AD08A20E02D10103E9600138E2100 00189729A0D051842230509816009A01 11000018000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000001C","title":"EDID Examples for 1080P60Hz"},{"location":"edid/#edid-examples-for-1080p50hz","text":"The following EDID is suitable for v1, v2, and v3 hardware, especially when you want v3 HAT to capture 1080P resolution. 1920x1080 50Hz, with audio 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a202020202020014f 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000028","title":"EDID Examples for 1080P50Hz"},{"location":"edid/#edid-examples-for-720p60hz","text":"The following EDID is suitable for v1, v2, and v3 hardware. 1280x720 60Hz, with audio 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000","title":"EDID Examples for 720P60Hz"},{"location":"edid/#custom-edid","text":"To customize the EDID, it is best to use third-party utilities, such as the recommended advanced AW EDID Editor (works well in Windows and can be used in wine) or wxEDID . Both editors work with the binary EDID format. Using these tools, you can modify the EDID information like editing a file, similar to changing the information on an identity card. By editing the EDID, you can adjust the parameters and characteristics of the display to suit different usage requirements, and thus achieve better display performance.","title":"Custom EDID"},{"location":"faq/","text":"FAQ & Troubleshooting As a first step, we recommend carefully reading our documentation. Most steps to successfully set up your BLIKVM are already described there. If you run into any issues you can check this page which will list common errors. If that still doesn't help you you're welcome to raise an issue ticket or join our Discord for further help. Common Questions Can I connect multiple servers to a single BLIKVM? Yes, but it requires additional work to set up. See this page . How can I get the access to PiKVM in my local network over Internet? If your router has an external IP address, you can use port forwarding to forward port 80 (Web), port 8008 (mjpeg), and port 8188 (webrtc) In all other cases, you can use the excellent free VPN service Tailscale. Which BLiKVM hardware version should I choose, such as BLiKVM V1 CM4, BLiKVM V2 PCIe, and BLiKVM V3 Hat? First, please refer to this page for a comparison of the main parameters of each version. V1 and V3 are external solutions, while V2 is an internal chassis solution. If you have a chassis and there is space inside, choosing the V2 PCIe version would be a better option. So how do you choose between the external solutions V1 and V3? V1 is based on the CM4 platform, with higher integration and ready-to-use versions available. V3 is based on the Raspberry Pi 4B platform, with all IO ports exposed and greater expandability. Another key difference is that V1 supports up to 1080P60Hz input, while V3 supports up to 1080P50Hz input. Of course, you also need to consider whether you already have a CM4 or 4B, as purchasing the corresponding baseboard would offer better cost-effectiveness. Can I use BLIKVM for gaming? No, because: For HDMI-CSI bridge, bus bandwidth is not enough to transmit more than 1080p60. For HDMI-USB dongle, high latency and low video quality. General hardware video capture differs from software streaming and introduces additional latency. Can BLIKVM do 4K video? For HDMI-CSI bridge, no. There is not enough bandwidth in the CSI bus for that much data. 1080p60 will max out the bandwidth. For the USB capture devices: technically yes, they will downsample to something smaller to meet the USB 2.0 bandwidth limitations, so the source may be 4k, but the stream will not. The 4K real-time video will not fit through the network anyway. Where does the cursor/video latency come from? Here is the chain of transferring an image to your browser or VNC client. Capture device -> Compression -> Network -> Decompression -> Rendering 100-200ms is very, very fast for this. But we are working to speed things up even more. Does BLIKVM support sound? BliKVM v1 CM4, v2 PCIe, v3 HAT version supported\uff0c v4 Allwinner not support now. Can I power the Pi via PoE? Yes! Hat and PCIe version supported. First Steps What is the default password? How do I change it? If you use PiKVM, there are two types of accounts: OS and PiKVM (web interface) accounts. The system account blikvm can be used for SSH/UART access and has the password blikvm . The web interface account is called admin and has the password admin . The PiKVM account cannot be used for SSH access and vice versa. To change passwords, use the following commands (become the root user): su - # If you're in the webterm rw # Switch filesystem to read-write mode passwd blikvm # Change blikvm user password kvmd-htpasswd set admin # Change web ui admin password ro # Back to read-only How do I add another user? If you use PiKVM software, as stated above you need to make 2 accounts, 1 for the shell, the other for the PiKVM Web UI. If you require additional users for PiKVM UI, you can use the following: # su - # rw # kvmd-htpasswd set # Adds a new user # kvmd-htpasswd set # Sets the password as long as the user exists # kvmd-htpasswd del # Removes/deletes a user To add a shell/terminal account: # su - # rw # adduser # passwd Keep in mind that the more users that are added and accessing the screen stream at the same time, the FPS will drop. Video Problems BLIKVM does not show the video from the computer at all If the output of dmesg | grep tc358743 does not show something similar as tc358743 found @ ... , then this means that the TC358743 HDMI input bridge is not detected. Verify that the flex flat cable (ffc) is correctly connected. Double-check that the video capture device is connected correctly. For the CSI bridge, this should be exactly the camera port. Some laptops do not output any signal until you switch the output (usually via the FN + and an F5 key on the keyboard). Your computer may have turned on sleep mode for the monitor. Move the mouse to turn it off. For windows you might need to check for the active signal resolution. To change the active signal resolution you have to go to Settings>System>Display>Advanced display settings>Display adapter properties then, click \"List All Models\" and choose the one you want. Keep trying different Hz settings. The video works in the booted OS, but not in the BIOS/UEFI This problem appears on Intel NUC, GA-H77-DS3H, and some other devices when using a CSI bridge. All you need to do is change the EDID data. This is the information about supported resolutions that the CSI bridge reports to your computer. Glitchy or wrong BIOS/UEFI resolution On some motherboards, the BIOS may be displayed at a lower resolution, or with some rendering issues/glitches, specially on newer ASUS ones. Like this: This can be solved by enabling the Compatibility Support Module (CSM) in your BIOS, usually under the Boot options. If you can't or don't want to enable the CSM, you can try connecting a DisplayPort (DP) monitor, or a dummy plug . If you remove the DP cable/adapter the bug will reappear. If none of this works, try connecting the DP cable first, boot into the BIOS, disable the CSM and shutdown (do not restart) your PC. Then, boot into the BIOS and enable the CSM before shutting down your PC. Then connect the HDMI and turn your PC on again. There is no video in GRUB2, but there is before and after Sometimes this can be caused by the specifics of the BIOS/UEFI and how GRUB2 works with video. This can be solved by enabling the Compatibility Support Module (CSM) in your BIOS, usually under the Boot options. The video mode will be located in the same section. Switch the Video mode from UEFI to Legacy . No image from computer with Linux + Awesome WM Sometimes Awesome WM on Linux can't recognize a video output change on a cable. That is, if the cable was first inserted into the monitor, and then you reconnected it to BLIKVM - it may happen that you will not see the image. It seems that the problem is Awesome WM, since for example with KDE, it is not reproducable. If you turn on your workstation with BLIKVM already connected, everything will work fine. USB Problems (keyboard, mouse, mass storage, etc) What speed is the USB OTG port? Per the official RPI documentation, this is a limitation of the SoC. The OTG port is only USB2.0, so is limited to 455 Mbit/s. Why can't some keyboard shortcuts of physical keyboards be captured while virtual keyboards can? For example, the F11 key on a Mac computer cannot be captured. This is because some shortcuts are already in use by the system, such as in macOS, where F11 is assigned to the \"Show Desktop\" function by default. When you press F11 in a web interface, the KeyboardEvent is first captured by the system, and if a callback is registered in the system, the event will not be passed to the application. To solve this issue, you can disable the system's assigned shortcut or use a virtual keyboard. Hardware Problems (Wi-Fi, ATX, etc) If you use PiKVM software, the web UI show FAN error! Because the fan model used by BLIKVM hardware is different from that of PIKVM hardware, viewing the fan status through the web interface may fail in the latest system of pikvm. However, this will not affect the normal operation of BLIKVM fan. Therefore, when using the PIKVM image, as long as you ensure that the install script displays OK, it means that the update of the kvmd fan program is successful. The threshold temperature set by the default program is 60 degrees Celsius. When the CPU temperature is detected to exceed 60 degrees Celsius, the fan will start rotating at 85% speed. If you want to modify the threshold temperature and speed, you can modify the kvmd-fan.py script, and then re-execute install.sh. I can't connect to Wi-Fi at all! If your device is unable to connect to the Wi-Fi network that you have set up, check the 2.4 GHz Wi-Fi channel used by your Wi-Fi access point. If channels 12 to 14 are used (some countries have banned these channels) try to use a channel between 1 and 11. BLIKVM complains about low power warnings Are you using a \"proper\" power supply? Not one you hacked together? Some USB power bricks advertise 5V 2.1A or higher, but can't deliver consistent 5V. Best to use Raspberry Pi Foundation recommended power supplies. It should be 5.1v and 3A DC output. When I use the PoE, do I still need to use the power OTG splitter to prevent back power on the machine usb? Only HAT version you need to use power OTG splitter to prevent back power. Generally, most hosts computer are protected back power, you do not need to usr power OTG splitter in this case. BLIKVM-CM4-V2.2 and BLIKVM-PCIe version don't need. In some board like BLIKVM-PCIe or BLIKVM-CM4-V2.2 has boot pin, how do I connect? If you short them, CM4 will not start normally, but will enter the burning image mode. If your hardware version of boot has only two pins, use the jumper cap to connect the two pins as a short circuit. If you do not use the jumper cap or plug it into one pin, CM4 will start normally. If you use three boot pins of the hardware version, use the jumper cap to connect GND and another non-GND pin to indicate short circuit, and plug the jumper cap on the two GND pins or do not use it, CM4 will start normally. Web Problems What ports does BliKVM OS occupy, and how should it be forwarded when using a public server? The web interface uses the HTTP protocol and occupies port 80. If you are using hardware versions V1, V2, or V3 with web-rtc transmission, the port is 8188. If you are using hardware version V4 with MJPEG transmission, the port is 8008. Please note that the ports cannot be modified; only port forwarding can be configured. Raspberry Problems Can I use both the CM4 version with EMMC and the SD card at the same time? No, you can't, When designing the CM4 hardware, several pins of the SD card are only valid in the lite version. You can find instructions on the official website of Raspberry Pi.","title":"FAQ"},{"location":"faq/#faq-troubleshooting","text":"As a first step, we recommend carefully reading our documentation. Most steps to successfully set up your BLIKVM are already described there. If you run into any issues you can check this page which will list common errors. If that still doesn't help you you're welcome to raise an issue ticket or join our Discord for further help.","title":"FAQ & Troubleshooting"},{"location":"faq/#common-questions","text":"Can I connect multiple servers to a single BLIKVM? Yes, but it requires additional work to set up. See this page . How can I get the access to PiKVM in my local network over Internet? If your router has an external IP address, you can use port forwarding to forward port 80 (Web), port 8008 (mjpeg), and port 8188 (webrtc) In all other cases, you can use the excellent free VPN service Tailscale. Which BLiKVM hardware version should I choose, such as BLiKVM V1 CM4, BLiKVM V2 PCIe, and BLiKVM V3 Hat? First, please refer to this page for a comparison of the main parameters of each version. V1 and V3 are external solutions, while V2 is an internal chassis solution. If you have a chassis and there is space inside, choosing the V2 PCIe version would be a better option. So how do you choose between the external solutions V1 and V3? V1 is based on the CM4 platform, with higher integration and ready-to-use versions available. V3 is based on the Raspberry Pi 4B platform, with all IO ports exposed and greater expandability. Another key difference is that V1 supports up to 1080P60Hz input, while V3 supports up to 1080P50Hz input. Of course, you also need to consider whether you already have a CM4 or 4B, as purchasing the corresponding baseboard would offer better cost-effectiveness. Can I use BLIKVM for gaming? No, because: For HDMI-CSI bridge, bus bandwidth is not enough to transmit more than 1080p60. For HDMI-USB dongle, high latency and low video quality. General hardware video capture differs from software streaming and introduces additional latency. Can BLIKVM do 4K video? For HDMI-CSI bridge, no. There is not enough bandwidth in the CSI bus for that much data. 1080p60 will max out the bandwidth. For the USB capture devices: technically yes, they will downsample to something smaller to meet the USB 2.0 bandwidth limitations, so the source may be 4k, but the stream will not. The 4K real-time video will not fit through the network anyway. Where does the cursor/video latency come from? Here is the chain of transferring an image to your browser or VNC client. Capture device -> Compression -> Network -> Decompression -> Rendering 100-200ms is very, very fast for this. But we are working to speed things up even more. Does BLIKVM support sound? BliKVM v1 CM4, v2 PCIe, v3 HAT version supported\uff0c v4 Allwinner not support now. Can I power the Pi via PoE? Yes! Hat and PCIe version supported.","title":"Common Questions"},{"location":"faq/#first-steps","text":"What is the default password? How do I change it? If you use PiKVM, there are two types of accounts: OS and PiKVM (web interface) accounts. The system account blikvm can be used for SSH/UART access and has the password blikvm . The web interface account is called admin and has the password admin . The PiKVM account cannot be used for SSH access and vice versa. To change passwords, use the following commands (become the root user): su - # If you're in the webterm rw # Switch filesystem to read-write mode passwd blikvm # Change blikvm user password kvmd-htpasswd set admin # Change web ui admin password ro # Back to read-only How do I add another user? If you use PiKVM software, as stated above you need to make 2 accounts, 1 for the shell, the other for the PiKVM Web UI. If you require additional users for PiKVM UI, you can use the following: # su - # rw # kvmd-htpasswd set # Adds a new user # kvmd-htpasswd set # Sets the password as long as the user exists # kvmd-htpasswd del # Removes/deletes a user To add a shell/terminal account: # su - # rw # adduser # passwd Keep in mind that the more users that are added and accessing the screen stream at the same time, the FPS will drop.","title":"First Steps"},{"location":"faq/#video-problems","text":"BLIKVM does not show the video from the computer at all If the output of dmesg | grep tc358743 does not show something similar as tc358743 found @ ... , then this means that the TC358743 HDMI input bridge is not detected. Verify that the flex flat cable (ffc) is correctly connected. Double-check that the video capture device is connected correctly. For the CSI bridge, this should be exactly the camera port. Some laptops do not output any signal until you switch the output (usually via the FN + and an F5 key on the keyboard). Your computer may have turned on sleep mode for the monitor. Move the mouse to turn it off. For windows you might need to check for the active signal resolution. To change the active signal resolution you have to go to Settings>System>Display>Advanced display settings>Display adapter properties then, click \"List All Models\" and choose the one you want. Keep trying different Hz settings. The video works in the booted OS, but not in the BIOS/UEFI This problem appears on Intel NUC, GA-H77-DS3H, and some other devices when using a CSI bridge. All you need to do is change the EDID data. This is the information about supported resolutions that the CSI bridge reports to your computer. Glitchy or wrong BIOS/UEFI resolution On some motherboards, the BIOS may be displayed at a lower resolution, or with some rendering issues/glitches, specially on newer ASUS ones. Like this: This can be solved by enabling the Compatibility Support Module (CSM) in your BIOS, usually under the Boot options. If you can't or don't want to enable the CSM, you can try connecting a DisplayPort (DP) monitor, or a dummy plug . If you remove the DP cable/adapter the bug will reappear. If none of this works, try connecting the DP cable first, boot into the BIOS, disable the CSM and shutdown (do not restart) your PC. Then, boot into the BIOS and enable the CSM before shutting down your PC. Then connect the HDMI and turn your PC on again. There is no video in GRUB2, but there is before and after Sometimes this can be caused by the specifics of the BIOS/UEFI and how GRUB2 works with video. This can be solved by enabling the Compatibility Support Module (CSM) in your BIOS, usually under the Boot options. The video mode will be located in the same section. Switch the Video mode from UEFI to Legacy . No image from computer with Linux + Awesome WM Sometimes Awesome WM on Linux can't recognize a video output change on a cable. That is, if the cable was first inserted into the monitor, and then you reconnected it to BLIKVM - it may happen that you will not see the image. It seems that the problem is Awesome WM, since for example with KDE, it is not reproducable. If you turn on your workstation with BLIKVM already connected, everything will work fine.","title":"Video Problems"},{"location":"faq/#usb-problems-keyboard-mouse-mass-storage-etc","text":"What speed is the USB OTG port? Per the official RPI documentation, this is a limitation of the SoC. The OTG port is only USB2.0, so is limited to 455 Mbit/s. Why can't some keyboard shortcuts of physical keyboards be captured while virtual keyboards can? For example, the F11 key on a Mac computer cannot be captured. This is because some shortcuts are already in use by the system, such as in macOS, where F11 is assigned to the \"Show Desktop\" function by default. When you press F11 in a web interface, the KeyboardEvent is first captured by the system, and if a callback is registered in the system, the event will not be passed to the application. To solve this issue, you can disable the system's assigned shortcut or use a virtual keyboard.","title":"USB Problems (keyboard, mouse, mass storage, etc)"},{"location":"faq/#hardware-problems-wi-fi-atx-etc","text":"If you use PiKVM software, the web UI show FAN error! Because the fan model used by BLIKVM hardware is different from that of PIKVM hardware, viewing the fan status through the web interface may fail in the latest system of pikvm. However, this will not affect the normal operation of BLIKVM fan. Therefore, when using the PIKVM image, as long as you ensure that the install script displays OK, it means that the update of the kvmd fan program is successful. The threshold temperature set by the default program is 60 degrees Celsius. When the CPU temperature is detected to exceed 60 degrees Celsius, the fan will start rotating at 85% speed. If you want to modify the threshold temperature and speed, you can modify the kvmd-fan.py script, and then re-execute install.sh. I can't connect to Wi-Fi at all! If your device is unable to connect to the Wi-Fi network that you have set up, check the 2.4 GHz Wi-Fi channel used by your Wi-Fi access point. If channels 12 to 14 are used (some countries have banned these channels) try to use a channel between 1 and 11. BLIKVM complains about low power warnings Are you using a \"proper\" power supply? Not one you hacked together? Some USB power bricks advertise 5V 2.1A or higher, but can't deliver consistent 5V. Best to use Raspberry Pi Foundation recommended power supplies. It should be 5.1v and 3A DC output. When I use the PoE, do I still need to use the power OTG splitter to prevent back power on the machine usb? Only HAT version you need to use power OTG splitter to prevent back power. Generally, most hosts computer are protected back power, you do not need to usr power OTG splitter in this case. BLIKVM-CM4-V2.2 and BLIKVM-PCIe version don't need. In some board like BLIKVM-PCIe or BLIKVM-CM4-V2.2 has boot pin, how do I connect? If you short them, CM4 will not start normally, but will enter the burning image mode. If your hardware version of boot has only two pins, use the jumper cap to connect the two pins as a short circuit. If you do not use the jumper cap or plug it into one pin, CM4 will start normally. If you use three boot pins of the hardware version, use the jumper cap to connect GND and another non-GND pin to indicate short circuit, and plug the jumper cap on the two GND pins or do not use it, CM4 will start normally.","title":"Hardware Problems (Wi-Fi, ATX, etc)"},{"location":"faq/#web-problems","text":"What ports does BliKVM OS occupy, and how should it be forwarded when using a public server? The web interface uses the HTTP protocol and occupies port 80. If you are using hardware versions V1, V2, or V3 with web-rtc transmission, the port is 8188. If you are using hardware version V4 with MJPEG transmission, the port is 8008. Please note that the ports cannot be modified; only port forwarding can be configured.","title":"Web Problems"},{"location":"faq/#raspberry-problems","text":"Can I use both the CM4 version with EMMC and the SD card at the same time? No, you can't, When designing the CM4 hardware, several pins of the SD card are only valid in the lite version. You can find instructions on the official website of Raspberry Pi.","title":"Raspberry Problems"},{"location":"first_steps/","text":"First steps First power on Power up the device. Do not turn off the device until it's fully booted for the first time After turning on the power, BLIKVM OS will perform the necessary operations on the memory card. Getting access to BLIKVM By default, BliKVM receives a dynamic IP address via DHCP. The IP address will be displayed on the BliKVM monitor. If you are using DIY hardware without a monitor, use the following tips: Finding BliKVM in the network You can determine the IP address of BliKVM using the following methods: Common Method: Access the web interface of your router and look for the allocated IP address list. The specific method depends on the router model. Linux Only: Use the command arp-scan --localnet . Linux, macOS, Windows: Download and run Angry IP Scanner . Windows PowerShell: Use the command arp -a . In the example below, let's assume your BliKVM has obtained the address 192.168.0.100 , and you have successfully found that address using the instructions above. Accessing BliKVM Web Interface In most networks, you can access BliKVM in any browser using the following URL: http://192.168.0.100/ . Google Chrome (Chromium), Firefox, and Safari work best with no extensions enabled. If one works and the other does not, it may be an issue with the browser or extensions. It is recommended to use a private browsing window or incognito mode. Internet Explorer and early versions of Microsoft Edge (non-Chromium version) are not supported. The default username is admin , and the password is also admin . Once logged in, you will have access to the main menu with essential functions. You can change system settings and passwords using the web interface's account management feature. Note: The BliKVM Web interface should be accessed via http, not https Accessing BliKVM via SSH SSH is the most common method for remote access in the Linux world. You can access BliKVM via SSH. This method is used for managing the device: Linux, macOS: Open any terminal application and run: ssh blikvm@192.168.0.100 . Windows: Use PuTTY for the operation. The default blikvm user password is blikvm . You can use sudo -i to obtain root privileges. Optional: Updating BliKVM Software This section is not mandatory and should only be performed if you have physical access to the BliKVM for recovery purposes. Refer to the Software Update Guide for instructions. Note on BliKVM OS Terminal Usage Some configuration changes must be made under the root user (i.e., administrator). Obtaining Root Privileges If you are logged in via SSH, use sudo -i to obtain root privileges. BliKVM storage cards in versions v1 , v2 , and v3 are mounted in read-only mode . This protects the file system from being corrupted in the event of a sudden power outage. To edit any files and make changes, you need to remount the file system in read-write mode. You can determine the current mode by checking if ro or rw is displayed in the terminal. Enabling Write Mode To enable write mode, run the command rw . To disable write mode, run the command ro . If you receive a \"Device is busy\" message, execute the reboot command. What's next? Set up internet access using Port Forwarding or Tailscale VPN . Explore BLIKVM features using the table of contents on the left. Join our Discord to connect with the community and developers. Check out the GitHub - BLIKVM is a Open Source project! FAQ and Troubleshooting If you have any questions or run into problems, take a look at the FAQ . Seriously, it's really useful! We've probably already found a solution for it :) For any other help and support, you can contact us via the Discord chat .","title":"First Steps"},{"location":"first_steps/#first-steps","text":"","title":"First steps"},{"location":"first_steps/#first-power-on","text":"Power up the device. Do not turn off the device until it's fully booted for the first time After turning on the power, BLIKVM OS will perform the necessary operations on the memory card.","title":"First power on"},{"location":"first_steps/#getting-access-to-blikvm","text":"By default, BliKVM receives a dynamic IP address via DHCP. The IP address will be displayed on the BliKVM monitor. If you are using DIY hardware without a monitor, use the following tips: Finding BliKVM in the network You can determine the IP address of BliKVM using the following methods: Common Method: Access the web interface of your router and look for the allocated IP address list. The specific method depends on the router model. Linux Only: Use the command arp-scan --localnet . Linux, macOS, Windows: Download and run Angry IP Scanner . Windows PowerShell: Use the command arp -a . In the example below, let's assume your BliKVM has obtained the address 192.168.0.100 , and you have successfully found that address using the instructions above. Accessing BliKVM Web Interface In most networks, you can access BliKVM in any browser using the following URL: http://192.168.0.100/ . Google Chrome (Chromium), Firefox, and Safari work best with no extensions enabled. If one works and the other does not, it may be an issue with the browser or extensions. It is recommended to use a private browsing window or incognito mode. Internet Explorer and early versions of Microsoft Edge (non-Chromium version) are not supported. The default username is admin , and the password is also admin . Once logged in, you will have access to the main menu with essential functions. You can change system settings and passwords using the web interface's account management feature. Note: The BliKVM Web interface should be accessed via http, not https Accessing BliKVM via SSH SSH is the most common method for remote access in the Linux world. You can access BliKVM via SSH. This method is used for managing the device: Linux, macOS: Open any terminal application and run: ssh blikvm@192.168.0.100 . Windows: Use PuTTY for the operation. The default blikvm user password is blikvm . You can use sudo -i to obtain root privileges. Optional: Updating BliKVM Software This section is not mandatory and should only be performed if you have physical access to the BliKVM for recovery purposes. Refer to the Software Update Guide for instructions.","title":"Getting access to BLIKVM"},{"location":"first_steps/#note-on-blikvm-os-terminal-usage","text":"Some configuration changes must be made under the root user (i.e., administrator). Obtaining Root Privileges If you are logged in via SSH, use sudo -i to obtain root privileges. BliKVM storage cards in versions v1 , v2 , and v3 are mounted in read-only mode . This protects the file system from being corrupted in the event of a sudden power outage. To edit any files and make changes, you need to remount the file system in read-write mode. You can determine the current mode by checking if ro or rw is displayed in the terminal. Enabling Write Mode To enable write mode, run the command rw . To disable write mode, run the command ro . If you receive a \"Device is busy\" message, execute the reboot command.","title":"Note on BliKVM OS Terminal Usage"},{"location":"first_steps/#whats-next","text":"Set up internet access using Port Forwarding or Tailscale VPN . Explore BLIKVM features using the table of contents on the left. Join our Discord to connect with the community and developers. Check out the GitHub - BLIKVM is a Open Source project!","title":"What's next?"},{"location":"first_steps/#faq-and-troubleshooting","text":"If you have any questions or run into problems, take a look at the FAQ . Seriously, it's really useful! We've probably already found a solution for it :) For any other help and support, you can contact us via the Discord chat .","title":"FAQ and Troubleshooting"},{"location":"flashing_os/","text":"Flasing the OS image Micro-SD Card Requirements Minimum 16 Gb Class 10 is strongly recommended Why are there two versions of software, BLIKVM and PiKVM? What is the difference between the two versions? Which one should I choose? Can I use the official image of PiKVM? At the beginning of the BLIKVM project, the hardware was developed, and the software directly used PiKVM. With the continuous progress of the project, BLIKVM has developed its own software version of new architecture, which also lays the foundation for deeper cooperation with its own hardware; The core functions of BLIKVM and PiKVM are the same for users. Some subdivision functions are not the same. For example, BLIKVM supports multiple languages; Select according to your own use experience; You can use the PiKVM official image, but you need to make some adaptations according to the different hardware, mainly involving screens, fans, etc. Since the PiKVM official image is always updated, the specific adaptations need to be seen according to the specific situation you encounter at that time; Download the image Users who need to run PiKVM on v4 by yourself can refer to this doc . BLIKVM software You can find BliKVM v1 CM4, v2 PCIe, v3 HAT, v4 Allwinner BLIKVM software image, v1 v2 v3 use a same image. BLIKVM image The web UI style is as follows: Base on PiKVM software Raspberry 4B and CM4 board use different PiKVM software image. After entering the link, you can see the image named with each hardware version (HAT CM4 PCIe) PiKVM image Flash the image Tip Ignore request to format your sd card, this step is not nessessary. Choose the most suitable method for you. How to flash the eMMC on a Raspberry Pi Compute Module 4 Board Link If you use a CM4 with eMMC (like the CM4102016). You can use the v1 or v2 board to flash the eMMC. If your CM4 doesn't have eMMC, your device can just use a SD card to boot from. You don't need to look into this any further. Just flash to the SD card instead. First, use the jumper cap to short the boot pin (allowing you flash the EMMC memory). If you use BLIKVM CM4 version Then connect the data cable to the USB OTG interface. Power on blikvm and observe the act light, the green light is always on. If you use BLIKVM PCIe version Then connect the data cable to the USB-PC interface. Power on blikvm and observe the ACT and PWR LED isn't light. After initialize EMMC through the usbboot/rpiboot, the ACT and PWR LED light is always on. EMMC knowledge If you use Raspberry Pi compute modules such as CM3 eMMC or CM4 eMMC version\uff0cyou can initialize eMMC through the usbboot project. Note that the eMMC board version cannot use the SD card to boot the image. Instead, you need to flash the eMMC storage by using the usbboot project that emulates USB Mass Storage Device (MSD). From this video you can learn how-to flash the image quickly. How to flash the eMMC on a Raspberry Pi Compute Module 4 video Taking Ubuntu system as an example: Linux usbboot If you use an Micro-SD Card, you can skip the following steps and go to the next chapter down below. sudo apt install git libusb-1.0-0-dev pkg-config build-essential git clone --depth = 1 https://github.com/raspberrypi/usbboot cd usbboot make sudo ./rpiboot If the content in the image below appears, that indicates that the eMMC initialization was successful. The next step is to flash the image to your eMMC chip. Flash the Image (Linux, MacOS and Windows) We are using the \"RPi Imager\" application to flash the image in this example. Download and install the latest version of RPi Imager . Run RPi Imager: Press CHOOSE OS and select Use custom image at bottom of the list: After clicking on this item, select the image file ( .img.xz ), then click CHOOSE STORAGE : Insert the memory card into the card reader. Choose the card reader from this list (or eMMC flash storage, in case you are using a Raspberry Pi Compute module with a eMMC chip). Be careful and choose the right device: After choosing the memory card, press the WRITE button. Confirm the operation when you are asked about it: Wait for the process to finish. Get yourself a coffee or do some stretching :) Tip The process may hang at 99% for a long time, this is okay, just wait for it to complete 8.Remove the memory card after successful completion: Tip If an error occurs during flashing or booting PiKVM, repeat the process.","title":"Flashing OS"},{"location":"flashing_os/#flasing-the-os-image","text":"Micro-SD Card Requirements Minimum 16 Gb Class 10 is strongly recommended Why are there two versions of software, BLIKVM and PiKVM? What is the difference between the two versions? Which one should I choose? Can I use the official image of PiKVM? At the beginning of the BLIKVM project, the hardware was developed, and the software directly used PiKVM. With the continuous progress of the project, BLIKVM has developed its own software version of new architecture, which also lays the foundation for deeper cooperation with its own hardware; The core functions of BLIKVM and PiKVM are the same for users. Some subdivision functions are not the same. For example, BLIKVM supports multiple languages; Select according to your own use experience; You can use the PiKVM official image, but you need to make some adaptations according to the different hardware, mainly involving screens, fans, etc. Since the PiKVM official image is always updated, the specific adaptations need to be seen according to the specific situation you encounter at that time;","title":"Flasing the OS image"},{"location":"flashing_os/#download-the-image","text":"Users who need to run PiKVM on v4 by yourself can refer to this doc .","title":"Download the image"},{"location":"flashing_os/#blikvm-software","text":"You can find BliKVM v1 CM4, v2 PCIe, v3 HAT, v4 Allwinner BLIKVM software image, v1 v2 v3 use a same image. BLIKVM image The web UI style is as follows:","title":"BLIKVM software"},{"location":"flashing_os/#base-on-pikvm-software","text":"Raspberry 4B and CM4 board use different PiKVM software image. After entering the link, you can see the image named with each hardware version (HAT CM4 PCIe) PiKVM image","title":"Base on PiKVM software"},{"location":"flashing_os/#flash-the-image","text":"Tip Ignore request to format your sd card, this step is not nessessary. Choose the most suitable method for you. How to flash the eMMC on a Raspberry Pi Compute Module 4","title":"Flash the image"},{"location":"flashing_os/#board-link","text":"If you use a CM4 with eMMC (like the CM4102016). You can use the v1 or v2 board to flash the eMMC. If your CM4 doesn't have eMMC, your device can just use a SD card to boot from. You don't need to look into this any further. Just flash to the SD card instead. First, use the jumper cap to short the boot pin (allowing you flash the EMMC memory). If you use BLIKVM CM4 version Then connect the data cable to the USB OTG interface. Power on blikvm and observe the act light, the green light is always on. If you use BLIKVM PCIe version Then connect the data cable to the USB-PC interface. Power on blikvm and observe the ACT and PWR LED isn't light. After initialize EMMC through the usbboot/rpiboot, the ACT and PWR LED light is always on. EMMC knowledge If you use Raspberry Pi compute modules such as CM3 eMMC or CM4 eMMC version\uff0cyou can initialize eMMC through the usbboot project. Note that the eMMC board version cannot use the SD card to boot the image. Instead, you need to flash the eMMC storage by using the usbboot project that emulates USB Mass Storage Device (MSD). From this video you can learn how-to flash the image quickly. How to flash the eMMC on a Raspberry Pi Compute Module 4 video Taking Ubuntu system as an example:","title":"Board Link"},{"location":"flashing_os/#linux-usbboot","text":"If you use an Micro-SD Card, you can skip the following steps and go to the next chapter down below. sudo apt install git libusb-1.0-0-dev pkg-config build-essential git clone --depth = 1 https://github.com/raspberrypi/usbboot cd usbboot make sudo ./rpiboot If the content in the image below appears, that indicates that the eMMC initialization was successful. The next step is to flash the image to your eMMC chip.","title":"Linux usbboot"},{"location":"flashing_os/#flash-the-image-linux-macos-and-windows","text":"We are using the \"RPi Imager\" application to flash the image in this example. Download and install the latest version of RPi Imager . Run RPi Imager: Press CHOOSE OS and select Use custom image at bottom of the list: After clicking on this item, select the image file ( .img.xz ), then click CHOOSE STORAGE : Insert the memory card into the card reader. Choose the card reader from this list (or eMMC flash storage, in case you are using a Raspberry Pi Compute module with a eMMC chip). Be careful and choose the right device: After choosing the memory card, press the WRITE button. Confirm the operation when you are asked about it: Wait for the process to finish. Get yourself a coffee or do some stretching :) Tip The process may hang at 99% for a long time, this is okay, just wait for it to complete 8.Remove the memory card after successful completion: Tip If an error occurs during flashing or booting PiKVM, repeat the process.","title":"Flash the Image (Linux, MacOS and Windows)"},{"location":"hdmi-csi-i2s/","text":"HDMI to CSI&I2S bridge guide Convert HDMI signal acquisition into CSI signal and I2S audio signal. Currently, all platforms are supported (Zero, Pi3B, Pi4B, CM4, Pi5B), and the maximum capture resolution not only depends on the HDMI to CSI converter board you are using but also on the Raspberry Pi hardware version you have. Raspberry Pi hardware versions are primarily divided into two series, one supporting a maximum of 1080P60Hz and the other supporting a maximum of 1080P50Hz. The Raspberry Pi versions that support a maximum of 1080P60Hz are CM3, CM4, and Pi5B. The Raspberry Pi versions that support a maximum of 1080P50Hz are Zero, Zero 2, Pi3B, Pi4B, and so on. Introduction This module takes the incoming HDMI signal and converts it into a separate CSI signal and I2S audio signal. HDMI input supports up to 1080P60Hz. It works well on Raspberry Pi, there are three versions of this module in history (C779, C780, C790). C790 is the latest version. C790 has mitigated HDMI backpowering, and also has two csi channels and four csi channels at the same time. Features C790 Hardware Parameters HDMI input: supports up to 1080P60Hz on Raspberry Pi HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 4 CSI-2 channels & clock The CSI-2 interface, with 15 pin FPC seat, spacing 1.0 mm, is located on the front of the C790 module. The CSI-2 interface, with 22 pin FPC seat, spacing 0.5 mm, is located on the back of the C790 module. Size: 30 x 45 mm Install: 4 x M2.5 Power supply: 3.3V Weight: 10g Pi 4B only support 1080P50Hz, limited by the number of CSI-2 channels. CM4 support 1080P60HZ, So if you must use 1080P60Hz input, please use CM4 and C790 together. Interface C790 has two CSI output interfaces. In front of C790, the CSI-2 interface is 15 pin FPC seat, spacing 1.0 mm. In back of C790, the CSI-2 interface is 22 pin FPC seat, spacing 0.5 mm. Size Install C790 on Raspberry Pi for reference C780 C780A Hardware Parameters HDMI input: supports up to 1080P50Hz on Raspberry Pi(Limited by the number of CSI-2 channels) HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 2 CSI-2 channels & clock CSI-2 interface: 15 pin FPC seat, spacing 1.0 mm Size: 30 x 65 mm (unbroken PCB size); 30 x 45 mm (PCB size after breaking) Install: 6 x M2.5 Power supply: 3.3V Weight: 10g C780B Hardware Parameters HDMI input: supports up to 1080P60Hz on Raspberry Pi HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 4 CSI-2 channels & clock CSI-2 interface: 22 pin FPC seat, spacing 0.5 mm Size: 30 x 65 mm (unbroken PCB size); 30 x 45 mm (PCB size after breaking) Install: 6 x M2.5 Power supply: 3.3V Weight: 10g Interface The wiring of audio part is shown in Figure. Size The size of C780 is shown in the image below. There are 6 mounting holes with a diameter of 2.75mm, which are suitable for M2.5 screws. As shown in the image below, the user can directly fix the module on the Raspberry Pi Zero. C780 is designed to be broken, and the hole spacing before breaking can be perfectly installed with most series of Raspberry Pi. C779 Hardware Parameters HDMI input: supports up to 1080P50Hz on Raspberry Pi(Limited by the number of CSI-2 channels) HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 2 CSI-2 channels & clock CSI-2 interface: 15 pin FPC seat, spacing 1.0 mm Size: 35 x 50 mm Install: 4 x M2.5 Power supply: 3.3V Weight: 10g Size The size of C779 is shown in Figure. There are 4 mounting holes with a diameter of 2.75mm, which are suitable for M2.5 screws. CSI Interface Definitions The CSI (Camera Serial Interface) interfaces C779 and C780A have 15 pins each, while the C780B interface has 22 pins. The C790 interface is unique as it supports both 15 and 22 PIN configurations. Software Demo The use guide of C790/C780/C779 depends on the official Raspberry Pi OS version you are using. Different versions have different usage methods. If you have some questions, Join our BLIKVM Discord Community for Support, FAQ & News! To use the kernel drivers, please update your system. There are a few things that have changed with the 5.4 kernel, so these instructions are for 5.4 or later. If uname -a reports anything less, then fix this before proceeding. pi@raspberrypi:~ $ uname -a Linux raspberrypi 5 .10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux 1. Update & upgrade the Raspberry Pi system (It will take a long time depend on the different country) sudo apt-get update sudo apt-get upgrade 2. Enable camera module (the camera is enabled by default in Raspberry pi Bullseys OS) sudo raspi-config sudo reboot Navigate to \u2018Interfacing Options\u2019 and hit Enter. Now select the \u2018Camera\u2019 option, and hit the Enter key to enable it. Select \u201cFinish\u201d and select to reboot your Raspberry Pi. reboot is important!! Due to the absence of hardware encoding on the Pi5B, the software usage instructions for Pi platforms are currently divided into two sections: Pi5B configuration and configuration for other Pi platforms. In platforms such as Zero, Zero 2, Pi3B, Pi4B, etc., there is a reference for testing HDMI to CSI module demo. Edit /boot/config.txt (that will need sudo) sudo nano /boot/config.txt Add the line: dtoverlay=tc358743 Add the line if your shield support audio like C780 or C790. dtoverlay=tc358743-audio If (and only if) you have a device such as the C780 or C790 that supports the 22pin connector with all 4 lanes wired out, and are using a Compute Module with the CAM1 connector that also has all 4 lanes wired up, you can use: dtoverlay=tc358743,4lane=1 Check the amount of memory assigned to the CMA heap with \u201cdmesg | grep cma\u201d. The first line should be along the lines of: pi@raspberrypi:~ $ dmesg | grep cma [0.000000] cma: Reserved 256 MiB at 0x000000001ec00000 If it reports less than 96MB assigned to CMA, then edit /boot/cmdline.txt and add to the start of the line. Do NOT add any carriage returns. cma=96M Reboot. If all is well you should get a /dev/video0 device, and \u201cv4l2-ctl \u2013list-devices\u201d will tell you that it is provided by Unicam. After connecting all the cables, power on the Raspberry Pi, the C790 indicator light is normally green, and after opening the Raspberry Pi terminal, enter the following command: pi@raspberrypi:~ $ ls /dev/video0 /dev/video0 pi@raspberrypi:~ $ v4l2-ctl --list-devices bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/video18 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 unicam (platform:fe801000.csi): /dev/video0 /dev/video1 /dev/media2 This driver puts all the control in the hands of the user, or the user\u2019s application. By default there is no EDID loaded into the chip to allow it to tell the HDMI source what resolutions are supported. There are EDID editors around. If you create a file edid.txt, then you can push this to the device using the comment of edid.txt file: 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 cd ~ sudo nano edid.txt #copy the above commend in edid.txt, save&exit; pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums CTA-861 Header IT Formats Underscanned: yes Audio: yes YCbCr 4:4:4: no YCbCr 4:2:2: no HDMI Vendor-Specific Data Block Physical Address: 3.0.0.0 YCbCr 4:4:4 Deep Color: no 30-bit: no 36-bit: no 48-bit: no CTA-861 Video Capability Descriptor RGB Quantization Range: yes YCC Quantization Range: no PT: Supports both over- and underscan IT: Supports both over- and underscan CE: Supports both over- and underscan The driver does NOT automatically switch to the resolution detected. Use the command: pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings Active width: 1280 Active height: 720 Total width: 1650 Total height: 750 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (60.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 370 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 30 Vertical backporch: 0 Standards: Flags: You MUST set the timings via \u201cv4l2-ctl \u2013set-dv-bt-timings\u201d. You can pass in an index to the detected mode, or use: v4l2-ctl --set-dv-bt-timings query to select the currently detected timings. v4l2-ctl -V should now reflect the resolution detected. The chip supports two formats \u2013 BGR3 (the default) and UYVY. BGR3 is 24bpp, and UYVY is YUV4:2:2 16bpp. Over the normal 2 CSI-2 lanes the data rate is such that BGR3 can run at a maximum of 1080p30, whilst UYVY will go up to 1080p50. Use the following command to select UYVY, however your application may override that. v4l2-ctl -v pixelformat=UYVY Check that the audio drivers / card is available to ALSA. pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0 Note: card 1 means that the card number for the TC358743XBG is \u201c1\u201d and it might be different. Install GStreamer tool. sudo apt install gstreamer1.0-tools Check gstreamer tool version: pi@raspberrypi:~ $ gst-launch-1.0 --version gst-launch-1.0 version 1.18.4 GStreamer 1.18.4 http://packages.qa.debian.org/gstreamer1.0 Note: Different versions have different command line parameters, which is very annoying. Use gstreamer to record video and audio #GStreamer v1.14 command gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. foo.mkv is the output file. If your gstreamer is version 1.8 or above, you can try the following test command. In addition, alsasrc device=hw:1 represents the sound card of TC358743, you can use \u201carecord -l\u201d to query. #The command to recode a video with audio. (GStreamer 1.18.4) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. #The sample command to recode a video without audio. (C779 doesn't support audio) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Press CTRL+C to end recording. PS: We recommend that you modify the above framerate parameter to the actual frame rate of your HDMI signal, the actual frame rate value is from the result of \u2018v4l2-ctl \u2013query-dv-timings\u2019 command. For the above HDMI device, because the frame rate is 60, so we modify the framerate parameter to 60 like the followint command. Record the video only: gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Record the video and audio: (if your shield supports audio also) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. Note: alsasrc device=hw:1 \u2013 \u201c1\u201d means the audio card number, You must change to correct audio card number. (Query the car number via \u2018arecord \u2013l\u2019, refer to step 9) Pi5B platforms HDMI to CSI module test demo reference. Edit /boot/config.txt (sudo permission required). sudo nano /boot/config.txt Add the following content: dtoverlay=tc358743 If your modules (C780 and C790) support audio, add the following content to enable audio support. dtoverlay=tc358743-audio Reboot the Raspberry Pi and execute the following command to find the media node corresponding to the CSI as media0, under the rp1-cfe (platform: 1f00128000.csi) field: blikvm@blikvm:~ $ v4l2-ctl --list-devices pispbe (platform:1000880000.pisp_be): /dev/video20 /dev/video21 /dev/video22 /dev/video23 /dev/video24 /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31 /dev/video32 /dev/video33 /dev/video34 /dev/video35 /dev/video36 /dev/video37 /dev/media1 /dev/media2 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/media0 rpivid (platform:rpivid): /dev/video19 /dev/media3 Locate the node corresponding to tc358743 as v4l-subdev2, and the pad0 of rp1-cfe-csi2_ch0 as video0: blikvm@blikvm:~ $ media-ctl -d /dev/media0 -p Media controller API version 6.1.63 Media device information ------------------------ driver rp1-cfe model rp1-cfe serial bus info platform:1f00128000.csi hw revision 0x114666 driver version 6.1.63 Device topology - entity 1: csi2 (8 pads, 8 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev0 pad0: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"tc358743 4-000f\":0 [ENABLED,IMMUTABLE] pad1: Sink [fmt:unknown/8192x1 field:none] pad2: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad3: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad4: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch0\":0 [] -> \"pisp-fe\":0 [] pad5: Source [fmt:unknown/8192x1 field:none] -> \"rp1-cfe-embedded\":0 [] pad6: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch2\":0 [] -> \"pisp-fe\":0 [] pad7: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch3\":0 [] -> \"pisp-fe\":0 [] - entity 10: pisp-fe (5 pads, 7 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Sink [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"csi2\":4 [] <- \"csi2\":6 [] <- \"csi2\":7 [] pad1: Sink [fmt:FIXED/8192x1 field:none] <- \"rp1-cfe-fe_config\":0 [] pad2: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image0\":0 [] pad3: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image1\":0 [] pad4: Source [fmt:FIXED/8192x1 field:none] -> \"rp1-cfe-fe_stats\":0 [] - entity 16: tc358743 4-000f (1 pad, 1 link) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev2 pad0: Source [fmt:RGB888_1X24/640x480 field:none colorspace:srgb] [dv.caps:BT.656/1120 min:640x350@13000000 max:1920x1200@165000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom] [dv.detect:BT.656/1120 1920x1080p24 (2750x1125) stds: flags:] [dv.current:BT.656/1120 640x480p59 (800x525) stds:CEA-861,DMT flags:has-cea861-vic] -> \"csi2\":0 [ENABLED,IMMUTABLE] - entity 18: rp1-cfe-csi2_ch0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 pad0: Sink <- \"csi2\":4 [] - entity 22: rp1-cfe-embedded (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video1 pad0: Sink <- \"csi2\":5 [] - entity 26: rp1-cfe-csi2_ch2 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video2 pad0: Sink <- \"csi2\":6 [] - entity 30: rp1-cfe-csi2_ch3 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video3 pad0: Sink <- \"csi2\":7 [] - entity 34: rp1-cfe-fe_image0 (1 pad, 1 link) type Node subtype V4L flags 1 device node name /dev/video4 pad0: Sink <- \"pisp-fe\":2 [] - entity 38: rp1-cfe-fe_image1 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video5 pad0: Sink <- \"pisp-fe\":3 [] - entity 42: rp1-cfe-fe_stats (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video6 pad0: Sink <- \"pisp-fe\":4 [] - entity 46: rp1-cfe-fe_config (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video7 pad0: Source -> \"pisp-fe\":1 [] To query the current input source information, if the resolution displays as 0, it indicates that no input source signal has been detected. In this case, you should check the hardware connections and follow the steps mentioned above to troubleshoot. blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings Active width: 1920 Active height: 1080 Total width: 2750 Total height: 1125 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (24.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 830 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 45 Vertical backporch: 0 Standards: Flags: Confirm the current input source information. blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query BT timings set Initialize media0. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -r Connect CSI2's pad4 to rp1-cfe-csi2_ch0's pad0. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -l ''\\''csi2'\\'':4 -> '\\''rp1-cfe-csi2_ch0'\\'':0 [1]' Configure the media node. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' Set the output format. v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3 Capture two frames for testing to verify if tc358743 is functioning properly. Other methods, such as using GStreamer, are not currently available. v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='RGB3' --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll If you have installed a desktop version of Raspberry Pi, you can use ffplay to directly play YUV files. ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 hdmiin.yuv On a Windows computer, you can use software like 7yuv to view .yuv files. For the tutorial with an input format of 1920 1080, you should select BGR888 in the top right corner of 7yuv and set the resolution to 1920 1080 to view the two frames you just captured. Chip Docs TC358743 Documentation Packing List C790 Test Video C780A Test C780B Test Purchase Link Purchase C780 & C790 Purchase C779","title":"HDMI to CSI & Audio"},{"location":"hdmi-csi-i2s/#hdmi-to-csii2s-bridge-guide","text":"Convert HDMI signal acquisition into CSI signal and I2S audio signal. Currently, all platforms are supported (Zero, Pi3B, Pi4B, CM4, Pi5B), and the maximum capture resolution not only depends on the HDMI to CSI converter board you are using but also on the Raspberry Pi hardware version you have. Raspberry Pi hardware versions are primarily divided into two series, one supporting a maximum of 1080P60Hz and the other supporting a maximum of 1080P50Hz. The Raspberry Pi versions that support a maximum of 1080P60Hz are CM3, CM4, and Pi5B. The Raspberry Pi versions that support a maximum of 1080P50Hz are Zero, Zero 2, Pi3B, Pi4B, and so on.","title":"HDMI to CSI&I2S bridge guide"},{"location":"hdmi-csi-i2s/#introduction","text":"This module takes the incoming HDMI signal and converts it into a separate CSI signal and I2S audio signal. HDMI input supports up to 1080P60Hz. It works well on Raspberry Pi, there are three versions of this module in history (C779, C780, C790). C790 is the latest version. C790 has mitigated HDMI backpowering, and also has two csi channels and four csi channels at the same time.","title":"Introduction"},{"location":"hdmi-csi-i2s/#features","text":"","title":"Features"},{"location":"hdmi-csi-i2s/#c790","text":"Hardware Parameters HDMI input: supports up to 1080P60Hz on Raspberry Pi HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 4 CSI-2 channels & clock The CSI-2 interface, with 15 pin FPC seat, spacing 1.0 mm, is located on the front of the C790 module. The CSI-2 interface, with 22 pin FPC seat, spacing 0.5 mm, is located on the back of the C790 module. Size: 30 x 45 mm Install: 4 x M2.5 Power supply: 3.3V Weight: 10g Pi 4B only support 1080P50Hz, limited by the number of CSI-2 channels. CM4 support 1080P60HZ, So if you must use 1080P60Hz input, please use CM4 and C790 together. Interface C790 has two CSI output interfaces. In front of C790, the CSI-2 interface is 15 pin FPC seat, spacing 1.0 mm. In back of C790, the CSI-2 interface is 22 pin FPC seat, spacing 0.5 mm. Size Install C790 on Raspberry Pi for reference","title":"C790"},{"location":"hdmi-csi-i2s/#c780","text":"C780A Hardware Parameters HDMI input: supports up to 1080P50Hz on Raspberry Pi(Limited by the number of CSI-2 channels) HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 2 CSI-2 channels & clock CSI-2 interface: 15 pin FPC seat, spacing 1.0 mm Size: 30 x 65 mm (unbroken PCB size); 30 x 45 mm (PCB size after breaking) Install: 6 x M2.5 Power supply: 3.3V Weight: 10g C780B Hardware Parameters HDMI input: supports up to 1080P60Hz on Raspberry Pi HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 4 CSI-2 channels & clock CSI-2 interface: 22 pin FPC seat, spacing 0.5 mm Size: 30 x 65 mm (unbroken PCB size); 30 x 45 mm (PCB size after breaking) Install: 6 x M2.5 Power supply: 3.3V Weight: 10g Interface The wiring of audio part is shown in Figure. Size The size of C780 is shown in the image below. There are 6 mounting holes with a diameter of 2.75mm, which are suitable for M2.5 screws. As shown in the image below, the user can directly fix the module on the Raspberry Pi Zero. C780 is designed to be broken, and the hole spacing before breaking can be perfectly installed with most series of Raspberry Pi.","title":"C780"},{"location":"hdmi-csi-i2s/#c779","text":"Hardware Parameters HDMI input: supports up to 1080P50Hz on Raspberry Pi(Limited by the number of CSI-2 channels) HDMI to CSI-2 bridge chip: Toshiba TC358743XBG 2 CSI-2 channels & clock CSI-2 interface: 15 pin FPC seat, spacing 1.0 mm Size: 35 x 50 mm Install: 4 x M2.5 Power supply: 3.3V Weight: 10g Size The size of C779 is shown in Figure. There are 4 mounting holes with a diameter of 2.75mm, which are suitable for M2.5 screws.","title":"C779"},{"location":"hdmi-csi-i2s/#csi-interface-definitions","text":"The CSI (Camera Serial Interface) interfaces C779 and C780A have 15 pins each, while the C780B interface has 22 pins. The C790 interface is unique as it supports both 15 and 22 PIN configurations.","title":"CSI Interface Definitions"},{"location":"hdmi-csi-i2s/#software-demo","text":"The use guide of C790/C780/C779 depends on the official Raspberry Pi OS version you are using. Different versions have different usage methods. If you have some questions, Join our BLIKVM Discord Community for Support, FAQ & News! To use the kernel drivers, please update your system. There are a few things that have changed with the 5.4 kernel, so these instructions are for 5.4 or later. If uname -a reports anything less, then fix this before proceeding. pi@raspberrypi:~ $ uname -a Linux raspberrypi 5 .10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux 1. Update & upgrade the Raspberry Pi system (It will take a long time depend on the different country) sudo apt-get update sudo apt-get upgrade 2. Enable camera module (the camera is enabled by default in Raspberry pi Bullseys OS) sudo raspi-config sudo reboot Navigate to \u2018Interfacing Options\u2019 and hit Enter. Now select the \u2018Camera\u2019 option, and hit the Enter key to enable it. Select \u201cFinish\u201d and select to reboot your Raspberry Pi. reboot is important!! Due to the absence of hardware encoding on the Pi5B, the software usage instructions for Pi platforms are currently divided into two sections: Pi5B configuration and configuration for other Pi platforms. In platforms such as Zero, Zero 2, Pi3B, Pi4B, etc., there is a reference for testing HDMI to CSI module demo. Edit /boot/config.txt (that will need sudo) sudo nano /boot/config.txt Add the line: dtoverlay=tc358743 Add the line if your shield support audio like C780 or C790. dtoverlay=tc358743-audio If (and only if) you have a device such as the C780 or C790 that supports the 22pin connector with all 4 lanes wired out, and are using a Compute Module with the CAM1 connector that also has all 4 lanes wired up, you can use: dtoverlay=tc358743,4lane=1 Check the amount of memory assigned to the CMA heap with \u201cdmesg | grep cma\u201d. The first line should be along the lines of: pi@raspberrypi:~ $ dmesg | grep cma [0.000000] cma: Reserved 256 MiB at 0x000000001ec00000 If it reports less than 96MB assigned to CMA, then edit /boot/cmdline.txt and add to the start of the line. Do NOT add any carriage returns. cma=96M Reboot. If all is well you should get a /dev/video0 device, and \u201cv4l2-ctl \u2013list-devices\u201d will tell you that it is provided by Unicam. After connecting all the cables, power on the Raspberry Pi, the C790 indicator light is normally green, and after opening the Raspberry Pi terminal, enter the following command: pi@raspberrypi:~ $ ls /dev/video0 /dev/video0 pi@raspberrypi:~ $ v4l2-ctl --list-devices bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/video18 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 unicam (platform:fe801000.csi): /dev/video0 /dev/video1 /dev/media2 This driver puts all the control in the hands of the user, or the user\u2019s application. By default there is no EDID loaded into the chip to allow it to tell the HDMI source what resolutions are supported. There are EDID editors around. If you create a file edid.txt, then you can push this to the device using the comment of edid.txt file: 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 cd ~ sudo nano edid.txt #copy the above commend in edid.txt, save&exit; pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums CTA-861 Header IT Formats Underscanned: yes Audio: yes YCbCr 4:4:4: no YCbCr 4:2:2: no HDMI Vendor-Specific Data Block Physical Address: 3.0.0.0 YCbCr 4:4:4 Deep Color: no 30-bit: no 36-bit: no 48-bit: no CTA-861 Video Capability Descriptor RGB Quantization Range: yes YCC Quantization Range: no PT: Supports both over- and underscan IT: Supports both over- and underscan CE: Supports both over- and underscan The driver does NOT automatically switch to the resolution detected. Use the command: pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings Active width: 1280 Active height: 720 Total width: 1650 Total height: 750 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (60.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 370 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 30 Vertical backporch: 0 Standards: Flags: You MUST set the timings via \u201cv4l2-ctl \u2013set-dv-bt-timings\u201d. You can pass in an index to the detected mode, or use: v4l2-ctl --set-dv-bt-timings query to select the currently detected timings. v4l2-ctl -V should now reflect the resolution detected. The chip supports two formats \u2013 BGR3 (the default) and UYVY. BGR3 is 24bpp, and UYVY is YUV4:2:2 16bpp. Over the normal 2 CSI-2 lanes the data rate is such that BGR3 can run at a maximum of 1080p30, whilst UYVY will go up to 1080p50. Use the following command to select UYVY, however your application may override that. v4l2-ctl -v pixelformat=UYVY Check that the audio drivers / card is available to ALSA. pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0 Note: card 1 means that the card number for the TC358743XBG is \u201c1\u201d and it might be different. Install GStreamer tool. sudo apt install gstreamer1.0-tools Check gstreamer tool version: pi@raspberrypi:~ $ gst-launch-1.0 --version gst-launch-1.0 version 1.18.4 GStreamer 1.18.4 http://packages.qa.debian.org/gstreamer1.0 Note: Different versions have different command line parameters, which is very annoying. Use gstreamer to record video and audio #GStreamer v1.14 command gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. foo.mkv is the output file. If your gstreamer is version 1.8 or above, you can try the following test command. In addition, alsasrc device=hw:1 represents the sound card of TC358743, you can use \u201carecord -l\u201d to query. #The command to recode a video with audio. (GStreamer 1.18.4) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. #The sample command to recode a video without audio. (C779 doesn't support audio) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Press CTRL+C to end recording. PS: We recommend that you modify the above framerate parameter to the actual frame rate of your HDMI signal, the actual frame rate value is from the result of \u2018v4l2-ctl \u2013query-dv-timings\u2019 command. For the above HDMI device, because the frame rate is 60, so we modify the framerate parameter to 60 like the followint command. Record the video only: gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Record the video and audio: (if your shield supports audio also) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. Note: alsasrc device=hw:1 \u2013 \u201c1\u201d means the audio card number, You must change to correct audio card number. (Query the car number via \u2018arecord \u2013l\u2019, refer to step 9) Pi5B platforms HDMI to CSI module test demo reference. Edit /boot/config.txt (sudo permission required). sudo nano /boot/config.txt Add the following content: dtoverlay=tc358743 If your modules (C780 and C790) support audio, add the following content to enable audio support. dtoverlay=tc358743-audio Reboot the Raspberry Pi and execute the following command to find the media node corresponding to the CSI as media0, under the rp1-cfe (platform: 1f00128000.csi) field: blikvm@blikvm:~ $ v4l2-ctl --list-devices pispbe (platform:1000880000.pisp_be): /dev/video20 /dev/video21 /dev/video22 /dev/video23 /dev/video24 /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31 /dev/video32 /dev/video33 /dev/video34 /dev/video35 /dev/video36 /dev/video37 /dev/media1 /dev/media2 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/media0 rpivid (platform:rpivid): /dev/video19 /dev/media3 Locate the node corresponding to tc358743 as v4l-subdev2, and the pad0 of rp1-cfe-csi2_ch0 as video0: blikvm@blikvm:~ $ media-ctl -d /dev/media0 -p Media controller API version 6.1.63 Media device information ------------------------ driver rp1-cfe model rp1-cfe serial bus info platform:1f00128000.csi hw revision 0x114666 driver version 6.1.63 Device topology - entity 1: csi2 (8 pads, 8 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev0 pad0: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"tc358743 4-000f\":0 [ENABLED,IMMUTABLE] pad1: Sink [fmt:unknown/8192x1 field:none] pad2: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad3: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad4: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch0\":0 [] -> \"pisp-fe\":0 [] pad5: Source [fmt:unknown/8192x1 field:none] -> \"rp1-cfe-embedded\":0 [] pad6: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch2\":0 [] -> \"pisp-fe\":0 [] pad7: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch3\":0 [] -> \"pisp-fe\":0 [] - entity 10: pisp-fe (5 pads, 7 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Sink [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"csi2\":4 [] <- \"csi2\":6 [] <- \"csi2\":7 [] pad1: Sink [fmt:FIXED/8192x1 field:none] <- \"rp1-cfe-fe_config\":0 [] pad2: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image0\":0 [] pad3: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image1\":0 [] pad4: Source [fmt:FIXED/8192x1 field:none] -> \"rp1-cfe-fe_stats\":0 [] - entity 16: tc358743 4-000f (1 pad, 1 link) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev2 pad0: Source [fmt:RGB888_1X24/640x480 field:none colorspace:srgb] [dv.caps:BT.656/1120 min:640x350@13000000 max:1920x1200@165000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom] [dv.detect:BT.656/1120 1920x1080p24 (2750x1125) stds: flags:] [dv.current:BT.656/1120 640x480p59 (800x525) stds:CEA-861,DMT flags:has-cea861-vic] -> \"csi2\":0 [ENABLED,IMMUTABLE] - entity 18: rp1-cfe-csi2_ch0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 pad0: Sink <- \"csi2\":4 [] - entity 22: rp1-cfe-embedded (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video1 pad0: Sink <- \"csi2\":5 [] - entity 26: rp1-cfe-csi2_ch2 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video2 pad0: Sink <- \"csi2\":6 [] - entity 30: rp1-cfe-csi2_ch3 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video3 pad0: Sink <- \"csi2\":7 [] - entity 34: rp1-cfe-fe_image0 (1 pad, 1 link) type Node subtype V4L flags 1 device node name /dev/video4 pad0: Sink <- \"pisp-fe\":2 [] - entity 38: rp1-cfe-fe_image1 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video5 pad0: Sink <- \"pisp-fe\":3 [] - entity 42: rp1-cfe-fe_stats (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video6 pad0: Sink <- \"pisp-fe\":4 [] - entity 46: rp1-cfe-fe_config (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video7 pad0: Source -> \"pisp-fe\":1 [] To query the current input source information, if the resolution displays as 0, it indicates that no input source signal has been detected. In this case, you should check the hardware connections and follow the steps mentioned above to troubleshoot. blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings Active width: 1920 Active height: 1080 Total width: 2750 Total height: 1125 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (24.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 830 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 45 Vertical backporch: 0 Standards: Flags: Confirm the current input source information. blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query BT timings set Initialize media0. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -r Connect CSI2's pad4 to rp1-cfe-csi2_ch0's pad0. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -l ''\\''csi2'\\'':4 -> '\\''rp1-cfe-csi2_ch0'\\'':0 [1]' Configure the media node. blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' Set the output format. v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3 Capture two frames for testing to verify if tc358743 is functioning properly. Other methods, such as using GStreamer, are not currently available. v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='RGB3' --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll If you have installed a desktop version of Raspberry Pi, you can use ffplay to directly play YUV files. ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 hdmiin.yuv On a Windows computer, you can use software like 7yuv to view .yuv files. For the tutorial with an input format of 1920 1080, you should select BGR888 in the top right corner of 7yuv and set the resolution to 1920 1080 to view the two frames you just captured.","title":"Software Demo"},{"location":"hdmi-csi-i2s/#chip-docs","text":"TC358743 Documentation","title":"Chip Docs"},{"location":"hdmi-csi-i2s/#packing-list","text":"C790","title":"Packing List"},{"location":"hdmi-csi-i2s/#test-video","text":"C780A Test C780B Test","title":"Test Video"},{"location":"hdmi-csi-i2s/#purchase-link","text":"Purchase C780 & C790 Purchase C779","title":"Purchase Link"},{"location":"hid/","text":"Video Mouse Keyboard Shortcuts After v1.4.5, custom shortcut keys are supported. Find the shortcuts configuration item, where key is the button name on the web UI and value is the specific button. sudo -s vim /mnt/exec/release/config/app.json ## default config\uff1a \"shortcuts\": { \"Ctrl+Alt+Del\": [\"ControlLeft\",\"AltLeft\",\"Delete\"], \"Alt+Tab\": [\"AltLeft\",\"Tab\"], \"Alt+F4\": [\"AltLeft\",\"F4\"], \"Alt+Enter\": [\"AltLeft\",\"Enter\"], \"Ctrl+W\": [\"ControlLeft\",\"KeyW\"] } The key names have uniqueness, and the specific key names are provided below \"{backspace}\": \"Backspace\", \"{tab}\": \"Tab\", \"{enter}\": \"Enter\", \"{shiftleft}\": \"ShiftLeft\", \"{shiftright}\": \"ShiftRight\", \"{altleft}\": \"AltLeft\", \"{altright}\": \"AltRight\", \"{prtscr}\": \"PrtScr\", \"{pause}\": \"Pause\", \"{scrolllock}\": \"ScrollLock\", \"{controlleft}\": \"ControlLeft\", \"{controlright}\": \"ControlRight\", \"{metaleft}\": \"MetaLeft\", \"{metaright}\": \"MetaRight\", \"{capslock}\": \"CapsLock\", \"{escape}\": \"Escape\", \"{space}\": \"Space\", \"{pageup}\": \"PageUp\", \"{pagedown}\": \"PageDown\", \"{end}\": \"End\", \"{home}\": \"Home\", \"{arrowleft}\": \"ArrowLeft\", \"{arrowup}\": \"ArrowUp\", \"{arrowright}\": \"ArrowRight\", \"{arrowdown}\": \"ArrowDown\", \"{insert}\": \"Insert\", \"{delete}\": \"Delete\", // Digits keys 1: \"Digit1\", 2: \"Digit2\", 3: \"Digit3\", 4: \"Digit4\", 5: \"Digit5\", 6: \"Digit6\", 7: \"Digit7\", 8: \"Digit8\", 9: \"Digit9\", 0: \"Digit0\", // \"!\": \"Digit1\", // ! maps to the '1' key \"@\": \"Digit2\", // @ maps to the '2' key \"#\": \"Digit3\", // # maps to the '3' key $: \"Digit4\", // $ maps to the '4' key \"%\": \"Digit5\", // % maps to the '5' key \"^\": \"Digit6\", // ^ maps to the '6' key \"&\": \"Digit7\", // & maps to the '7' key \"*\": \"Digit8\", // * maps to the '8' key \"(\": \"Digit9\", // ( maps to the '9' key \")\": \"Digit0\", // ) maps to the '0' key a: \"KeyA\", b: \"KeyB\", c: \"KeyC\", d: \"KeyD\", e: \"KeyE\", f: \"KeyF\", g: \"KeyG\", h: \"KeyH\", i: \"KeyI\", j: \"KeyJ\", k: \"KeyK\", l: \"KeyL\", m: \"KeyM\", n: \"KeyN\", o: \"KeyO\", p: \"KeyP\", q: \"KeyQ\", r: \"KeyR\", s: \"KeyS\", t: \"KeyT\", u: \"KeyU\", v: \"KeyV\", w: \"KeyW\", x: \"KeyX\", y: \"KeyY\", z: \"KeyZ\", // A: \"KeyA\", B: \"KeyB\", C: \"KeyC\", D: \"KeyD\", E: \"KeyE\", F: \"KeyF\", G: \"KeyG\", H: \"KeyH\", I: \"KeyI\", J: \"KeyJ\", K: \"KeyK\", L: \"KeyL\", M: \"KeyM\", N: \"KeyN\", O: \"KeyO\", P: \"KeyP\", Q: \"KeyQ\", R: \"KeyR\", S: \"KeyS\", T: \"KeyT\", U: \"KeyU\", V: \"KeyV\", W: \"KeyW\", X: \"KeyX\", Y: \"KeyY\", Z: \"KeyZ\", \"-\": \"Minus\", _: \"Minus\", \"=\": \"Equal\", \"+\": \"Equal\", \"[\": \"BracketLeft\", \"{\": \"BracketLeft\", \"]\": \"BracketRight\", \"}\": \"BracketRight\", \"|\": \"Backslash\", \"\\\\\": \"Backslash\", \"`\": \"Backquote\", \"~\": \"Backquote\", \";\": \"Semicolon\", \":\": \"Semicolon\", \"'\": \"Quote\", '\"': \"Quote\", \",\": \"Comma\", \"<\": \"Comma\", \".\": \"Period\", \">\": \"Period\", \"/\": \"Slash\", \"?\": \"Slash\", // Numpad keys \"{numpad0}\": \"Numpad0\", \"{numpad1}\": \"Numpad1\", \"{numpad2}\": \"Numpad2\", \"{numpad3}\": \"Numpad3\", \"{numpad4}\": \"Numpad4\", \"{numpad5}\": \"Numpad5\", \"{numpad6}\": \"Numpad6\", \"{numpad7}\": \"Numpad7\", \"{numpad8}\": \"Numpad8\", \"{numpad9}\": \"Numpad9\", \"{numlock}\": \"numlock\", \"{numpadmultiply}\": \"NumpadMultiply\", \"{numpadadd}\": \"NumpadAdd\", \"{numpadsubtract}\": \"NumpadSubtract\", \"{numpaddecimal}\": \"NumpadDecimal\", \"{numpaddivide}\": \"NumpadDivide\", \"{numpadenter}\": \"NumpadEnter\", // Function keys \"{f1}\": \"F1\", \"{f2}\": \"F2\", \"{f3}\": \"F3\", \"{f4}\": \"F4\", \"{f5}\": \"F5\", \"{f6}\": \"F6\", \"{f7}\": \"F7\", \"{f8}\": \"F8\", \"{f9}\": \"F9\", \"{f10}\": \"F10\", \"{f11}\": \"F11\", \"{f12}\": \"F12\"","title":"Keyboard"},{"location":"hid/#video-mouse-keyboard","text":"","title":"Video Mouse Keyboard"},{"location":"hid/#shortcuts","text":"After v1.4.5, custom shortcut keys are supported. Find the shortcuts configuration item, where key is the button name on the web UI and value is the specific button. sudo -s vim /mnt/exec/release/config/app.json ## default config\uff1a \"shortcuts\": { \"Ctrl+Alt+Del\": [\"ControlLeft\",\"AltLeft\",\"Delete\"], \"Alt+Tab\": [\"AltLeft\",\"Tab\"], \"Alt+F4\": [\"AltLeft\",\"F4\"], \"Alt+Enter\": [\"AltLeft\",\"Enter\"], \"Ctrl+W\": [\"ControlLeft\",\"KeyW\"] } The key names have uniqueness, and the specific key names are provided below \"{backspace}\": \"Backspace\", \"{tab}\": \"Tab\", \"{enter}\": \"Enter\", \"{shiftleft}\": \"ShiftLeft\", \"{shiftright}\": \"ShiftRight\", \"{altleft}\": \"AltLeft\", \"{altright}\": \"AltRight\", \"{prtscr}\": \"PrtScr\", \"{pause}\": \"Pause\", \"{scrolllock}\": \"ScrollLock\", \"{controlleft}\": \"ControlLeft\", \"{controlright}\": \"ControlRight\", \"{metaleft}\": \"MetaLeft\", \"{metaright}\": \"MetaRight\", \"{capslock}\": \"CapsLock\", \"{escape}\": \"Escape\", \"{space}\": \"Space\", \"{pageup}\": \"PageUp\", \"{pagedown}\": \"PageDown\", \"{end}\": \"End\", \"{home}\": \"Home\", \"{arrowleft}\": \"ArrowLeft\", \"{arrowup}\": \"ArrowUp\", \"{arrowright}\": \"ArrowRight\", \"{arrowdown}\": \"ArrowDown\", \"{insert}\": \"Insert\", \"{delete}\": \"Delete\", // Digits keys 1: \"Digit1\", 2: \"Digit2\", 3: \"Digit3\", 4: \"Digit4\", 5: \"Digit5\", 6: \"Digit6\", 7: \"Digit7\", 8: \"Digit8\", 9: \"Digit9\", 0: \"Digit0\", // \"!\": \"Digit1\", // ! maps to the '1' key \"@\": \"Digit2\", // @ maps to the '2' key \"#\": \"Digit3\", // # maps to the '3' key $: \"Digit4\", // $ maps to the '4' key \"%\": \"Digit5\", // % maps to the '5' key \"^\": \"Digit6\", // ^ maps to the '6' key \"&\": \"Digit7\", // & maps to the '7' key \"*\": \"Digit8\", // * maps to the '8' key \"(\": \"Digit9\", // ( maps to the '9' key \")\": \"Digit0\", // ) maps to the '0' key a: \"KeyA\", b: \"KeyB\", c: \"KeyC\", d: \"KeyD\", e: \"KeyE\", f: \"KeyF\", g: \"KeyG\", h: \"KeyH\", i: \"KeyI\", j: \"KeyJ\", k: \"KeyK\", l: \"KeyL\", m: \"KeyM\", n: \"KeyN\", o: \"KeyO\", p: \"KeyP\", q: \"KeyQ\", r: \"KeyR\", s: \"KeyS\", t: \"KeyT\", u: \"KeyU\", v: \"KeyV\", w: \"KeyW\", x: \"KeyX\", y: \"KeyY\", z: \"KeyZ\", // A: \"KeyA\", B: \"KeyB\", C: \"KeyC\", D: \"KeyD\", E: \"KeyE\", F: \"KeyF\", G: \"KeyG\", H: \"KeyH\", I: \"KeyI\", J: \"KeyJ\", K: \"KeyK\", L: \"KeyL\", M: \"KeyM\", N: \"KeyN\", O: \"KeyO\", P: \"KeyP\", Q: \"KeyQ\", R: \"KeyR\", S: \"KeyS\", T: \"KeyT\", U: \"KeyU\", V: \"KeyV\", W: \"KeyW\", X: \"KeyX\", Y: \"KeyY\", Z: \"KeyZ\", \"-\": \"Minus\", _: \"Minus\", \"=\": \"Equal\", \"+\": \"Equal\", \"[\": \"BracketLeft\", \"{\": \"BracketLeft\", \"]\": \"BracketRight\", \"}\": \"BracketRight\", \"|\": \"Backslash\", \"\\\\\": \"Backslash\", \"`\": \"Backquote\", \"~\": \"Backquote\", \";\": \"Semicolon\", \":\": \"Semicolon\", \"'\": \"Quote\", '\"': \"Quote\", \",\": \"Comma\", \"<\": \"Comma\", \".\": \"Period\", \">\": \"Period\", \"/\": \"Slash\", \"?\": \"Slash\", // Numpad keys \"{numpad0}\": \"Numpad0\", \"{numpad1}\": \"Numpad1\", \"{numpad2}\": \"Numpad2\", \"{numpad3}\": \"Numpad3\", \"{numpad4}\": \"Numpad4\", \"{numpad5}\": \"Numpad5\", \"{numpad6}\": \"Numpad6\", \"{numpad7}\": \"Numpad7\", \"{numpad8}\": \"Numpad8\", \"{numpad9}\": \"Numpad9\", \"{numlock}\": \"numlock\", \"{numpadmultiply}\": \"NumpadMultiply\", \"{numpadadd}\": \"NumpadAdd\", \"{numpadsubtract}\": \"NumpadSubtract\", \"{numpaddecimal}\": \"NumpadDecimal\", \"{numpaddivide}\": \"NumpadDivide\", \"{numpadenter}\": \"NumpadEnter\", // Function keys \"{f1}\": \"F1\", \"{f2}\": \"F2\", \"{f3}\": \"F3\", \"{f4}\": \"F4\", \"{f5}\": \"F5\", \"{f6}\": \"F6\", \"{f7}\": \"F7\", \"{f8}\": \"F8\", \"{f9}\": \"F9\", \"{f10}\": \"F10\", \"{f11}\": \"F11\", \"{f12}\": \"F12\"","title":"Shortcuts"},{"location":"https/","text":"Encryption Certificate Starting from version 1.4.4, BlikVM supports both HTTP and HTTPS modes. By default, it starts in HTTP mode. To start in HTTPS mode, modify the following configuration: sudo -s vim /mnt/exec/release/config/app.json Find the configuration below and change the protocol field from http to https, and change the port from 80 to 443. The key and cert are located in /mnt/exec/release/lib/https/, and users can replace them with their own. \"server\": { \"protocol\": \"http\", \"port\":80, \"ssl\": { \"key\": \"./lib/https/key.pem\", \"cert\": \"./lib/https/cert.pem\" }","title":"Encrypt certificates"},{"location":"https/#encryption-certificate","text":"Starting from version 1.4.4, BlikVM supports both HTTP and HTTPS modes. By default, it starts in HTTP mode. To start in HTTPS mode, modify the following configuration: sudo -s vim /mnt/exec/release/config/app.json Find the configuration below and change the protocol field from http to https, and change the port from 80 to 443. The key and cert are located in /mnt/exec/release/lib/https/, and users can replace them with their own. \"server\": { \"protocol\": \"http\", \"port\":80, \"ssl\": { \"key\": \"./lib/https/key.pem\", \"cert\": \"./lib/https/cert.pem\" }","title":"Encryption Certificate"},{"location":"make-image/","text":"Make your own image When you have made modifications to an image and want to create your own image, you can follow the steps below on Linux to create a minimal image. Firstly, use the gparted software to open the SD card of the image you want to create. Use gparted to partition the unused space and set it as unallocated. This ensures that this portion of empty space without any valid content is not included in the image creation. Next, use the fdisk command to view the size of the available space, as shown in the following image, which is 10151935. Then, use the dd command to write to an empty img file. Set the count value to be greater than the size of the volume end obtained from fdisk by at least 1. touch blikvm-armbian-v4-20230623.img sudo dd if = /dev/sdb of = ./blikvm-armbian-v4-20230623.img bs = 512 count = 10151936 Wait for the dd command to finish executing.","title":"Make Image"},{"location":"make-image/#make-your-own-image","text":"When you have made modifications to an image and want to create your own image, you can follow the steps below on Linux to create a minimal image. Firstly, use the gparted software to open the SD card of the image you want to create. Use gparted to partition the unused space and set it as unallocated. This ensures that this portion of empty space without any valid content is not included in the image creation. Next, use the fdisk command to view the size of the available space, as shown in the following image, which is 10151935. Then, use the dd command to write to an empty img file. Set the count value to be greater than the size of the volume end obtained from fdisk by at least 1. touch blikvm-armbian-v4-20230623.img sudo dd if = /dev/sdb of = ./blikvm-armbian-v4-20230623.img bs = 512 count = 10151936 Wait for the dd command to finish executing.","title":"Make your own image"},{"location":"modify_pikvm_image/","text":"Modifying PiKVM image to work with BliKVM hardware Because the blikvm hardware implementation scheme and PiKVM hardware implementation scheme are not exactly the same, you need to modify some errors through the following configuration for the official image of PiKVM. Of course, you can use the configured image . Fan config Since BliKVM's fan hardware is different to PiKVM's, you need to replace the control fan script first. The following default starting fan temperature is 40 degrees Celsius su - rw git clone https://github.com/ThomasVon2021/blikvm.git cd blikvm/package/kvmd-fan bash install-kvmd-fan.sh ro Edit the /etc/kvmd/override.yaml file and add the following content to remove the web UI error warning about fans. kvmd: info: fan: unix: '' Check EDID file for 1080P60Hz input The function of the EDID file is to set the controlled computer to input according to the expected resolution. Since the image EDID file of PiKVM in different periods does not necessarily meet 1080P60Hz, when you use the CM4 version of hardware, it is found that the default output of the controlled computer is not 1080P60Hz, you can modify /etc/kvmd/tc358743-edid.hex to the following contents 00FFFFFFFFFFFF005262888800888888 1C150103800000780AEE91A3544C9926 0F505400000001010101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0054 6F73686962612D4832430A20000000FD 003B3D0F2E0F1E0A202020202020014F 020323454F041303021211012021A23C 3D3E1F102309070766030C00300080E3 007F8C8C0AD08A20E02D10103E9600C4 8E210000188C0AD08A20E02D10103E96 00138E210000188C0AA01451F0160026 7C4300138E2100009800000000000000 00000000000000000000000000000000 00000000000000000000000000000087 make sure /boot/config.txt has the 4lane=1 entry in it for 1080p60hz support # Video and audio dtoverlay=tc358743,4lane=1 dtoverlay=tc358743-audio If you use webrtc can't get audio, try to edit /etc/kvmd/janus/janus.plugin.ustreamer.jcfg to add audio support. audio: { device = \"hw:0,0\" tc358743 = \"/dev/kvmd-video\" } OLED Follow the method below to enable OLED. If you use PiKVM official image, log in to PiKVM and run these commands: # rw # systemctl enable --now kvmd-oled //Enable OLED # ro If the oled still can't work, you need to check whether there has \"dtparam=i2c_arm=on\" in \"/boot/config.txt\" file, and whether there has \"i2c-dev\" in \"/etc/modules-load.d/i2c.conf\" file. If not, please create and add them. If it still does not work after the above configuration, please burn the image provided by blikvm for testing to check whether the OLED hardware is damaged. Config about v4mini image If you want to PiKVM v4mini image for blikvm v1 and v2, because v4mini image uses different gpio pins for ATX controls, so you will need the following override if you want to run v4mini image on your blikvm v1 or v2 version and be able to use ATX controls; if you don't make this change, ATX controls won't work properly (the led pins are different); Edit the /etc/kvmd/override.yaml file and add the following: kvmd: ### disable fan socket check ### info: fan: unix: '' atx: hdd_led_pin: 22 power_led_pin: 24 power_switch_pin: 23 reset_switch_pin: 27 type: gpio gpio: scheme: __v3_usb_breaker__: pin: 5 mode: output initial: false pulse: delay: 0","title":"Config for PiKVM OS"},{"location":"modify_pikvm_image/#modifying-pikvm-image-to-work-with-blikvm-hardware","text":"Because the blikvm hardware implementation scheme and PiKVM hardware implementation scheme are not exactly the same, you need to modify some errors through the following configuration for the official image of PiKVM. Of course, you can use the configured image .","title":"Modifying PiKVM image to work with BliKVM hardware"},{"location":"modify_pikvm_image/#fan-config","text":"Since BliKVM's fan hardware is different to PiKVM's, you need to replace the control fan script first. The following default starting fan temperature is 40 degrees Celsius su - rw git clone https://github.com/ThomasVon2021/blikvm.git cd blikvm/package/kvmd-fan bash install-kvmd-fan.sh ro Edit the /etc/kvmd/override.yaml file and add the following content to remove the web UI error warning about fans. kvmd: info: fan: unix: ''","title":"Fan config"},{"location":"modify_pikvm_image/#check-edid-file-for-1080p60hz-input","text":"The function of the EDID file is to set the controlled computer to input according to the expected resolution. Since the image EDID file of PiKVM in different periods does not necessarily meet 1080P60Hz, when you use the CM4 version of hardware, it is found that the default output of the controlled computer is not 1080P60Hz, you can modify /etc/kvmd/tc358743-edid.hex to the following contents 00FFFFFFFFFFFF005262888800888888 1C150103800000780AEE91A3544C9926 0F505400000001010101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0054 6F73686962612D4832430A20000000FD 003B3D0F2E0F1E0A202020202020014F 020323454F041303021211012021A23C 3D3E1F102309070766030C00300080E3 007F8C8C0AD08A20E02D10103E9600C4 8E210000188C0AD08A20E02D10103E96 00138E210000188C0AA01451F0160026 7C4300138E2100009800000000000000 00000000000000000000000000000000 00000000000000000000000000000087 make sure /boot/config.txt has the 4lane=1 entry in it for 1080p60hz support # Video and audio dtoverlay=tc358743,4lane=1 dtoverlay=tc358743-audio If you use webrtc can't get audio, try to edit /etc/kvmd/janus/janus.plugin.ustreamer.jcfg to add audio support. audio: { device = \"hw:0,0\" tc358743 = \"/dev/kvmd-video\" }","title":"Check EDID file for 1080P60Hz input"},{"location":"modify_pikvm_image/#oled","text":"Follow the method below to enable OLED. If you use PiKVM official image, log in to PiKVM and run these commands: # rw # systemctl enable --now kvmd-oled //Enable OLED # ro If the oled still can't work, you need to check whether there has \"dtparam=i2c_arm=on\" in \"/boot/config.txt\" file, and whether there has \"i2c-dev\" in \"/etc/modules-load.d/i2c.conf\" file. If not, please create and add them. If it still does not work after the above configuration, please burn the image provided by blikvm for testing to check whether the OLED hardware is damaged.","title":"OLED"},{"location":"modify_pikvm_image/#config-about-v4mini-image","text":"If you want to PiKVM v4mini image for blikvm v1 and v2, because v4mini image uses different gpio pins for ATX controls, so you will need the following override if you want to run v4mini image on your blikvm v1 or v2 version and be able to use ATX controls; if you don't make this change, ATX controls won't work properly (the led pins are different); Edit the /etc/kvmd/override.yaml file and add the following: kvmd: ### disable fan socket check ### info: fan: unix: '' atx: hdd_led_pin: 22 power_led_pin: 24 power_switch_pin: 23 reset_switch_pin: 27 type: gpio gpio: scheme: __v3_usb_breaker__: pin: 5 mode: output initial: false pulse: delay: 0","title":"Config about v4mini image"},{"location":"msd/","text":"Mass Storage Drive Reinstall the system Video BliKVM's USB device simulation feature allows you to remotely mount images on the virtual machine's mass storage drive, making it easy to install or reinstall operating systems and other software. This can be a useful feature for system administrators who need to manage multiple virtual machines remotely. By mounting an image on the mass storage drive, you can quickly and easily set up or configure a new virtual machine without having to physically connect a USB drive or other external storage device. Note: the size of the MSD is limited by the size of your sd card or eMMC module. Web UI The entrance to the MSD virtual USB drive is as follows: Using the web to upload images and create bootable drives are both synchronous processes. If you exit the MSD UI interface after uploading an image, you can resume the upload from where it left off the next time you select the same image. However, once you exit the bootable drive creation process, you cannot resume it; you will need to start over. The default upload path for images is /mnt/upload . If an upload fails, you can manually delete the cache files that were not successfully uploaded. Due to the large size of some image files, image uploads are divided into slices and then merged. The merging process cannot be resumed, so please ensure you wait for the merge to complete (which may take some time) before proceeding to the next step. Creating a bootable drive involves two steps: creating a virtual USB drive and copying the selected ISO image into the created virtual USB drive. Both steps have progress indicators. Please wait until both steps show 100% progress before clicking Next. Upload images manually (without Web UI) Confirm that the following four paths exist. If you are using the official latest image of blikvm, and it is fully configured, there is no need to check. /usr/bin/blikvm/ventoy-1.0.88 /usr/bin/blikvm/kvmd-msd.sh /mnt/msd/user /mnt/msd/ventoy SSH logs in to blikvm, executes the rw command, and changes the system permission to writable. rw In your PC ,use scp cmd send iso file to kvm board. scp ***.iso blikvm@xxx.xxx.xxx.xxx:/mnt/msd/user/ excute msd cmd.wait until excute end. If you don't use option paramter\uff1a The default size of the USB flash disk is 5GB. The default filename is scan /mnt/msd/user dir. The default msd name is ventoy. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make If your iso is large than 5GB.You can specify the optional parameter - s xxx, xxx is the Size. If you need specify iso ,you can use -f xxx.iso. If you want to specify the msd name, you can use -n xxx. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 5 -n ventoy -f xxx.iso Tips: cp progresses slowly, please be patient. If you want to excute other cmd, you can use other option. c option contains : make/conn/disconn/clean Connect msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c conn Disconnect msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c disconn Clean msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c clean Through the WebUI restart PC, enter BIOS, modify boot priority, set BliKVM USB first. According to the steps, select operating system, format partition and install.","title":"MSD"},{"location":"msd/#mass-storage-drive","text":"Reinstall the system Video BliKVM's USB device simulation feature allows you to remotely mount images on the virtual machine's mass storage drive, making it easy to install or reinstall operating systems and other software. This can be a useful feature for system administrators who need to manage multiple virtual machines remotely. By mounting an image on the mass storage drive, you can quickly and easily set up or configure a new virtual machine without having to physically connect a USB drive or other external storage device. Note: the size of the MSD is limited by the size of your sd card or eMMC module.","title":"Mass Storage Drive"},{"location":"msd/#web-ui","text":"The entrance to the MSD virtual USB drive is as follows: Using the web to upload images and create bootable drives are both synchronous processes. If you exit the MSD UI interface after uploading an image, you can resume the upload from where it left off the next time you select the same image. However, once you exit the bootable drive creation process, you cannot resume it; you will need to start over. The default upload path for images is /mnt/upload . If an upload fails, you can manually delete the cache files that were not successfully uploaded. Due to the large size of some image files, image uploads are divided into slices and then merged. The merging process cannot be resumed, so please ensure you wait for the merge to complete (which may take some time) before proceeding to the next step. Creating a bootable drive involves two steps: creating a virtual USB drive and copying the selected ISO image into the created virtual USB drive. Both steps have progress indicators. Please wait until both steps show 100% progress before clicking Next.","title":"Web UI"},{"location":"msd/#upload-images-manually-without-web-ui","text":"Confirm that the following four paths exist. If you are using the official latest image of blikvm, and it is fully configured, there is no need to check. /usr/bin/blikvm/ventoy-1.0.88 /usr/bin/blikvm/kvmd-msd.sh /mnt/msd/user /mnt/msd/ventoy SSH logs in to blikvm, executes the rw command, and changes the system permission to writable. rw In your PC ,use scp cmd send iso file to kvm board. scp ***.iso blikvm@xxx.xxx.xxx.xxx:/mnt/msd/user/ excute msd cmd.wait until excute end. If you don't use option paramter\uff1a The default size of the USB flash disk is 5GB. The default filename is scan /mnt/msd/user dir. The default msd name is ventoy. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make If your iso is large than 5GB.You can specify the optional parameter - s xxx, xxx is the Size. If you need specify iso ,you can use -f xxx.iso. If you want to specify the msd name, you can use -n xxx. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 5 -n ventoy -f xxx.iso Tips: cp progresses slowly, please be patient. If you want to excute other cmd, you can use other option. c option contains : make/conn/disconn/clean Connect msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c conn Disconnect msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c disconn Clean msd sudo bash /usr/bin/blikvm/kvmd-msd.sh -c clean Through the WebUI restart PC, enter BIOS, modify boot priority, set BliKVM USB first. According to the steps, select operating system, format partition and install.","title":"Upload images manually (without Web UI)"},{"location":"port-forwarding/","text":"Port forwarding After v1.4.7 version If your ISP provides an external IP address for the router, you can configure Port forwarding to access BliKVM: If the web interface uses the HTTP protocol and occupies port 80; If the web interface uses the HTTPS protocol and occupies port 443; If you do not have an external IP address, we suggest trying to use Tailscale VPN \u3002","title":"Port Forwarding"},{"location":"port-forwarding/#port-forwarding","text":"After v1.4.7 version If your ISP provides an external IP address for the router, you can configure Port forwarding to access BliKVM: If the web interface uses the HTTP protocol and occupies port 80; If the web interface uses the HTTPS protocol and occupies port 443; If you do not have an external IP address, we suggest trying to use Tailscale VPN \u3002","title":"Port forwarding"},{"location":"rtc/","text":"RTC Clock The purpose of an RTC (Real-Time Clock) is to provide real-time information about the current date and time for a device or system. It is an independent clock chip or module that has its own power source, allowing it to maintain accurate time even when the device is powered off or experiences a power outage. Due to shipping restrictions on international deliveries, the RTC hardware is shipped without a battery, and users need to purchase a CR1220 button cell battery themselves. The specific RTC clock model used in different versions of BliKVM may vary, and the usage methods may differ slightly. BliKVM V2 PCIe and BliKVM V3 Hat - pcf8563 1. Check if the pcf8563 RTC clock hardware is properly recognized on the i2c bus. The pcf8563 RTC clock has an i2c address of 0x51. Execute the following command as root to verify if the rtc clock is correctly detected on the i2c bus: root@mangopimcore:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. Register a new i2c device with the Linux system's i2c subsystem. The device is a pcf8563 with an i2c address of 0x51. Use the command ls /dev | grep rtc to verify if the rtc1 device appears, indicating a successful registration. echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 3. Set the current system time to the RTC clock time. hwclock -f /dev/rtc0 -w 4. Read the time from the RTC clock. If the time can be read, it indicates that the RTC module is functioning correctly. root@mangopimcore:~# hwclock -f /dev/rtc0 -r 2023-05-28 05:04:08.679152-02:30 BliKVM V4 - pcf8563 1. Check if the pcf8563 RTC clock hardware is properly recognized on the i2c bus. The pcf8563 RTC clock has an i2c address of 0x51. Execute the following command as root to verify if the rtc clock is correctly detected on the i2c bus: root@mangopimcore:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. Register a new i2c device with the Linux system's i2c subsystem. The device is a pcf8563 with an i2c address of 0x51. Use the command ls /dev | grep rtc to verify if the rtc1 device appears, indicating a successful registration. echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-0/new_device 3. Set the current system time to the RTC clock time. hwclock -f /dev/rtc1 -w 4. Read the time from the RTC clock. If the time can be read, it indicates that the RTC module is functioning correctly. root@mangopimcore:~# hwclock -f /dev/rtc1 -r 2023-05-28 05:04:08.679152-02:30","title":"RTC clock"},{"location":"rtc/#rtc-clock","text":"The purpose of an RTC (Real-Time Clock) is to provide real-time information about the current date and time for a device or system. It is an independent clock chip or module that has its own power source, allowing it to maintain accurate time even when the device is powered off or experiences a power outage. Due to shipping restrictions on international deliveries, the RTC hardware is shipped without a battery, and users need to purchase a CR1220 button cell battery themselves. The specific RTC clock model used in different versions of BliKVM may vary, and the usage methods may differ slightly.","title":"RTC Clock"},{"location":"rtc/#blikvm-v2-pcie-and-blikvm-v3-hat-pcf8563","text":"1. Check if the pcf8563 RTC clock hardware is properly recognized on the i2c bus. The pcf8563 RTC clock has an i2c address of 0x51. Execute the following command as root to verify if the rtc clock is correctly detected on the i2c bus: root@mangopimcore:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. Register a new i2c device with the Linux system's i2c subsystem. The device is a pcf8563 with an i2c address of 0x51. Use the command ls /dev | grep rtc to verify if the rtc1 device appears, indicating a successful registration. echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 3. Set the current system time to the RTC clock time. hwclock -f /dev/rtc0 -w 4. Read the time from the RTC clock. If the time can be read, it indicates that the RTC module is functioning correctly. root@mangopimcore:~# hwclock -f /dev/rtc0 -r 2023-05-28 05:04:08.679152-02:30","title":"BliKVM V2 PCIe and BliKVM V3 Hat - pcf8563"},{"location":"rtc/#blikvm-v4-pcf8563","text":"1. Check if the pcf8563 RTC clock hardware is properly recognized on the i2c bus. The pcf8563 RTC clock has an i2c address of 0x51. Execute the following command as root to verify if the rtc clock is correctly detected on the i2c bus: root@mangopimcore:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. Register a new i2c device with the Linux system's i2c subsystem. The device is a pcf8563 with an i2c address of 0x51. Use the command ls /dev | grep rtc to verify if the rtc1 device appears, indicating a successful registration. echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-0/new_device 3. Set the current system time to the RTC clock time. hwclock -f /dev/rtc1 -w 4. Read the time from the RTC clock. If the time can be read, it indicates that the RTC module is functioning correctly. root@mangopimcore:~# hwclock -f /dev/rtc1 -r 2023-05-28 05:04:08.679152-02:30","title":"BliKVM V4 - pcf8563"},{"location":"serial_over_usb/","text":"Serial-over-USB connection The BliKVM device can be accessed through the serial port terminal. 1. For hardware connection, you should use the USB to TTL module to connect the USB of the computer to the uart of BliKVM. If you are using the Hat version, please connect the serial ports GPIO14 and GPIO15. If you are using the PCIe version, connect the GTR pin marked by the PCB 2. Install terminal login tools on the computer. For example, Putty for Windows 3. Use the Putty instructions. Enter the correct COM port. The default baud rate is 115200 . Select serial as the connection method, and then click Open\uff08Use PiKVM firmware as an example If your computer cannot correctly recognize the USB to TTL module, please follow the steps below to install the driver for your computer Connect the USB-A connector to your admin host (in this example, it's on a Windows host). As a result, Device Manager will show a new USB Serial device in Other Devices. Download and extract/run drivers. In this example, I downloaded and extracted the ZIP file. https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all Update driver for the new USB Serial device, point it to where you extracted the files, and click Next then Close. If done right, the new USB serial device should now show up under Ports as USB-SERIAL CH340 (COMX).","title":"Serial-over-USB"},{"location":"serial_over_usb/#serial-over-usb-connection","text":"The BliKVM device can be accessed through the serial port terminal. 1. For hardware connection, you should use the USB to TTL module to connect the USB of the computer to the uart of BliKVM. If you are using the Hat version, please connect the serial ports GPIO14 and GPIO15. If you are using the PCIe version, connect the GTR pin marked by the PCB 2. Install terminal login tools on the computer. For example, Putty for Windows 3. Use the Putty instructions. Enter the correct COM port. The default baud rate is 115200 . Select serial as the connection method, and then click Open\uff08Use PiKVM firmware as an example If your computer cannot correctly recognize the USB to TTL module, please follow the steps below to install the driver for your computer Connect the USB-A connector to your admin host (in this example, it's on a Windows host). As a result, Device Manager will show a new USB Serial device in Other Devices. Download and extract/run drivers. In this example, I downloaded and extracted the ZIP file. https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all Update driver for the new USB Serial device, point it to where you extracted the files, and click Next then Close. If done right, the new USB serial device should now show up under Ports as USB-SERIAL CH340 (COMX).","title":"Serial-over-USB connection"},{"location":"ssh/","text":"SSH Config Starting from version 1.4.7, the web interface supports direct access to the blikvm SSH terminal. The default username and password to access the terminal are blikvm/blikvm. If you have changed the password for this user, you will need to update the corresponding username and password in the app.json file. sudo -s vim /mnt/exec/release/config/app.json # Locate the following configuration and update it with your new credentials. \"sshUser\": \"blikvm\", \"sshPassword\": \"blikvm\"","title":"SSH Terminal"},{"location":"ssh/#ssh-config","text":"Starting from version 1.4.7, the web interface supports direct access to the blikvm SSH terminal. The default username and password to access the terminal are blikvm/blikvm. If you have changed the password for this user, you will need to update the corresponding username and password in the app.json file. sudo -s vim /mnt/exec/release/config/app.json # Locate the following configuration and update it with your new credentials. \"sshUser\": \"blikvm\", \"sshPassword\": \"blikvm\"","title":"SSH Config"},{"location":"static_ip/","text":"Set static IP To configure a static IP address on a BliKVM image, you can follow these steps: v1 v2 v3 versions - Debian SSH into the BliKVM, If it is a read-only system, please use the rw command to make the system writable. Edit the network interfaces configuration file using the following command: sudo vim /etc/dhcpcd.conf Within the file, locate the section that starts with # Example static IP configuration . Uncomment the lines below that section and modify them to set your desired static IP address, gateway, DNS servers, and other network settings. For example: interface eth0 static ip_address = 192 .168.1.100/24 static routers = 192 .168.1.1 static domain_name_servers = 192 .168.1.1 Adjust the values according to your network configuration. Save the changes. Restart the BliKVM for the changes to take effect: sudo reboot v4 version - armbian SSH into the BliKVM, If it is a read-only system, please use the rw command to make the system writable. Edit the network interfaces configuration file using the following command: sudo vim /etc/network/interfaces Within the file, locate the section that starts with # Example static IP configuration . Uncomment the lines below that section and modify them to set your desired static IP address, gateway, DNS servers, and other network settings. For example: source /etc/network/interfaces.d/* auto eth0 allow-hotplug eth0 iface eth0 inet static address 192 .168.0.100 netmask 255 .255.255.0 gateway 192 .168.0.1 dns-nameservers 192 .168.0.1 Adjust the values according to your network configuration. Save the changes. Restart the BliKVM for the changes to take effect: sudo reboot After the reboot, your BliKVM will use the configured static IP address instead of obtaining one dynamically from a DHCP server. Make sure the static IP address you choose is not already assigned to another device on the network and is within the same subnet.","title":"Set Static IP "},{"location":"static_ip/#set-static-ip","text":"To configure a static IP address on a BliKVM image, you can follow these steps:","title":"Set static IP"},{"location":"static_ip/#v1-v2-v3-versions-debian","text":"SSH into the BliKVM, If it is a read-only system, please use the rw command to make the system writable. Edit the network interfaces configuration file using the following command: sudo vim /etc/dhcpcd.conf Within the file, locate the section that starts with # Example static IP configuration . Uncomment the lines below that section and modify them to set your desired static IP address, gateway, DNS servers, and other network settings. For example: interface eth0 static ip_address = 192 .168.1.100/24 static routers = 192 .168.1.1 static domain_name_servers = 192 .168.1.1 Adjust the values according to your network configuration. Save the changes. Restart the BliKVM for the changes to take effect: sudo reboot","title":"v1 v2 v3 versions - Debian"},{"location":"static_ip/#v4-version-armbian","text":"SSH into the BliKVM, If it is a read-only system, please use the rw command to make the system writable. Edit the network interfaces configuration file using the following command: sudo vim /etc/network/interfaces Within the file, locate the section that starts with # Example static IP configuration . Uncomment the lines below that section and modify them to set your desired static IP address, gateway, DNS servers, and other network settings. For example: source /etc/network/interfaces.d/* auto eth0 allow-hotplug eth0 iface eth0 inet static address 192 .168.0.100 netmask 255 .255.255.0 gateway 192 .168.0.1 dns-nameservers 192 .168.0.1 Adjust the values according to your network configuration. Save the changes. Restart the BliKVM for the changes to take effect: sudo reboot After the reboot, your BliKVM will use the configured static IP address instead of obtaining one dynamically from a DHCP server. Make sure the static IP address you choose is not already assigned to another device on the network and is within the same subnet.","title":"v4 version - armbian"},{"location":"switch-guide/","text":"HDMI Switch Manual BliKVM-Switch-V1.0 uses and tests video, supporting BliKVM and PiKVM Introduction BliKVM-Switch-V1.0 is a four channel HDMI+USB switch, which supports panel button, desktop controller and KVM remote to switch between computers. Maximum support of the switch itself 4K@60HZ Plug and play, driver free. BliKVM-Switch-V1.0 uses the same hardware solution as XH-HK4401, AG7210 HDMI switching chip supports up to 4K@60Hz, CH444G USB switching chip supports USB2.0. The difference is that BliKVM-Switch-V1.0 is equipped with KVM USB cable, which can realize KVM port selection. BliKVM-Switch-V1.0 is compatible with BliKVM and PiKVM. points for attention The switch can be powered directly from the USB input to the computer, that is, the switch can work normally without power supply. If the USB power supply of the controlled computer cannot make the switch work, the switch can be powered independently. The switch package only provides a USB power cable, but does not provide a power adapter. The customer needs to configure a power adapter (5V). Desktop controller can control HDMI switch with USB cable. For customers who do not use KVM, this is another way of switching for easy cable management. HDMI input support up to 4096x2160/60Hz resolution 4K 60Hz input, the power is about 200 mW. Interface Diagram There must be 2 USB cables from KVM to BliKVM, one for controller, and second from USB on KVM to USB-PC on BliKVM. Front and back interface diagram, the control interface in the right figure is the remote control interface.A cable with one end being USB-A and the other end being micro USB, labeled with the word \"KVM,\" serves as the control cable. The micro USB end is connected to the control interface of the switch, while the USB-A end is connected to the USB port of the KVM. Schematic Diagram of Side Interface. Equipment connection diagram. Software Configuration If you are using BliKVM software and have powered on the switch and connected the cables before starting BliKVM, no additional configuration is needed. BliKVM will automatically detect the switch when it starts. If automatic detection fails, you can manually specify the switch device: Confirm the device descriptor name of the switch by using the terminal, such as /dev/ttyUSB0 . Edit the switch_handle field in /usr/bin/blikvm/package.json . Set switch_enable to 1 and switch_path to /dev/ttyUSB0 in the configuration. Restart BliKVM. Click MORE in the lower left corner, find the BliKVM switch column, and then switch. Note that the flashing blue dot of the corresponding channel indicates that the switch insertion is recognized and is in the current channel. If there is no blue dot, the switch insertion is not recognized. If you use PiKVM software, please configure it according to the following instructions. Log in to PiKVM through SSH. The user name and password are root; Uses the rw command on the terminal to change the system to a read-write system; Edit /etc/kvmd/override.yaml . After the original content, add: kvmd: gpio: drivers: hk: type: xh_hk4401 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk pin: 0 mode: input ch1_led: driver: hk pin: 1 mode: input ch2_led: driver: hk pin: 2 mode: input ch3_led: driver: hk pin: 3 mode: input ch0_button: driver: hk pin: 0 mode: output switch: false ch1_button: driver: hk pin: 1 mode: output switch: false ch2_button: driver: hk pin: 2 mode: output switch: false ch3_button: driver: hk pin: 3 mode: output switch: false view: table: - [\"#Input 1\", ch0_led, ch0_button] - [\"#Input 2\", ch1_led, ch1_button] - [\"#Input 3\", ch2_led, ch2_button] - [\"#Input 4\", ch3_led, ch3_button] The above configuration is based on the 2022 PiKVM image. If you are using the latest PiKVM image or latest software version, edit /etc/kvmd/override.yaml and add the line: protocol: 2 . Example: kvmd: gpio: drivers: hk: type: xh_hk4401 protocol: 2 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk ... Use the ro command on the terminal to reset the system to a read-only system; Use systemctl restart kvmd on the terminal to restart the service; Enter the PiKVM web interface and click the \"GPIO\" menu. You should see 4 inputs, one of which has a green circle to indicate that it is currently selected. Click a different input to change the selected host. Control Protocol If you want to use the blicube switch on other platforms, please refer to the following protocol The communication baud rate is 19200 The message sent to switch by switching to channel 1 is SW1\\r\\nG01gA The message sent to switch by switching to channel 2 is SW2\\r\\nG02gA The message sent to switch by switching to channel 3 is SW3\\r\\nG03gA The message sent to switch by switching to channel 4 is SW4\\r\\nG04gA The message returned by the switch for the current channel is: G01gA , G02gA , G03gA , G04gA Packing List product quantity note HDMI KVM Switch(4-channel) 1 110mm * 60mm * 33mm Desktop controller 1 USB cable of Desktop controller 4 length: 1.2m HDMI(Standard) cable 5 length: 1.5m USB power cable 1 length: 0.8m USB cable of KVM 1 length: 1.5m USB cable of Desktop controller 1 length: 1m","title":"Multiport KVM-over-IP"},{"location":"switch-guide/#hdmi-switch-manual","text":"BliKVM-Switch-V1.0 uses and tests video, supporting BliKVM and PiKVM","title":"HDMI Switch Manual"},{"location":"switch-guide/#introduction","text":"BliKVM-Switch-V1.0 is a four channel HDMI+USB switch, which supports panel button, desktop controller and KVM remote to switch between computers. Maximum support of the switch itself 4K@60HZ Plug and play, driver free. BliKVM-Switch-V1.0 uses the same hardware solution as XH-HK4401, AG7210 HDMI switching chip supports up to 4K@60Hz, CH444G USB switching chip supports USB2.0. The difference is that BliKVM-Switch-V1.0 is equipped with KVM USB cable, which can realize KVM port selection. BliKVM-Switch-V1.0 is compatible with BliKVM and PiKVM. points for attention The switch can be powered directly from the USB input to the computer, that is, the switch can work normally without power supply. If the USB power supply of the controlled computer cannot make the switch work, the switch can be powered independently. The switch package only provides a USB power cable, but does not provide a power adapter. The customer needs to configure a power adapter (5V). Desktop controller can control HDMI switch with USB cable. For customers who do not use KVM, this is another way of switching for easy cable management. HDMI input support up to 4096x2160/60Hz resolution 4K 60Hz input, the power is about 200 mW.","title":"Introduction"},{"location":"switch-guide/#interface-diagram","text":"There must be 2 USB cables from KVM to BliKVM, one for controller, and second from USB on KVM to USB-PC on BliKVM. Front and back interface diagram, the control interface in the right figure is the remote control interface.A cable with one end being USB-A and the other end being micro USB, labeled with the word \"KVM,\" serves as the control cable. The micro USB end is connected to the control interface of the switch, while the USB-A end is connected to the USB port of the KVM. Schematic Diagram of Side Interface. Equipment connection diagram.","title":"Interface Diagram"},{"location":"switch-guide/#software-configuration","text":"If you are using BliKVM software and have powered on the switch and connected the cables before starting BliKVM, no additional configuration is needed. BliKVM will automatically detect the switch when it starts. If automatic detection fails, you can manually specify the switch device: Confirm the device descriptor name of the switch by using the terminal, such as /dev/ttyUSB0 . Edit the switch_handle field in /usr/bin/blikvm/package.json . Set switch_enable to 1 and switch_path to /dev/ttyUSB0 in the configuration. Restart BliKVM. Click MORE in the lower left corner, find the BliKVM switch column, and then switch. Note that the flashing blue dot of the corresponding channel indicates that the switch insertion is recognized and is in the current channel. If there is no blue dot, the switch insertion is not recognized. If you use PiKVM software, please configure it according to the following instructions. Log in to PiKVM through SSH. The user name and password are root; Uses the rw command on the terminal to change the system to a read-write system; Edit /etc/kvmd/override.yaml . After the original content, add: kvmd: gpio: drivers: hk: type: xh_hk4401 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk pin: 0 mode: input ch1_led: driver: hk pin: 1 mode: input ch2_led: driver: hk pin: 2 mode: input ch3_led: driver: hk pin: 3 mode: input ch0_button: driver: hk pin: 0 mode: output switch: false ch1_button: driver: hk pin: 1 mode: output switch: false ch2_button: driver: hk pin: 2 mode: output switch: false ch3_button: driver: hk pin: 3 mode: output switch: false view: table: - [\"#Input 1\", ch0_led, ch0_button] - [\"#Input 2\", ch1_led, ch1_button] - [\"#Input 3\", ch2_led, ch2_button] - [\"#Input 4\", ch3_led, ch3_button] The above configuration is based on the 2022 PiKVM image. If you are using the latest PiKVM image or latest software version, edit /etc/kvmd/override.yaml and add the line: protocol: 2 . Example: kvmd: gpio: drivers: hk: type: xh_hk4401 protocol: 2 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk ... Use the ro command on the terminal to reset the system to a read-only system; Use systemctl restart kvmd on the terminal to restart the service; Enter the PiKVM web interface and click the \"GPIO\" menu. You should see 4 inputs, one of which has a green circle to indicate that it is currently selected. Click a different input to change the selected host.","title":"Software Configuration"},{"location":"switch-guide/#control-protocol","text":"If you want to use the blicube switch on other platforms, please refer to the following protocol The communication baud rate is 19200 The message sent to switch by switching to channel 1 is SW1\\r\\nG01gA The message sent to switch by switching to channel 2 is SW2\\r\\nG02gA The message sent to switch by switching to channel 3 is SW3\\r\\nG03gA The message sent to switch by switching to channel 4 is SW4\\r\\nG04gA The message returned by the switch for the current channel is: G01gA , G02gA , G03gA , G04gA","title":"Control Protocol"},{"location":"switch-guide/#packing-list","text":"product quantity note HDMI KVM Switch(4-channel) 1 110mm * 60mm * 33mm Desktop controller 1 USB cable of Desktop controller 4 length: 1.2m HDMI(Standard) cable 5 length: 1.5m USB power cable 1 length: 0.8m USB cable of KVM 1 length: 1.5m USB cable of Desktop controller 1 length: 1m","title":"Packing List"},{"location":"tailscale/","text":"Tailscale VPN Tailscale can be used to access your BliKVM from the public internet. It is a convenient and free networking tool for setting up a small VPN network. This document provides an example for accessing your BliKVM over the internet, but you can also use Zerotier or other VPN solutions. The following is a basic example, and for any specific settings or functionalities, please refer to the Tailscale documentation. BliKVM Installation First, make sure that your system has read-write access. If it's a read-only system, use the rw command to make it writable. Then, proceed with the Tailscale installation by running the following command: curl -fsSL https://tailscale.com/install.sh | sh Note that in some regions, such as China, downloading Tailscale directly might be problematic due to network restrictions. Please configure your network accordingly. Adding BliKVM to your Tailscale Network Register an account on the Tailscale website and generate your own keys in the settings. On the BliKVM terminal, use the following command to add BliKVM to your Tailscale network: sudo tailscale up --authkey = your-auth-key --accept-routes If everything goes well, you can run ip addr show tailscale0 on the BliKVM terminal to view the IP address assigned by Tailscale for the virtual network. Here's an example output: 3 : tailscale0: mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 100 .126.223.28/32 scope global tailscale0 valid_lft forever preferred_lft forever inet6 fd7a:115c:a1e0:ab12:4843:cd96:627e:df1c/128 scope global valid_lft forever preferred_lft forever inet6 fe80::8955:99dc:4e7d:b08b/64 scope link stable-privacy valid_lft forever preferred_lft forever The IP address, such as 100.126.223.28 , can be used to access the BliKVM web interface from your host machine. Host Installation Download and install Tailscale from the Tailscale website on your controlling host machine. Log in with your Tailscale account, and then you can check the Tailscale admin page to verify if both your machines are online. Once they are online, you can use the following address to access BliKVM from your controlling host machine: http://","title":"Tailscale VPN"},{"location":"tailscale/#tailscale-vpn","text":"Tailscale can be used to access your BliKVM from the public internet. It is a convenient and free networking tool for setting up a small VPN network. This document provides an example for accessing your BliKVM over the internet, but you can also use Zerotier or other VPN solutions. The following is a basic example, and for any specific settings or functionalities, please refer to the Tailscale documentation.","title":"Tailscale VPN"},{"location":"tailscale/#blikvm-installation","text":"First, make sure that your system has read-write access. If it's a read-only system, use the rw command to make it writable. Then, proceed with the Tailscale installation by running the following command: curl -fsSL https://tailscale.com/install.sh | sh Note that in some regions, such as China, downloading Tailscale directly might be problematic due to network restrictions. Please configure your network accordingly.","title":"BliKVM Installation"},{"location":"tailscale/#adding-blikvm-to-your-tailscale-network","text":"Register an account on the Tailscale website and generate your own keys in the settings. On the BliKVM terminal, use the following command to add BliKVM to your Tailscale network: sudo tailscale up --authkey = your-auth-key --accept-routes If everything goes well, you can run ip addr show tailscale0 on the BliKVM terminal to view the IP address assigned by Tailscale for the virtual network. Here's an example output: 3 : tailscale0: mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 100 .126.223.28/32 scope global tailscale0 valid_lft forever preferred_lft forever inet6 fd7a:115c:a1e0:ab12:4843:cd96:627e:df1c/128 scope global valid_lft forever preferred_lft forever inet6 fe80::8955:99dc:4e7d:b08b/64 scope link stable-privacy valid_lft forever preferred_lft forever The IP address, such as 100.126.223.28 , can be used to access the BliKVM web interface from your host machine.","title":"Adding BliKVM to your Tailscale Network"},{"location":"tailscale/#host-installation","text":"Download and install Tailscale from the Tailscale website on your controlling host machine. Log in with your Tailscale account, and then you can check the Tailscale admin page to verify if both your machines are online. Once they are online, you can use the following address to access BliKVM from your controlling host machine: http://","title":"Host Installation"},{"location":"update/","text":"Software update introduction Introduction The currently available versions of the BLIKVM project are hosted in the release package of the GitHub. The update software function needs to keep the device connected. There are currently two ways to update the software. Method 1: Click the update button through the web interface, and the program will be updated automatically. A restart is required after the update. Method 2: Manually run the script on the KVM terminal to update, and restart after the update. Common causes of upgrade errors The device is not connected to the network; Network access to GitHub is limited; We strongly recommend performing the update while you are in close proximity to the BliKVM hardware you are upgrading. This way if anything goes wrong you can intervene. If you are familiar with command-line operations, we recommend manually updating so that you can monitor the command-line status in real time. If the update is abnormal and the web interface cannot exit the update status, use ssh to get you a terminal and reboot to recover. Manually run the script to update In the terminal\uff0cif the system terminal shows the ro keyword that means your system is currently in read-only, it is necessary to use the rw command to make the system writable. sudo -i cd /opt/bin/blikvm/ git stash git pull --rebase python3 /opt/bin/blikvm/script/update.py # If you want test the newest alpha version, use: python3 /opt/bin/blikvm/script/update.py alpha Observe the output of the terminal. When you see the message of a successful upgrade, enter in the terminal the: reboot command and the reboot should take effect. If you are unable to update successfully due to network issues, you can download the latest release.tar.gz package on another PC with a stable network connection and follow the instructions below for installation. Download Address: https://github.com/ThomasVon2021/blikvm/releases v1 v2 v3 hardware use release.tar.gz v4 hardware use release-h616-v4.tar.gz SSH into the device terminal and use tar -zxvf release.tar.gz to extract the release.tar.gz file. sudo -i cd /your release path/ python3 install_release.py --releasepath=./ You can compare the versions before and after in /usr/bin/blikvm/package.json . If you have upgraded to the specified version, the installation is successful, and you can reboot for the changes to take effect.","title":"Upgrade"},{"location":"update/#software-update-introduction","text":"","title":"Software update introduction"},{"location":"update/#introduction","text":"The currently available versions of the BLIKVM project are hosted in the release package of the GitHub. The update software function needs to keep the device connected. There are currently two ways to update the software. Method 1: Click the update button through the web interface, and the program will be updated automatically. A restart is required after the update. Method 2: Manually run the script on the KVM terminal to update, and restart after the update. Common causes of upgrade errors The device is not connected to the network; Network access to GitHub is limited; We strongly recommend performing the update while you are in close proximity to the BliKVM hardware you are upgrading. This way if anything goes wrong you can intervene. If you are familiar with command-line operations, we recommend manually updating so that you can monitor the command-line status in real time. If the update is abnormal and the web interface cannot exit the update status, use ssh to get you a terminal and reboot to recover.","title":"Introduction"},{"location":"update/#manually-run-the-script-to-update","text":"In the terminal\uff0cif the system terminal shows the ro keyword that means your system is currently in read-only, it is necessary to use the rw command to make the system writable. sudo -i cd /opt/bin/blikvm/ git stash git pull --rebase python3 /opt/bin/blikvm/script/update.py # If you want test the newest alpha version, use: python3 /opt/bin/blikvm/script/update.py alpha Observe the output of the terminal. When you see the message of a successful upgrade, enter in the terminal the: reboot command and the reboot should take effect. If you are unable to update successfully due to network issues, you can download the latest release.tar.gz package on another PC with a stable network connection and follow the instructions below for installation. Download Address: https://github.com/ThomasVon2021/blikvm/releases v1 v2 v3 hardware use release.tar.gz v4 hardware use release-h616-v4.tar.gz SSH into the device terminal and use tar -zxvf release.tar.gz to extract the release.tar.gz file. sudo -i cd /your release path/ python3 install_release.py --releasepath=./ You can compare the versions before and after in /usr/bin/blikvm/package.json . If you have upgraded to the specified version, the installation is successful, and you can reboot for the changes to take effect.","title":"Manually run the script to update"},{"location":"usb-splitter-guide/","text":"USB/PWR Splitter guide 1. Introduction The adaptor allows the Raspberry Pi 4 to be used with a Pi USB-C power supply while allowing access to USB OTG data over a separate USB-C connection. USB-C (RPI4) <> USB-C (USB) and USB-C (PWR) USB-C(RPI4) USB Type-C(USB) USB Type-C(PWR) 5V 5V D- D- D+ D+ CC1 10k to 5V CC1 5.1k to GND CC1 5.1k to GND CC2 10k to 5V CC2 5.1k to GND CC2 5.1k to GND GND GND GND To use the adaptor with the Raspberry Pi 4 you need. USB-C to USB-C cable[1] between Pi4 and the adaptor board USB-C to USB-C or Type-A between adaptor board and PC Power[2] via Official Raspberry Pi USB Type-C Power Supply. [1] Whilst USB-C cables are generally designed for higher current I still advise using short power cable to the Pi where possible to reduce voltage drop. [2] PLEASE NOTE With the Pu/Pd resistors on this board it can only be used with 5V supply to power a 5V device. An adaptor of this kind does not fall within the USB specification. It's designed for use with the official Raspberry Pi USB-C power supply and raspberry pi, use with other power supplies/chargers and devices may cause issues/damage. 2.Mechanical Diagram 3.Test video USB splitter Video 4.3D printable case A simple snap fit case for the USB splitter. Download file","title":"USB Splitter"},{"location":"usb-splitter-guide/#usbpwr-splitter-guide","text":"","title":"USB/PWR Splitter guide"},{"location":"usb-splitter-guide/#1-introduction","text":"The adaptor allows the Raspberry Pi 4 to be used with a Pi USB-C power supply while allowing access to USB OTG data over a separate USB-C connection. USB-C (RPI4) <> USB-C (USB) and USB-C (PWR) USB-C(RPI4) USB Type-C(USB) USB Type-C(PWR) 5V 5V D- D- D+ D+ CC1 10k to 5V CC1 5.1k to GND CC1 5.1k to GND CC2 10k to 5V CC2 5.1k to GND CC2 5.1k to GND GND GND GND To use the adaptor with the Raspberry Pi 4 you need. USB-C to USB-C cable[1] between Pi4 and the adaptor board USB-C to USB-C or Type-A between adaptor board and PC Power[2] via Official Raspberry Pi USB Type-C Power Supply. [1] Whilst USB-C cables are generally designed for higher current I still advise using short power cable to the Pi where possible to reduce voltage drop. [2] PLEASE NOTE With the Pu/Pd resistors on this board it can only be used with 5V supply to power a 5V device. An adaptor of this kind does not fall within the USB specification. It's designed for use with the official Raspberry Pi USB-C power supply and raspberry pi, use with other power supplies/chargers and devices may cause issues/damage.","title":"1. Introduction"},{"location":"usb-splitter-guide/#2mechanical-diagram","text":"","title":"2.Mechanical Diagram"},{"location":"usb-splitter-guide/#3test-video","text":"USB splitter Video","title":"3.Test video"},{"location":"usb-splitter-guide/#43d-printable-case","text":"A simple snap fit case for the USB splitter. Download file","title":"4.3D printable case"},{"location":"wake-on-lan/","text":"Wake-on-LAN Introduction Wake-on-LAN, abbreviated as WOL or WoL, is a feature that allows a computer that is in sleep or shutdown state to be powered on remotely by KVM through a local network by sending a specific message. WoL requires support from the controlled computer; otherwise, the feature won't work. Additionally, it needs to be ensured that WoL is enabled and configured correctly. With this feature, you can power on the computer without needing to use the ATX function. If users encounter anomalies when using KVM's WoL, they can try testing it using software that supports WoL. How to Use","title":"Wake-on-LAN"},{"location":"wake-on-lan/#wake-on-lan","text":"","title":"Wake-on-LAN"},{"location":"wake-on-lan/#introduction","text":"Wake-on-LAN, abbreviated as WOL or WoL, is a feature that allows a computer that is in sleep or shutdown state to be powered on remotely by KVM through a local network by sending a specific message. WoL requires support from the controlled computer; otherwise, the feature won't work. Additionally, it needs to be ensured that WoL is enabled and configured correctly. With this feature, you can power on the computer without needing to use the ATX function. If users encounter anomalies when using KVM's WoL, they can try testing it using software that supports WoL.","title":"Introduction"},{"location":"wake-on-lan/#how-to-use","text":"","title":"How to Use"},{"location":"wifi/","text":"Wifi Configure Because BLIKVM has many kinds of hardware and supports different OS, such as BLIKVM OS and PiKVM OS, different OS confifure wifi methods may not be the same. Please confirm the hardware and OS usage before using the method in this document. Please confirm that the hardware you use supports wifi function, for example, the CM400200 version does not have wifi function; If the SOC of KVM hardware is CM4, please confirm whether wifi antenna is connected; PiKVM OS is arch linux; BLIKVM OS raspberry pi series is debian system, and v4 series is armbian system; v1 v2 v3 Use raspi-config for Wi-Fi config on Raspberry Pi Debian systems Log in to SSH. Command: ssh blikvm@ip Mount the system as writable. Command: rw Start raspi-config. Command: sudo raspi-config Select System Options Select Wireless LAN Select the country where Wi-Fi is located, and China will select CN. If it has been set before, this step will skip to 7 Enter the Wi-Fi SSID (name) Enter the Wi-Fi password. If there is no password, press Enter directly At this time, you will return to the interface in Step 4, press the tab key to select Finish , then press Enter Check whether to connect to wifi. Command: ifconfig wlan0. If you see the ip obtained, you are connected Mount the system as read-only. Command: ro v4 Hardware using Armbian System with armbian-config Log in via SSH using the command: ssh blikvm@ip to access the Armbian system. Enter the following command to launch the armbian-config tool: sudo armbian-config In the armbian-config menu, navigate and select options using the arrow keys and press Enter . Scroll down to the \"Network\" option using the arrow keys and press Enter to enter the submenu. In the \"Network\" submenu, select the \"Wireless\" option and press Enter to enter the Wi-Fi configuration menu. In the Wi-Fi configuration menu, select the \"Connect to Wi-Fi\" option and press Enter to enter the Wi-Fi connection setup. armbian-config will list the available wireless interfaces and already configured networks. Select the wireless interface you want to connect to and press Enter . armbian-config will display the list of available Wi-Fi networks. Use the arrow keys to select the Wi-Fi network you want to connect to and press Enter . If the Wi-Fi network is password-protected, armbian-config will prompt you to enter the Wi-Fi password. Enter the password and press Enter . Wait for a moment while the Armbian system attempts to connect to the specified Wi-Fi network. If the connection is successful, you will see a corresponding message on the screen. Exit the armbian-config tool. Please note that the menu options and configurations mentioned above may vary slightly depending on the specific version of the Armbian system. Make sure to follow the appropriate steps based on your system version and configuration.","title":"Wifi Config"},{"location":"wifi/#wifi-configure","text":"Because BLIKVM has many kinds of hardware and supports different OS, such as BLIKVM OS and PiKVM OS, different OS confifure wifi methods may not be the same. Please confirm the hardware and OS usage before using the method in this document. Please confirm that the hardware you use supports wifi function, for example, the CM400200 version does not have wifi function; If the SOC of KVM hardware is CM4, please confirm whether wifi antenna is connected; PiKVM OS is arch linux; BLIKVM OS raspberry pi series is debian system, and v4 series is armbian system;","title":"Wifi Configure"},{"location":"wifi/#v1-v2-v3-use-raspi-config-for-wi-fi-config-on-raspberry-pi-debian-systems","text":"Log in to SSH. Command: ssh blikvm@ip Mount the system as writable. Command: rw Start raspi-config. Command: sudo raspi-config Select System Options Select Wireless LAN Select the country where Wi-Fi is located, and China will select CN. If it has been set before, this step will skip to 7 Enter the Wi-Fi SSID (name) Enter the Wi-Fi password. If there is no password, press Enter directly At this time, you will return to the interface in Step 4, press the tab key to select Finish , then press Enter Check whether to connect to wifi. Command: ifconfig wlan0. If you see the ip obtained, you are connected Mount the system as read-only. Command: ro","title":"v1 v2 v3 Use raspi-config for Wi-Fi config on Raspberry Pi Debian systems"},{"location":"wifi/#v4-hardware-using-armbian-system-with-armbian-config","text":"Log in via SSH using the command: ssh blikvm@ip to access the Armbian system. Enter the following command to launch the armbian-config tool: sudo armbian-config In the armbian-config menu, navigate and select options using the arrow keys and press Enter . Scroll down to the \"Network\" option using the arrow keys and press Enter to enter the submenu. In the \"Network\" submenu, select the \"Wireless\" option and press Enter to enter the Wi-Fi configuration menu. In the Wi-Fi configuration menu, select the \"Connect to Wi-Fi\" option and press Enter to enter the Wi-Fi connection setup. armbian-config will list the available wireless interfaces and already configured networks. Select the wireless interface you want to connect to and press Enter . armbian-config will display the list of available Wi-Fi networks. Use the arrow keys to select the Wi-Fi network you want to connect to and press Enter . If the Wi-Fi network is password-protected, armbian-config will prompt you to enter the Wi-Fi password. Enter the password and press Enter . Wait for a moment while the Armbian system attempts to connect to the specified Wi-Fi network. If the connection is successful, you will see a corresponding message on the screen. Exit the armbian-config tool. Please note that the menu options and configurations mentioned above may vary slightly depending on the specific version of the Armbian system. Make sure to follow the appropriate steps based on your system version and configuration.","title":"v4 Hardware using Armbian System with armbian-config"},{"location":"zerotier/","text":"ZeroTier VPN ZeroTier allows secure access to your BliKVM even throught NAT on both sides. It lets you build modern, secure multi-point virtualized networks of almost any type. This document provides an example for accessing your BliKVM over the internet, but you can also use Tailscale or other VPN solutions. The following is a basic example, and for any specific settings or functionalities, please refer to the ZeroTier documentation . Installing ZeroTier on BliKVM First of all, prepare account and VPN network at ZeroTier with instructions here: Create a Network , save Network ID for later usage. Next, connect with BliKVM terminal using SSH protocol, and check for read-write access. If it's a read-only system, use the rw command to make it writable. Now install ZeroTier client using the command below: curl -s https://install.zerotier.com | sudo bash Note that in some regions, such as China, downloading ZeroTier directly might be problematic due to network restrictions. Please configure your network accordingly. Adding BliKVM to your ZeroTier Network On the BliKVM terminal, use the following command to add BliKVM to your ZeroTier network (using your ZeoroTier Network ID, for example d5e04297a16fa690): sudo zerotier-cli join d5e04297a16fa690 If everything goes well, you can run ip addr show zerotier network device (name is starting with zt) on the BliKVM terminal to view the IP address assigned by ZeroTier for the virtual network. Here's an example output: 3 : zt6ovrlscs: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether d6:e4:eb:ae:db:64 brd ff:ff:ff:ff:ff:ff inet 172 .25.96.75/16 brd 172 .25.255.255 scope global zt6ovrlscs valid_lft forever preferred_lft forever inet6 fe80::d4e4:ebff:feae:db64/64 scope link valid_lft forever preferred_lft forever The IP address, such as 172.25.96.75 , can be used to access the BliKVM web interface from your host machine. Installing ZeroTier on client computer Go to Download section at ZeroTier website and install ZeroTier on your controlling host machine. Join your ZeroTier Network ID, and then you can check your network page to verify if both your machines are online. Check if they are authorzied to connect to network there (Auth? column). Once they are online, you can use the following address to access BliKVM from your controlling host machine: http://","title":"ZeroTier VPN"},{"location":"zerotier/#zerotier-vpn","text":"ZeroTier allows secure access to your BliKVM even throught NAT on both sides. It lets you build modern, secure multi-point virtualized networks of almost any type. This document provides an example for accessing your BliKVM over the internet, but you can also use Tailscale or other VPN solutions. The following is a basic example, and for any specific settings or functionalities, please refer to the ZeroTier documentation .","title":"ZeroTier VPN"},{"location":"zerotier/#installing-zerotier-on-blikvm","text":"First of all, prepare account and VPN network at ZeroTier with instructions here: Create a Network , save Network ID for later usage. Next, connect with BliKVM terminal using SSH protocol, and check for read-write access. If it's a read-only system, use the rw command to make it writable. Now install ZeroTier client using the command below: curl -s https://install.zerotier.com | sudo bash Note that in some regions, such as China, downloading ZeroTier directly might be problematic due to network restrictions. Please configure your network accordingly.","title":"Installing ZeroTier on BliKVM"},{"location":"zerotier/#adding-blikvm-to-your-zerotier-network","text":"On the BliKVM terminal, use the following command to add BliKVM to your ZeroTier network (using your ZeoroTier Network ID, for example d5e04297a16fa690): sudo zerotier-cli join d5e04297a16fa690 If everything goes well, you can run ip addr show zerotier network device (name is starting with zt) on the BliKVM terminal to view the IP address assigned by ZeroTier for the virtual network. Here's an example output: 3 : zt6ovrlscs: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether d6:e4:eb:ae:db:64 brd ff:ff:ff:ff:ff:ff inet 172 .25.96.75/16 brd 172 .25.255.255 scope global zt6ovrlscs valid_lft forever preferred_lft forever inet6 fe80::d4e4:ebff:feae:db64/64 scope link valid_lft forever preferred_lft forever The IP address, such as 172.25.96.75 , can be used to access the BliKVM web interface from your host machine.","title":"Adding BliKVM to your ZeroTier Network"},{"location":"zerotier/#installing-zerotier-on-client-computer","text":"Go to Download section at ZeroTier website and install ZeroTier on your controlling host machine. Join your ZeroTier Network ID, and then you can check your network page to verify if both your machines are online. Check if they are authorzied to connect to network there (Auth? column). Once they are online, you can use the following address to access BliKVM from your controlling host machine: http://","title":"Installing ZeroTier on client computer"}]} \ No newline at end of file diff --git a/generated/en/serial_over_usb/index.html b/generated/en/serial_over_usb/index.html index 8631b666..c5da475b 100644 --- a/generated/en/serial_over_usb/index.html +++ b/generated/en/serial_over_usb/index.html @@ -316,11 +316,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/sitemap.xml b/generated/en/sitemap.xml index 2b0e88fe..31aaf75c 100644 --- a/generated/en/sitemap.xml +++ b/generated/en/sitemap.xml @@ -2,192 +2,187 @@ None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 - daily - - - None - 2024-09-21 + 2024-09-23 daily \ No newline at end of file diff --git a/generated/en/sitemap.xml.gz b/generated/en/sitemap.xml.gz index aced473f170b7dd338c4196cb8adf1166de44cbb..27cb1f0a4fd0d44a3a19edb68ce4e7500dccf502 100644 GIT binary patch literal 219 zcmV<103`n(iwFn{Ht}Wx|8r?{Wo=<_E_iKh0PW4a4uUWg1>l{hAl;#e4q{5#9G&z5 z8mK@5Epn^q+sj`JPvCU!(%aLMejt2Cbvax%9P!%=itaP>4|6G zkaqr9Hk7i;x$eaIFbpBpPPeL~(Do&#yc#dW*N{hH!ldVqGkvgZ^N7ag@?wn^eA>1T zid<_88AtIUh>{@QkCips)bdK1Qr~<1kcFz7kKmhR5&4e<4jede;J|?c2M!!KaNxj! V0|)+Jd_G7!`2|z@ond|w003KNZMXmc literal 218 zcmV<0044t)iwFpKj_zgx|8r?{Wo=<_E_iKh0PW394uUWc1>ilWAl*ZOxDZpy&ZR3o z04Wtnphc#N-d_G
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/static_ip/index.html b/generated/en/static_ip/index.html index 34433d41..ca059572 100644 --- a/generated/en/static_ip/index.html +++ b/generated/en/static_ip/index.html @@ -338,11 +338,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/switch-guide/index.html b/generated/en/switch-guide/index.html index 369e7a4e..535cae91 100644 --- a/generated/en/switch-guide/index.html +++ b/generated/en/switch-guide/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/tailscale/index.html b/generated/en/tailscale/index.html index bfd80847..bb2b45e8 100644 --- a/generated/en/tailscale/index.html +++ b/generated/en/tailscale/index.html @@ -343,11 +343,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/update/index.html b/generated/en/update/index.html index 308d4f0a..5c363ed9 100644 --- a/generated/en/update/index.html +++ b/generated/en/update/index.html @@ -294,11 +294,6 @@ Manually run the script to update
  • -
  • - - Web UI Update - -
  • @@ -343,11 +338,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN @@ -479,11 +469,6 @@ Manually run the script to update
  • -
  • - - Web UI Update - -
  • @@ -544,17 +529,6 @@

    Manually run the script to up You can compare the versions before and after in /usr/bin/blikvm/package.json. If you have upgraded to the specified version, the installation is successful, and you can reboot for the changes to take effect. -

    Web UI Update

    -
    -

    The current web upgrade function is temporarily disabled. Please use the command line to update

    -
    -
    -

    After clicking the More Options button, find the Check Update button and click it. If the available version is found, the pop-up box in the figure below will appear. Click OK to enter the upgrade process. The web interface is temporarily inoperable during the upgrade process. View the current update status by manually refreshing the page. When the message of successful update appears, it means that the update has been successful. Click the restart button, and the new version of software will take effect.

    -

    IMG_8366 -IMG_8366 -IMG_8366 -IMG_8366

    -

    diff --git a/generated/en/usb-splitter-guide/index.html b/generated/en/usb-splitter-guide/index.html index 515604f9..87d55e3b 100644 --- a/generated/en/usb-splitter-guide/index.html +++ b/generated/en/usb-splitter-guide/index.html @@ -315,11 +315,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/user-manager/index.html b/generated/en/user-manager/index.html deleted file mode 100644 index 721ca4ad..00000000 --- a/generated/en/user-manager/index.html +++ /dev/null @@ -1,527 +0,0 @@ - - - - - - - - - - - -User Manager - BliKVM Handbook - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - - -

    User Manager

    -

    In the 'More Settings' section, click on 'User Management' to modify your username and password. After changing your account password, it is necessary to restart the KVM system for the changes to take effect.

    -

    Please note that after the modification, the original admin user will no longer be able to log in.

    -

    The global default password path can be found at /etc/kvm.d/conf/admin.ini. -change-acc

    -
    -
    - - - Last update: - August 15, 2024 -
    - Created: - September 6, 2023 -
    -
    -
    -
    -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/generated/en/wake-on-lan/index.html b/generated/en/wake-on-lan/index.html index be18fdf1..fefc523c 100644 --- a/generated/en/wake-on-lan/index.html +++ b/generated/en/wake-on-lan/index.html @@ -314,11 +314,6 @@ HDMI EDID
  • -
  • - - User Manager - -
  • diff --git a/generated/en/wifi/index.html b/generated/en/wifi/index.html index 2bb29a10..4f967d27 100644 --- a/generated/en/wifi/index.html +++ b/generated/en/wifi/index.html @@ -338,11 +338,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/en/zerotier/index.html b/generated/en/zerotier/index.html index 4244849e..4a0cee05 100644 --- a/generated/en/zerotier/index.html +++ b/generated/en/zerotier/index.html @@ -343,11 +343,6 @@
  • - - User Manager - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/404.html b/generated/zh/404.html index af718b4f..221fa8de 100644 --- a/generated/zh/404.html +++ b/generated/zh/404.html @@ -596,8 +596,6 @@ - - @@ -746,20 +744,6 @@ -
  • - - 修改账号密码 - -
  • - - - - - - - - -
  • Wake-on-LAN diff --git a/generated/zh/BLIHAT-Installation/index.html b/generated/zh/BLIHAT-Installation/index.html index b2eebadd..f2ea238e 100644 --- a/generated/zh/BLIHAT-Installation/index.html +++ b/generated/zh/BLIHAT-Installation/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/BLIKVM-CM4-guide/index.html b/generated/zh/BLIKVM-CM4-guide/index.html index 496d5e97..cb0b07c3 100644 --- a/generated/zh/BLIKVM-CM4-guide/index.html +++ b/generated/zh/BLIKVM-CM4-guide/index.html @@ -363,11 +363,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/BLIKVM-HAT-guide/index.html b/generated/zh/BLIKVM-HAT-guide/index.html index 0945e680..acee5c7b 100644 --- a/generated/zh/BLIKVM-HAT-guide/index.html +++ b/generated/zh/BLIKVM-HAT-guide/index.html @@ -406,11 +406,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/BLIKVM-PCIE-guide-zh/index.html b/generated/zh/BLIKVM-PCIE-guide-zh/index.html index 44ee8c81..41438726 100644 --- a/generated/zh/BLIKVM-PCIE-guide-zh/index.html +++ b/generated/zh/BLIKVM-PCIE-guide-zh/index.html @@ -383,11 +383,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/BLIKVM-PCIe-installation-zh/index.html b/generated/zh/BLIKVM-PCIe-installation-zh/index.html index 6abdcb87..3748a122 100644 --- a/generated/zh/BLIKVM-PCIe-installation-zh/index.html +++ b/generated/zh/BLIKVM-PCIe-installation-zh/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/BliKVM-v4-guide/index.html b/generated/zh/BliKVM-v4-guide/index.html index edd67194..6cdd9c35 100644 --- a/generated/zh/BliKVM-v4-guide/index.html +++ b/generated/zh/BliKVM-v4-guide/index.html @@ -363,11 +363,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/Datasheet-BliKVM-v4/index.html b/generated/zh/Datasheet-BliKVM-v4/index.html index 705a1099..998f59f5 100644 --- a/generated/zh/Datasheet-BliKVM-v4/index.html +++ b/generated/zh/Datasheet-BliKVM-v4/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/Expand_Filesystem/index.html b/generated/zh/Expand_Filesystem/index.html index d40e077f..1e6331d6 100644 --- a/generated/zh/Expand_Filesystem/index.html +++ b/generated/zh/Expand_Filesystem/index.html @@ -348,11 +348,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/OLED-display/index.html b/generated/zh/OLED-display/index.html index b9097236..24b792c2 100644 --- a/generated/zh/OLED-display/index.html +++ b/generated/zh/OLED-display/index.html @@ -316,11 +316,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/index.html b/generated/zh/Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/index.html index 88c321dd..4a98302e 100644 --- a/generated/zh/Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/index.html +++ b/generated/zh/Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/assets/images/update/update_button.png b/generated/zh/assets/images/update/update_button.png deleted file mode 100644 index 56c94fa1468907ac8cdd49455ee477ddc46bb92f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28514 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 G!u$uE{=*{x diff --git a/generated/zh/assets/images/update/update_info.png b/generated/zh/assets/images/update/update_info.png deleted file mode 100644 index b39547b6b792842778fa06393196335a75278691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67285 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 {G3jGj(XkpZoz<%ZUa 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 diff --git a/generated/zh/assets/images/update/upgrading.png b/generated/zh/assets/images/update/upgrading.png deleted file mode 100644 index fa50201815e659899b08fd9c716bfea0d1f3bf5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71440 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 O0000
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/atx/index.html b/generated/zh/atx/index.html index a94502f4..8bf1bab2 100644 --- a/generated/zh/atx/index.html +++ b/generated/zh/atx/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/dev-v4/index.html b/generated/zh/dev-v4/index.html index 7c3969a9..60e3f245 100644 --- a/generated/zh/dev-v4/index.html +++ b/generated/zh/dev-v4/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/dev_api/index.html b/generated/zh/dev_api/index.html index 7b6be5a9..cf106848 100644 --- a/generated/zh/dev_api/index.html +++ b/generated/zh/dev_api/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/edid/index.html b/generated/zh/edid/index.html index 80d4959a..e5468e77 100644 --- a/generated/zh/edid/index.html +++ b/generated/zh/edid/index.html @@ -348,11 +348,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN @@ -613,13 +608,13 @@

    自定义EDID

    -
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/first_steps/index.html b/generated/zh/first_steps/index.html index f7d3192d..79d45ad4 100644 --- a/generated/zh/first_steps/index.html +++ b/generated/zh/first_steps/index.html @@ -353,11 +353,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/flashing_os/index.html b/generated/zh/flashing_os/index.html index e2303c7d..d86a4294 100644 --- a/generated/zh/flashing_os/index.html +++ b/generated/zh/flashing_os/index.html @@ -371,11 +371,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/hdmi-csi-i2s/index.html b/generated/zh/hdmi-csi-i2s/index.html index ddfe0802..255adb14 100644 --- a/generated/zh/hdmi-csi-i2s/index.html +++ b/generated/zh/hdmi-csi-i2s/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/hid/index.html b/generated/zh/hid/index.html index 761e33ea..074a5ca5 100644 --- a/generated/zh/hid/index.html +++ b/generated/zh/hid/index.html @@ -333,11 +333,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/https/index.html b/generated/zh/https/index.html index a342cabc..0a71cc26 100644 --- a/generated/zh/https/index.html +++ b/generated/zh/https/index.html @@ -316,11 +316,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/index.html b/generated/zh/index.html index 90211a01..0dfc16f6 100644 --- a/generated/zh/index.html +++ b/generated/zh/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/jetson_nano_tc358743/index.html b/generated/zh/jetson_nano_tc358743/index.html index 6374d6b7..f7646e4b 100644 --- a/generated/zh/jetson_nano_tc358743/index.html +++ b/generated/zh/jetson_nano_tc358743/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/make-image/index.html b/generated/zh/make-image/index.html index 7c384f27..e7bbaf14 100644 --- a/generated/zh/make-image/index.html +++ b/generated/zh/make-image/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/modify_pikvm_image/index.html b/generated/zh/modify_pikvm_image/index.html index 1a7beadf..df045333 100644 --- a/generated/zh/modify_pikvm_image/index.html +++ b/generated/zh/modify_pikvm_image/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/msd/index.html b/generated/zh/msd/index.html index d1d2147b..ff4d096a 100644 --- a/generated/zh/msd/index.html +++ b/generated/zh/msd/index.html @@ -362,11 +362,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/port-forwarding/index.html b/generated/zh/port-forwarding/index.html index 29c55f2a..cf5ed52d 100644 --- a/generated/zh/port-forwarding/index.html +++ b/generated/zh/port-forwarding/index.html @@ -316,11 +316,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN @@ -442,12 +437,9 @@

    端口转发

    -

    如果您的ISP为路由器提供了外部IP地址,您可以配置端口转发以访问BliKVM。

    +

    在v1.4.7版本后,如果您的ISP为路由器提供了外部IP地址,您可以配置端口转发以访问BliKVM。

      -
    • Web界面为http协议,占用的是80端口;
    • -
    • 如果您的硬件是V1 V2 V3,使用的是是web-rtc传输,端口是8188;
    • -
    • 如果您的硬件是V4,使用的是mjepg传输,端口是8008;
    • -
    • 注意端口不支持被修改,只能配置转发;
    • +
    • Web如果选择为http协议,占用的是80端口,如果选择的为https协议占用的是443;

    如果您没有外部IP地址,我们建议尝试使用Tailscale VPN


    diff --git a/generated/zh/rtc/index.html b/generated/zh/rtc/index.html index 57694c35..4fa60d05 100644 --- a/generated/zh/rtc/index.html +++ b/generated/zh/rtc/index.html @@ -338,11 +338,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/search/search_index.json b/generated/zh/search/search_index.json index 32c3020a..552c8354 100644 --- a/generated/zh/search/search_index.json +++ b/generated/zh/search/search_index.json @@ -1 +1 @@ -{"config":{"indexing":"full","lang":["en","ja","ru"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"BLIKVM Overview BLIKVM\u662f\u4e00\u6b3e\u5f00\u6e90\u8f6f\u4ef6\u7684KVM\u4e13\u4e1a\u8bbe\u5907\uff0c\u76ee\u524d\u67094\u4e2a\u7248\u672c\uff0cv1 CM4, v2 PCIe, v3 HAT, v4 Allwinner\u3002\u8be5\u8bbe\u5907\u5728\u4e8e\u5e2e\u52a9\u7528\u6237\u901a\u8fc7\u5f97\u5230\u63a7\u5236\u8bbe\u5907\u7684HDMI \u753b\u9762\u548c\u9f20\u6807\u952e\u76d8\uff0c\u53bb\u8fdc\u7a0b\u7ba1\u7406\u670d\u52a1\u5668\u3001\u5de5\u4f5c\u7ad9\u6216\u4e2a\u4ebaPC\u7b49\u3002 \u65e0\u8bba\u76ee\u6807\u8bbe\u5907\u7684\u64cd\u4f5c\u7cfb\u7edf\u662f\u5426\u80fd\u6b63\u5e38\u8fd0\u884c\uff0c\u53ef\u4ee5\u901a\u8fc7BLIKVM\u89e3\u51b3\u76ee\u6807\u8bbe\u5907\u7684\u4e00\u5207\u95ee\u9898\u3002\u5982\uff1a\u914d\u7f6eBIOS\u7cfb\u7edf\uff0c\u901a\u8fc7\u4f7f\u7528\u8fdc\u7a0bCD-ROM\u6216\u8005\u95ea\u5b58\u9a71\u52a8\u5668\u7ed9\u76ee\u6807\u8bbe\u5907\u91cd\u65b0\u5b89\u88c5\u64cd\u4f5c\u7cfb\u7edf\u3002\u548c\u57fa\u4e8e\u8f6f\u4ef6\u7684\u8fdc\u7a0b\u7ba1\u7406\u65b9\u5f0f\u4e0d\u540c\uff0c\u4f60\u65e0\u9700\u5728\u88ab\u63a7\u7535\u8111\u5b89\u88c5\u4efb\u4f55\u8f6f\u4ef6\uff0c\u505a\u5230\u65e0\u4fb5\u5165\u5f0f\u63a7\u5236\u3002 \u5728\u8fd9\u91cc\u4f60\u53ef\u4ee5\u627e\u5230\u5173\u4e8eBLIKVM\u6240\u6709\u7684\u4f7f\u7528\u6587\u6863\u3002\u6b22\u8fce\u52a0\u5165BLIKVM\u7684 Discord \u7fa4\u7ec4\u548c\u6765\u81ea\u5168\u4e16\u754c\u7684\u7231\u597d\u8005\u548c\u7528\u6237\u8fdb\u884c\u4ea4\u6d41\uff0c\u83b7\u5f97\u6280\u672f\u652f\u6301\uff0c\u5e38\u89c1\u95ee\u9898\u89e3\u7b54\u548c\u65b0\u95fb\u7b49\u3002 \u529f\u80fd BliKVM v1 CM4 BliKVM v2 PCIe BliKVM v3 HAT BliKVM v4 H616/H313 SOC \u6811\u8393\u6d3eCM4 \u6811\u8393\u6d3eCM4 \u6811\u8393\u6d3e4B \u5168\u5fd7H616/H313 \u652f\u6301\u8f93\u5165\u7684\u6700\u9ad8\u5206\u8fa8\u7387 1920x1080@60Hz 1920x1080@60Hz 1920x1080@50Hz 3840x2160@30Hz HDMI\u91c7\u96c6\u82af\u7247 TC358743 TC358743 TC358743 MS2131 HDMI\u73af\u51fa \u65e0 \u65e0 \u65e0 \u6709 PoE\u4f9b\u7535 \u4e0d\u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 DC\u4f9b\u7535 \u4e0d\u652f\u6301 \u4e0d\u652f\u6301 \u4e0d\u652f\u6301 \u652f\u6301 USB-C\u4f9b\u7535 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 USB\u7535\u6e90/\u6570\u636e\u5206\u79bb\u5668 \u6709 \u6709(\u989d\u5916\u6a21\u5757) \u6709 \u6709 \u4e32\u53e3\u7ec8\u7aef \u4e0d\u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 ATX\u5f00\u5173\u673a\u63a7\u5236 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 BIOS\u63a7\u5236 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u7cfb\u7edf\u5f00\u6e90 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u91cd\u88c5\u88ab\u63a7\u7535\u8111\u7cfb\u7edf \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u98ce\u6247 \u6709(\u4e0d\u652f\u6301\u8c03\u901f) \u6709 \u6709 \u53ef\u914d(\u9ed8\u8ba4\u914d\u6563\u70ed\u7247) \u5c4f\u5e55\u79cd\u7c7b OLED 128x64 \u767d\u8272 OLED 128x64 \u767d\u8272 OLED 128x32 \u767d\u8272 LCD 240x240 \u5f69\u8272 RTC\u65f6\u949f \u6709(DS1307) \u6709(PCF8563) \u6709(PCF8563) \u6709(PCF8563) \u5916\u58f3 \u91d1\u5c5e\u9ed1 \u65e0 \u91d1\u5c5e\u9ed1\u84dd\u6a58\u767d(1U\u673a\u67b6\u517c\u5bb9) \u91d1\u5c5e\u9ed1(1U\u673a\u67b6\u517c\u5bb9) \u8702\u9e23\u5668 \u65e0 \u65e0 \u65e0 \u6709 \u81ea\u5b9a\u4e49\u6309\u94ae \u65e0 \u65e0 \u65e0 \u6709 \u8f6f\u4ef6\u5347\u7ea7 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 32GB SD\u5361 \u6709(\u542bOS) \u6709(\u542bOS) \u6709(\u542bOS) \u6709(\u542bOS) \u89e3\u51b3HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898 \u672a\u89e3\u51b3 \u5df2\u89e3\u51b3 \u5df2\u89e3\u51b3 \u5df2\u89e3\u51b3 \u4e13\u4e1a\u6280\u672f\u652f\u6301 \u6709 \u6709 \u6709 \u6709 \u529f\u80fd HDMI\u89c6\u9891\u91c7\u96c6 (\u6700\u9ad8\u652f\u63011080P 60Hz) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 ATX\u5f00\u5173\u673a PWM\u98ce\u6247\u63a7\u5236 \u5168\u5c4f\u6a21\u5f0f \u4ece\u526a\u8d34\u677f\u7c98\u8d34\u6587\u672c VPN\u7ec4\u7f51\u652f\u6301 \u5927\u5bb9\u91cf\u5b58\u50a8\u9a71\u52a8\u5668 (\u6a21\u62dfCD-ROM\u6216\u95ea\u5b58\u9a71\u52a8\u5668) \u8fdc\u7a0b\u63a7\u5236\u591a\u53f0\u4e3b\u673a\uff08\u901a\u8fc7\u642d\u914dKVM\u5207\u6362\u5668\uff09 OLED\u5c4f\u5e55\u663e\u793a\u7cfb\u7edf\u4fe1\u606f\uff08\u6e29\u5ea6\u3001IP\u5730\u5740\uff0c\u8fd0\u884c\u65f6\u95f4\u7b49\uff09 \u8d26\u53f7\u5bc6\u7801\u8ba4\u8bc1 Guide 1.BliKVM v1 CM4 \u7248\u672c 2.BliKVM v2 PCIe \u7248\u672c 3.BliKVM v3 HAT \u7248\u672c 4.BliKVM v4 Allwinner \u7248\u672c","title":"BliKVM\u4ecb\u7ecd"},{"location":"#blikvm-overview","text":"BLIKVM\u662f\u4e00\u6b3e\u5f00\u6e90\u8f6f\u4ef6\u7684KVM\u4e13\u4e1a\u8bbe\u5907\uff0c\u76ee\u524d\u67094\u4e2a\u7248\u672c\uff0cv1 CM4, v2 PCIe, v3 HAT, v4 Allwinner\u3002\u8be5\u8bbe\u5907\u5728\u4e8e\u5e2e\u52a9\u7528\u6237\u901a\u8fc7\u5f97\u5230\u63a7\u5236\u8bbe\u5907\u7684HDMI \u753b\u9762\u548c\u9f20\u6807\u952e\u76d8\uff0c\u53bb\u8fdc\u7a0b\u7ba1\u7406\u670d\u52a1\u5668\u3001\u5de5\u4f5c\u7ad9\u6216\u4e2a\u4ebaPC\u7b49\u3002 \u65e0\u8bba\u76ee\u6807\u8bbe\u5907\u7684\u64cd\u4f5c\u7cfb\u7edf\u662f\u5426\u80fd\u6b63\u5e38\u8fd0\u884c\uff0c\u53ef\u4ee5\u901a\u8fc7BLIKVM\u89e3\u51b3\u76ee\u6807\u8bbe\u5907\u7684\u4e00\u5207\u95ee\u9898\u3002\u5982\uff1a\u914d\u7f6eBIOS\u7cfb\u7edf\uff0c\u901a\u8fc7\u4f7f\u7528\u8fdc\u7a0bCD-ROM\u6216\u8005\u95ea\u5b58\u9a71\u52a8\u5668\u7ed9\u76ee\u6807\u8bbe\u5907\u91cd\u65b0\u5b89\u88c5\u64cd\u4f5c\u7cfb\u7edf\u3002\u548c\u57fa\u4e8e\u8f6f\u4ef6\u7684\u8fdc\u7a0b\u7ba1\u7406\u65b9\u5f0f\u4e0d\u540c\uff0c\u4f60\u65e0\u9700\u5728\u88ab\u63a7\u7535\u8111\u5b89\u88c5\u4efb\u4f55\u8f6f\u4ef6\uff0c\u505a\u5230\u65e0\u4fb5\u5165\u5f0f\u63a7\u5236\u3002 \u5728\u8fd9\u91cc\u4f60\u53ef\u4ee5\u627e\u5230\u5173\u4e8eBLIKVM\u6240\u6709\u7684\u4f7f\u7528\u6587\u6863\u3002\u6b22\u8fce\u52a0\u5165BLIKVM\u7684 Discord \u7fa4\u7ec4\u548c\u6765\u81ea\u5168\u4e16\u754c\u7684\u7231\u597d\u8005\u548c\u7528\u6237\u8fdb\u884c\u4ea4\u6d41\uff0c\u83b7\u5f97\u6280\u672f\u652f\u6301\uff0c\u5e38\u89c1\u95ee\u9898\u89e3\u7b54\u548c\u65b0\u95fb\u7b49\u3002 \u529f\u80fd BliKVM v1 CM4 BliKVM v2 PCIe BliKVM v3 HAT BliKVM v4 H616/H313 SOC \u6811\u8393\u6d3eCM4 \u6811\u8393\u6d3eCM4 \u6811\u8393\u6d3e4B \u5168\u5fd7H616/H313 \u652f\u6301\u8f93\u5165\u7684\u6700\u9ad8\u5206\u8fa8\u7387 1920x1080@60Hz 1920x1080@60Hz 1920x1080@50Hz 3840x2160@30Hz HDMI\u91c7\u96c6\u82af\u7247 TC358743 TC358743 TC358743 MS2131 HDMI\u73af\u51fa \u65e0 \u65e0 \u65e0 \u6709 PoE\u4f9b\u7535 \u4e0d\u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 DC\u4f9b\u7535 \u4e0d\u652f\u6301 \u4e0d\u652f\u6301 \u4e0d\u652f\u6301 \u652f\u6301 USB-C\u4f9b\u7535 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 USB\u7535\u6e90/\u6570\u636e\u5206\u79bb\u5668 \u6709 \u6709(\u989d\u5916\u6a21\u5757) \u6709 \u6709 \u4e32\u53e3\u7ec8\u7aef \u4e0d\u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 ATX\u5f00\u5173\u673a\u63a7\u5236 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 BIOS\u63a7\u5236 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u7cfb\u7edf\u5f00\u6e90 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u91cd\u88c5\u88ab\u63a7\u7535\u8111\u7cfb\u7edf \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u98ce\u6247 \u6709(\u4e0d\u652f\u6301\u8c03\u901f) \u6709 \u6709 \u53ef\u914d(\u9ed8\u8ba4\u914d\u6563\u70ed\u7247) \u5c4f\u5e55\u79cd\u7c7b OLED 128x64 \u767d\u8272 OLED 128x64 \u767d\u8272 OLED 128x32 \u767d\u8272 LCD 240x240 \u5f69\u8272 RTC\u65f6\u949f \u6709(DS1307) \u6709(PCF8563) \u6709(PCF8563) \u6709(PCF8563) \u5916\u58f3 \u91d1\u5c5e\u9ed1 \u65e0 \u91d1\u5c5e\u9ed1\u84dd\u6a58\u767d(1U\u673a\u67b6\u517c\u5bb9) \u91d1\u5c5e\u9ed1(1U\u673a\u67b6\u517c\u5bb9) \u8702\u9e23\u5668 \u65e0 \u65e0 \u65e0 \u6709 \u81ea\u5b9a\u4e49\u6309\u94ae \u65e0 \u65e0 \u65e0 \u6709 \u8f6f\u4ef6\u5347\u7ea7 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 32GB SD\u5361 \u6709(\u542bOS) \u6709(\u542bOS) \u6709(\u542bOS) \u6709(\u542bOS) \u89e3\u51b3HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898 \u672a\u89e3\u51b3 \u5df2\u89e3\u51b3 \u5df2\u89e3\u51b3 \u5df2\u89e3\u51b3 \u4e13\u4e1a\u6280\u672f\u652f\u6301 \u6709 \u6709 \u6709 \u6709","title":"BLIKVM Overview"},{"location":"#_1","text":"HDMI\u89c6\u9891\u91c7\u96c6 (\u6700\u9ad8\u652f\u63011080P 60Hz) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 ATX\u5f00\u5173\u673a PWM\u98ce\u6247\u63a7\u5236 \u5168\u5c4f\u6a21\u5f0f \u4ece\u526a\u8d34\u677f\u7c98\u8d34\u6587\u672c VPN\u7ec4\u7f51\u652f\u6301 \u5927\u5bb9\u91cf\u5b58\u50a8\u9a71\u52a8\u5668 (\u6a21\u62dfCD-ROM\u6216\u95ea\u5b58\u9a71\u52a8\u5668) \u8fdc\u7a0b\u63a7\u5236\u591a\u53f0\u4e3b\u673a\uff08\u901a\u8fc7\u642d\u914dKVM\u5207\u6362\u5668\uff09 OLED\u5c4f\u5e55\u663e\u793a\u7cfb\u7edf\u4fe1\u606f\uff08\u6e29\u5ea6\u3001IP\u5730\u5740\uff0c\u8fd0\u884c\u65f6\u95f4\u7b49\uff09 \u8d26\u53f7\u5bc6\u7801\u8ba4\u8bc1","title":"\u529f\u80fd"},{"location":"#guide","text":"1.BliKVM v1 CM4 \u7248\u672c 2.BliKVM v2 PCIe \u7248\u672c 3.BliKVM v3 HAT \u7248\u672c 4.BliKVM v4 Allwinner \u7248\u672c","title":"Guide"},{"location":"BLIHAT-Installation/","text":"BLIHAT \u5b89\u88c5\u8bf4\u660e 1.\u62c6\u5f00\u5305\u88c5\uff0c\u6253\u5f00\u888b\u5b50\uff0c\u62ff\u51fa\u8bbe\u5907 2.\u5b89\u88c5\u4e3b\u4f53\u8bbe\u5907 \u5378\u4e0b\u5916\u58f3\u80cc\u9762\u7684\u5982\u56fe\u4e2d\u6240\u793a\u7684\u87ba\u4e1d \u6253\u5f00\u5916\u58f3 \u5378\u4e0b\u80cc\u9762\u5269\u4e0b\u7684\u87ba\u4e1d \u6253\u5f00\u914d\u4ef6\u5305\uff0c\u62ff\u51fa\u56fe\u7247\u4e2d\u7684\u8bbe\u5907 \u5b89\u88c5SD\u5361 \u5b89\u88c5FFC\u7ebf\u7f06 \u5b89\u88c5Hat\u5230\u6811\u8393\u6d3e4B\u4e0a \u5b89\u88c54\u9897\u94dc\u67f1 \u5b89\u88c5C790\u6a21\u5757\u5230Hat\u4e0a\uff0c\u4f7f\u7528\u4f60\u5378\u4e0b\u6765\u7684\u957f\u87ba\u4e1d \u5b89\u88c5\u97f3\u9891\u7ebf\u7f06 \u6495\u53bb\u7845\u80f6\u7247\u4e0a\u7684\u4fdd\u62a4\u819c\uff0c\u5c06\u5176\u8d34\u5230\u6811\u8393\u6d3e\u5982\u56fe\u6240\u793a\u7684\u4f4d\u7f6e Install the HAT into the case Pay attention to the alignment of the holes Flip to back and install 4 screws Install five case screws Install the mounting ear as needed The main device installation is complete","title":"v3 HAT\u5b89\u88c5\u8bf4\u660e"},{"location":"BLIHAT-Installation/#blihat","text":"1.\u62c6\u5f00\u5305\u88c5\uff0c\u6253\u5f00\u888b\u5b50\uff0c\u62ff\u51fa\u8bbe\u5907 2.\u5b89\u88c5\u4e3b\u4f53\u8bbe\u5907 \u5378\u4e0b\u5916\u58f3\u80cc\u9762\u7684\u5982\u56fe\u4e2d\u6240\u793a\u7684\u87ba\u4e1d \u6253\u5f00\u5916\u58f3 \u5378\u4e0b\u80cc\u9762\u5269\u4e0b\u7684\u87ba\u4e1d \u6253\u5f00\u914d\u4ef6\u5305\uff0c\u62ff\u51fa\u56fe\u7247\u4e2d\u7684\u8bbe\u5907 \u5b89\u88c5SD\u5361 \u5b89\u88c5FFC\u7ebf\u7f06 \u5b89\u88c5Hat\u5230\u6811\u8393\u6d3e4B\u4e0a \u5b89\u88c54\u9897\u94dc\u67f1 \u5b89\u88c5C790\u6a21\u5757\u5230Hat\u4e0a\uff0c\u4f7f\u7528\u4f60\u5378\u4e0b\u6765\u7684\u957f\u87ba\u4e1d \u5b89\u88c5\u97f3\u9891\u7ebf\u7f06 \u6495\u53bb\u7845\u80f6\u7247\u4e0a\u7684\u4fdd\u62a4\u819c\uff0c\u5c06\u5176\u8d34\u5230\u6811\u8393\u6d3e\u5982\u56fe\u6240\u793a\u7684\u4f4d\u7f6e Install the HAT into the case Pay attention to the alignment of the holes Flip to back and install 4 screws Install five case screws Install the mounting ear as needed The main device installation is complete","title":"BLIHAT \u5b89\u88c5\u8bf4\u660e"},{"location":"BLIKVM-CM4-guide/","text":"BLIKVM v1 CM4\u4f7f\u7528\u8bf4\u660e BLIKVM CM4 v1\u8bc4\u6d4b\u89c6\u9891 BliKVM v1\u662f\u4e00\u6b3e\u751f\u4ea7\u5c31\u7eea\u3001\u5373\u63d2\u5373\u7528\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86\u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406\u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e\u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5\u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1\uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 BliKVM v1 Datasheet \u529f\u80fd\u7279\u70b9 \u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@60Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 WiFi \uff08\u53ef\u9009\uff09 OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) \u5b89\u88c5\u8981\u6c42 \u5982\u679c\u4f60\u8d2d\u4e70\u7684\u662f\u9700\u81ea\u5df1\u7ec4\u88c5\u7684\u7248\u672c\uff08\u4e0d\u662fplug-n-play\u7248\u672c\uff09\uff0c\u4f60\u9700\u8981\u81ea\u5df1\u51c6\u5907\u4ee5\u4e0b\u8bbe\u5907 \u6811\u8393\u6d3eCM4\uff0c\u6700\u5c0f1Gb RAM. USB-C\u8f6cUSB-A\u7ebf\u7f06. HDMI\u7ebf\u7f06. \u7f51\u7ebf. \u7535\u6e90\u9002\u914d\u5668(5.1V 3A USB-C). \u7535\u6e90\u9002\u914d\u5668 \u5728BLIKVM CM4 V2.2\u7248\u672c\u4e2d\uff0c\u4f60\u5fc5\u987b\u4f7f\u7528USB-C\u8f6cUSB-A\u7ebf\u7f06\u8fdb\u884c\u4f9b\u7535\uff0c\u5982\u679c\u4f7f\u7528USB-C\u8f6cUSB-C\u7ebf\u7f06\u53ef\u80fd\u65e0\u6cd5\u4f9b\u7535\u3002\u8fd9\u662f\u8fd9\u4e2a\u7248\u672c\u786c\u4ef6\u8bbe\u8ba1\u7684bug\uff0c\u5728\u5b83\u540e\u9762\u7684\u7248\u672c \u4e2d\u6b64\u95ee\u9898\u5c06\u4f1a\u88ab\u4fee\u590d\u3002 \u57fa\u7840\u914d\u7f6e 1. \u51fa\u5382\u9ed8\u8ba4\u914d\u7684SD\u5361\u5df2\u70e7\u5f55\u955c\u50cf\uff0c\u65e0\u9700\u70e7\u5f55\u3002\u82e5\u60a8\u9700\u8981\u91cd\u5237\u7cfb\u7edf\u6216\u8005DIY\uff0c\u53ef\u53c2\u8003 \u70e7\u5f55\u955c\u50cf\u5230SD\u5361\u6216\u8005eMMC 2. \u5982\u679c\u60a8\u4e0d\u662fplug\u7248\u672c,\u53c2\u8003\u4e0b\u9762\u7684\u89c6\u9891\u548c\u8bf4\u660e\u8fdb\u884c\u8bbe\u5907\u5b89\u88c5: 1. \u7528\u5305\u88f9\u914d\u7684\u87ba\u4e1d\u5200\u6253\u5f00\u91d1\u5c5e\u5916\u58f3\uff0c\u62c6\u4e0bPCB\u4e3b\u677f\uff1b 2. \u5c06CM4\u5b89\u88c5\u5728PCB\u4e3b\u677f\u4e0a\uff0c\u6ce8\u610f\u5b89\u88c5CM4\u65f6\u4e24\u6392\u5361\u69fd\u8981\u5bf9\u9f50\uff0c\u7136\u540e\u5c06\u7845\u80f6\u5bfc\u70ed\u7247\u8d34\u5728CM4\u4e3b\u82af\u7247\u4e0a\uff0c\u4ece\u800c\u53ef\u4ee5\u4f7fCM4\u5229\u7528\u91d1\u5c5e\u5916\u58f3\u6563\u70ed\uff1b 3. \u98ce\u6247\u9ed8\u8ba4\u4e0d\u63a5\uff0c\u5916\u58f3\u6563\u70ed\u8db3\u591f\uff0c\u6839\u636e\u60a8\u7684CM4\u7248\u672c\u9009\u62e9\u6027\u5b89\u88c5Wi-Fi\u5929\u7ebf; 4. \u91cd\u65b0\u5b89\u88c5\u597dPCB\u4e3b\u677f\u548c\u91d1\u5c5e\u5916\u58f3\uff0c\u5373\u5b89\u88c5\u5b8c\u6210. \u5b8c\u6574\u62c6\u7bb1\u548c\u5b89\u88c5\u89c6\u9891 Ortimo\u4f7f\u7528BLIKVM CM4 eMMC\u7248\u672c\u6307\u5bfc 3. \u6839\u636e\u4e0b\u56fe\u63a5\u53e3\u5b9a\u4e49\u6240\u793a\uff0c\u8fde\u63a5\u88ab\u63a7\u7535\u8111\u5230BLIKVM\u4e0a: HDMI IN\u548cotg\u63a5\u53e3\u5fc5\u987b\u548c\u88ab\u63a7\u7535\u8111\u8fde\u63a5\uff0cATX\u662f\u53ef\u9009\u9879\u3002\u5efa\u8bae\u5728BLIKVM\u548c\u88ab\u63a7\u7535\u8111\u4e4b\u95f4\u6700\u597d\u4e0d\u8981\u6709USB\u6269\u5c55\u575e\uff0c\u56e0\u4e3a\u5728UEFI\u6216BIOS\u9636\u6bb5\uff0c\u53ef\u80fd\u68c0\u6d4b\u4e0d\u5230\u6269\u5c55\u575e\u3002 BLIKVM CM4\u7248\u672c\u6700\u9ad8\u652f\u63011080P60Hz\u7684\u8f93\u5165\u3002 \u901a\u8fc7Ethernet\u5c06BLIKVM\u8fde\u63a5\u5230\u7f51\u7edc\uff0c\u901a\u8fc7PWR IN\u7aef\u53e3\u5de5\u4f9b\u7535\u3002 4. ATX\u7535\u6e90\u63a7\u5236\u8fde\u63a5 \u4e3a\u4e86\u7ba1\u7406\u88ab\u63a7\u8ba1\u7b97\u673a\u7684\u7535\u6e90\uff0c\u4f60\u9700\u8981\u5c06CN-ATX\u7aef\u53e3\u548c\u88ab\u63a7\u7535\u8111\u8fde\u63a5\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u63d0\u4f9b\u7684ATX\u7ebf\u7f06(60\u5398\u7c73)\u6216\u8005\u675c\u90a6\u7ebf\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111\u7684\u4e3b\u677f\u4e0a\u3002 \u4e3a\u4e86\u517c\u5bb9\u7f51\u53e3\u5f62\u5f0f\u7684ATX\u63a7\u5236\u677f\uff0cv1\u6709\u4e13\u95e8\u7684ATX\u6269\u5c55\u5305\uff0c\u65b9\u4fbf\u5ba2\u6237\u76f4\u63a5\u901a\u8fc7\u7f51\u7ebf\u548c\u5b89\u88c5\u5230\u673a\u7bb1\u6321\u677f\u7684ATX\u677f\u8fde\u63a5\u3002 5. \u5728\u6240\u6709\u8fde\u63a5\u7ebf\u8fde\u63a5\u597d\u540e,\u5bf9BliKVM\u8fdb\u884c\u4e0a\u7535\uff0c\u76f4\u5230\u663e\u793a\u5c4f\u51fa\u73b0\u753b\u9762\uff0c\u5373\u8bbe\u5907\u6b63\u5e38\u542f\u52a8\u3002 6. \u4ed4\u7ec6\u9605\u8bfb \u201c\u7b2c\u4e00\u6b65\u201d \u6307\u5357-\u5982\u4f55\u5728\u7f51\u7edc\u4e0a\u67e5\u627e\u8bbe\u5907\u3001\u5982\u4f55\u767b\u5f55\u3001\u66f4\u6539\u5bc6\u7801\u7b49\u7b49\u3002\u6309\u7167\u4e0a\u9762\u63cf\u8ff0\u7684\u6b65\u9aa4\u64cd\u4f5c\uff0c\u7136\u540e\u8fd4\u56de\u672c\u9875\u3002 \u7531\u4e8eBliKVM v1\u4e5f\u652f\u6301PiKVM OS\uff0c\u82e5\u4f60\u624b\u4e0a\u7684v1\u51fa\u5382OS\u4e3aPiKVM\uff0c\u5173\u4e8eweb\u4f7f\u7528\u8bf4\u660e\u8bf7 \u53c2\u8003\u6587\u6863 \u3002 7. \u5c1d\u8bd5\u4f7f\u7528 Web \u754c\u9762\u7ba1\u7406\u8ba1\u7b97\u673a\u7684 BliKVM\u3002 \u786e\u4fdd\u60a8\u53ef\u4ee5\u770b\u5230\u56fe\u50cf\u5e76\u4e14\u952e\u76d8\u548c\u9f20\u6807\u90fd\u6b63\u5e38\u5de5\u4f5c\u3002\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u67e5\u770b\u6211\u4eec\u7684 \u5e38\u89c1\u95ee\u9898 \uff08\u5b83\u975e\u5e38\u6709\u7528\uff09\u3002\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u8bf7\u5728\u6211\u4eec\u7684 Discord\u804a\u5929\u5ba4 \u5bfb\u6c42\u652f\u6301\u3002 8. \u60a8\u53ef\u4ee5\u67e5\u770bwiki\u5176\u4ed6\u7684\u9875\u9762\uff0c\u63a2\u7d22BliKVM\u7684\u66f4\u591a\u529f\u80fd\uff0c\u795d\u60a8\u73a9\u7684\u5f00\u5fc3\uff01 Wi-Fi\u5929\u7ebf\u8fde\u63a5 \u5982\u4f60\u7684CM4\u6709Wi-Fi\u529f\u80fd\uff0c\u62c6\u5f00v1\u7684\u91d1\u5c5e\u76d2\u5b50\uff0c\u8bf7\u5c06\u5305\u88f9\u4e2d\u7684Wi-Fi\u5929\u7ebf\uff0c\u5b89\u88c5\u5230CM4\u7684IPX\u63a5\u53e3\uff0c\u5373\u4e0b\u56fe\u4e2d\u7ea2\u6846\u7684\u63a5\u53e3\uff1b\u5176\u4e2d\u5916\u58f3\u5b89\u88c5\u5929\u7ebf\u4f4d\u7f6e\u4e3a\u63a5\u53e3\u5b9a\u4e49\u56fe\u4e2d\u768411\u5904\u3002 \u652f\u6301 1080p60hz HDMI\u8f93\u5165 \u5728V2.2\u7248\u672c\u4e2d\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2aCSI\u901a\u9053\u5207\u6362\u5668\u3002\u786e\u8ba4\u5207\u6362\u5668\u57284\u901a\u9053\u4e00\u4fa7\u3002\u518d\u5176\u5b83\u7248\u672c\u4e2d\uff0c\u79fb\u9664\u4e86\u6b64\u5207\u6362\u5668\uff0c\u9ed8\u8ba44\u901a\u9053\u5168\u90e8\u4f7f\u80fd\u3002 \u53d1\u8d27\u6e05\u5355 BLIKVM v1 \u4e0d\u542b CM4 \u5916\u58f3 1 PCB\u4e3b\u677f 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 OLED\u5c4f\u5e55 1 BLIKVM v1\u542b CM4102000 \u5916\u58f3 1 PCB\u4e3b\u677f 1 CM4102000 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 OLED\u5c4f\u5e55 1 WiFi\u5929\u7ebf 1 BLIKVM v1 \u542b CM4002000 \u5916\u58f3 1 PCB\u4e3b\u677f 1 CM4002000 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 WiFi\u5929\u7ebf 1 \u8d2d\u4e70\u94fe\u63a5 v1\u6dd8\u5b9d\u5730\u5740","title":"BliKVM v1 CM4\u5bfc\u89c8"},{"location":"BLIKVM-CM4-guide/#blikvm-v1-cm4","text":"BLIKVM CM4 v1\u8bc4\u6d4b\u89c6\u9891 BliKVM v1\u662f\u4e00\u6b3e\u751f\u4ea7\u5c31\u7eea\u3001\u5373\u63d2\u5373\u7528\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86\u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406\u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e\u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5\u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1\uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 BliKVM v1 Datasheet","title":"BLIKVM v1 CM4\u4f7f\u7528\u8bf4\u660e"},{"location":"BLIKVM-CM4-guide/#_1","text":"\u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@60Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 WiFi \uff08\u53ef\u9009\uff09 OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC)","title":"\u529f\u80fd\u7279\u70b9"},{"location":"BLIKVM-CM4-guide/#_2","text":"\u5982\u679c\u4f60\u8d2d\u4e70\u7684\u662f\u9700\u81ea\u5df1\u7ec4\u88c5\u7684\u7248\u672c\uff08\u4e0d\u662fplug-n-play\u7248\u672c\uff09\uff0c\u4f60\u9700\u8981\u81ea\u5df1\u51c6\u5907\u4ee5\u4e0b\u8bbe\u5907 \u6811\u8393\u6d3eCM4\uff0c\u6700\u5c0f1Gb RAM. USB-C\u8f6cUSB-A\u7ebf\u7f06. HDMI\u7ebf\u7f06. \u7f51\u7ebf. \u7535\u6e90\u9002\u914d\u5668(5.1V 3A USB-C). \u7535\u6e90\u9002\u914d\u5668 \u5728BLIKVM CM4 V2.2\u7248\u672c\u4e2d\uff0c\u4f60\u5fc5\u987b\u4f7f\u7528USB-C\u8f6cUSB-A\u7ebf\u7f06\u8fdb\u884c\u4f9b\u7535\uff0c\u5982\u679c\u4f7f\u7528USB-C\u8f6cUSB-C\u7ebf\u7f06\u53ef\u80fd\u65e0\u6cd5\u4f9b\u7535\u3002\u8fd9\u662f\u8fd9\u4e2a\u7248\u672c\u786c\u4ef6\u8bbe\u8ba1\u7684bug\uff0c\u5728\u5b83\u540e\u9762\u7684\u7248\u672c \u4e2d\u6b64\u95ee\u9898\u5c06\u4f1a\u88ab\u4fee\u590d\u3002","title":"\u5b89\u88c5\u8981\u6c42"},{"location":"BLIKVM-CM4-guide/#_3","text":"1. \u51fa\u5382\u9ed8\u8ba4\u914d\u7684SD\u5361\u5df2\u70e7\u5f55\u955c\u50cf\uff0c\u65e0\u9700\u70e7\u5f55\u3002\u82e5\u60a8\u9700\u8981\u91cd\u5237\u7cfb\u7edf\u6216\u8005DIY\uff0c\u53ef\u53c2\u8003 \u70e7\u5f55\u955c\u50cf\u5230SD\u5361\u6216\u8005eMMC 2. \u5982\u679c\u60a8\u4e0d\u662fplug\u7248\u672c,\u53c2\u8003\u4e0b\u9762\u7684\u89c6\u9891\u548c\u8bf4\u660e\u8fdb\u884c\u8bbe\u5907\u5b89\u88c5: 1. \u7528\u5305\u88f9\u914d\u7684\u87ba\u4e1d\u5200\u6253\u5f00\u91d1\u5c5e\u5916\u58f3\uff0c\u62c6\u4e0bPCB\u4e3b\u677f\uff1b 2. \u5c06CM4\u5b89\u88c5\u5728PCB\u4e3b\u677f\u4e0a\uff0c\u6ce8\u610f\u5b89\u88c5CM4\u65f6\u4e24\u6392\u5361\u69fd\u8981\u5bf9\u9f50\uff0c\u7136\u540e\u5c06\u7845\u80f6\u5bfc\u70ed\u7247\u8d34\u5728CM4\u4e3b\u82af\u7247\u4e0a\uff0c\u4ece\u800c\u53ef\u4ee5\u4f7fCM4\u5229\u7528\u91d1\u5c5e\u5916\u58f3\u6563\u70ed\uff1b 3. \u98ce\u6247\u9ed8\u8ba4\u4e0d\u63a5\uff0c\u5916\u58f3\u6563\u70ed\u8db3\u591f\uff0c\u6839\u636e\u60a8\u7684CM4\u7248\u672c\u9009\u62e9\u6027\u5b89\u88c5Wi-Fi\u5929\u7ebf; 4. \u91cd\u65b0\u5b89\u88c5\u597dPCB\u4e3b\u677f\u548c\u91d1\u5c5e\u5916\u58f3\uff0c\u5373\u5b89\u88c5\u5b8c\u6210. \u5b8c\u6574\u62c6\u7bb1\u548c\u5b89\u88c5\u89c6\u9891 Ortimo\u4f7f\u7528BLIKVM CM4 eMMC\u7248\u672c\u6307\u5bfc 3. \u6839\u636e\u4e0b\u56fe\u63a5\u53e3\u5b9a\u4e49\u6240\u793a\uff0c\u8fde\u63a5\u88ab\u63a7\u7535\u8111\u5230BLIKVM\u4e0a: HDMI IN\u548cotg\u63a5\u53e3\u5fc5\u987b\u548c\u88ab\u63a7\u7535\u8111\u8fde\u63a5\uff0cATX\u662f\u53ef\u9009\u9879\u3002\u5efa\u8bae\u5728BLIKVM\u548c\u88ab\u63a7\u7535\u8111\u4e4b\u95f4\u6700\u597d\u4e0d\u8981\u6709USB\u6269\u5c55\u575e\uff0c\u56e0\u4e3a\u5728UEFI\u6216BIOS\u9636\u6bb5\uff0c\u53ef\u80fd\u68c0\u6d4b\u4e0d\u5230\u6269\u5c55\u575e\u3002 BLIKVM CM4\u7248\u672c\u6700\u9ad8\u652f\u63011080P60Hz\u7684\u8f93\u5165\u3002 \u901a\u8fc7Ethernet\u5c06BLIKVM\u8fde\u63a5\u5230\u7f51\u7edc\uff0c\u901a\u8fc7PWR IN\u7aef\u53e3\u5de5\u4f9b\u7535\u3002 4. ATX\u7535\u6e90\u63a7\u5236\u8fde\u63a5 \u4e3a\u4e86\u7ba1\u7406\u88ab\u63a7\u8ba1\u7b97\u673a\u7684\u7535\u6e90\uff0c\u4f60\u9700\u8981\u5c06CN-ATX\u7aef\u53e3\u548c\u88ab\u63a7\u7535\u8111\u8fde\u63a5\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u63d0\u4f9b\u7684ATX\u7ebf\u7f06(60\u5398\u7c73)\u6216\u8005\u675c\u90a6\u7ebf\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111\u7684\u4e3b\u677f\u4e0a\u3002 \u4e3a\u4e86\u517c\u5bb9\u7f51\u53e3\u5f62\u5f0f\u7684ATX\u63a7\u5236\u677f\uff0cv1\u6709\u4e13\u95e8\u7684ATX\u6269\u5c55\u5305\uff0c\u65b9\u4fbf\u5ba2\u6237\u76f4\u63a5\u901a\u8fc7\u7f51\u7ebf\u548c\u5b89\u88c5\u5230\u673a\u7bb1\u6321\u677f\u7684ATX\u677f\u8fde\u63a5\u3002 5. \u5728\u6240\u6709\u8fde\u63a5\u7ebf\u8fde\u63a5\u597d\u540e,\u5bf9BliKVM\u8fdb\u884c\u4e0a\u7535\uff0c\u76f4\u5230\u663e\u793a\u5c4f\u51fa\u73b0\u753b\u9762\uff0c\u5373\u8bbe\u5907\u6b63\u5e38\u542f\u52a8\u3002 6. \u4ed4\u7ec6\u9605\u8bfb \u201c\u7b2c\u4e00\u6b65\u201d \u6307\u5357-\u5982\u4f55\u5728\u7f51\u7edc\u4e0a\u67e5\u627e\u8bbe\u5907\u3001\u5982\u4f55\u767b\u5f55\u3001\u66f4\u6539\u5bc6\u7801\u7b49\u7b49\u3002\u6309\u7167\u4e0a\u9762\u63cf\u8ff0\u7684\u6b65\u9aa4\u64cd\u4f5c\uff0c\u7136\u540e\u8fd4\u56de\u672c\u9875\u3002 \u7531\u4e8eBliKVM v1\u4e5f\u652f\u6301PiKVM OS\uff0c\u82e5\u4f60\u624b\u4e0a\u7684v1\u51fa\u5382OS\u4e3aPiKVM\uff0c\u5173\u4e8eweb\u4f7f\u7528\u8bf4\u660e\u8bf7 \u53c2\u8003\u6587\u6863 \u3002 7. \u5c1d\u8bd5\u4f7f\u7528 Web \u754c\u9762\u7ba1\u7406\u8ba1\u7b97\u673a\u7684 BliKVM\u3002 \u786e\u4fdd\u60a8\u53ef\u4ee5\u770b\u5230\u56fe\u50cf\u5e76\u4e14\u952e\u76d8\u548c\u9f20\u6807\u90fd\u6b63\u5e38\u5de5\u4f5c\u3002\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u67e5\u770b\u6211\u4eec\u7684 \u5e38\u89c1\u95ee\u9898 \uff08\u5b83\u975e\u5e38\u6709\u7528\uff09\u3002\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u8bf7\u5728\u6211\u4eec\u7684 Discord\u804a\u5929\u5ba4 \u5bfb\u6c42\u652f\u6301\u3002 8. \u60a8\u53ef\u4ee5\u67e5\u770bwiki\u5176\u4ed6\u7684\u9875\u9762\uff0c\u63a2\u7d22BliKVM\u7684\u66f4\u591a\u529f\u80fd\uff0c\u795d\u60a8\u73a9\u7684\u5f00\u5fc3\uff01","title":"\u57fa\u7840\u914d\u7f6e"},{"location":"BLIKVM-CM4-guide/#wi-fi","text":"\u5982\u4f60\u7684CM4\u6709Wi-Fi\u529f\u80fd\uff0c\u62c6\u5f00v1\u7684\u91d1\u5c5e\u76d2\u5b50\uff0c\u8bf7\u5c06\u5305\u88f9\u4e2d\u7684Wi-Fi\u5929\u7ebf\uff0c\u5b89\u88c5\u5230CM4\u7684IPX\u63a5\u53e3\uff0c\u5373\u4e0b\u56fe\u4e2d\u7ea2\u6846\u7684\u63a5\u53e3\uff1b\u5176\u4e2d\u5916\u58f3\u5b89\u88c5\u5929\u7ebf\u4f4d\u7f6e\u4e3a\u63a5\u53e3\u5b9a\u4e49\u56fe\u4e2d\u768411\u5904\u3002","title":"Wi-Fi\u5929\u7ebf\u8fde\u63a5"},{"location":"BLIKVM-CM4-guide/#1080p60hz-hdmi","text":"\u5728V2.2\u7248\u672c\u4e2d\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2aCSI\u901a\u9053\u5207\u6362\u5668\u3002\u786e\u8ba4\u5207\u6362\u5668\u57284\u901a\u9053\u4e00\u4fa7\u3002\u518d\u5176\u5b83\u7248\u672c\u4e2d\uff0c\u79fb\u9664\u4e86\u6b64\u5207\u6362\u5668\uff0c\u9ed8\u8ba44\u901a\u9053\u5168\u90e8\u4f7f\u80fd\u3002","title":"\u652f\u6301 1080p60hz HDMI\u8f93\u5165"},{"location":"BLIKVM-CM4-guide/#_4","text":"BLIKVM v1 \u4e0d\u542b CM4 \u5916\u58f3 1 PCB\u4e3b\u677f 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 OLED\u5c4f\u5e55 1 BLIKVM v1\u542b CM4102000 \u5916\u58f3 1 PCB\u4e3b\u677f 1 CM4102000 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 OLED\u5c4f\u5e55 1 WiFi\u5929\u7ebf 1 BLIKVM v1 \u542b CM4002000 \u5916\u58f3 1 PCB\u4e3b\u677f 1 CM4002000 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 WiFi\u5929\u7ebf 1","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"BLIKVM-CM4-guide/#_5","text":"v1\u6dd8\u5b9d\u5730\u5740","title":"\u8d2d\u4e70\u94fe\u63a5"},{"location":"BLIKVM-HAT-guide/","text":"BliKVM Hat \u4f7f\u7528\u8bf4\u660e \u4ecb\u7ecd BliKVM Hat 360\u5ea6 \u89c6\u9891 BliKVM Hat\u7248\u672c\u662f\u57fa\u4e8e\u6811\u8393\u6d3e4B\u5236\u4f5c\u7684\u4e00\u6b3e\u786c\u4ef6\uff0c\u7528\u4e8eKVM Over IP\u3002Hat\u5173\u952e\u529f\u80fd\u5305\u62ecHDMI\u89c6\u9891\u6355\u83b7\u3001ATX\u63a7\u5236\u3001PoE\u4f9b\u7535\u3001OLED\u5c4f\u5e55\u663e\u793a\u3001RTC\u65f6\u949f\u3002 Hat\u914d\u6709\u91d1\u5c5e\u5916\u58f3\uff0c\u7528\u4e8e\u4fdd\u62a4\u548c\u6563\u70ed\u3002Hat\u53ef\u4ee5\u88ab\u5b89\u88c5\u52301U\u7684\u673a\u67b6\u3002\u540c\u65f6\u652f\u6301blikvm\u955c\u50cf\u548cpikvm\u955c\u50cf\u3002 \u5b89\u88c5\u8981\u6c42 \u5982\u679c\u4f60\u8d2d\u4e70\u7684\u53ea\u662f\u4e00\u4e2aHat\uff0c\u4f60\u8fd8\u9700\u8981\u4e0b\u9762\u8bbe\u5907 \u6811\u8393\u6d3e4B\uff0c1GB RAM\u6216\u8005\u66f4\u591a MicroSD card (\u63a8\u8350\u6700\u5c1116Gb, class 10). HDMI \u7ebf\u7f06. \u7f51\u7ebf (\u7528\u4e8eHat\u548cATX\u7684\u8fde\u63a5). \u7535\u6e90\u9002\u914d\u5668\u548c\u7ebf\u7f06(5.1V 3A USB-C). \u529f\u80fd \u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@50Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE \u4f9b\u7535 \u652f\u6301\u4e32\u53e3\u7ec8\u7aef OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) PWM\u98ce\u6247 \u57fa\u7840\u8bbe\u7f6e 1. \u70e7\u5f55\u955c\u50cf 2.\u7ec4\u88c5Hat \u53c2\u8003\u4e0b\u9762\u7684\u89c6\u9891\u8bf4\u660e\u6216\u8005\u53c2\u8003 \u56fe\u6587\u8bf4\u660e : Hat \u89c6\u9891\u5b89\u88c5\u5bfc\u89c8: \u624b\u628a\u624b\u6559\u4f60\u5982\u4f55\u7ec4\u88c5Hat\u5230\u6811\u8393\u6d3e\u4e0a 3. \u5b89\u88c5 ATX \u6a21\u5757 ATX\u6a21\u5757\u914d\u6709\u4e00\u4e2a\u5168\u9ad8\u6216\u8005\u534a\u9ad8\u7684PCIe\u6321\u677f\uff0c\u4f60\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u9009\u62e9\u5b89\u88c5 \u4f7f\u7528\u675c\u90a6\u7ebf\u8fde\u63a5ATX\u6a21\u5757\u548c\u673a\u7bb1\u91cc\u7684\u4e3b\u677f\uff0cATX\u6a21\u5757\u4e0a\u90fd\u6709\u6e05\u6670\u7684\u5f15\u811a\u5b9a\u4e49\u65b9\u4fbf\u4f60\u8fde\u63a5 \u5c06ATX\u6a21\u5757\u5b89\u88c5\u5230\u673a\u7bb1\u5916\u58f3\u4e0a \u4f7f\u7528RJ45\u7684\u7f51\u7ebf\u8fde\u63a5ATX\u548cHat 4. \u8fde\u63a5HDMI\u7ebf\u7f06 \u4f7f\u7528HDMI\u7ebf\u7f06\uff0c\u5c06\u88ab\u63a7\u7535\u8111\u7684HDMI\u548cHat\u7684HDMI IN\u7aef\u53e3\u8fde\u63a5\u3002HDMI\u6a21\u62df\u5668\u4e0d\u662f\u5fc5\u987b\u4f7f\u7528\u7684\uff0c\u5f53\u4f60\u7684\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8f93\u51fa\u753b\u9762\u65f6\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528HDMI\u6a21\u62df\u5668\u6765\u6821\u6b63\u7535\u8111\u7684HDMI\u8f93\u51fa 5. \u5b89\u88c5USB\u7ebf\u7f06 \u8bf7\u6ce8\u610f\u8fd9\u91cc\u4f7f\u7528USB\u5206\u7535\u677f\u4e0d\u662f\u5fc5\u987b\u7684\uff0c\u5982\u679c\u4f60\u4f7f\u7528PoE\u4f9b\u7535\u4e0d\u9700\u8981\u4f7f\u7528\u6b64\u6a21\u5757\uff0c\u5982\u679c\u4f60\u9700\u8981\u4f7f\u7528USB\u4f9b\u7535\u5219\u9700\u8981\u3002\u901a\u8fc7USB-C\u7ebf\u8fde\u63a5\u6811\u8393\u6d3e4B\u7684TYPE-C\u53e3\u5230\u5206\u7535\u677f\u7684RPI4\u7aef\u53e3 \u8fde\u63a5\u5206\u7535\u677f\u4e0a\u7684USB\u7aef\u53e3\u5230\u88ab\u63a7\u7535\u8111 \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u8bf7\u6ce8\u610f\u4e0d\u9700\u8981\u5728\u4f7f\u7528USB\u4f9b\u7535\u8bbe\u5907\u3002\u5f53\u4e0d\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u63a8\u8350\u4f7f\u75285V/3A\u7684\u7535\u6e90\u9002\u914d\u5668\u5230\u5206\u7535\u677f\u7684PWR\u7aef\u53e3 6. \u6d4b\u8bd5 \u56fe\u4e2d\u901a\u8fc7PoE\u4f9b\u7535\uff0cHat\u901a\u8fc7\u7f51\u7ebf\u8fde\u63a5\u5230\u7f51\u7edc\u4e2d OLED\u5c4f\u5e55\u5c06\u4f1a\u6b63\u5e38\u663e\u793a\u8bbe\u5907\u7684\u5de5\u4f5c\u72b6\u6001\uff0c\u5305\u62ec\u8bbe\u5907\u7684IP\u5730\u5740 \u6253\u5f00\u6d4f\u89c8\u5668\uff0c\u8f93\u5165\u8bbe\u5907\u7684IP\u5730\u5740\uff0c\u5373\u53ef\u6253\u5f00\u63a7\u5236\u7684WEB\u754c\u9762\uff0c\u73b0\u5728\u53bb\u4f7f\u7528\u5b83\u5427\uff01 \u6027\u80fd\u53c2\u6570 HDMI \u8f93\u5165 \u4f7f\u7528Toshiba TC358743\u4e3aHDMI\u8f6c\u6362\u7684\u4e3b\u82af\u7247\uff0c\u540c\u65f6\u652f\u6301\u89c6\u9891\u548c\u58f0\u97f3\u7684\u91c7\u96c6\uff0c\u652f\u6301\u89c6\u9891\u6700\u9ad8\u8f93\u5165\u4e3a1080P50Hz.\u89e3\u51b3\u4e86HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898\u3002 CN-ATX CN-ATX\u63a5\u53e3\u901a\u8fc7\u7f51\u7ebf\u8fde\u63a5ATX\u6a21\u5757\uff0c\u7528\u6765\u63a7\u5236\u88ab\u63a7\u7535\u8111\u7684\u5f00\u673a\u3001\u5173\u673a\u3001\u548c\u91cd\u542f\u64cd\u4f5c\u3002 \u663e\u793a\u5c4f \u914d\u6709\u767d\u8272\u7684\u663e\u793a\u5c4f\uff0c\u5206\u8fa8\u7387\u4e3a128x32\uff0c\u4f7f\u7528\u82af\u7247\u4e3aSSD1306\u3002\u663e\u793a\u5c4f\u4f1a\u663e\u793a\u5982\u6e29\u5ea6\u3001IP\u5730\u5740\u7b49\u6811\u8393\u6d3e\u7684\u4fe1\u606f\u3002 PoE \u6807\u51c6: IEEE 802.3af PoE \u8f93\u5165\u7535\u538b: 37-57 V DC \u8f93\u51fa\u7535\u538b: 5 V DC/2.4 A \u4f7f\u7528PoE\u6a21\u5757\u4f9b\u7535\uff0c\u9700\u8981\u5c06Hat\u4e0a\u7684PoE\u7684\u5f15\u811a\u4f7f\u7528\u8df3\u7ebf\u5e3d\u77ed\u63a5\u3002 \u98ce\u6247 \u98ce\u6247\u9ed8\u8ba4\u4f7f\u7528\u6811\u8393\u6d3e\u4e0a\u7684GPIO12\u63a7\u5236\u3002 RTC\u65f6\u949f RTC\u65f6\u949f\u4e3b\u82af\u7247\u4e3aPCF8563\uff0c\u901a\u8fc7I2C\u548c\u6811\u8393\u6d3e\u8fde\u63a5\u3002\u542f\u7528RTC\u65f6\u949f\u5de5\u4f5c\u7684\u7ebd\u6263\u7535\u6c60\u5b89\u88c5\u4f4d\u7f6e\u5728HDMI-IN\u6a21\u5757\u7684\u4e0b\u9762\u3002 \u914d\u4ef6 ATX\u6a21\u5757 ATX\u6a21\u5757\u901a\u8fc7\u675c\u90a6\u7ebf\u548c\u7535\u8111\u7684\u4e3b\u677f\u8fde\u63a5\u3002ATX\u6a21\u5757\u914d\u6709\u5168\u9ad8\u548c\u534a\u9ad8\u7684PCIe\u6321\u677f\u3002 USB/PWR \u5206\u7535\u677f RPI4\u7aef\u53e3\u7528\u4e8e\u8fde\u63a5\u5230\u6811\u8393\u6d3e4B. USB\u7aef\u53e3\u7528\u4e8e\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111. \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u4e0d\u9700\u8981\u4f7f\u7528\u5206\u7535\u677f. HDMI\u6a21\u62df\u5668 \u5982\u679c\u88ab\u63a7\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8f93\u51fa\u753b\u9762\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u6b64\u6a21\u5757\u6765\u89e3\u51b3\u3002\u5c06\u6b64\u6a21\u5757\u8fde\u63a5\u5230Hat\u4e0a\u540e\uff0c\u518d\u901a\u8fc7HDMI\u7ebf\u7f06\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111\u3002 \u91d1\u5c5e\u5916\u58f3 \u91d1\u5c5e\u5916\u58f3\u53ef\u4ee5\u4fdd\u62a4Hat\u548c\u7528\u4e8e\u6563\u70ed.\u5916\u58f3\u4e0a\u6bcf\u4e2a\u7aef\u53e3\u6709\u6e05\u6670\u7684\u4e1d\u5370\u6765\u8868\u793a\u6b64\u7aef\u53e3\u7528\u9014\u3002\u6b64\u5916\u58f3\u53ef\u4ee5\u65b9\u4fbf\u7684\u5b89\u88c5\u57281U\u7684\u673a\u67b6\u4e0a\u3002 List Product List BliKVM Hat \u6a21\u5757 1 ATX \u6a21\u5757 1 USB/PWR \u5206\u7535\u677f 1 HDMI\u6a21\u62df\u5668 1 \u91d1\u5c5e\u5916\u58f3 1 32G TF \u5361 1 USB Type-C \u8f6c USB Type-C \u7ebf\u7f06 30cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 \u5341\u5b57\u6273\u624b\u5957\u7b52 1 \u7528\u6237\u9700\u8981\u51c6\u5907\u8bbe\u5907\u7684\u6e05\u5355 \u6811\u8393\u6d3e4B 1 RJ45 \u7f51\u7ebf 2 USB Type-A \u8f6c USB Type-C \u7ebf\u7f06 2 HDMI \u7ebf\u7f06 1 PoE\u4f9b\u7535\u8bbe\u5907 or 5V/3A USB \u7535\u6e90\u9002\u914d\u5668 1 CR1220\u7ebd\u6263\u7535\u6c60 1 \u8d2d\u4e70\u94fe\u63a5 v3\u6dd8\u5b9d\u5730\u5740","title":"BliKVM v3 HAT\u5bfc\u89c8"},{"location":"BLIKVM-HAT-guide/#blikvm-hat","text":"","title":"BliKVM Hat \u4f7f\u7528\u8bf4\u660e"},{"location":"BLIKVM-HAT-guide/#_1","text":"BliKVM Hat 360\u5ea6 \u89c6\u9891 BliKVM Hat\u7248\u672c\u662f\u57fa\u4e8e\u6811\u8393\u6d3e4B\u5236\u4f5c\u7684\u4e00\u6b3e\u786c\u4ef6\uff0c\u7528\u4e8eKVM Over IP\u3002Hat\u5173\u952e\u529f\u80fd\u5305\u62ecHDMI\u89c6\u9891\u6355\u83b7\u3001ATX\u63a7\u5236\u3001PoE\u4f9b\u7535\u3001OLED\u5c4f\u5e55\u663e\u793a\u3001RTC\u65f6\u949f\u3002 Hat\u914d\u6709\u91d1\u5c5e\u5916\u58f3\uff0c\u7528\u4e8e\u4fdd\u62a4\u548c\u6563\u70ed\u3002Hat\u53ef\u4ee5\u88ab\u5b89\u88c5\u52301U\u7684\u673a\u67b6\u3002\u540c\u65f6\u652f\u6301blikvm\u955c\u50cf\u548cpikvm\u955c\u50cf\u3002","title":"\u4ecb\u7ecd"},{"location":"BLIKVM-HAT-guide/#_2","text":"\u5982\u679c\u4f60\u8d2d\u4e70\u7684\u53ea\u662f\u4e00\u4e2aHat\uff0c\u4f60\u8fd8\u9700\u8981\u4e0b\u9762\u8bbe\u5907 \u6811\u8393\u6d3e4B\uff0c1GB RAM\u6216\u8005\u66f4\u591a MicroSD card (\u63a8\u8350\u6700\u5c1116Gb, class 10). HDMI \u7ebf\u7f06. \u7f51\u7ebf (\u7528\u4e8eHat\u548cATX\u7684\u8fde\u63a5). \u7535\u6e90\u9002\u914d\u5668\u548c\u7ebf\u7f06(5.1V 3A USB-C).","title":"\u5b89\u88c5\u8981\u6c42"},{"location":"BLIKVM-HAT-guide/#_3","text":"\u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@50Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE \u4f9b\u7535 \u652f\u6301\u4e32\u53e3\u7ec8\u7aef OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) PWM\u98ce\u6247","title":"\u529f\u80fd"},{"location":"BLIKVM-HAT-guide/#_4","text":"1. \u70e7\u5f55\u955c\u50cf 2.\u7ec4\u88c5Hat \u53c2\u8003\u4e0b\u9762\u7684\u89c6\u9891\u8bf4\u660e\u6216\u8005\u53c2\u8003 \u56fe\u6587\u8bf4\u660e : Hat \u89c6\u9891\u5b89\u88c5\u5bfc\u89c8: \u624b\u628a\u624b\u6559\u4f60\u5982\u4f55\u7ec4\u88c5Hat\u5230\u6811\u8393\u6d3e\u4e0a 3. \u5b89\u88c5 ATX \u6a21\u5757 ATX\u6a21\u5757\u914d\u6709\u4e00\u4e2a\u5168\u9ad8\u6216\u8005\u534a\u9ad8\u7684PCIe\u6321\u677f\uff0c\u4f60\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u9009\u62e9\u5b89\u88c5 \u4f7f\u7528\u675c\u90a6\u7ebf\u8fde\u63a5ATX\u6a21\u5757\u548c\u673a\u7bb1\u91cc\u7684\u4e3b\u677f\uff0cATX\u6a21\u5757\u4e0a\u90fd\u6709\u6e05\u6670\u7684\u5f15\u811a\u5b9a\u4e49\u65b9\u4fbf\u4f60\u8fde\u63a5 \u5c06ATX\u6a21\u5757\u5b89\u88c5\u5230\u673a\u7bb1\u5916\u58f3\u4e0a \u4f7f\u7528RJ45\u7684\u7f51\u7ebf\u8fde\u63a5ATX\u548cHat 4. \u8fde\u63a5HDMI\u7ebf\u7f06 \u4f7f\u7528HDMI\u7ebf\u7f06\uff0c\u5c06\u88ab\u63a7\u7535\u8111\u7684HDMI\u548cHat\u7684HDMI IN\u7aef\u53e3\u8fde\u63a5\u3002HDMI\u6a21\u62df\u5668\u4e0d\u662f\u5fc5\u987b\u4f7f\u7528\u7684\uff0c\u5f53\u4f60\u7684\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8f93\u51fa\u753b\u9762\u65f6\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528HDMI\u6a21\u62df\u5668\u6765\u6821\u6b63\u7535\u8111\u7684HDMI\u8f93\u51fa 5. \u5b89\u88c5USB\u7ebf\u7f06 \u8bf7\u6ce8\u610f\u8fd9\u91cc\u4f7f\u7528USB\u5206\u7535\u677f\u4e0d\u662f\u5fc5\u987b\u7684\uff0c\u5982\u679c\u4f60\u4f7f\u7528PoE\u4f9b\u7535\u4e0d\u9700\u8981\u4f7f\u7528\u6b64\u6a21\u5757\uff0c\u5982\u679c\u4f60\u9700\u8981\u4f7f\u7528USB\u4f9b\u7535\u5219\u9700\u8981\u3002\u901a\u8fc7USB-C\u7ebf\u8fde\u63a5\u6811\u8393\u6d3e4B\u7684TYPE-C\u53e3\u5230\u5206\u7535\u677f\u7684RPI4\u7aef\u53e3 \u8fde\u63a5\u5206\u7535\u677f\u4e0a\u7684USB\u7aef\u53e3\u5230\u88ab\u63a7\u7535\u8111 \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u8bf7\u6ce8\u610f\u4e0d\u9700\u8981\u5728\u4f7f\u7528USB\u4f9b\u7535\u8bbe\u5907\u3002\u5f53\u4e0d\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u63a8\u8350\u4f7f\u75285V/3A\u7684\u7535\u6e90\u9002\u914d\u5668\u5230\u5206\u7535\u677f\u7684PWR\u7aef\u53e3 6. \u6d4b\u8bd5 \u56fe\u4e2d\u901a\u8fc7PoE\u4f9b\u7535\uff0cHat\u901a\u8fc7\u7f51\u7ebf\u8fde\u63a5\u5230\u7f51\u7edc\u4e2d OLED\u5c4f\u5e55\u5c06\u4f1a\u6b63\u5e38\u663e\u793a\u8bbe\u5907\u7684\u5de5\u4f5c\u72b6\u6001\uff0c\u5305\u62ec\u8bbe\u5907\u7684IP\u5730\u5740 \u6253\u5f00\u6d4f\u89c8\u5668\uff0c\u8f93\u5165\u8bbe\u5907\u7684IP\u5730\u5740\uff0c\u5373\u53ef\u6253\u5f00\u63a7\u5236\u7684WEB\u754c\u9762\uff0c\u73b0\u5728\u53bb\u4f7f\u7528\u5b83\u5427\uff01","title":"\u57fa\u7840\u8bbe\u7f6e"},{"location":"BLIKVM-HAT-guide/#_5","text":"HDMI \u8f93\u5165 \u4f7f\u7528Toshiba TC358743\u4e3aHDMI\u8f6c\u6362\u7684\u4e3b\u82af\u7247\uff0c\u540c\u65f6\u652f\u6301\u89c6\u9891\u548c\u58f0\u97f3\u7684\u91c7\u96c6\uff0c\u652f\u6301\u89c6\u9891\u6700\u9ad8\u8f93\u5165\u4e3a1080P50Hz.\u89e3\u51b3\u4e86HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898\u3002 CN-ATX CN-ATX\u63a5\u53e3\u901a\u8fc7\u7f51\u7ebf\u8fde\u63a5ATX\u6a21\u5757\uff0c\u7528\u6765\u63a7\u5236\u88ab\u63a7\u7535\u8111\u7684\u5f00\u673a\u3001\u5173\u673a\u3001\u548c\u91cd\u542f\u64cd\u4f5c\u3002 \u663e\u793a\u5c4f \u914d\u6709\u767d\u8272\u7684\u663e\u793a\u5c4f\uff0c\u5206\u8fa8\u7387\u4e3a128x32\uff0c\u4f7f\u7528\u82af\u7247\u4e3aSSD1306\u3002\u663e\u793a\u5c4f\u4f1a\u663e\u793a\u5982\u6e29\u5ea6\u3001IP\u5730\u5740\u7b49\u6811\u8393\u6d3e\u7684\u4fe1\u606f\u3002 PoE \u6807\u51c6: IEEE 802.3af PoE \u8f93\u5165\u7535\u538b: 37-57 V DC \u8f93\u51fa\u7535\u538b: 5 V DC/2.4 A \u4f7f\u7528PoE\u6a21\u5757\u4f9b\u7535\uff0c\u9700\u8981\u5c06Hat\u4e0a\u7684PoE\u7684\u5f15\u811a\u4f7f\u7528\u8df3\u7ebf\u5e3d\u77ed\u63a5\u3002 \u98ce\u6247 \u98ce\u6247\u9ed8\u8ba4\u4f7f\u7528\u6811\u8393\u6d3e\u4e0a\u7684GPIO12\u63a7\u5236\u3002 RTC\u65f6\u949f RTC\u65f6\u949f\u4e3b\u82af\u7247\u4e3aPCF8563\uff0c\u901a\u8fc7I2C\u548c\u6811\u8393\u6d3e\u8fde\u63a5\u3002\u542f\u7528RTC\u65f6\u949f\u5de5\u4f5c\u7684\u7ebd\u6263\u7535\u6c60\u5b89\u88c5\u4f4d\u7f6e\u5728HDMI-IN\u6a21\u5757\u7684\u4e0b\u9762\u3002","title":"\u6027\u80fd\u53c2\u6570"},{"location":"BLIKVM-HAT-guide/#_6","text":"","title":"\u914d\u4ef6"},{"location":"BLIKVM-HAT-guide/#atx","text":"ATX\u6a21\u5757\u901a\u8fc7\u675c\u90a6\u7ebf\u548c\u7535\u8111\u7684\u4e3b\u677f\u8fde\u63a5\u3002ATX\u6a21\u5757\u914d\u6709\u5168\u9ad8\u548c\u534a\u9ad8\u7684PCIe\u6321\u677f\u3002","title":"ATX\u6a21\u5757"},{"location":"BLIKVM-HAT-guide/#usbpwr","text":"RPI4\u7aef\u53e3\u7528\u4e8e\u8fde\u63a5\u5230\u6811\u8393\u6d3e4B. USB\u7aef\u53e3\u7528\u4e8e\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111. \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u4e0d\u9700\u8981\u4f7f\u7528\u5206\u7535\u677f.","title":"USB/PWR \u5206\u7535\u677f"},{"location":"BLIKVM-HAT-guide/#hdmi","text":"\u5982\u679c\u88ab\u63a7\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8f93\u51fa\u753b\u9762\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u6b64\u6a21\u5757\u6765\u89e3\u51b3\u3002\u5c06\u6b64\u6a21\u5757\u8fde\u63a5\u5230Hat\u4e0a\u540e\uff0c\u518d\u901a\u8fc7HDMI\u7ebf\u7f06\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111\u3002","title":"HDMI\u6a21\u62df\u5668"},{"location":"BLIKVM-HAT-guide/#_7","text":"\u91d1\u5c5e\u5916\u58f3\u53ef\u4ee5\u4fdd\u62a4Hat\u548c\u7528\u4e8e\u6563\u70ed.\u5916\u58f3\u4e0a\u6bcf\u4e2a\u7aef\u53e3\u6709\u6e05\u6670\u7684\u4e1d\u5370\u6765\u8868\u793a\u6b64\u7aef\u53e3\u7528\u9014\u3002\u6b64\u5916\u58f3\u53ef\u4ee5\u65b9\u4fbf\u7684\u5b89\u88c5\u57281U\u7684\u673a\u67b6\u4e0a\u3002","title":"\u91d1\u5c5e\u5916\u58f3"},{"location":"BLIKVM-HAT-guide/#list","text":"","title":"List"},{"location":"BLIKVM-HAT-guide/#product-list","text":"BliKVM Hat \u6a21\u5757 1 ATX \u6a21\u5757 1 USB/PWR \u5206\u7535\u677f 1 HDMI\u6a21\u62df\u5668 1 \u91d1\u5c5e\u5916\u58f3 1 32G TF \u5361 1 USB Type-C \u8f6c USB Type-C \u7ebf\u7f06 30cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 \u5341\u5b57\u6273\u624b\u5957\u7b52 1","title":"Product List"},{"location":"BLIKVM-HAT-guide/#_8","text":"\u6811\u8393\u6d3e4B 1 RJ45 \u7f51\u7ebf 2 USB Type-A \u8f6c USB Type-C \u7ebf\u7f06 2 HDMI \u7ebf\u7f06 1 PoE\u4f9b\u7535\u8bbe\u5907 or 5V/3A USB \u7535\u6e90\u9002\u914d\u5668 1 CR1220\u7ebd\u6263\u7535\u6c60 1","title":"\u7528\u6237\u9700\u8981\u51c6\u5907\u8bbe\u5907\u7684\u6e05\u5355"},{"location":"BLIKVM-HAT-guide/#_9","text":"v3\u6dd8\u5b9d\u5730\u5740","title":"\u8d2d\u4e70\u94fe\u63a5"},{"location":"BLIKVM-PCIE-guide-zh/","text":"BLIKVM PCIe \u4ecb\u7ecd BLIKVM PCIe\u662f\u4e00\u6b3e\u57fa\u4e8e\u6811\u8393\u6d3eCM4\u7684IPKVM\u6269\u5c55\u5361\uff0c\u53ef\u4ee5\u5b89\u88c5\u5230PC\u6216\u8005\u670d\u52a1\u5668\u7684PCIe\u63d2\u69fd\uff0c\u5b8c\u7f8e\u8fd0\u884cPiKVM\u9879\u76ee\u3002\u4e3b\u8981\u529f\u80fd\u6709\uff1aHDMI\u89c6\u9891\u91c7\u96c6\uff0c\u952e\u76d8\u9f20\u6807\u63a7\u5236\uff0cATX\u5f00\u5173\u673a\u63a7\u5236\uff0cPoE\u4f9b\u7535\uff0cOLED\u5c4f\u5e55\u663e\u793a\uff0c \u4e32\u53e3\u7ec8\u7aef\u8c03\u8bd5\u548cRTC\u65f6\u949f\u529f\u80fd\u3002\u6b64PCIe\u5361\u914d\u6709\u5168\u9ad8\u548c\u534a\u9ad8\u7684\u6321\u677f\u3002 BLIKVM PCIe\u7248\u672c\u652f\u6301blikvm\u548cpikvm\u7684\u7cfb\u7edf\u955c\u50cf\u3002 \u5b89\u88c5\u8981\u6c42 \u4f60\u9700\u8981\u4e0b\u9762\u7684\u8bbe\u5907 \u6811\u8393\u6d3eCM4(\u5982\u679c\u4f60\u53ea\u8ba2\u8d2d\u4e86PCIe\u5361). PoE\u4f9b\u7535\u8bbe\u5907\u62165V/3A USB\u4f9b\u7535\u8bbe\u5907. CR1220 \u7ebd\u6263\u7535\u6c60. \u529f\u80fd \u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@60Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE \u4f9b\u7535 \u652f\u6301\u4e32\u53e3\u7ec8\u7aef \u652f\u6301 WiFi \uff08\u53ef\u9009\uff09 OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) PWM\u98ce\u6247 \u5feb\u901f\u5b89\u88c5\u8bf4\u660e 1. \u5982\u679c\u4f60\u8d2d\u4e70\u7684\u662f\u9700\u8981\u81ea\u5df1\u7ec4\u88c5\u7684\u7248\u672c\uff0c\u70e7\u5f55\u7cfb\u7edf\u955c\u50cf\u53c2\u8003\u8bf7\u70b9\u51fb\u6b64\u5904 2.\u7ec4\u88c5 BLIKVM \u53c2\u8003\u7684 \u8bf4\u660e\u6587\u6863 Geerling\u7684\u6d4b\u8bd5\u89c6\u9891 Craft Computing: Never Pay For IPMI Again - BliKVM Review \u4ea7\u54c1\u7279\u6027 \u786c\u4ef6\u63a5\u53e3\u6e05\u5355 1 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 2 USB-PC \u7aef\u53e3 1 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 2 USB-PC \u7aef\u53e3 3 \u4f9b\u7535\u53e3 5V 3A 4 RJ45 100M \u7f51\u53e3 & PoE 5 ATX\u63a7\u5236\u7aef\u53e3 6 OLED \u663e\u793a\u5c4f\u63a5\u53e3 7 PWM \u98ce\u6247 8 BOOT 9 RTC\u65f6\u949f 10 \u4e32\u884c\u7ec8\u7aef\u7aef\u53e3 11 USB-PC\u7aef\u53e3 HDMI IN \u4f7f\u7528\u4e1c\u829d\u7684TC358743\u4f5c\u4e3aHDMI\u7684\u6865\u63a5\u82af\u7247\uff0c\u540c\u65f6\u652f\u6301\u89c6\u9891\u548c\u97f3\u9891\u91c7\u96c6\uff0c\u652f\u6301\u89c6\u9891\u8f93\u5165\u6700\u9ad8\u5206\u8fa8\u7387\u4e3a1080P60Hz\u3002 USB-PC BLIKVM PCIe\u5361\u63d0\u4f9b\u4e24\u4e2ausb\u63a5\u53e3\uff0c\u4e00\u4e2a\u662fPC-IN\uff08type c\u63a5\u53e3\uff09\uff0c\u53e6\u4e00\u4e2a\u662fUSB-PC2\uff08\u6392\u9488\u63a5\u53e3\uff09\u3002\u8fd9\u4e24\u4e2a\u63a5\u53e3\u7684\u4f5c\u7528\u90fd\u662f\u4e3a\u4e86\u8fde\u63a5\u88ab\u63a7\u7535\u8111\u7684usb\uff0c\u7528\u4e8e\u63a7\u5236\u9f20\u6807\u548c\u952e\u76d8\u3002\u540c\u65f6\u4e24\u4e2a\u63a5\u53e3\u53ea\u80fd\u4f7f\u7528\u4e00\u4e2a\uff0c\u8bbe\u8ba1\u4e24\u4e2a\u63a5\u53e3\u7684\u76ee\u7684\u662f\uff0c\u5f53\u7528\u6237pc\u4e3b\u673a\u5185\u6709\u6392\u9488\u7684usb\u63a5\u53e3\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528usb-pc2\uff0c\u8fd9\u6837\u63a5\u7ebf\u4f1a\u66f4\u52a0\u7b80\u6d01\u3002 POWER-IN \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u6539\u63a5\u53e3\u4e0d\u9700\u8981\u88ab\u4f7f\u7528\u3002\u5f53\u4e0d\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u8fde\u63a5\u8be5\u63a5\u53e3\u7684\u7535\u6e90\u9002\u914d\u5668\uff0c\u63a8\u8350\u4e3a5V/3A\u3002 \u4ee5\u592a\u7f51\u53e3-PoE Gigabit Ethernet port \u6807\u51c6: IEEE 802.3af PoE \u8f93\u5165\u7535\u538b: 37-57 V DC \u8f93\u51fa\u7535\u538b: 5 V DC/2.4 A ATX\u63a5\u53e3 \u6539\u63a5\u53e3\u901a\u8fc7\u675c\u90a6\u7ebf\u94fe\u63a5\u88ab\u63a7\u8ba1\u7b97\u673a\u4e3b\u677f\u7684\u7535\u6e90\u63a7\u5236\u63a5\u53e3\u3002ATX\u529f\u80fd\u53ef\u4ee5\u5f00\u542f\u6216\u8005\u91cd\u542f\u88ab\u63a7\u8ba1\u7b97\u673a\u3002 PCIe\u677f\u5b50\u4e0a\u7684BTN\u4e1d\u5370\u4e3abutton\u7684\u7f29\u5199\u3002 \u6839\u636e\u7535\u8111\u4e3b\u677f\u8bf4\u660e\uff0c\u9996\u5148\u627e\u5230\u4e3b\u677f\u4e0aATX\u529f\u80fd\u76f8\u5173\u5f15\u811a\u4f4d\u7f6e\uff0c\u62d4\u4e0b\u4e3b\u677f\u5df2\u7ecf\u63a5\u597d\u7684ATX\u7ebf\uff0c\u62d4\u4e0b\u540e\u7535\u8111\u7684\u7535\u6e90\u6309\u94ae\u5c06\u5931\u53bb\u4f5c\u7528\u3002PCIe\u4e3b\u677f\u5171\u6709\u4e24\u63928PIN\u5f15\u811a\uff0c\u4e24\u6392\u5f15\u811a\u529f\u80fd\u5b8c\u5168\u76f8\u540c\u4f7f\u7528\u65f6\u65e0\u9700\u533a\u5206\u3002\u5176\u4e2d\u4e00\u6392\u5f15\u811a\u7528\u4e8eKVM\u63a7\u5236ATX\u76f8\u5173\u529f\u80fd\uff0c\u53e6\u4e00\u6392\u5f15\u811a\u63a5\u4e3b\u677f\u4e0a\u62d4\u4e0b\u6765\u7684ATX\u675c\u90a6\u5934\uff0c\u4fdd\u6301\u539f\u6709\u673a\u7bb1\u7535\u6e90\u6309\u94ae\u529f\u80fd\u3002\u6839\u636e\u4e3b\u677f\u548cPCIe\u4e0a\u7684\u5177\u4f53\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u6bcf\u6839\u7ebf\u7684\u8fde\u63a5\uff0c\u8fde\u63a5\u5173\u7cfb\u53ef\u4ee5\u53c2\u8003\u4e0b\u56fe\uff1a OLED\u663e\u793a\u5c4f \u663e\u793a\u5c4f\u5206\u8fa8\u7387\u4e3a128x64\uff0c\u4e3b\u82af\u7247\u4e3aSSD1306\u3002\u901a\u8fc7\u6539\u5c4f\u5e55\u53ef\u4ee5\u5c55\u793aBLIKVM\u7684CPU\u7684\u6e29\u5ea6\u3001IP\u5730\u5740\u3001\u542f\u52a8\u65f6\u95f4\u7b49\u4fe1\u606f\u3002 \u98ce\u6247 \u98ce\u6247\u9ed8\u8ba4\u8bbe\u7f6e\u5de5\u4f5c\u6e29\u5ea6\u4e3a60\u6444\u6c0f\u5ea6\uff0c\u4e0e\u6811\u8393\u6d3eCM4\u7684\u901a\u8fc7GPIO12\u94fe\u63a5\u3002 BOOT Fit jumper to disable eMMC Boot \u901a\u8fc7\u8be5\u77ed\u63a5\u53e3\u53ef\u4ee5\u4f7f\u7528PCIe\u5361\u5bf9eMMC\u7248\u672c\u7684CM4\u8fdb\u884c\u955c\u50cf\u70e7\u5f55\u3002 \u5b9e\u65f6\u65f6\u949f (RTC) \u65f6\u949f\u82af\u7247\u4e3aPCF8563\uff0c\u4e0e\u6811\u8393\u6d3eCM4\u7684\u901a\u4fe1\u65b9\u5f0f\u4e3aI2C\u3002RTC\u5de5\u4f5c\u9700\u8981\u518d\u5b89\u88c5CR1220\u7535\u6c60\u540e\u3002 \u4e32\u53e3 \u53ef\u4ee5\u901a\u8fc7\u6539\u4e32\u53e3\u767b\u9646\u8bbe\u5907\u8fdb\u884c\u8c03\u8bd5\uff0c\u4e00\u822c\u5728\u5728\u7f51\u7edc\u94fe\u63a5\u6545\u969c\u7b49\u60c5\u51b5\u4e0b\u4f7f\u7528\u3002 \u6811\u8393\u6d3eCM4\u7684\u4e32\u53e3. G for GND, T(GPIO 14) for TXD, R(GPIO 15) for RXD. \u5c06USB\u8f6cTTL\u6a21\u5757\u7684\u675c\u90a6\u5934\u8fde\u63a5\u5230PCIe\u7684 GTR \u53e3\uff0cUSB\u8f6cttl\u6a21\u5757\u4e0e GTR \u63a5\u7ebf\u5173\u7cfb\u4e3a\uff08\u9ed1\u8272\u7ebf-G, \u767d\u8272\u7ebf-T, \u7eff\u8272\u7ebf-R\uff09;\u5177\u4f53\u65b9\u6cd5\u53ef\u53c2\u8003 \u6b64\u6587\u6863 \u914d\u4ef6 HDMI EDID\u6a21\u62df\u5668 \u5982\u679c\u88ab\u63a7\u8ba1\u7b97\u673a\u4e0d\u80fd\u6b63\u786e\u7684\u8f93\u51faHDMI\u56fe\u50cf\uff0c\u53ef\u4ee5\u4f7f\u7528\u6b64\u8bbe\u5907\u8fdb\u884c\u6d4b\u8bd5\u3002\u5b89\u88c5\u5728\u88ab\u63a7\u8bbe\u5907\u7684HDMI\u8f93\u51fa\u63a5\u53e3\u4e0a\uff0c\u7136\u540e\u518d\u901a\u8fc7HDMI\u7ebf\u8fde\u63a5\u5230BLIKVM\u3002 VGA\u8f6cHDMI\u6a21\u5757 \u5f53\u88ab\u63a7\u8ba1\u7b97\u673a\u4e0d\u662fHDMI\u8f93\u51fa\u63a5\u53e3\uff0c\u800c\u662fVGA\u8f93\u51fa\u63a5\u53e3\uff0c\u8bf7\u4f7f\u7528\u8be5\u6a21\u5757\u5b8c\u6210VGA\u8f6cHDMI\u4fe1\u53f7\u8f6c\u6362\u3002 USB\u8f6cTTL\u6a21\u5757 \u901a\u8fc7\u6539\u6a21\u5757\uff0c\u53ef\u4ee5\u8fde\u63a5BLIKVM PCIe\u5361\u7684\u4e32\u53e3\uff0c\u7136\u540e\u4f7f\u7528\u4e32\u53e3\u8fdb\u5165\u8bbe\u5907\u8fdb\u884c\u8c03\u8bd5\u3002 \u98ce\u6247 Use a cooling fan to cool the Raspberry Pi CM4, but installing a fan will make the product thicker than a standard PCIe add-in card. \u4f7f\u7528\u98ce\u6247\u5bf9\u6811\u8393\u6d3eCM4\u8fdb\u884c\u964d\u6e29\uff0c\u4f46\u5b89\u88c5\u98ce\u6247\u540e\u4f1a\u4f7fBLIKVM PCIe\u5361\u7684\u539a\u5ea6\u539a\u4e8e\u6807\u51c6\u7684PCIe\u5361\u539a\u5ea6\u3002 \u5c3a\u5bf8 \u6d4b\u8bd5\u89c6\u9891 BLIKVM PCIe\u7248\u672c\u5b9e\u6d4b\u89c6\u9891\uff0c\u8f6f\u4ef6\u4f7f\u7528PiKVM \u53d1\u8d27\u6e05\u5355 BLIKVM only PCIe\u5361\u7248\u672c 1 BLIKVM PCIe\u5361 1 \u98ce\u6247 1 OLED\u663e\u793a\u5c4f 1 USB\u8f6cTTL\u6a21\u5757 1 HDMI EDID\u6a21\u62df\u5668 1 VGA\u8f6cHDMI\u6a21\u5757 1 32G Micro SD card 1 HDMI\u7ebf 0.5m 1 HDMI \u76f4\u901a\u5934 1 \u5343\u5146\u7f51\u7ebf 1m 1 USB-A\u8f6cUSB-C\u7ebf 1m 2 USB\u675c\u90a6\u7ebf 0.4m 1 WiFi\u5929\u7ebf 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u91d1\u5c5e\u6563\u70ed\u7247 1 \u5341\u5b57\u5957\u7b52 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 BLIKVM PCIe \u5230\u624b\u5373\u7528\u7248\u672c 1 BLIKVM PCIe\u5361 1 CM4 102000 1 \u98ce\u6247 1 OLED\u663e\u793a\u5c4f 1 USB\u8f6cTTL\u6a21\u5757 1 HDMI EDID\u6a21\u62df\u5668 1 VGA\u8f6cHDMI\u6a21\u5757 1 32G Micro SD card 1 HDMI\u7ebf 0.5m 1 HDMI \u76f4\u901a\u5934 1 \u5343\u5146\u7f51\u7ebf 1m 1 USB-A\u8f6cUSB-C\u7ebf 1m 2 USB\u675c\u90a6\u7ebf 0.4m 1 WiFi\u5929\u7ebf 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u91d1\u5c5e\u6563\u70ed\u7247 1 \u5341\u5b57\u5957\u7b52 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 \u5907\u6ce8\uff1a\u7531\u4e8e\u6811\u8393\u6d3eCM4\u4e00\u76f4\u7d27\u7f3a\uff0c\u5230\u624b\u5373\u7528\u7248\u672c\u4e2dCM4\u7248\u672c\u53ef\u80fd\u4f1a\u66f4\u6362\u4e3aeMMC\u7248\u672c\uff0c\u6b64\u4e2d\u60c5\u51b5\u4e0b\u5c06\u4e0d\u5e26SD\u5361\u3002 \u8d2d\u4e70\u94fe\u63a5 v2\u6dd8\u5b9d\u5730\u5740 3D\u5916\u58f3 \u4e00\u4e2a\u7b80\u5355\u7684PCIe\u5916\u58f3 Download file","title":"BliKVM v2 PCIe\u5bfc\u89c8"},{"location":"BLIKVM-PCIE-guide-zh/#blikvm-pcie","text":"","title":"BLIKVM PCIe"},{"location":"BLIKVM-PCIE-guide-zh/#_1","text":"BLIKVM PCIe\u662f\u4e00\u6b3e\u57fa\u4e8e\u6811\u8393\u6d3eCM4\u7684IPKVM\u6269\u5c55\u5361\uff0c\u53ef\u4ee5\u5b89\u88c5\u5230PC\u6216\u8005\u670d\u52a1\u5668\u7684PCIe\u63d2\u69fd\uff0c\u5b8c\u7f8e\u8fd0\u884cPiKVM\u9879\u76ee\u3002\u4e3b\u8981\u529f\u80fd\u6709\uff1aHDMI\u89c6\u9891\u91c7\u96c6\uff0c\u952e\u76d8\u9f20\u6807\u63a7\u5236\uff0cATX\u5f00\u5173\u673a\u63a7\u5236\uff0cPoE\u4f9b\u7535\uff0cOLED\u5c4f\u5e55\u663e\u793a\uff0c \u4e32\u53e3\u7ec8\u7aef\u8c03\u8bd5\u548cRTC\u65f6\u949f\u529f\u80fd\u3002\u6b64PCIe\u5361\u914d\u6709\u5168\u9ad8\u548c\u534a\u9ad8\u7684\u6321\u677f\u3002 BLIKVM PCIe\u7248\u672c\u652f\u6301blikvm\u548cpikvm\u7684\u7cfb\u7edf\u955c\u50cf\u3002","title":"\u4ecb\u7ecd"},{"location":"BLIKVM-PCIE-guide-zh/#_2","text":"\u4f60\u9700\u8981\u4e0b\u9762\u7684\u8bbe\u5907 \u6811\u8393\u6d3eCM4(\u5982\u679c\u4f60\u53ea\u8ba2\u8d2d\u4e86PCIe\u5361). PoE\u4f9b\u7535\u8bbe\u5907\u62165V/3A USB\u4f9b\u7535\u8bbe\u5907. CR1220 \u7ebd\u6263\u7535\u6c60.","title":"\u5b89\u88c5\u8981\u6c42"},{"location":"BLIKVM-PCIE-guide-zh/#_3","text":"\u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@60Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE \u4f9b\u7535 \u652f\u6301\u4e32\u53e3\u7ec8\u7aef \u652f\u6301 WiFi \uff08\u53ef\u9009\uff09 OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) PWM\u98ce\u6247","title":"\u529f\u80fd"},{"location":"BLIKVM-PCIE-guide-zh/#_4","text":"1. \u5982\u679c\u4f60\u8d2d\u4e70\u7684\u662f\u9700\u8981\u81ea\u5df1\u7ec4\u88c5\u7684\u7248\u672c\uff0c\u70e7\u5f55\u7cfb\u7edf\u955c\u50cf\u53c2\u8003\u8bf7\u70b9\u51fb\u6b64\u5904 2.\u7ec4\u88c5 BLIKVM \u53c2\u8003\u7684 \u8bf4\u660e\u6587\u6863 Geerling\u7684\u6d4b\u8bd5\u89c6\u9891 Craft Computing: Never Pay For IPMI Again - BliKVM Review","title":"\u5feb\u901f\u5b89\u88c5\u8bf4\u660e"},{"location":"BLIKVM-PCIE-guide-zh/#_5","text":"\u786c\u4ef6\u63a5\u53e3\u6e05\u5355 1 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 2 USB-PC \u7aef\u53e3 1 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 2 USB-PC \u7aef\u53e3 3 \u4f9b\u7535\u53e3 5V 3A 4 RJ45 100M \u7f51\u53e3 & PoE 5 ATX\u63a7\u5236\u7aef\u53e3 6 OLED \u663e\u793a\u5c4f\u63a5\u53e3 7 PWM \u98ce\u6247 8 BOOT 9 RTC\u65f6\u949f 10 \u4e32\u884c\u7ec8\u7aef\u7aef\u53e3 11 USB-PC\u7aef\u53e3 HDMI IN \u4f7f\u7528\u4e1c\u829d\u7684TC358743\u4f5c\u4e3aHDMI\u7684\u6865\u63a5\u82af\u7247\uff0c\u540c\u65f6\u652f\u6301\u89c6\u9891\u548c\u97f3\u9891\u91c7\u96c6\uff0c\u652f\u6301\u89c6\u9891\u8f93\u5165\u6700\u9ad8\u5206\u8fa8\u7387\u4e3a1080P60Hz\u3002 USB-PC BLIKVM PCIe\u5361\u63d0\u4f9b\u4e24\u4e2ausb\u63a5\u53e3\uff0c\u4e00\u4e2a\u662fPC-IN\uff08type c\u63a5\u53e3\uff09\uff0c\u53e6\u4e00\u4e2a\u662fUSB-PC2\uff08\u6392\u9488\u63a5\u53e3\uff09\u3002\u8fd9\u4e24\u4e2a\u63a5\u53e3\u7684\u4f5c\u7528\u90fd\u662f\u4e3a\u4e86\u8fde\u63a5\u88ab\u63a7\u7535\u8111\u7684usb\uff0c\u7528\u4e8e\u63a7\u5236\u9f20\u6807\u548c\u952e\u76d8\u3002\u540c\u65f6\u4e24\u4e2a\u63a5\u53e3\u53ea\u80fd\u4f7f\u7528\u4e00\u4e2a\uff0c\u8bbe\u8ba1\u4e24\u4e2a\u63a5\u53e3\u7684\u76ee\u7684\u662f\uff0c\u5f53\u7528\u6237pc\u4e3b\u673a\u5185\u6709\u6392\u9488\u7684usb\u63a5\u53e3\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528usb-pc2\uff0c\u8fd9\u6837\u63a5\u7ebf\u4f1a\u66f4\u52a0\u7b80\u6d01\u3002 POWER-IN \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u6539\u63a5\u53e3\u4e0d\u9700\u8981\u88ab\u4f7f\u7528\u3002\u5f53\u4e0d\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u8fde\u63a5\u8be5\u63a5\u53e3\u7684\u7535\u6e90\u9002\u914d\u5668\uff0c\u63a8\u8350\u4e3a5V/3A\u3002 \u4ee5\u592a\u7f51\u53e3-PoE Gigabit Ethernet port \u6807\u51c6: IEEE 802.3af PoE \u8f93\u5165\u7535\u538b: 37-57 V DC \u8f93\u51fa\u7535\u538b: 5 V DC/2.4 A ATX\u63a5\u53e3 \u6539\u63a5\u53e3\u901a\u8fc7\u675c\u90a6\u7ebf\u94fe\u63a5\u88ab\u63a7\u8ba1\u7b97\u673a\u4e3b\u677f\u7684\u7535\u6e90\u63a7\u5236\u63a5\u53e3\u3002ATX\u529f\u80fd\u53ef\u4ee5\u5f00\u542f\u6216\u8005\u91cd\u542f\u88ab\u63a7\u8ba1\u7b97\u673a\u3002 PCIe\u677f\u5b50\u4e0a\u7684BTN\u4e1d\u5370\u4e3abutton\u7684\u7f29\u5199\u3002 \u6839\u636e\u7535\u8111\u4e3b\u677f\u8bf4\u660e\uff0c\u9996\u5148\u627e\u5230\u4e3b\u677f\u4e0aATX\u529f\u80fd\u76f8\u5173\u5f15\u811a\u4f4d\u7f6e\uff0c\u62d4\u4e0b\u4e3b\u677f\u5df2\u7ecf\u63a5\u597d\u7684ATX\u7ebf\uff0c\u62d4\u4e0b\u540e\u7535\u8111\u7684\u7535\u6e90\u6309\u94ae\u5c06\u5931\u53bb\u4f5c\u7528\u3002PCIe\u4e3b\u677f\u5171\u6709\u4e24\u63928PIN\u5f15\u811a\uff0c\u4e24\u6392\u5f15\u811a\u529f\u80fd\u5b8c\u5168\u76f8\u540c\u4f7f\u7528\u65f6\u65e0\u9700\u533a\u5206\u3002\u5176\u4e2d\u4e00\u6392\u5f15\u811a\u7528\u4e8eKVM\u63a7\u5236ATX\u76f8\u5173\u529f\u80fd\uff0c\u53e6\u4e00\u6392\u5f15\u811a\u63a5\u4e3b\u677f\u4e0a\u62d4\u4e0b\u6765\u7684ATX\u675c\u90a6\u5934\uff0c\u4fdd\u6301\u539f\u6709\u673a\u7bb1\u7535\u6e90\u6309\u94ae\u529f\u80fd\u3002\u6839\u636e\u4e3b\u677f\u548cPCIe\u4e0a\u7684\u5177\u4f53\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u6bcf\u6839\u7ebf\u7684\u8fde\u63a5\uff0c\u8fde\u63a5\u5173\u7cfb\u53ef\u4ee5\u53c2\u8003\u4e0b\u56fe\uff1a OLED\u663e\u793a\u5c4f \u663e\u793a\u5c4f\u5206\u8fa8\u7387\u4e3a128x64\uff0c\u4e3b\u82af\u7247\u4e3aSSD1306\u3002\u901a\u8fc7\u6539\u5c4f\u5e55\u53ef\u4ee5\u5c55\u793aBLIKVM\u7684CPU\u7684\u6e29\u5ea6\u3001IP\u5730\u5740\u3001\u542f\u52a8\u65f6\u95f4\u7b49\u4fe1\u606f\u3002 \u98ce\u6247 \u98ce\u6247\u9ed8\u8ba4\u8bbe\u7f6e\u5de5\u4f5c\u6e29\u5ea6\u4e3a60\u6444\u6c0f\u5ea6\uff0c\u4e0e\u6811\u8393\u6d3eCM4\u7684\u901a\u8fc7GPIO12\u94fe\u63a5\u3002 BOOT Fit jumper to disable eMMC Boot \u901a\u8fc7\u8be5\u77ed\u63a5\u53e3\u53ef\u4ee5\u4f7f\u7528PCIe\u5361\u5bf9eMMC\u7248\u672c\u7684CM4\u8fdb\u884c\u955c\u50cf\u70e7\u5f55\u3002 \u5b9e\u65f6\u65f6\u949f (RTC) \u65f6\u949f\u82af\u7247\u4e3aPCF8563\uff0c\u4e0e\u6811\u8393\u6d3eCM4\u7684\u901a\u4fe1\u65b9\u5f0f\u4e3aI2C\u3002RTC\u5de5\u4f5c\u9700\u8981\u518d\u5b89\u88c5CR1220\u7535\u6c60\u540e\u3002 \u4e32\u53e3 \u53ef\u4ee5\u901a\u8fc7\u6539\u4e32\u53e3\u767b\u9646\u8bbe\u5907\u8fdb\u884c\u8c03\u8bd5\uff0c\u4e00\u822c\u5728\u5728\u7f51\u7edc\u94fe\u63a5\u6545\u969c\u7b49\u60c5\u51b5\u4e0b\u4f7f\u7528\u3002 \u6811\u8393\u6d3eCM4\u7684\u4e32\u53e3. G for GND, T(GPIO 14) for TXD, R(GPIO 15) for RXD. \u5c06USB\u8f6cTTL\u6a21\u5757\u7684\u675c\u90a6\u5934\u8fde\u63a5\u5230PCIe\u7684 GTR \u53e3\uff0cUSB\u8f6cttl\u6a21\u5757\u4e0e GTR \u63a5\u7ebf\u5173\u7cfb\u4e3a\uff08\u9ed1\u8272\u7ebf-G, \u767d\u8272\u7ebf-T, \u7eff\u8272\u7ebf-R\uff09;\u5177\u4f53\u65b9\u6cd5\u53ef\u53c2\u8003 \u6b64\u6587\u6863","title":"\u4ea7\u54c1\u7279\u6027"},{"location":"BLIKVM-PCIE-guide-zh/#_6","text":"HDMI EDID\u6a21\u62df\u5668 \u5982\u679c\u88ab\u63a7\u8ba1\u7b97\u673a\u4e0d\u80fd\u6b63\u786e\u7684\u8f93\u51faHDMI\u56fe\u50cf\uff0c\u53ef\u4ee5\u4f7f\u7528\u6b64\u8bbe\u5907\u8fdb\u884c\u6d4b\u8bd5\u3002\u5b89\u88c5\u5728\u88ab\u63a7\u8bbe\u5907\u7684HDMI\u8f93\u51fa\u63a5\u53e3\u4e0a\uff0c\u7136\u540e\u518d\u901a\u8fc7HDMI\u7ebf\u8fde\u63a5\u5230BLIKVM\u3002 VGA\u8f6cHDMI\u6a21\u5757 \u5f53\u88ab\u63a7\u8ba1\u7b97\u673a\u4e0d\u662fHDMI\u8f93\u51fa\u63a5\u53e3\uff0c\u800c\u662fVGA\u8f93\u51fa\u63a5\u53e3\uff0c\u8bf7\u4f7f\u7528\u8be5\u6a21\u5757\u5b8c\u6210VGA\u8f6cHDMI\u4fe1\u53f7\u8f6c\u6362\u3002 USB\u8f6cTTL\u6a21\u5757 \u901a\u8fc7\u6539\u6a21\u5757\uff0c\u53ef\u4ee5\u8fde\u63a5BLIKVM PCIe\u5361\u7684\u4e32\u53e3\uff0c\u7136\u540e\u4f7f\u7528\u4e32\u53e3\u8fdb\u5165\u8bbe\u5907\u8fdb\u884c\u8c03\u8bd5\u3002 \u98ce\u6247 Use a cooling fan to cool the Raspberry Pi CM4, but installing a fan will make the product thicker than a standard PCIe add-in card. \u4f7f\u7528\u98ce\u6247\u5bf9\u6811\u8393\u6d3eCM4\u8fdb\u884c\u964d\u6e29\uff0c\u4f46\u5b89\u88c5\u98ce\u6247\u540e\u4f1a\u4f7fBLIKVM PCIe\u5361\u7684\u539a\u5ea6\u539a\u4e8e\u6807\u51c6\u7684PCIe\u5361\u539a\u5ea6\u3002","title":"\u914d\u4ef6"},{"location":"BLIKVM-PCIE-guide-zh/#_7","text":"","title":"\u5c3a\u5bf8"},{"location":"BLIKVM-PCIE-guide-zh/#_8","text":"BLIKVM PCIe\u7248\u672c\u5b9e\u6d4b\u89c6\u9891\uff0c\u8f6f\u4ef6\u4f7f\u7528PiKVM","title":"\u6d4b\u8bd5\u89c6\u9891"},{"location":"BLIKVM-PCIE-guide-zh/#_9","text":"BLIKVM only PCIe\u5361\u7248\u672c 1 BLIKVM PCIe\u5361 1 \u98ce\u6247 1 OLED\u663e\u793a\u5c4f 1 USB\u8f6cTTL\u6a21\u5757 1 HDMI EDID\u6a21\u62df\u5668 1 VGA\u8f6cHDMI\u6a21\u5757 1 32G Micro SD card 1 HDMI\u7ebf 0.5m 1 HDMI \u76f4\u901a\u5934 1 \u5343\u5146\u7f51\u7ebf 1m 1 USB-A\u8f6cUSB-C\u7ebf 1m 2 USB\u675c\u90a6\u7ebf 0.4m 1 WiFi\u5929\u7ebf 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u91d1\u5c5e\u6563\u70ed\u7247 1 \u5341\u5b57\u5957\u7b52 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 BLIKVM PCIe \u5230\u624b\u5373\u7528\u7248\u672c 1 BLIKVM PCIe\u5361 1 CM4 102000 1 \u98ce\u6247 1 OLED\u663e\u793a\u5c4f 1 USB\u8f6cTTL\u6a21\u5757 1 HDMI EDID\u6a21\u62df\u5668 1 VGA\u8f6cHDMI\u6a21\u5757 1 32G Micro SD card 1 HDMI\u7ebf 0.5m 1 HDMI \u76f4\u901a\u5934 1 \u5343\u5146\u7f51\u7ebf 1m 1 USB-A\u8f6cUSB-C\u7ebf 1m 2 USB\u675c\u90a6\u7ebf 0.4m 1 WiFi\u5929\u7ebf 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u91d1\u5c5e\u6563\u70ed\u7247 1 \u5341\u5b57\u5957\u7b52 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 \u5907\u6ce8\uff1a\u7531\u4e8e\u6811\u8393\u6d3eCM4\u4e00\u76f4\u7d27\u7f3a\uff0c\u5230\u624b\u5373\u7528\u7248\u672c\u4e2dCM4\u7248\u672c\u53ef\u80fd\u4f1a\u66f4\u6362\u4e3aeMMC\u7248\u672c\uff0c\u6b64\u4e2d\u60c5\u51b5\u4e0b\u5c06\u4e0d\u5e26SD\u5361\u3002","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"BLIKVM-PCIE-guide-zh/#_10","text":"v2\u6dd8\u5b9d\u5730\u5740","title":"\u8d2d\u4e70\u94fe\u63a5"},{"location":"BLIKVM-PCIE-guide-zh/#3d","text":"\u4e00\u4e2a\u7b80\u5355\u7684PCIe\u5916\u58f3 Download file","title":"3D\u5916\u58f3"},{"location":"BLIKVM-PCIe-installation-zh/","text":"BLIKVM PCIe \u5b89\u88c5\u8bf4\u660e 1.\u62c6\u5f00\u5305\u88c5\uff0c\u62ff\u51fa\u8bbe\u5907 \u4ea7\u54c1\u6e05\u5355 2.\u5b89\u88c5\u4e3b\u4f53\u8bbe\u5907 \u5b89\u88c5CM4\u548c4\u4e2a\u516d\u89d2\u87ba\u67f1(\u6b64\u6587\u7ae0\u4f7f\u7528\u7684\u662fCM4 lite\u4f5c\u4e3a\u5217\u5b50\uff0c\u955c\u50cf\u5728\u51fa\u5382\u7684SD\u5361\u91cc\u5df2\u7ecf\u88ab\u9884\u88c5\u8f7d\uff0c\u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002\u82e5\u4f60\u7684CM4\u662fEMMc\u7248\u672c\uff0c\u5219\u4f60\u9700\u8981\u81ea\u5df1\u70e7\u5f55\u955c\u50cf \uff0c\u65e0\u6cd5\u76f4\u63a5\u4f7f\u7528SD\u5361\u542f\u52a8)\u3002\u7136\u540e\u5c06\u5bfc\u70ed\u7247\u6495\u4e0b\u4fdd\u62a4\u819c\uff0c\u7c98\u8d34\u5728CM4\u9876\u90e8\u3002 \u5b89\u88c5\u91d1\u5c5e\u6563\u70ed\u7247\u3002 \u4e3b\u4f53\u8bbe\u5907\u5df2\u5b89\u88c5\u5b8c\u6210 3.\u8fde\u63a5USB\u63a5\u53e3\u548cATX\u63a5\u53e3 \u6b64\u6587\u4e2d\u7684\u4e3b\u677f\u4f7f\u7528\u7684\u662fAsus H520M-E\uff0c\u4e0d\u540c\u7684\u4e3b\u677f\u63a5\u53e3\u5b9a\u4e49\u4e0d\u4e00\u5b9a\u76f8\u540c\uff0c\u8bf7\u53c2\u8003\u60a8\u7684\u4e3b\u677f\u76f8\u5173\u624b\u518c\u3002 4.\u94fe\u63a5OLED\u663e\u793a\u5c4f \u60a8\u6536\u5230\u7684OLED\u662f\u672a\u5b89\u88c5\u652f\u67b6\u7684\uff0c\u8bf7\u53c2\u8003\u56fe\u7247\u8fdb\u884c\u5b89\u88c5\u3002\u53e6\u5916OLED\u652f\u67b6\u4e3a\u4e9a\u514b\u529b\u6750\u6599\uff0c\u9700\u8981\u6495\u53bb\u8868\u9762\u7684\u4fdd\u62a4\u819c\u540e\u4f7f\u7528\u3002 \u4e0a\u9762\u7684\u5c31\u662f\u5b89\u88c5\u6b65\u9aa4\uff0c\u672a\u6495\u819c\u7684\u6548\u679c\uff0c\u5b9e\u9645\u4f7f\u7528\u8bf7\u6495\u53bb\u4fdd\u62a4\u819c\uff0c\u6548\u679c\u5982\u4e0b\uff1a 5.\u8fde\u63a5HDMI\u7ebf \u5c06\u60a8\u7535\u8111\u7684HDMI\u8f93\u51fa\u53e3\u901a\u8fc7HDMI\u7ebf\u76f4\u63a5\u8fde\u63a5\u5230BLIKVM PCIe\u5361\u7684HDMI IN\u63a5\u53e3\u3002HDMI EDID\u6a21\u62df\u5668\u4e0d\u662f\u5fc5\u987b\u8981\u662f\u7528\u7684\uff0c\u5f53\u60a8\u7684\u8ba1\u7b97\u673a\u4e0d\u80fd\u6b63\u786e\u8f93\u51faHDMI\u753b\u9762\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7\u5c1d\u8bd5\u4f7f\u7528\u6b64\u6a21\u5757\u63a5\u5728\u4f60\u7684\u8ba1\u7b97\u673a\u7684HDMI\u63a5\u53e3\u4e0a\uff0c\u4ece\u800c\u8ba9\u60a8\u7684\u8ba1\u7b97\u673a\u53ef\u4ee5\u8f93\u51fa\u4e00\u4e2a\u6b63\u786e\u627dHDMI\u753b\u9762 6.\u8fde\u63a5\u7f51\u7ebf \u6807\u51c6: IEEE 802.3af PoE\u8f93\u5165\u7535\u538b:37v-57v. \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u4e0d\u9700\u8981\u4f7f\u7528PWR-IN\u7aef\u53e3\u518d\u4f9b\u7535 7.\u8fde\u63a5USB\u4f9b\u7535\u63a5\u53e3 \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6, \u901a\u8fc7\u4f7f\u7528PWR-IN\u7aef\u53e3\u8fdb\u884c\u4f9b\u7535\u7684USB\u7535\u6e90\u9002\u914d\u5668\u9700\u89815V/3A\u3002 8.\u6d4b\u8bd5 OLED\u663e\u793a\u5c4f\u73b0\u5b9e\u8bbe\u5907IP\u5730\u5740\u548c\u5176\u5b83\u4fe1\u606f \u4f7f\u7528\u8be5IP\u5730\u5740\u5728\u6d4f\u89c8\u5668\u4e0a\u76f4\u63a5\u8f93\u5165\uff0c\u5373\u53ef\u6253\u5f00web\u63a7\u5236\u754c\u9762\u3002\u5982\u679c\u89c6\u9891\u9f20\u6807\u952e\u76d8\u4ee5\u53ca\u5176\u5b83\u4f60\u5173\u5fc3\u7684\u529f\u80fd\u6d4b\u8bd5\u4e00\u5207\u6b63\u5728\uff0c\u5c31\u53ef\u4ee5\u5c06BLIKVM PCIe\u5361\u5b89\u88c5\u5230\u4f60\u7684\u673a\u7bb1\u4e2d\u3002 9.\u5b89\u88c5BLIKVM PCIe\u5361\u5230\u673a\u7bb1\u4e2d \u65ad\u5f00\u7535\u6e90\u548c\u8fde\u63a5\u7ebf\uff0c\u5148\u5c06PCIe\u5361\u5b89\u88c5\u5230\u4e3b\u677f\u4e0a\uff0c\u7136\u540e\u91cd\u65b0\u5c06\u7ebf\u7f06\u8fde\u63a5\u597d\u3002\u4e0d\u540c\u6279\u6b21\u6536\u5230\u7684ATX\u7ebf\u989c\u8272\u53ef\u80fd\u4e0d\u4e00\u6837\uff0c\u8bf7\u76f4\u63a5\u53c2\u8003\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u8fde\u63a5\u3002 \u5230\u8fd9\u91cc\u4f60\u5c31\u53ef\u4ee5\u4eab\u53d7BLIKVM PCIe\u5361\u6765\u7ba1\u7406\u4f60\u7684\u8ba1\u7b97\u673a\u5566! \u9644\u5f55 1.\u5b89\u88c5\u534a\u9ad8\u7684PCIe\u6321\u677f Note \u9644\u5f55 2.\u5b89\u88c5\u6563\u70ed\u98ce\u6247 \u901a\u5e38\u4f7f\u7528\u91d1\u5c5e\u6563\u70ed\u7247\u5df2\u7ecf\u8db3\u591f\uff0c\u5b89\u88c5\u6563\u70ed\u98ce\u6247\u4e0d\u662f\u5fc5\u987b\u7684 \u98ce\u6247\u88ab\u6811\u8393\u6d3e\u7684GPIO12\u53e3\u63a7\u5236 \u9644\u5f55 3.\u5b89\u88c5wifi\u5929\u7ebf Note","title":"v2 PCIe\u5b89\u88c5\u8bf4\u660e"},{"location":"BLIKVM-PCIe-installation-zh/#blikvm-pcie","text":"","title":"BLIKVM PCIe \u5b89\u88c5\u8bf4\u660e"},{"location":"BLIKVM-PCIe-installation-zh/#1","text":"\u4ea7\u54c1\u6e05\u5355","title":"1.\u62c6\u5f00\u5305\u88c5\uff0c\u62ff\u51fa\u8bbe\u5907"},{"location":"BLIKVM-PCIe-installation-zh/#2","text":"\u5b89\u88c5CM4\u548c4\u4e2a\u516d\u89d2\u87ba\u67f1(\u6b64\u6587\u7ae0\u4f7f\u7528\u7684\u662fCM4 lite\u4f5c\u4e3a\u5217\u5b50\uff0c\u955c\u50cf\u5728\u51fa\u5382\u7684SD\u5361\u91cc\u5df2\u7ecf\u88ab\u9884\u88c5\u8f7d\uff0c\u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002\u82e5\u4f60\u7684CM4\u662fEMMc\u7248\u672c\uff0c\u5219\u4f60\u9700\u8981\u81ea\u5df1\u70e7\u5f55\u955c\u50cf \uff0c\u65e0\u6cd5\u76f4\u63a5\u4f7f\u7528SD\u5361\u542f\u52a8)\u3002\u7136\u540e\u5c06\u5bfc\u70ed\u7247\u6495\u4e0b\u4fdd\u62a4\u819c\uff0c\u7c98\u8d34\u5728CM4\u9876\u90e8\u3002 \u5b89\u88c5\u91d1\u5c5e\u6563\u70ed\u7247\u3002 \u4e3b\u4f53\u8bbe\u5907\u5df2\u5b89\u88c5\u5b8c\u6210","title":"2.\u5b89\u88c5\u4e3b\u4f53\u8bbe\u5907"},{"location":"BLIKVM-PCIe-installation-zh/#3usbatx","text":"\u6b64\u6587\u4e2d\u7684\u4e3b\u677f\u4f7f\u7528\u7684\u662fAsus H520M-E\uff0c\u4e0d\u540c\u7684\u4e3b\u677f\u63a5\u53e3\u5b9a\u4e49\u4e0d\u4e00\u5b9a\u76f8\u540c\uff0c\u8bf7\u53c2\u8003\u60a8\u7684\u4e3b\u677f\u76f8\u5173\u624b\u518c\u3002","title":"3.\u8fde\u63a5USB\u63a5\u53e3\u548cATX\u63a5\u53e3"},{"location":"BLIKVM-PCIe-installation-zh/#4oled","text":"\u60a8\u6536\u5230\u7684OLED\u662f\u672a\u5b89\u88c5\u652f\u67b6\u7684\uff0c\u8bf7\u53c2\u8003\u56fe\u7247\u8fdb\u884c\u5b89\u88c5\u3002\u53e6\u5916OLED\u652f\u67b6\u4e3a\u4e9a\u514b\u529b\u6750\u6599\uff0c\u9700\u8981\u6495\u53bb\u8868\u9762\u7684\u4fdd\u62a4\u819c\u540e\u4f7f\u7528\u3002 \u4e0a\u9762\u7684\u5c31\u662f\u5b89\u88c5\u6b65\u9aa4\uff0c\u672a\u6495\u819c\u7684\u6548\u679c\uff0c\u5b9e\u9645\u4f7f\u7528\u8bf7\u6495\u53bb\u4fdd\u62a4\u819c\uff0c\u6548\u679c\u5982\u4e0b\uff1a","title":"4.\u94fe\u63a5OLED\u663e\u793a\u5c4f"},{"location":"BLIKVM-PCIe-installation-zh/#5hdmi","text":"\u5c06\u60a8\u7535\u8111\u7684HDMI\u8f93\u51fa\u53e3\u901a\u8fc7HDMI\u7ebf\u76f4\u63a5\u8fde\u63a5\u5230BLIKVM PCIe\u5361\u7684HDMI IN\u63a5\u53e3\u3002HDMI EDID\u6a21\u62df\u5668\u4e0d\u662f\u5fc5\u987b\u8981\u662f\u7528\u7684\uff0c\u5f53\u60a8\u7684\u8ba1\u7b97\u673a\u4e0d\u80fd\u6b63\u786e\u8f93\u51faHDMI\u753b\u9762\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7\u5c1d\u8bd5\u4f7f\u7528\u6b64\u6a21\u5757\u63a5\u5728\u4f60\u7684\u8ba1\u7b97\u673a\u7684HDMI\u63a5\u53e3\u4e0a\uff0c\u4ece\u800c\u8ba9\u60a8\u7684\u8ba1\u7b97\u673a\u53ef\u4ee5\u8f93\u51fa\u4e00\u4e2a\u6b63\u786e\u627dHDMI\u753b\u9762","title":"5.\u8fde\u63a5HDMI\u7ebf"},{"location":"BLIKVM-PCIe-installation-zh/#6","text":"\u6807\u51c6: IEEE 802.3af PoE\u8f93\u5165\u7535\u538b:37v-57v. \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u4e0d\u9700\u8981\u4f7f\u7528PWR-IN\u7aef\u53e3\u518d\u4f9b\u7535","title":"6.\u8fde\u63a5\u7f51\u7ebf"},{"location":"BLIKVM-PCIe-installation-zh/#7usb","text":"\u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6, \u901a\u8fc7\u4f7f\u7528PWR-IN\u7aef\u53e3\u8fdb\u884c\u4f9b\u7535\u7684USB\u7535\u6e90\u9002\u914d\u5668\u9700\u89815V/3A\u3002","title":"7.\u8fde\u63a5USB\u4f9b\u7535\u63a5\u53e3"},{"location":"BLIKVM-PCIe-installation-zh/#8","text":"OLED\u663e\u793a\u5c4f\u73b0\u5b9e\u8bbe\u5907IP\u5730\u5740\u548c\u5176\u5b83\u4fe1\u606f \u4f7f\u7528\u8be5IP\u5730\u5740\u5728\u6d4f\u89c8\u5668\u4e0a\u76f4\u63a5\u8f93\u5165\uff0c\u5373\u53ef\u6253\u5f00web\u63a7\u5236\u754c\u9762\u3002\u5982\u679c\u89c6\u9891\u9f20\u6807\u952e\u76d8\u4ee5\u53ca\u5176\u5b83\u4f60\u5173\u5fc3\u7684\u529f\u80fd\u6d4b\u8bd5\u4e00\u5207\u6b63\u5728\uff0c\u5c31\u53ef\u4ee5\u5c06BLIKVM PCIe\u5361\u5b89\u88c5\u5230\u4f60\u7684\u673a\u7bb1\u4e2d\u3002","title":"8.\u6d4b\u8bd5"},{"location":"BLIKVM-PCIe-installation-zh/#9blikvm-pcie","text":"\u65ad\u5f00\u7535\u6e90\u548c\u8fde\u63a5\u7ebf\uff0c\u5148\u5c06PCIe\u5361\u5b89\u88c5\u5230\u4e3b\u677f\u4e0a\uff0c\u7136\u540e\u91cd\u65b0\u5c06\u7ebf\u7f06\u8fde\u63a5\u597d\u3002\u4e0d\u540c\u6279\u6b21\u6536\u5230\u7684ATX\u7ebf\u989c\u8272\u53ef\u80fd\u4e0d\u4e00\u6837\uff0c\u8bf7\u76f4\u63a5\u53c2\u8003\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u8fde\u63a5\u3002 \u5230\u8fd9\u91cc\u4f60\u5c31\u53ef\u4ee5\u4eab\u53d7BLIKVM PCIe\u5361\u6765\u7ba1\u7406\u4f60\u7684\u8ba1\u7b97\u673a\u5566!","title":"9.\u5b89\u88c5BLIKVM PCIe\u5361\u5230\u673a\u7bb1\u4e2d"},{"location":"BLIKVM-PCIe-installation-zh/#1pcie","text":"Note","title":"\u9644\u5f55 1.\u5b89\u88c5\u534a\u9ad8\u7684PCIe\u6321\u677f"},{"location":"BLIKVM-PCIe-installation-zh/#2_1","text":"\u901a\u5e38\u4f7f\u7528\u91d1\u5c5e\u6563\u70ed\u7247\u5df2\u7ecf\u8db3\u591f\uff0c\u5b89\u88c5\u6563\u70ed\u98ce\u6247\u4e0d\u662f\u5fc5\u987b\u7684 \u98ce\u6247\u88ab\u6811\u8393\u6d3e\u7684GPIO12\u53e3\u63a7\u5236","title":"\u9644\u5f55 2.\u5b89\u88c5\u6563\u70ed\u98ce\u6247"},{"location":"BLIKVM-PCIe-installation-zh/#3wifi","text":"Note","title":"\u9644\u5f55 3.\u5b89\u88c5wifi\u5929\u7ebf"},{"location":"BliKVM-v4-guide/","text":"BliKVM v4 Allwinner BliKVM v4\u662f\u4e00\u6b3e\u751f\u4ea7\u5c31\u7eea\u3001\u5373\u63d2\u5373\u7528\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86 \u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406 \u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e \u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5 \u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1 \uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 BliKVM V4 Datasheet Craft Computing: Goodbye IPMI - Blicube BliKVM V4 \u6d4b\u8bc4 Lawrence Systems: Blicube BliKVM V4: Is This the Best Linux IP KVM Yet? RainCat: BliKVM V4 Allwinnner\u5b89\u88c5PiKVM\u6559\u7a0b \u529f\u80fd\u7279\u70b9 \u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63014K@30Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) HDMI\u89c6\u9891\u73af\u51fa ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE & DC \u652f\u6301 WiFi \u4e32\u53e3 \u63a7\u5236\u53f0\u7aef\u53e3 1.33\u82f1\u5bf8 \u5f69\u8272 \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) HDMI\u652f\u6301\u7684\u5206\u8fa8\u7387\u7c7b\u578b \u5b89\u88c5\u8981\u6c42 \u9664v4\u5957\u4ef6\u5916\uff0c\u60a8\u8fd8\u9700\u81ea\u5907\u4ee5\u4e0b\u8bbe\u5907 \u7535\u6e90\u9002\u914d\u5668\uff085V 3A, USB-C\u7aef\u53e3\u621612V 2ADC\u7aef\u53e3\uff09,\u82e5\u4f60\u8ba1\u5212\u4f7f\u7528PoE\u4f9b\u7535\uff0c\u6216\u8005\u6240\u7684\u88ab\u63a7\u8ba1\u7b97\u673aUSB\u53e3\u6709\u5145\u8db3\u7684\u4f9b\u7535\u80fd\u529b\uff0c\u5219\u4e5f\u4e0d\u9700\u8981\u5355\u72ec\u7684\u7535\u6e90\u9002\u914d\u5668\uff1b HDMI \u7ebf\u7f06(\u81f3\u5c11\u4e00\u6839)\uff0c\u82e5\u60a8\u540c\u65f6\u9700\u8981\u4f7f\u7528HDMI\u73af\u51fa\u63a5\u53e3\uff0c\u5219\u9700\u89812\u6839\uff1b \u7f51\u7ebf\uff08\u7ed3\u5408\u60a8\u9700\u6c42\u81ea\u5907\uff09,\u4f7f\u7528ATX\u5f00\u5173\u673a\u529f\u80fd\u9700\u4e00\u6839\uff0c\u4f7f\u7528\u7f51\u7ebf\u4e0a\u7f51\u529f\u80fd\u9700\u4e00\u6839\uff1b USB-C\u8f6cUSB-A\u7ebf\u7f06\u4e00\u6839\uff08\u7528\u4e8e\u9f20\u6807\u548c\u952e\u76d8\u6570\u636e\u4f20\u8f93\uff09. \u7ec8\u7aef\u5347\u7ea7\u6ce8\u610f\uff01 \u5728\u5347\u7ea7\u524d\uff0c\u9700\u6267\u884c\u4e0b\u9762\u547d\u4ee4\uff0c\u5426\u5219apt-get update \u548c apt-get upgrade\u540e\u955c\u50cf\u4f1a\u65e0\u6cd5\u542f\u52a8 apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64 BliKVM v4 \u62c6\u7bb1\uff0c\u8fde\u63a5\uff0c\u4f7f\u7528\u53c2\u8003\u89c6\u9891 \u5b89\u88c5\u6b65\u9aa4 1. \u6253\u5f00v4\u5957\u4ef6\u5305\u88c5\uff0c\u6839\u636e\u4e0b\u9762\u6240\u793a\u7684\u8fde\u63a5\u793a\u610f\u56fe\uff0c\u5c06BliKVM\u548c\u88ab\u63a7\u8ba1\u7b97\u673a\u8fde\u63a5\u8d77\u6765\uff1b ATX\u8fde\u63a5 \u8bf7\u53c2\u8003 ATX\u8fde\u63a5\u6307\u5357 \u3002 2. \u5728\u6240\u6709\u8fde\u63a5\u7ebf\u8fde\u63a5\u597d\u540e,\u5bf9BliKVM\u8fdb\u884c\u4e0a\u7535\uff0c\u76f4\u5230\u663e\u793a\u5c4f\u51fa\u73b0\u753b\u9762\uff0c\u5373\u8bbe\u5907\u6b63\u5e38\u542f\u52a8\u3002 3. \u4ed4\u7ec6\u9605\u8bfb \u201c\u7b2c\u4e00\u6b65\u201d \u6307\u5357-\u5982\u4f55\u5728\u7f51\u7edc\u4e0a\u67e5\u627e\u8bbe\u5907\u3001\u5982\u4f55\u767b\u5f55\u3001\u66f4\u6539\u5bc6\u7801\u7b49\u7b49\u3002\u6309\u7167\u4e0a\u9762\u63cf\u8ff0\u7684\u6b65\u9aa4\u64cd\u4f5c\uff0c\u7136\u540e\u8fd4\u56de\u672c\u9875\u3002 4. \u5c1d\u8bd5\u4f7f\u7528 Web \u754c\u9762\u7ba1\u7406\u8ba1\u7b97\u673a\u7684 BliKVM\u3002 \u786e\u4fdd\u60a8\u53ef\u4ee5\u770b\u5230\u56fe\u50cf\u5e76\u4e14\u952e\u76d8\u548c\u9f20\u6807\u90fd\u6b63\u5e38\u5de5\u4f5c\u3002\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u67e5\u770b\u6211\u4eec\u7684 \u5e38\u89c1\u95ee\u9898 \uff08\u5b83\u975e\u5e38\u6709\u7528\uff09\u3002\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u8bf7\u5728\u6211\u4eec\u7684 Discord\u804a\u5929\u5ba4 \u5bfb\u6c42\u652f\u6301\u3002 5. \u60a8\u53ef\u4ee5\u67e5\u770bwiki\u5176\u4ed6\u7684\u9875\u9762\uff0c\u63a2\u7d22BliKVM\u7684\u66f4\u591a\u529f\u80fd\uff0c\u795d\u60a8\u73a9\u7684\u5f00\u5fc3\uff01 \u89c6\u9891\u6a21\u5f0f v4\u6700\u9ad8\u652f\u63014K30Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u4f20\u8f93\u5206\u8fa8\u7387\u9ed8\u8ba4\u4e3a1920x1080\u3002 \u53d1\u8d27\u6e05\u5355 BLIKVM v4 Allwinner\u7248\u672c 1 BLIKVM v4 1 WiFi\u5929\u7ebf 1 ATX\u9002\u914d\u677f 1 ATX\u675c\u90a6\u7ebf\u7f06 8pin \u6bcd\u5bf9\u6bcd 60cm 1 ATX\u675c\u90a6\u7ebf\u7f06 8pin \u6bcd\u5bf9\u516c 60cm 1 1U\u5b89\u88c5\u6302\u8033 2 M2.5x5\u87ba\u4e1d 8 \u7845\u80f6\u9632\u649e\u7c92 1 \u901a\u8fc75V\u7aef\u53e3\u8bbf\u95ee\u4e32\u884c\u63a7\u5236\u53f0 5V\u7aef\u53e3\u53ef\u4ee5\u540c\u65f6\u7528\u4e8e\u4f9b\u7535\u548c\u4e32\u884c\u63a7\u5236\u53f0\u8bbf\u95ee\uff0c\u9ed8\u8ba4\u6ce2\u7279\u7387\u4e3a115200\u3002BliKVM v4\u5185\u90e8\u6709\u4e00\u4e2a\u57fa\u4e8eCH341\u7684USB\u5230UART\u8f6c\u6362\u5668\uff0c\u5b83\u8fde\u63a5\u5230 mCore-H616 SoC \u7684UART0\uff0c\u6240\u4ee5\u4f60\u53ef\u4ee5\u5c06PC\u7684USB\u7aef\u53e3\u8fde\u63a5\u52305V\u7aef\u53e3\uff0c\u65e0\u9700\u5916\u90e8UART\u548cUSB-C\u5230\u675c\u90a6\u9002\u914d\u5668\u3002 PC USB\u7aef\u53e3\u7535\u6d41\u8f93\u51fa \u5c1d\u8bd5\u4f7f\u75285V\u7aef\u53e3\u65f6\u8981\u5c0f\u5fc3\uff0c\u56e0\u4e3a\u5355\u72ec\u7684PC USB\u7aef\u53e3\u53ef\u80fd\u65e0\u6cd5\u63d0\u4f9b3A\uff085V\uff09\uff0c\u8fd9\u662f\u677f\u5361\u5de5\u4f5c\u7684\u8981\u6c42\u3002\u53ef\u4ee5\u540c\u65f6\u4f7f\u752812V 2A DC\u7aef\u53e3\u4f9b\u7535\u548c5V\u7aef\u53e3\u8fdb\u884c\u4e32\u884c\u901a\u4fe1\uff0c\u65e0\u9700 USB\u5206\u7ebf\u5668\u677f \u3002\u6216\u8005\u4f7f\u7528\u5206\u7ebf\u5668\u677f\u5206\u79bb\u51faVCC\u5f15\u811a\uff0c\u5e76\u4f7f\u7528\u5355\u72ec\u76845V 3A\u7535\u6e90\u4e3a5V\u7aef\u53e3\u7684VCC\u5f15\u811a\u4f9b\u7535\u3002\u540c\u6837\uff0c\u5f53BliKVM\u901a\u7535\u65f6\u4ece12V 2A DC\u7aef\u53e3\u65ad\u5f00\u7535\u7f06\u65f6\uff0c\u8981\u786e\u4fdd\u5148\u4ece5V\u7aef\u53e3\u65ad\u5f00\u7535\u7f06\uff08\u56e0\u4e3a\u572812V 2A\u7535\u6e90\u65ad\u5f00\u540e\uff0c\u9664\u975e\u4f7f\u7528\u4e86\u5206\u7ebf\u5668\uff0c\u5426\u52195V\u7aef\u53e3\u5c06\u6210\u4e3aBliKVM v4\u7684\u7535\u6e90\uff09\u3002 \u5f53\u4f60\u5c06USB\u7535\u7f06\u8fde\u63a5\u5230BliKVM v4\u76845V\u7aef\u53e3\u65f6\uff0c\u4f60\u5e94\u8be5\u5728\u4e3b\u673a\u5185\u6838\u65e5\u5fd7\u4e2d\u770b\u5230\u7c7b\u4f3c\u8fd9\u6837\u7684\u5185\u5bb9\uff08\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662f\u57fa\u4e8eLinux\u7684\u64cd\u4f5c\u7cfb\u7edf\uff09: usb 1-1.2: new full-speed USB device number 12 using xhci_hcd usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.34 usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1.2: Product: USB Serial ch341 1-1.2:1.0: ch341-uart converter detected usb 1-1.2: ch341-uart converter now attached to ttyUSB0 \u7136\u540e\uff0c\u53ef\u4ee5\u4f7f\u7528 GNU screen \u6216 TIO \u8bbf\u95ee\u6b64\u7aef\u53e3: tio /dev/ttyUSB0 mangopimcore login: blikvm # ... \u5982\u679c\u4f60\u9700\u8981\u68c0\u67e5\u901a\u8fc7UART0\u63a5\u6536\u4e86\u591a\u5c11\u6570\u636e\uff0c\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b\u901a\u8fc7proc\u516c\u5f00\u7684\u8ba1\u6570\u5668\u6765\u5b9e\u73b0\uff08\u5f53\u4ece\u5916\u90e8\u4e3b\u673a\u53d1\u9001\u6570\u636e\u65f6\uff0c\u5982\u679c\u5185\u7f6e\u7684USB\u5230UART\u8f6c\u6362\u5668\u5de5\u4f5c\u6b63\u5e38\uff0crx\u8ba1\u6570\u5668\u5e94\u8be5\u4f1a\u589e\u52a0\uff09\uff1a root@mangopimcore:~# grep '0: uart' /proc/tty/driver/serial 0: uart:16550A mmio:0x05000000 irq:284 tx:20306 rx:40 pe:1 RTS|DTR \u8d2d\u4e70\u94fe\u63a5 v4\u6dd8\u5b9d\u5730\u5740","title":"BliKVM v4 Allwinner\u5bfc\u89c8"},{"location":"BliKVM-v4-guide/#blikvm-v4-allwinner","text":"BliKVM v4\u662f\u4e00\u6b3e\u751f\u4ea7\u5c31\u7eea\u3001\u5373\u63d2\u5373\u7528\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86 \u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406 \u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e \u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5 \u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1 \uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 BliKVM V4 Datasheet Craft Computing: Goodbye IPMI - Blicube BliKVM V4 \u6d4b\u8bc4 Lawrence Systems: Blicube BliKVM V4: Is This the Best Linux IP KVM Yet? RainCat: BliKVM V4 Allwinnner\u5b89\u88c5PiKVM\u6559\u7a0b","title":"BliKVM v4 Allwinner"},{"location":"BliKVM-v4-guide/#_1","text":"\u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63014K@30Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) HDMI\u89c6\u9891\u73af\u51fa ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE & DC \u652f\u6301 WiFi \u4e32\u53e3 \u63a7\u5236\u53f0\u7aef\u53e3 1.33\u82f1\u5bf8 \u5f69\u8272 \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) HDMI\u652f\u6301\u7684\u5206\u8fa8\u7387\u7c7b\u578b","title":"\u529f\u80fd\u7279\u70b9"},{"location":"BliKVM-v4-guide/#_2","text":"\u9664v4\u5957\u4ef6\u5916\uff0c\u60a8\u8fd8\u9700\u81ea\u5907\u4ee5\u4e0b\u8bbe\u5907 \u7535\u6e90\u9002\u914d\u5668\uff085V 3A, USB-C\u7aef\u53e3\u621612V 2ADC\u7aef\u53e3\uff09,\u82e5\u4f60\u8ba1\u5212\u4f7f\u7528PoE\u4f9b\u7535\uff0c\u6216\u8005\u6240\u7684\u88ab\u63a7\u8ba1\u7b97\u673aUSB\u53e3\u6709\u5145\u8db3\u7684\u4f9b\u7535\u80fd\u529b\uff0c\u5219\u4e5f\u4e0d\u9700\u8981\u5355\u72ec\u7684\u7535\u6e90\u9002\u914d\u5668\uff1b HDMI \u7ebf\u7f06(\u81f3\u5c11\u4e00\u6839)\uff0c\u82e5\u60a8\u540c\u65f6\u9700\u8981\u4f7f\u7528HDMI\u73af\u51fa\u63a5\u53e3\uff0c\u5219\u9700\u89812\u6839\uff1b \u7f51\u7ebf\uff08\u7ed3\u5408\u60a8\u9700\u6c42\u81ea\u5907\uff09,\u4f7f\u7528ATX\u5f00\u5173\u673a\u529f\u80fd\u9700\u4e00\u6839\uff0c\u4f7f\u7528\u7f51\u7ebf\u4e0a\u7f51\u529f\u80fd\u9700\u4e00\u6839\uff1b USB-C\u8f6cUSB-A\u7ebf\u7f06\u4e00\u6839\uff08\u7528\u4e8e\u9f20\u6807\u548c\u952e\u76d8\u6570\u636e\u4f20\u8f93\uff09. \u7ec8\u7aef\u5347\u7ea7\u6ce8\u610f\uff01 \u5728\u5347\u7ea7\u524d\uff0c\u9700\u6267\u884c\u4e0b\u9762\u547d\u4ee4\uff0c\u5426\u5219apt-get update \u548c apt-get upgrade\u540e\u955c\u50cf\u4f1a\u65e0\u6cd5\u542f\u52a8 apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64 BliKVM v4 \u62c6\u7bb1\uff0c\u8fde\u63a5\uff0c\u4f7f\u7528\u53c2\u8003\u89c6\u9891","title":"\u5b89\u88c5\u8981\u6c42"},{"location":"BliKVM-v4-guide/#_3","text":"1. \u6253\u5f00v4\u5957\u4ef6\u5305\u88c5\uff0c\u6839\u636e\u4e0b\u9762\u6240\u793a\u7684\u8fde\u63a5\u793a\u610f\u56fe\uff0c\u5c06BliKVM\u548c\u88ab\u63a7\u8ba1\u7b97\u673a\u8fde\u63a5\u8d77\u6765\uff1b ATX\u8fde\u63a5 \u8bf7\u53c2\u8003 ATX\u8fde\u63a5\u6307\u5357 \u3002 2. \u5728\u6240\u6709\u8fde\u63a5\u7ebf\u8fde\u63a5\u597d\u540e,\u5bf9BliKVM\u8fdb\u884c\u4e0a\u7535\uff0c\u76f4\u5230\u663e\u793a\u5c4f\u51fa\u73b0\u753b\u9762\uff0c\u5373\u8bbe\u5907\u6b63\u5e38\u542f\u52a8\u3002 3. \u4ed4\u7ec6\u9605\u8bfb \u201c\u7b2c\u4e00\u6b65\u201d \u6307\u5357-\u5982\u4f55\u5728\u7f51\u7edc\u4e0a\u67e5\u627e\u8bbe\u5907\u3001\u5982\u4f55\u767b\u5f55\u3001\u66f4\u6539\u5bc6\u7801\u7b49\u7b49\u3002\u6309\u7167\u4e0a\u9762\u63cf\u8ff0\u7684\u6b65\u9aa4\u64cd\u4f5c\uff0c\u7136\u540e\u8fd4\u56de\u672c\u9875\u3002 4. \u5c1d\u8bd5\u4f7f\u7528 Web \u754c\u9762\u7ba1\u7406\u8ba1\u7b97\u673a\u7684 BliKVM\u3002 \u786e\u4fdd\u60a8\u53ef\u4ee5\u770b\u5230\u56fe\u50cf\u5e76\u4e14\u952e\u76d8\u548c\u9f20\u6807\u90fd\u6b63\u5e38\u5de5\u4f5c\u3002\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u67e5\u770b\u6211\u4eec\u7684 \u5e38\u89c1\u95ee\u9898 \uff08\u5b83\u975e\u5e38\u6709\u7528\uff09\u3002\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u8bf7\u5728\u6211\u4eec\u7684 Discord\u804a\u5929\u5ba4 \u5bfb\u6c42\u652f\u6301\u3002 5. \u60a8\u53ef\u4ee5\u67e5\u770bwiki\u5176\u4ed6\u7684\u9875\u9762\uff0c\u63a2\u7d22BliKVM\u7684\u66f4\u591a\u529f\u80fd\uff0c\u795d\u60a8\u73a9\u7684\u5f00\u5fc3\uff01","title":"\u5b89\u88c5\u6b65\u9aa4"},{"location":"BliKVM-v4-guide/#_4","text":"v4\u6700\u9ad8\u652f\u63014K30Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u4f20\u8f93\u5206\u8fa8\u7387\u9ed8\u8ba4\u4e3a1920x1080\u3002","title":"\u89c6\u9891\u6a21\u5f0f"},{"location":"BliKVM-v4-guide/#_5","text":"BLIKVM v4 Allwinner\u7248\u672c 1 BLIKVM v4 1 WiFi\u5929\u7ebf 1 ATX\u9002\u914d\u677f 1 ATX\u675c\u90a6\u7ebf\u7f06 8pin \u6bcd\u5bf9\u6bcd 60cm 1 ATX\u675c\u90a6\u7ebf\u7f06 8pin \u6bcd\u5bf9\u516c 60cm 1 1U\u5b89\u88c5\u6302\u8033 2 M2.5x5\u87ba\u4e1d 8 \u7845\u80f6\u9632\u649e\u7c92 1","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"BliKVM-v4-guide/#5v","text":"5V\u7aef\u53e3\u53ef\u4ee5\u540c\u65f6\u7528\u4e8e\u4f9b\u7535\u548c\u4e32\u884c\u63a7\u5236\u53f0\u8bbf\u95ee\uff0c\u9ed8\u8ba4\u6ce2\u7279\u7387\u4e3a115200\u3002BliKVM v4\u5185\u90e8\u6709\u4e00\u4e2a\u57fa\u4e8eCH341\u7684USB\u5230UART\u8f6c\u6362\u5668\uff0c\u5b83\u8fde\u63a5\u5230 mCore-H616 SoC \u7684UART0\uff0c\u6240\u4ee5\u4f60\u53ef\u4ee5\u5c06PC\u7684USB\u7aef\u53e3\u8fde\u63a5\u52305V\u7aef\u53e3\uff0c\u65e0\u9700\u5916\u90e8UART\u548cUSB-C\u5230\u675c\u90a6\u9002\u914d\u5668\u3002 PC USB\u7aef\u53e3\u7535\u6d41\u8f93\u51fa \u5c1d\u8bd5\u4f7f\u75285V\u7aef\u53e3\u65f6\u8981\u5c0f\u5fc3\uff0c\u56e0\u4e3a\u5355\u72ec\u7684PC USB\u7aef\u53e3\u53ef\u80fd\u65e0\u6cd5\u63d0\u4f9b3A\uff085V\uff09\uff0c\u8fd9\u662f\u677f\u5361\u5de5\u4f5c\u7684\u8981\u6c42\u3002\u53ef\u4ee5\u540c\u65f6\u4f7f\u752812V 2A DC\u7aef\u53e3\u4f9b\u7535\u548c5V\u7aef\u53e3\u8fdb\u884c\u4e32\u884c\u901a\u4fe1\uff0c\u65e0\u9700 USB\u5206\u7ebf\u5668\u677f \u3002\u6216\u8005\u4f7f\u7528\u5206\u7ebf\u5668\u677f\u5206\u79bb\u51faVCC\u5f15\u811a\uff0c\u5e76\u4f7f\u7528\u5355\u72ec\u76845V 3A\u7535\u6e90\u4e3a5V\u7aef\u53e3\u7684VCC\u5f15\u811a\u4f9b\u7535\u3002\u540c\u6837\uff0c\u5f53BliKVM\u901a\u7535\u65f6\u4ece12V 2A DC\u7aef\u53e3\u65ad\u5f00\u7535\u7f06\u65f6\uff0c\u8981\u786e\u4fdd\u5148\u4ece5V\u7aef\u53e3\u65ad\u5f00\u7535\u7f06\uff08\u56e0\u4e3a\u572812V 2A\u7535\u6e90\u65ad\u5f00\u540e\uff0c\u9664\u975e\u4f7f\u7528\u4e86\u5206\u7ebf\u5668\uff0c\u5426\u52195V\u7aef\u53e3\u5c06\u6210\u4e3aBliKVM v4\u7684\u7535\u6e90\uff09\u3002 \u5f53\u4f60\u5c06USB\u7535\u7f06\u8fde\u63a5\u5230BliKVM v4\u76845V\u7aef\u53e3\u65f6\uff0c\u4f60\u5e94\u8be5\u5728\u4e3b\u673a\u5185\u6838\u65e5\u5fd7\u4e2d\u770b\u5230\u7c7b\u4f3c\u8fd9\u6837\u7684\u5185\u5bb9\uff08\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662f\u57fa\u4e8eLinux\u7684\u64cd\u4f5c\u7cfb\u7edf\uff09: usb 1-1.2: new full-speed USB device number 12 using xhci_hcd usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.34 usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1.2: Product: USB Serial ch341 1-1.2:1.0: ch341-uart converter detected usb 1-1.2: ch341-uart converter now attached to ttyUSB0 \u7136\u540e\uff0c\u53ef\u4ee5\u4f7f\u7528 GNU screen \u6216 TIO \u8bbf\u95ee\u6b64\u7aef\u53e3: tio /dev/ttyUSB0 mangopimcore login: blikvm # ... \u5982\u679c\u4f60\u9700\u8981\u68c0\u67e5\u901a\u8fc7UART0\u63a5\u6536\u4e86\u591a\u5c11\u6570\u636e\uff0c\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b\u901a\u8fc7proc\u516c\u5f00\u7684\u8ba1\u6570\u5668\u6765\u5b9e\u73b0\uff08\u5f53\u4ece\u5916\u90e8\u4e3b\u673a\u53d1\u9001\u6570\u636e\u65f6\uff0c\u5982\u679c\u5185\u7f6e\u7684USB\u5230UART\u8f6c\u6362\u5668\u5de5\u4f5c\u6b63\u5e38\uff0crx\u8ba1\u6570\u5668\u5e94\u8be5\u4f1a\u589e\u52a0\uff09\uff1a root@mangopimcore:~# grep '0: uart' /proc/tty/driver/serial 0: uart:16550A mmio:0x05000000 irq:284 tx:20306 rx:40 pe:1 RTS|DTR","title":"\u901a\u8fc75V\u7aef\u53e3\u8bbf\u95ee\u4e32\u884c\u63a7\u5236\u53f0"},{"location":"BliKVM-v4-guide/#_6","text":"v4\u6dd8\u5b9d\u5730\u5740","title":"\u8d2d\u4e70\u94fe\u63a5"},{"location":"Datasheet-BliKVM-v4/","text":"BliKVM v4 \u786c\u4ef6\u624b\u518c \u63a5\u53e3\u5b9a\u4e49 1 USB 2.0 10 \u5929\u7ebf\u63a5\u53e3 2 \u4f9b\u7535\u53e3 5V 3A & UART 11 \u7f51\u53e3 100M & PoE 3 ATX \u63a7\u5236\u7aef\u53e3 12 1.33\u5bf8LCD\u5c4f\u5e55 4 HDMI \u89c6\u9891\u73af\u51fa\u7aef\u53e3 13 \u4f9b\u7535\u6307\u793a\u706f (\u7ea2\u8272) 5 USB-PC 14 \u7528\u6237\u81ea\u5b9a\u4e49\u6309\u94ae 6 \u4f9b\u7535\u53e3 12V 2A 5.5*2.1mm 15 \u72b6\u6001\u6307\u793a\u706f (\u7eff\u8272) 7 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 16 \u5c4f\u5e55\u663e\u793a\u6309\u94ae 8 HDMI \u8f93\u5165\u6307\u793a\u706f (\u7eff\u8272) 17 Micro SD \u5361\u69fd 9 HDMI \u8f93\u51fa\u6307\u793a\u706f (\u9ec4\u8272) \u53c2\u6570 \u53c2\u6570\u540d\u79f0 \u63cf\u8ff0 \u4f9b\u7535 5V 3A 5V \u7aef\u53e3, USB-PC \u7aef\u53e3 12V 2A 12V DC\u7aef\u53e3 PoE \u4ee5\u592a\u7f51\u4f9b\u7535 (IEEE802.3af\u534f\u8bae) 48V DC \u7aef\u53e3 HDMI-IN HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 HDMI-OUT HDMI \u89c6\u9891\u73af\u51fa\u7aef\u53e3 USB-PC \u6a21\u62df\u952e\u76d8\uff0c\u9f20\u6807\uff0c\u5927\u5bb9\u91cf\u5b58\u50a8\u5668\u6216\u5176\u4ed6USB\u8bbe\u5907 ATX \u5f00\u5173\u673a\u88ab\u63a7\u7535\u8111\uff0c\u8bfb\u53d6\u88ab\u63a7\u7535\u8111\u72b6\u6001\u6307\u793a\u706f WiFi&BT IEEE802.11 b/g/n + BLE4.2 Micro SD \u5361\u69fd \u5b89\u88c5\u955c\u50cf\u5185\u5b58\u5361 5V port 5V 3A \u7535\u6e90\u6216\u4e32\u884c\u63a7\u5236\u53f0\u7ba1\u7406\u7aef\u53e3 \u663e\u793a\u548c\u6307\u793a\u706f LED\u6307\u793a\u706f \u7535\u6e90\u6307\u793a\u706f\uff0c\u72b6\u6001\u6307\u793a\u706f\uff0cHDM\u8f93\u5165\u8f93\u51fa\u6307\u793a\u706f \u663e\u793a\u5c4f 1.33\u5bf8 TFT \u5f69\u8272\u5c4f\u5e55 \u7528\u6237\u81ea\u5b9a\u4e49\u6309\u94ae SW1 \u8702\u9e23\u5668 Find me \u89c6\u9891 \u5206\u8fa8\u7387 \u6700\u9ad8\u652f\u63014k@30Hz \u7f16\u7801\u683c\u5f0f MJPEG \u6838\u5fc3 \u82af\u7247 \u5168\u5fd7 H616/H313 RAM 1GB \u529f\u8017 \u6700\u9ad815W \u73af\u5883\u53c2\u6570 \u5de5\u4f5c\u6e29\u5ea6 0\u00b0C to 70\u00b0C \u5b58\u50a8\u6e29\u5ea6 -20\u00b0C to 60\u00b0C \u5c3a\u5bf8\u548c\u91cd\u91cf \u5c3a\u5bf8 100 (L) x 134 (W) x 44.4 (H) mm \u91cd\u91cf 0.45 kg BLIKVM CM4\u7248\u672c OLED\u663e\u793a\u5c4f \u8be5\u4ea7\u54c1\u6807\u914d\u4e00\u5757\u5206\u8fa8\u7387\u4e3a128x64\u7684\u5355\u8272OLED\u663e\u793a\u5c4f\uff0c\u82af\u7247\u578b\u53f7\u4e3aSSD1306\u3002 \u7528\u6237\u901a\u8fc7\u663e\u793a\u5c4f\u7684\u5e03\u7ebf\u5c06\u5176\u8fde\u63a5\u5230\u4ea7\u54c1\u3002 \u8be5\u6a21\u5757\u901a\u8fc7I^2^C\u63a5\u53e3\u8fde\u63a5\u5230CM4\u3002\u5e03\u7ebf\u5b9a\u4e49\u5982\u4e0b\u8868\u6240\u793a\u3002 \u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8e SSD1306\u9a71\u52a8 \u7684\u5355\u8272OLED\u5e93\u3002 Display(SSD1306) CM4 GND GND VCC 3.3V SCL GPIO3(SCL1,I^2^C) SDA GPIO2(SDA1,I^2^C) \u5916\u5f62\u5c3a\u5bf8","title":"BliKVM v4 \u786c\u4ef6\u624b\u518c"},{"location":"Datasheet-BliKVM-v4/#blikvm-v4","text":"","title":"BliKVM v4 \u786c\u4ef6\u624b\u518c"},{"location":"Datasheet-BliKVM-v4/#_1","text":"1 USB 2.0 10 \u5929\u7ebf\u63a5\u53e3 2 \u4f9b\u7535\u53e3 5V 3A & UART 11 \u7f51\u53e3 100M & PoE 3 ATX \u63a7\u5236\u7aef\u53e3 12 1.33\u5bf8LCD\u5c4f\u5e55 4 HDMI \u89c6\u9891\u73af\u51fa\u7aef\u53e3 13 \u4f9b\u7535\u6307\u793a\u706f (\u7ea2\u8272) 5 USB-PC 14 \u7528\u6237\u81ea\u5b9a\u4e49\u6309\u94ae 6 \u4f9b\u7535\u53e3 12V 2A 5.5*2.1mm 15 \u72b6\u6001\u6307\u793a\u706f (\u7eff\u8272) 7 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 16 \u5c4f\u5e55\u663e\u793a\u6309\u94ae 8 HDMI \u8f93\u5165\u6307\u793a\u706f (\u7eff\u8272) 17 Micro SD \u5361\u69fd 9 HDMI \u8f93\u51fa\u6307\u793a\u706f (\u9ec4\u8272)","title":"\u63a5\u53e3\u5b9a\u4e49"},{"location":"Datasheet-BliKVM-v4/#_2","text":"\u53c2\u6570\u540d\u79f0 \u63cf\u8ff0 \u4f9b\u7535 5V 3A 5V \u7aef\u53e3, USB-PC \u7aef\u53e3 12V 2A 12V DC\u7aef\u53e3 PoE \u4ee5\u592a\u7f51\u4f9b\u7535 (IEEE802.3af\u534f\u8bae) 48V DC \u7aef\u53e3 HDMI-IN HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 HDMI-OUT HDMI \u89c6\u9891\u73af\u51fa\u7aef\u53e3 USB-PC \u6a21\u62df\u952e\u76d8\uff0c\u9f20\u6807\uff0c\u5927\u5bb9\u91cf\u5b58\u50a8\u5668\u6216\u5176\u4ed6USB\u8bbe\u5907 ATX \u5f00\u5173\u673a\u88ab\u63a7\u7535\u8111\uff0c\u8bfb\u53d6\u88ab\u63a7\u7535\u8111\u72b6\u6001\u6307\u793a\u706f WiFi&BT IEEE802.11 b/g/n + BLE4.2 Micro SD \u5361\u69fd \u5b89\u88c5\u955c\u50cf\u5185\u5b58\u5361 5V port 5V 3A \u7535\u6e90\u6216\u4e32\u884c\u63a7\u5236\u53f0\u7ba1\u7406\u7aef\u53e3 \u663e\u793a\u548c\u6307\u793a\u706f LED\u6307\u793a\u706f \u7535\u6e90\u6307\u793a\u706f\uff0c\u72b6\u6001\u6307\u793a\u706f\uff0cHDM\u8f93\u5165\u8f93\u51fa\u6307\u793a\u706f \u663e\u793a\u5c4f 1.33\u5bf8 TFT \u5f69\u8272\u5c4f\u5e55 \u7528\u6237\u81ea\u5b9a\u4e49\u6309\u94ae SW1 \u8702\u9e23\u5668 Find me \u89c6\u9891 \u5206\u8fa8\u7387 \u6700\u9ad8\u652f\u63014k@30Hz \u7f16\u7801\u683c\u5f0f MJPEG \u6838\u5fc3 \u82af\u7247 \u5168\u5fd7 H616/H313 RAM 1GB \u529f\u8017 \u6700\u9ad815W \u73af\u5883\u53c2\u6570 \u5de5\u4f5c\u6e29\u5ea6 0\u00b0C to 70\u00b0C \u5b58\u50a8\u6e29\u5ea6 -20\u00b0C to 60\u00b0C \u5c3a\u5bf8\u548c\u91cd\u91cf \u5c3a\u5bf8 100 (L) x 134 (W) x 44.4 (H) mm \u91cd\u91cf 0.45 kg BLIKVM CM4\u7248\u672c OLED\u663e\u793a\u5c4f \u8be5\u4ea7\u54c1\u6807\u914d\u4e00\u5757\u5206\u8fa8\u7387\u4e3a128x64\u7684\u5355\u8272OLED\u663e\u793a\u5c4f\uff0c\u82af\u7247\u578b\u53f7\u4e3aSSD1306\u3002 \u7528\u6237\u901a\u8fc7\u663e\u793a\u5c4f\u7684\u5e03\u7ebf\u5c06\u5176\u8fde\u63a5\u5230\u4ea7\u54c1\u3002 \u8be5\u6a21\u5757\u901a\u8fc7I^2^C\u63a5\u53e3\u8fde\u63a5\u5230CM4\u3002\u5e03\u7ebf\u5b9a\u4e49\u5982\u4e0b\u8868\u6240\u793a\u3002 \u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8e SSD1306\u9a71\u52a8 \u7684\u5355\u8272OLED\u5e93\u3002 Display(SSD1306) CM4 GND GND VCC 3.3V SCL GPIO3(SCL1,I^2^C) SDA GPIO2(SDA1,I^2^C)","title":"\u53c2\u6570"},{"location":"Datasheet-BliKVM-v4/#_3","text":"","title":"\u5916\u5f62\u5c3a\u5bf8"},{"location":"Expand_Filesystem/","text":"\u6811\u8393\u6d3e\u6269\u5bb9 \u7b80\u4ecb \u7531\u4e8e\u5728\u5236\u4f5c\u955c\u50cf\u8fc7\u7a0b\u4e2d\uff0c\u5bf9\u955c\u50cf\u8fdb\u884c\u4e86\u538b\u7f29\uff0c\u5982\u679c\u4f60\u53d1\u73b0\u6811\u8393\u6d3eSD\u5361\u6216\u8005eMMC\u7684\u53ef\u7528\u7a7a\u95f4\u5c0f\u4e8e\u5b9e\u9645SD\u5361\u6216\u8005eMMc\u7684\u5bb9\u91cf\uff0c\u4f60\u53ef\u80fd\u9700\u8981\u8fdb\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff0c\u5bf9\u6811\u8393\u6d3e\u8fdb\u884c\u6269\u5bb9\u3002 \u5982\u679c\u4f60\u53d1\u73b0\u7cfb\u7edf\u5e76\u65e0raspi-config\u5de5\u5177\uff0c\u5219\u53ef\u4f7f\u7528\u65b9\u6cd5\u4e8c\uff08\u4f7f\u7528GParted\u5206\u533a\u5de5\u5177\uff09\u3002 \u65b9\u6cd5\u4e00 \u4f7f\u7528raspi-config\u5de5\u5177 \u5982\u679c\u4f60\u4f7f\u7528\u76842023\u5e746\u6708\u4efd\u540e\u7684\u955c\u50cf\uff0c\u56e0\u589e\u52a0\u4e86\u7b2c\u4e09\u4e2a\u53ef\u8bfb\u5199\u7684\u5206\u533a\uff0c\u6b64\u65b9\u6cd5\u5df2\u7ecf\u4e0d\u9002\u7528\uff0c\u8bf7\u53c2\u8003\u65b9\u6848\u4e8c\u548c\u65b9\u6848\u4e09\u3002 1. \u6253\u5f00raspi-config\u7cfb\u7edf\u914d\u7f6e\u5de5\u5177 sudo raspi-config 2. \u9009\u62e9Advancd Options\uff1a 3. \u9009\u62e9Expand Filesystem\uff1a 4. Ok: 5. \u7ec8\u7aef\u6267\u884c resize2fs /dev/mmcblk0p2 \u6b64\u547d\u4ee4\u5373\u53ef\u770b\u5230SD\u5361\u5df2\u7ecf\u6269\u5bb9\u6210\u529f\u3002 \u65b9\u6cd5\u4e8c \u4f7f\u7528GParted\u5206\u533a\u5de5\u5177 1. \u5c06\u70e7\u5f55\u597d\u955c\u50cf\u7684SD\u5361\u6216\u8005EMMc\u901a\u8fc7usb\u63a5\u5230\u7535\u8111\u4e0a\uff0c\u4ee5linux\u4e0bGParted\u5206\u533a\u5de5\u5177\u4e3a\u4f8b\uff0c\u5176\u5b83\u5e73\u53f0\u4e5f\u6709\u7c7b\u4f3c\u7684\u5206\u533a\u5de5\u5177\u3002\u6253\u5f00GParted\u8f6f\u4ef6\uff0c\u9009\u62e9SD\u5361\uff1a 2. \u89c2\u5bdf\u4e0a\u56feSD\u5361\u7684\u5206\u533a\u60c5\u51b5\uff0c\u53ef\u4ee5\u53d1\u73b0\u5728sdb3\u5206\u533a\u7684\u524d\u540e\u5404\u67092.01GB\u548c21.87GB\u7684\u7a7a\u95f4\u672a\u4f7f\u7528\uff0c\u8fd9\u90e8\u5206\u7a7a\u95f4\u5c31\u662f\u6211\u4eec\u8981\u6269\u5bb9\u7684\u7a7a\u95f4\u3002\u9009\u4e2dsdb3\u5206\u533a\uff0c\u70b9\u51fb\u8c03\u6574\u5927\u5c0f\u3002 3. \u53ef\u4ee5\u62d6\u52a8sdb3\u7684\u767d\u8272\u5206\u533a\u6269\u5927\u5230\u6700\u5de6\u548c\u6700\u53f3\uff0c\u6216\u8005\u586b\u5199\u201c\u4e4b\u524d\u7684\u53ef\u7528\u7a7a\u95f4\u201d\u4e3a\u201c0\u201d\uff0c\u201c\u65b0\u5927\u5c0f\u201d\u4e3a\u201c\u6700\u5927\u5927\u5c0f\u201d\u768425958\uff0c\u7136\u540e\u70b9\u51fb\u53f3\u4e0b\u89d2\u7684\u8c03\u6574\u5927\u5c0f\uff0c\u7136\u540e\u5f39\u51fa\u6765\u7684\u63d0\u9192\u70b9\u51fb\u786e\u8ba4\uff0c\u5373\u53ef\u770b\u5230sd\u7684\u6240\u6709\u672a\u4f7f\u7528\u7a7a\u95f4\u5168\u90e8\u7528\u4e0a\u4e86\u3002 4. \u5c06SD\u5361\u63d2\u5165\u8bbe\u5907\uff0c\u542f\u52a8\u5373\u53ef\u3002 \u65b9\u6cd5\u4e09: \u4f7f\u7528\u811a\u672c \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM\u955c\u50cf\uff0c\u53ef\u4ee5\u5728KVM\u4e0a\u8fd0\u884c\u4e0b\u9762\u7684\u811a\u672c\uff0c\u6765\u81ea\u52a8\u6269\u5927\u7a7a\u95f4\u3002 1. \u7ec8\u7aef\u767b\u5f55\u5230KVM\u4e0a\uff0c\u786e\u8ba4\u7cfb\u7edf\u6709\u53ef\u8bfb\u5199\u6743\u9650\uff0c\u5728\u4efb\u610f\u8def\u5f84\u8fd0\u884c vim expand.sh ,\u5c06\u4e0b\u9762\u5185\u5bb9\u5199\u5165\u5230expand.sh\u4e2d. \u5982\u679c\u4f60\u662fv1,v2,v3\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4e0b\u9762\u5185\u5bb9\uff1a #!/bin/bash set -x resize_mmcblk0p3() { echo \"Resizing mmcblk0p3 partition...\" parted /dev/mmcblk0 resizepart 3 100% resize2fs /dev/mmcblk0p3 echo \"mmcblk0p3 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p3 echo \"Partition resizing completed.\" \u5982\u679c\u4f60\u662fv4\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4e0b\u9762\u5185\u5bb9\uff1a #!/bin/bash set -x resize_mmcblk0p1() { echo \"Resizing mmcblk0p1 partition...\" parted /dev/mmcblk0 resizepart 1 100% resize2fs /dev/mmcblk0p1 echo \"mmcblk0p1 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p1 echo \"Partition resizing completed.\" 2. \u7ec8\u7aef\u6267\u884c bash expand.sh ,\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002 \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM\u7684\u955c\u50cf\uff0c\u53ef\u4ee5\u5728KVM\u4e0a\u8fd0\u884c\u4e0b\u9762\u7684\u811a\u672c\uff0c\u6765\u81ea\u52a8\u6269\u5927\u7a7a\u95f4\u3002 1. \u7ec8\u7aef\u767b\u5f55\u5230KVM\u4e0a\uff0c\u786e\u8ba4\u7cfb\u7edf\u6709\u53ef\u8bfb\u5199\u6743\u9650\uff0c\u5728\u4efb\u610f\u8def\u5f84\u8fd0\u884c vim expand.sh ,\u5c06\u4e0b\u9762\u5185\u5bb9\u5199\u5165\u5230expand.sh\u4e2d. #!/bin/bash set -x if grep -q 'X-kvmd\\.otgmsd' /etc/fstab; then part=$(grep 'X-kvmd\\.otgmsd' /etc/fstab | awk '{print $1}') # shellcheck disable=SC2206 splitted=(${part//=/ }) if [ \"${splitted[0]}\" == LABEL ]; then label=${splitted[1]} part=$(blkid -c /dev/null -L \"$label\") else label=PIMSD fi unset splitted disk=/dev/$(lsblk -no pkname \"$part\") npart=$(cat \"/sys/class/block/${part//\\/dev\\//}/partition\") umount \"$part\" parted \"$disk\" -a optimal -s resizepart \"$npart\" 100% yes | mkfs.ext4 -L \"$label\" -F -m 0 \"$part\" mount \"$part\" unset disk part npart label fi 2. \u7ec8\u7aef\u6267\u884c bash expand.sh ,\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002","title":"\u5b58\u50a8\u5361\u6269\u5bb9"},{"location":"Expand_Filesystem/#_1","text":"","title":"\u6811\u8393\u6d3e\u6269\u5bb9"},{"location":"Expand_Filesystem/#_2","text":"\u7531\u4e8e\u5728\u5236\u4f5c\u955c\u50cf\u8fc7\u7a0b\u4e2d\uff0c\u5bf9\u955c\u50cf\u8fdb\u884c\u4e86\u538b\u7f29\uff0c\u5982\u679c\u4f60\u53d1\u73b0\u6811\u8393\u6d3eSD\u5361\u6216\u8005eMMC\u7684\u53ef\u7528\u7a7a\u95f4\u5c0f\u4e8e\u5b9e\u9645SD\u5361\u6216\u8005eMMc\u7684\u5bb9\u91cf\uff0c\u4f60\u53ef\u80fd\u9700\u8981\u8fdb\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff0c\u5bf9\u6811\u8393\u6d3e\u8fdb\u884c\u6269\u5bb9\u3002 \u5982\u679c\u4f60\u53d1\u73b0\u7cfb\u7edf\u5e76\u65e0raspi-config\u5de5\u5177\uff0c\u5219\u53ef\u4f7f\u7528\u65b9\u6cd5\u4e8c\uff08\u4f7f\u7528GParted\u5206\u533a\u5de5\u5177\uff09\u3002","title":"\u7b80\u4ecb"},{"location":"Expand_Filesystem/#raspi-config","text":"\u5982\u679c\u4f60\u4f7f\u7528\u76842023\u5e746\u6708\u4efd\u540e\u7684\u955c\u50cf\uff0c\u56e0\u589e\u52a0\u4e86\u7b2c\u4e09\u4e2a\u53ef\u8bfb\u5199\u7684\u5206\u533a\uff0c\u6b64\u65b9\u6cd5\u5df2\u7ecf\u4e0d\u9002\u7528\uff0c\u8bf7\u53c2\u8003\u65b9\u6848\u4e8c\u548c\u65b9\u6848\u4e09\u3002 1. \u6253\u5f00raspi-config\u7cfb\u7edf\u914d\u7f6e\u5de5\u5177 sudo raspi-config 2. \u9009\u62e9Advancd Options\uff1a 3. \u9009\u62e9Expand Filesystem\uff1a 4. Ok: 5. \u7ec8\u7aef\u6267\u884c resize2fs /dev/mmcblk0p2 \u6b64\u547d\u4ee4\u5373\u53ef\u770b\u5230SD\u5361\u5df2\u7ecf\u6269\u5bb9\u6210\u529f\u3002","title":"\u65b9\u6cd5\u4e00 \u4f7f\u7528raspi-config\u5de5\u5177"},{"location":"Expand_Filesystem/#gparted","text":"1. \u5c06\u70e7\u5f55\u597d\u955c\u50cf\u7684SD\u5361\u6216\u8005EMMc\u901a\u8fc7usb\u63a5\u5230\u7535\u8111\u4e0a\uff0c\u4ee5linux\u4e0bGParted\u5206\u533a\u5de5\u5177\u4e3a\u4f8b\uff0c\u5176\u5b83\u5e73\u53f0\u4e5f\u6709\u7c7b\u4f3c\u7684\u5206\u533a\u5de5\u5177\u3002\u6253\u5f00GParted\u8f6f\u4ef6\uff0c\u9009\u62e9SD\u5361\uff1a 2. \u89c2\u5bdf\u4e0a\u56feSD\u5361\u7684\u5206\u533a\u60c5\u51b5\uff0c\u53ef\u4ee5\u53d1\u73b0\u5728sdb3\u5206\u533a\u7684\u524d\u540e\u5404\u67092.01GB\u548c21.87GB\u7684\u7a7a\u95f4\u672a\u4f7f\u7528\uff0c\u8fd9\u90e8\u5206\u7a7a\u95f4\u5c31\u662f\u6211\u4eec\u8981\u6269\u5bb9\u7684\u7a7a\u95f4\u3002\u9009\u4e2dsdb3\u5206\u533a\uff0c\u70b9\u51fb\u8c03\u6574\u5927\u5c0f\u3002 3. \u53ef\u4ee5\u62d6\u52a8sdb3\u7684\u767d\u8272\u5206\u533a\u6269\u5927\u5230\u6700\u5de6\u548c\u6700\u53f3\uff0c\u6216\u8005\u586b\u5199\u201c\u4e4b\u524d\u7684\u53ef\u7528\u7a7a\u95f4\u201d\u4e3a\u201c0\u201d\uff0c\u201c\u65b0\u5927\u5c0f\u201d\u4e3a\u201c\u6700\u5927\u5927\u5c0f\u201d\u768425958\uff0c\u7136\u540e\u70b9\u51fb\u53f3\u4e0b\u89d2\u7684\u8c03\u6574\u5927\u5c0f\uff0c\u7136\u540e\u5f39\u51fa\u6765\u7684\u63d0\u9192\u70b9\u51fb\u786e\u8ba4\uff0c\u5373\u53ef\u770b\u5230sd\u7684\u6240\u6709\u672a\u4f7f\u7528\u7a7a\u95f4\u5168\u90e8\u7528\u4e0a\u4e86\u3002 4. \u5c06SD\u5361\u63d2\u5165\u8bbe\u5907\uff0c\u542f\u52a8\u5373\u53ef\u3002","title":"\u65b9\u6cd5\u4e8c \u4f7f\u7528GParted\u5206\u533a\u5de5\u5177"},{"location":"Expand_Filesystem/#_3","text":"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM\u955c\u50cf\uff0c\u53ef\u4ee5\u5728KVM\u4e0a\u8fd0\u884c\u4e0b\u9762\u7684\u811a\u672c\uff0c\u6765\u81ea\u52a8\u6269\u5927\u7a7a\u95f4\u3002 1. \u7ec8\u7aef\u767b\u5f55\u5230KVM\u4e0a\uff0c\u786e\u8ba4\u7cfb\u7edf\u6709\u53ef\u8bfb\u5199\u6743\u9650\uff0c\u5728\u4efb\u610f\u8def\u5f84\u8fd0\u884c vim expand.sh ,\u5c06\u4e0b\u9762\u5185\u5bb9\u5199\u5165\u5230expand.sh\u4e2d. \u5982\u679c\u4f60\u662fv1,v2,v3\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4e0b\u9762\u5185\u5bb9\uff1a #!/bin/bash set -x resize_mmcblk0p3() { echo \"Resizing mmcblk0p3 partition...\" parted /dev/mmcblk0 resizepart 3 100% resize2fs /dev/mmcblk0p3 echo \"mmcblk0p3 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p3 echo \"Partition resizing completed.\" \u5982\u679c\u4f60\u662fv4\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4e0b\u9762\u5185\u5bb9\uff1a #!/bin/bash set -x resize_mmcblk0p1() { echo \"Resizing mmcblk0p1 partition...\" parted /dev/mmcblk0 resizepart 1 100% resize2fs /dev/mmcblk0p1 echo \"mmcblk0p1 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p1 echo \"Partition resizing completed.\" 2. \u7ec8\u7aef\u6267\u884c bash expand.sh ,\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002 \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM\u7684\u955c\u50cf\uff0c\u53ef\u4ee5\u5728KVM\u4e0a\u8fd0\u884c\u4e0b\u9762\u7684\u811a\u672c\uff0c\u6765\u81ea\u52a8\u6269\u5927\u7a7a\u95f4\u3002 1. \u7ec8\u7aef\u767b\u5f55\u5230KVM\u4e0a\uff0c\u786e\u8ba4\u7cfb\u7edf\u6709\u53ef\u8bfb\u5199\u6743\u9650\uff0c\u5728\u4efb\u610f\u8def\u5f84\u8fd0\u884c vim expand.sh ,\u5c06\u4e0b\u9762\u5185\u5bb9\u5199\u5165\u5230expand.sh\u4e2d. #!/bin/bash set -x if grep -q 'X-kvmd\\.otgmsd' /etc/fstab; then part=$(grep 'X-kvmd\\.otgmsd' /etc/fstab | awk '{print $1}') # shellcheck disable=SC2206 splitted=(${part//=/ }) if [ \"${splitted[0]}\" == LABEL ]; then label=${splitted[1]} part=$(blkid -c /dev/null -L \"$label\") else label=PIMSD fi unset splitted disk=/dev/$(lsblk -no pkname \"$part\") npart=$(cat \"/sys/class/block/${part//\\/dev\\//}/partition\") umount \"$part\" parted \"$disk\" -a optimal -s resizepart \"$npart\" 100% yes | mkfs.ext4 -L \"$label\" -F -m 0 \"$part\" mount \"$part\" unset disk part npart label fi 2. \u7ec8\u7aef\u6267\u884c bash expand.sh ,\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002","title":"\u65b9\u6cd5\u4e09: \u4f7f\u7528\u811a\u672c"},{"location":"OLED-display/","text":"OLED display \u7531\u4e8eOLED\u957f\u671f\u8fd0\u884c\uff0c\u4f1a\u51fa\u73b0\u70e7\u5c4f\u7b49\u95ee\u9898\uff0c\u6545OLED\u6709\u4ee5\u4e0b\u903b\u8f91\uff0c\u9996\u6b21\u542f\u52a8\u65f6\uff0coled_enable\u9ed8\u8ba4\u8bbe\u7f6e\u4e3a1\uff0c\u5373OLED\u5c4f\u5e55\u4f1a\u5e38\u4eae\u3002\u82e5oled_enable\u8bbe\u7f6e\u4e3a0\uff0c\u5219\u5728\u8bbe\u5907\u542f\u52a8300\u5206\u949f,\u7136\u540e\u95f4\u96945\u5206\u949f\u663e\u793a\u4e00\u6b21\uff0c\u4ece\u800c\u5927\u5927\u589e\u52a0\u5c4f\u5e55\u7684\u751f\u547d\u5468\u671f\u3002 \u4f60\u53ef\u4ee5\u5728/usr/bin/blikvm/package.json\u914d\u7f6e\u6587\u4ef6\u4e2d\uff0c\u627e\u5230\u4e0b\u9762\u914d\u7f6e\uff0c\u901a\u8fc7\u4fee\u6539restart_show_time\u548cinterval_display_time\u65f6\u95f4\uff0c\u8fbe\u5230\u4e0d\u540c\u7684\u63a7\u5236\u6548\u679c\uff0c\u5355\u4f4d\u4e3a\u5206\u949f\u3002 \"oled\":{ \"oled_enable\": 1, \"restart_show_time\": 300, \"interval_display_time\": 5 }","title":"OLED\u663e\u793a\u5668"},{"location":"OLED-display/#oled-display","text":"\u7531\u4e8eOLED\u957f\u671f\u8fd0\u884c\uff0c\u4f1a\u51fa\u73b0\u70e7\u5c4f\u7b49\u95ee\u9898\uff0c\u6545OLED\u6709\u4ee5\u4e0b\u903b\u8f91\uff0c\u9996\u6b21\u542f\u52a8\u65f6\uff0coled_enable\u9ed8\u8ba4\u8bbe\u7f6e\u4e3a1\uff0c\u5373OLED\u5c4f\u5e55\u4f1a\u5e38\u4eae\u3002\u82e5oled_enable\u8bbe\u7f6e\u4e3a0\uff0c\u5219\u5728\u8bbe\u5907\u542f\u52a8300\u5206\u949f,\u7136\u540e\u95f4\u96945\u5206\u949f\u663e\u793a\u4e00\u6b21\uff0c\u4ece\u800c\u5927\u5927\u589e\u52a0\u5c4f\u5e55\u7684\u751f\u547d\u5468\u671f\u3002 \u4f60\u53ef\u4ee5\u5728/usr/bin/blikvm/package.json\u914d\u7f6e\u6587\u4ef6\u4e2d\uff0c\u627e\u5230\u4e0b\u9762\u914d\u7f6e\uff0c\u901a\u8fc7\u4fee\u6539restart_show_time\u548cinterval_display_time\u65f6\u95f4\uff0c\u8fbe\u5230\u4e0d\u540c\u7684\u63a7\u5236\u6548\u679c\uff0c\u5355\u4f4d\u4e3a\u5206\u949f\u3002 \"oled\":{ \"oled_enable\": 1, \"restart_show_time\": 300, \"interval_display_time\": 5 }","title":"OLED display"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/","text":"BliKVM v1 (RPI CM4) BliKVM v1\u662f\u4e00\u6b3e\u57fa\u4e8e\u6811\u8393\u6d3eCM4\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86 \u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406 \u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e \u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5 \u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1 \uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 \u63a5\u53e3\u5b9a\u4e49 1 OTG \u7aef\u53e3 7 Micro SD \u5361\u69fd 1 OTG \u7aef\u53e3 7 Micro SD \u5361\u69fd 2 USB3.0 x2 8 \u72b6\u6001\u6307\u793a\u706f (\u7eff\u8272) 3 ATX \u63a7\u5236\u7aef\u53e3 9 \u7f51\u53e3 1000M 4 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 10 OLED \u663e\u793a\u5c4f 128x64 5 Type-C\u4f9b\u7535\u7aef\u53e3 5V3A 11 \u5929\u7ebf\u5b89\u88c5\u5b54 6 \u7535\u6e90\u6307\u793a\u706f (\u7ea2\u8272) \u53c2\u6570 \u53c2\u6570\u540d\u79f0 \u63cf\u8ff0 \u4f9b\u7535 5V 3A PWR IN \u7aef\u53e3 \u7aef\u53e3 HDMI IN HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 OTG \u6a21\u62df\u952e\u76d8\uff0c\u9f20\u6807\uff0c\u5927\u5bb9\u91cf\u5b58\u50a8\u5668\u6216\u5176\u4ed6USB\u8bbe\u5907 CN-ATX \u5f00\u5173\u673a\u88ab\u63a7\u7535\u8111\uff0c\u8bfb\u53d6\u88ab\u63a7\u7535\u8111\u72b6\u6001\u6307\u793a\u706f Micro SD \u5361\u69fd \u5b89\u88c5\u955c\u50cf\u5185\u5b58\u5361 PWR IN \u7aef\u53e3 5V3A \u7535\u6e90 \u663e\u793a\u548c\u6307\u793a\u706f LED \u6307\u793a\u706f \u7535\u6e90\u6307\u793a\u706f\uff08\u7ea2\u8272\uff09\uff0c\u72b6\u6001\u6307\u793a\u706f\uff08\u7eff\u8272\uff09 OLED \u663e\u793a\u5c4f OLED 128x64 0.96\u5bf8 \u89c6\u9891 \u5206\u8fa8\u7387 \u6700\u9ad8\u652f\u6301 1920x1200@60Hz \u7f16\u7801\u683c\u5f0f H.264, MJPEG \u6838\u5fc3 \u6a21\u5757 \u6811\u8393\u6d3eCM4\uff08\u81ea\u5907\uff09 \u529f\u8017 Up to 15W \u73af\u5883\u53c2\u6570 \u5de5\u4f5c\u6e29\u5ea6 0\u00b0C to 70\u00b0C \u5b58\u50a8\u6e29\u5ea6 -20\u00b0C to 60\u00b0C \u5c3a\u5bf8\u548c\u91cd\u91cf \u5c3a\u5bf8 120(L) x 70W) x 37(H) mm \u91cd\u91cf 0.45 kg \u5916\u5f62\u5c3a\u5bf8","title":"BliKVM v1 (RPI CM4)"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/#blikvm-v1-rpi-cm4","text":"BliKVM v1\u662f\u4e00\u6b3e\u57fa\u4e8e\u6811\u8393\u6d3eCM4\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86 \u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406 \u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e \u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5 \u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1 \uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01","title":"BliKVM v1 (RPI CM4)"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/#_1","text":"1 OTG \u7aef\u53e3 7 Micro SD \u5361\u69fd 1 OTG \u7aef\u53e3 7 Micro SD \u5361\u69fd 2 USB3.0 x2 8 \u72b6\u6001\u6307\u793a\u706f (\u7eff\u8272) 3 ATX \u63a7\u5236\u7aef\u53e3 9 \u7f51\u53e3 1000M 4 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 10 OLED \u663e\u793a\u5c4f 128x64 5 Type-C\u4f9b\u7535\u7aef\u53e3 5V3A 11 \u5929\u7ebf\u5b89\u88c5\u5b54 6 \u7535\u6e90\u6307\u793a\u706f (\u7ea2\u8272)","title":"\u63a5\u53e3\u5b9a\u4e49"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/#_2","text":"\u53c2\u6570\u540d\u79f0 \u63cf\u8ff0 \u4f9b\u7535 5V 3A PWR IN \u7aef\u53e3 \u7aef\u53e3 HDMI IN HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 OTG \u6a21\u62df\u952e\u76d8\uff0c\u9f20\u6807\uff0c\u5927\u5bb9\u91cf\u5b58\u50a8\u5668\u6216\u5176\u4ed6USB\u8bbe\u5907 CN-ATX \u5f00\u5173\u673a\u88ab\u63a7\u7535\u8111\uff0c\u8bfb\u53d6\u88ab\u63a7\u7535\u8111\u72b6\u6001\u6307\u793a\u706f Micro SD \u5361\u69fd \u5b89\u88c5\u955c\u50cf\u5185\u5b58\u5361 PWR IN \u7aef\u53e3 5V3A \u7535\u6e90 \u663e\u793a\u548c\u6307\u793a\u706f LED \u6307\u793a\u706f \u7535\u6e90\u6307\u793a\u706f\uff08\u7ea2\u8272\uff09\uff0c\u72b6\u6001\u6307\u793a\u706f\uff08\u7eff\u8272\uff09 OLED \u663e\u793a\u5c4f OLED 128x64 0.96\u5bf8 \u89c6\u9891 \u5206\u8fa8\u7387 \u6700\u9ad8\u652f\u6301 1920x1200@60Hz \u7f16\u7801\u683c\u5f0f H.264, MJPEG \u6838\u5fc3 \u6a21\u5757 \u6811\u8393\u6d3eCM4\uff08\u81ea\u5907\uff09 \u529f\u8017 Up to 15W \u73af\u5883\u53c2\u6570 \u5de5\u4f5c\u6e29\u5ea6 0\u00b0C to 70\u00b0C \u5b58\u50a8\u6e29\u5ea6 -20\u00b0C to 60\u00b0C \u5c3a\u5bf8\u548c\u91cd\u91cf \u5c3a\u5bf8 120(L) x 70W) x 37(H) mm \u91cd\u91cf 0.45 kg","title":"\u53c2\u6570"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/#_3","text":"","title":"\u5916\u5f62\u5c3a\u5bf8"},{"location":"atx-guide/","text":"ATXA guide 1. Introduction ATXA is an ATX adapter borad to manage the power of your computer. The product includes two modules A-board and B-board. A-board is connected to the Raspberry Pi, B-board is connected to the computer's motherboard, and A-board is connected to B-board through a network cable.Join to the Discord Community Chat for news, questions and support! ATXA_A ATXA_B 2. A-board A-board is connected to the Raspberry Pi. The following table is a typical connection method in BLIKVM and PiKVM application. A-board RPI4 GND GND 3V3 3V3 LED PWR GPIO24 LED HDD GPIO22 SW PWR GPIO23 SW RST GPIO27 A-board is connected to B-board through a network cable. The following table is the corresponding relationship between the pin status of A-board and B-board. Pins on A-board Pins on B-board LED PWR is HIGH LED PWR+ is HIGH, LED PWR- is LOW LED PWR is LOW LED PWR+ is LOW, LED PWR- is LOW LED HDD is HIGH LED HDD+ is HIGH, LED HDD- is LOW LED HDD is LOW LED HDD+ is LOW, LED HDD- is LOW SW PWR is HIGH BTN PWR+ and BTN PWR- connected, the power button is pressed SW PWR is LOW BTN PWR+ and BTN PWR- disconnected, the power button is unpressed SW RST is HIGH BTN RST+ and BTN RST- connected, the reset button is pressed SW RST is LOW BTN RST+ and BTN RST- disconnected, the reset button is unpressed 3. B-board The b-board has an adapted full-height and half-height metal PCI mounting plate, which can be installed on the computer case. The user connects the pins on the B-board to the ATX control interface on the computer motherboard using the color DuPont cables provided with the product. ATXA-B\u4e0e\u7535\u8111\u4e3b\u677f\u8fde\u63a5\u8bf4\u660e \u6839\u636e\u7535\u8111\u4e3b\u677f\u8bf4\u660e\uff0c\u9996\u5148\u627e\u5230\u4e3b\u677f\u4e0aATX\u529f\u80fd\u76f8\u5173\u5f15\u811a\u4f4d\u7f6e\uff0c\u62d4\u4e0b\u4e3b\u677f\u5df2\u7ecf\u63a5\u597d\u7684ATX\u7ebf\uff0c\u62d4\u4e0b\u540e\u7535\u8111\u7684\u7535\u6e90\u6309\u94ae\u5c06\u5931\u53bb\u4f5c\u7528\u3002ATXA-B\u4e3b\u677f\u5171\u6709\u4e24\u63928PIN\u5f15\u811a\uff0c\u4e24\u6392\u5f15\u811a\u529f\u80fd\u5b8c\u5168\u76f8\u540c\u4f7f\u7528\u65f6\u65e0\u9700\u533a\u5206\u3002\u5176\u4e2d\u4e00\u6392\u5f15\u811a\u7528\u4e8eKVM\u63a7\u5236ATX\u76f8\u5173\u529f\u80fd\uff0c\u53e6\u4e00\u6392\u5f15\u811a\u63a5\u4e3b\u677f\u4e0a\u62d4\u4e0b\u6765\u7684ATX\u675c\u90a6\u5934\uff0c\u4fdd\u6301\u539f\u6709\u673a\u7bb1\u7535\u6e90\u6309\u94ae\u529f\u80fd\u3002\u6839\u636e\u4e3b\u677f\u548cATX-B\u4e0a\u7684\u5177\u4f53\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u6bcf\u6839\u7ebf\u7684\u8fde\u63a5\uff0c\u8fde\u63a5\u5173\u7cfb\u53ef\u4ee5\u53c2\u8003\u4e0b\u56fe\uff1a 4.Mechanical Diagram 5.Test video youtube\uff1a ATX 6.More link Purchase\uff1a ATX","title":"ATX\u7528\u6237\u624b\u518c"},{"location":"atx-guide/#atxa-guide","text":"","title":"ATXA guide"},{"location":"atx-guide/#1-introduction","text":"ATXA is an ATX adapter borad to manage the power of your computer. The product includes two modules A-board and B-board. A-board is connected to the Raspberry Pi, B-board is connected to the computer's motherboard, and A-board is connected to B-board through a network cable.Join to the Discord Community Chat for news, questions and support! ATXA_A ATXA_B","title":"1. Introduction"},{"location":"atx-guide/#2-a-board","text":"A-board is connected to the Raspberry Pi. The following table is a typical connection method in BLIKVM and PiKVM application. A-board RPI4 GND GND 3V3 3V3 LED PWR GPIO24 LED HDD GPIO22 SW PWR GPIO23 SW RST GPIO27 A-board is connected to B-board through a network cable. The following table is the corresponding relationship between the pin status of A-board and B-board. Pins on A-board Pins on B-board LED PWR is HIGH LED PWR+ is HIGH, LED PWR- is LOW LED PWR is LOW LED PWR+ is LOW, LED PWR- is LOW LED HDD is HIGH LED HDD+ is HIGH, LED HDD- is LOW LED HDD is LOW LED HDD+ is LOW, LED HDD- is LOW SW PWR is HIGH BTN PWR+ and BTN PWR- connected, the power button is pressed SW PWR is LOW BTN PWR+ and BTN PWR- disconnected, the power button is unpressed SW RST is HIGH BTN RST+ and BTN RST- connected, the reset button is pressed SW RST is LOW BTN RST+ and BTN RST- disconnected, the reset button is unpressed","title":"2. A-board"},{"location":"atx-guide/#3-b-board","text":"The b-board has an adapted full-height and half-height metal PCI mounting plate, which can be installed on the computer case. The user connects the pins on the B-board to the ATX control interface on the computer motherboard using the color DuPont cables provided with the product. ATXA-B\u4e0e\u7535\u8111\u4e3b\u677f\u8fde\u63a5\u8bf4\u660e \u6839\u636e\u7535\u8111\u4e3b\u677f\u8bf4\u660e\uff0c\u9996\u5148\u627e\u5230\u4e3b\u677f\u4e0aATX\u529f\u80fd\u76f8\u5173\u5f15\u811a\u4f4d\u7f6e\uff0c\u62d4\u4e0b\u4e3b\u677f\u5df2\u7ecf\u63a5\u597d\u7684ATX\u7ebf\uff0c\u62d4\u4e0b\u540e\u7535\u8111\u7684\u7535\u6e90\u6309\u94ae\u5c06\u5931\u53bb\u4f5c\u7528\u3002ATXA-B\u4e3b\u677f\u5171\u6709\u4e24\u63928PIN\u5f15\u811a\uff0c\u4e24\u6392\u5f15\u811a\u529f\u80fd\u5b8c\u5168\u76f8\u540c\u4f7f\u7528\u65f6\u65e0\u9700\u533a\u5206\u3002\u5176\u4e2d\u4e00\u6392\u5f15\u811a\u7528\u4e8eKVM\u63a7\u5236ATX\u76f8\u5173\u529f\u80fd\uff0c\u53e6\u4e00\u6392\u5f15\u811a\u63a5\u4e3b\u677f\u4e0a\u62d4\u4e0b\u6765\u7684ATX\u675c\u90a6\u5934\uff0c\u4fdd\u6301\u539f\u6709\u673a\u7bb1\u7535\u6e90\u6309\u94ae\u529f\u80fd\u3002\u6839\u636e\u4e3b\u677f\u548cATX-B\u4e0a\u7684\u5177\u4f53\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u6bcf\u6839\u7ebf\u7684\u8fde\u63a5\uff0c\u8fde\u63a5\u5173\u7cfb\u53ef\u4ee5\u53c2\u8003\u4e0b\u56fe\uff1a","title":"3. B-board"},{"location":"atx-guide/#4mechanical-diagram","text":"","title":"4.Mechanical Diagram"},{"location":"atx-guide/#5test-video","text":"youtube\uff1a ATX","title":"5.Test video"},{"location":"atx-guide/#6more-link","text":"Purchase\uff1a ATX","title":"6.More link"},{"location":"atx/","text":"ATX\u63a7\u5236\u677f \u4e3a\u4e86\u7ba1\u7406\u60a8\u7684\u8ba1\u7b97\u673a\u7684\u7535\u6e90\uff0c\u60a8\u9700\u8981\u5728\u673a\u7bb1\u5185\u5b89\u88c5\u4e00\u4e2aATX\u9002\u914d\u677f\uff0c\u5e76\u5c06\u5176\u8fde\u63a5\u5230\u4e3b\u677f\u4e0a\uff08\u4e3a\u4e86KVM\u76f4\u63a5\u901a\u8fc7ATX\u63a7\u5236\u5f00\u5173\u673a\uff09\u3002\u6709\u4e00\u6839\u4ece\u4e3b\u677f\u5230ATX\u9002\u914d\u677f\u7684\u6bcd\u5bf9\u6bcd\u7ebf\u7f06\uff0c\u4ee5\u53ca\u4e00\u4e2a\u4eceATX\u9002\u914d\u677f\u5230\u524d\u9762\u677f\u7684\u516c\u5bf9\u6bcd\u7ebf\u7f06\uff08\u4e3a\u4e86\u4f7f\u673a\u7bb1\u7684\u5f00\u5173\u673a\u6309\u94ae\u4ecd\u7136\u6709\u6548\uff09\u3002ATX\u9002\u914d\u677f\u4e0a\u6709\u4e2a\u63a5\u53e3(TO CASE, TO MB)\uff0c\u4e24\u4e2a\u63a5\u53e3\u529f\u80fd\u4e00\u6a21\u4e00\u6837\uff0c\u4f7f\u7528\u65f6\u53ef\u4ee5\u4e0d\u7528\u533a\u5206\u3002 \u7b14\u8bb0\u672c\u7535\u8111\u4e0d\u517c\u5bb9ATX\uff0c\u56e0\u4e3a\u5b83\u4eec\u7f3a\u5c11\u6240\u9700\u7684ATX\u5f15\u811a\uff0c\u6b64\u65b9\u6cd5\u4ec5\u9002\u7528\u4e8ePC\u670d\u52a1\u5668\u548c\u53f0\u5f0f\u673a\u3002 \u8be6\u7ec6\u8bf4\u660e 1. \u5c06\u4e24\u6839\u7ebf\u7f06\u8fde\u63a5\u5230ATX\u9002\u914d\u677f, \u4e3a\u4e86\u56fa\u5b9aATX\u9002\u914d\u677f\u5728\u673a\u7bb1\u4e2d\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u6321\u677f\u5c06ATX\u9002\u914d\u677f\u5b89\u88c5\u5728PCIe\u63d2\u69fd\u4e0a\u3002 Example 2. \u627e\u5230\u8d1f\u8d23\u8fde\u63a5\u673a\u7bb1\u524d\u9762\u677f\u6309\u94ae\u548cLED\u7684\u4e3b\u677f\u5f15\u811a\uff0c\u5e76\u5c06\u5176\u62d4\u51fa\u3002\u901a\u5e38\u4e3b\u677f\u4e0a\u7684\u7ebf\u7f06\u548c\u8fde\u63a5\u5668\u90fd\u6709\u6807\u8bc6\u3002\u5982\u679c\u60a8\u4e0d\u786e\u5b9a\uff0c\u53ef\u4ee5\u67e5\u9605\u60a8\u4e3b\u677f\u7684\u6587\u6863\u3002 Example 3. \u8fde\u63a5\u524d\u9762\u677f\u7684\u675c\u90a6\u6bcd\u5934\u548cATX\u7ebf\u7f06\u7684\u675c\u90a6\u516c\u5934\uff0c\u6309\u7167\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u8fde\u63a5\uff0c\u6ce8\u610f\u6807\u7b7e\u548c\u6781\u6027\uff08+\u6216-\uff09\u3002 Example 4. \u4f7f\u7528\u76f8\u540c\u7684\u65b9\u5f0f\uff0c\u5c06ATX\u677f\u7684\u6bcd\u5f15\u811a\u8fde\u63a5\u5230\u4e3b\u677f\u7684\u8fde\u63a5\u5668\u4e0a\u3002\u67e5\u9605\u60a8\u4e3b\u677f\u7684\u6587\u6863\u4ee5\u4e86\u89e3\u4e3b\u677f\u4e0a\u7684\u54ea\u4e2a\u5f15\u811a\u8fde\u63a5\u5230ATX\u9002\u914d\u677f\u7684\u54ea\u4e2a\u5f15\u811a\u3002\u6709\u65f6\u8fd9\u4e9b\u4fe1\u606f\u4f1a\u5370\u5728\u4e3b\u677f\u4e0a\u3002 Example 5. \u5c06ATX\u677f\u5b89\u88c5\u5230\u673a\u7bb1\u7684PCI\u63d2\u69fd\u4e2d\uff0c\u5e76\u7528\u87ba\u9489\u56fa\u5b9a\uff0c\u6216\u6839\u636e\u60a8\u7684\u559c\u597d\u4f7f\u7528\u5176\u4ed6\u5b89\u88c5\u65b9\u6cd5\u3002 Example 6. \u5c06\u7ebf\u7f06\u6574\u7406\u6210\u65b9\u4fbf\u7684\u65b9\u5f0f\uff0c\u5e76\u5728\u9700\u8981\u65f6\u56fa\u5b9a\u5b83\u4eec\u3002\u786e\u4fdd\u7ebf\u7f06\u4e0d\u4e0e\u673a\u7bb1\u5185\u7684\u4efb\u4f55\u98ce\u6247\u63a5\u89e6\u3002\u4f7f\u7528\u4ee5\u592a\u7f51\u7ebf\u5c06ATX\u677f\u4e0eBliKVM\u7684ATX\u63a5\u53e3\u8fde\u63a5\u8d77\u6765\u3002\u81f3\u6b64ATX\u9002\u914d\u677f\u786c\u4ef6\u90e8\u5206\u8fde\u63a5\u5df2\u5b8c\u6210\u3002","title":"ATX\u63a7\u5236\u677f"},{"location":"atx/#atx","text":"\u4e3a\u4e86\u7ba1\u7406\u60a8\u7684\u8ba1\u7b97\u673a\u7684\u7535\u6e90\uff0c\u60a8\u9700\u8981\u5728\u673a\u7bb1\u5185\u5b89\u88c5\u4e00\u4e2aATX\u9002\u914d\u677f\uff0c\u5e76\u5c06\u5176\u8fde\u63a5\u5230\u4e3b\u677f\u4e0a\uff08\u4e3a\u4e86KVM\u76f4\u63a5\u901a\u8fc7ATX\u63a7\u5236\u5f00\u5173\u673a\uff09\u3002\u6709\u4e00\u6839\u4ece\u4e3b\u677f\u5230ATX\u9002\u914d\u677f\u7684\u6bcd\u5bf9\u6bcd\u7ebf\u7f06\uff0c\u4ee5\u53ca\u4e00\u4e2a\u4eceATX\u9002\u914d\u677f\u5230\u524d\u9762\u677f\u7684\u516c\u5bf9\u6bcd\u7ebf\u7f06\uff08\u4e3a\u4e86\u4f7f\u673a\u7bb1\u7684\u5f00\u5173\u673a\u6309\u94ae\u4ecd\u7136\u6709\u6548\uff09\u3002ATX\u9002\u914d\u677f\u4e0a\u6709\u4e2a\u63a5\u53e3(TO CASE, TO MB)\uff0c\u4e24\u4e2a\u63a5\u53e3\u529f\u80fd\u4e00\u6a21\u4e00\u6837\uff0c\u4f7f\u7528\u65f6\u53ef\u4ee5\u4e0d\u7528\u533a\u5206\u3002 \u7b14\u8bb0\u672c\u7535\u8111\u4e0d\u517c\u5bb9ATX\uff0c\u56e0\u4e3a\u5b83\u4eec\u7f3a\u5c11\u6240\u9700\u7684ATX\u5f15\u811a\uff0c\u6b64\u65b9\u6cd5\u4ec5\u9002\u7528\u4e8ePC\u670d\u52a1\u5668\u548c\u53f0\u5f0f\u673a\u3002","title":"ATX\u63a7\u5236\u677f"},{"location":"atx/#_1","text":"1. \u5c06\u4e24\u6839\u7ebf\u7f06\u8fde\u63a5\u5230ATX\u9002\u914d\u677f, \u4e3a\u4e86\u56fa\u5b9aATX\u9002\u914d\u677f\u5728\u673a\u7bb1\u4e2d\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u6321\u677f\u5c06ATX\u9002\u914d\u677f\u5b89\u88c5\u5728PCIe\u63d2\u69fd\u4e0a\u3002 Example 2. \u627e\u5230\u8d1f\u8d23\u8fde\u63a5\u673a\u7bb1\u524d\u9762\u677f\u6309\u94ae\u548cLED\u7684\u4e3b\u677f\u5f15\u811a\uff0c\u5e76\u5c06\u5176\u62d4\u51fa\u3002\u901a\u5e38\u4e3b\u677f\u4e0a\u7684\u7ebf\u7f06\u548c\u8fde\u63a5\u5668\u90fd\u6709\u6807\u8bc6\u3002\u5982\u679c\u60a8\u4e0d\u786e\u5b9a\uff0c\u53ef\u4ee5\u67e5\u9605\u60a8\u4e3b\u677f\u7684\u6587\u6863\u3002 Example 3. \u8fde\u63a5\u524d\u9762\u677f\u7684\u675c\u90a6\u6bcd\u5934\u548cATX\u7ebf\u7f06\u7684\u675c\u90a6\u516c\u5934\uff0c\u6309\u7167\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u8fde\u63a5\uff0c\u6ce8\u610f\u6807\u7b7e\u548c\u6781\u6027\uff08+\u6216-\uff09\u3002 Example 4. \u4f7f\u7528\u76f8\u540c\u7684\u65b9\u5f0f\uff0c\u5c06ATX\u677f\u7684\u6bcd\u5f15\u811a\u8fde\u63a5\u5230\u4e3b\u677f\u7684\u8fde\u63a5\u5668\u4e0a\u3002\u67e5\u9605\u60a8\u4e3b\u677f\u7684\u6587\u6863\u4ee5\u4e86\u89e3\u4e3b\u677f\u4e0a\u7684\u54ea\u4e2a\u5f15\u811a\u8fde\u63a5\u5230ATX\u9002\u914d\u677f\u7684\u54ea\u4e2a\u5f15\u811a\u3002\u6709\u65f6\u8fd9\u4e9b\u4fe1\u606f\u4f1a\u5370\u5728\u4e3b\u677f\u4e0a\u3002 Example 5. \u5c06ATX\u677f\u5b89\u88c5\u5230\u673a\u7bb1\u7684PCI\u63d2\u69fd\u4e2d\uff0c\u5e76\u7528\u87ba\u9489\u56fa\u5b9a\uff0c\u6216\u6839\u636e\u60a8\u7684\u559c\u597d\u4f7f\u7528\u5176\u4ed6\u5b89\u88c5\u65b9\u6cd5\u3002 Example 6. \u5c06\u7ebf\u7f06\u6574\u7406\u6210\u65b9\u4fbf\u7684\u65b9\u5f0f\uff0c\u5e76\u5728\u9700\u8981\u65f6\u56fa\u5b9a\u5b83\u4eec\u3002\u786e\u4fdd\u7ebf\u7f06\u4e0d\u4e0e\u673a\u7bb1\u5185\u7684\u4efb\u4f55\u98ce\u6247\u63a5\u89e6\u3002\u4f7f\u7528\u4ee5\u592a\u7f51\u7ebf\u5c06ATX\u677f\u4e0eBliKVM\u7684ATX\u63a5\u53e3\u8fde\u63a5\u8d77\u6765\u3002\u81f3\u6b64ATX\u9002\u914d\u677f\u786c\u4ef6\u90e8\u5206\u8fde\u63a5\u5df2\u5b8c\u6210\u3002","title":"\u8be6\u7ec6\u8bf4\u660e"},{"location":"dev-v4/","text":"\u9700\u6267\u884c\u4e0b\u9762\u547d\u4ee4\uff0c\u5426\u5219apt-get update \u548c apt-get upgrade\u540e\u955c\u50cf\u4f1a\u65e0\u6cd5\u542f\u52a8 apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64","title":"Dev v4"},{"location":"dev-v4/#apt-get-update-apt-get-upgrade","text":"apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64","title":"\u9700\u6267\u884c\u4e0b\u9762\u547d\u4ee4\uff0c\u5426\u5219apt-get update \u548c apt-get upgrade\u540e\u955c\u50cf\u4f1a\u65e0\u6cd5\u542f\u52a8"},{"location":"dev_api/","text":"API \u7533\u660e: \u6b64API\u4e3a\u5b9e\u9a8c\u6027\u7684\uff0c\u4efb\u4f55\u65f6\u5019\u90fd\u6709\u53ef\u80fd\u88ab\u6539\u53d8!\u6b64\u6587\u6863\u53ea\u5728v1.4.0\u548c\u4e4b\u524d\u7248\u672c\u6709\u6548\uff0c\u5373\u5c06\u66f4\u65b0. \u6b64\u6587\u6863\u4e3aBLIKVM OS\u7684http API\u5f00\u53d1\u624b\u518c\uff0c\u82e5\u60a8\u6709\u65b0\u7684API\u9700\u6c42\u4e0d\u5728\u6b64\u6587\u6863\u4e2d\uff0c\u53ef\u4ee5\u5728github\u4e2d\u63d0pr\u83b7\u5f97\u652f\u6301\u3002\u8bf7\u6c42URL\u4e2d\u7684kvmip\u9700\u6839\u636e\u4f60kvm\u7684ip\u5b9e\u9645\u66ff\u6362\u3002 \u767b\u5f55\u8ba4\u8bc1 \u6b64API\u7528\u4e8e\u7528\u6237\u767b\u5f55\uff0c\u5e76\u8fd4\u56de\u8bbf\u95ee\u4ee4\u724c\u3002\u540e\u7eed\u6709\u7684api\u5747\u9700\u8981token\u4ee4\u724c\u3002 \u8bf7\u6c42URL: http://kvmip/login_api \u8bf7\u6c42\u65b9\u6cd5: GET \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f,\u5982: { \"username\": \"admin\", \"password\": \"admin\" } \u54cd\u5e94\u7ed3\u679c\u5982\u4e0b\uff0c\u82e5status\u4e0d\u4e3a1\uff0c\u5219\u8ba4\u8bc1\u5931\u8d25\u3002 { \"status\": 1, \"info\": \"login success\", \"data\": { \"token\": \"2sscdada6a97a774fcd4714c\" } } ATX\u5f00\u5173\u673a \u6b64API\u7528\u4e8e\u63a7\u5236\u76ee\u6807\u8bbe\u5907\u5f00\u5173\u673a\uff0c\u548c\u91cd\u542f\u3002 - \u8bf7\u6c42URL: http://kvmip/atx - \u8bf7\u6c42\u65b9\u6cd5: POST - \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f: 1. \u5176\u4e2dcmd\u4e3a128\u4e3a\u5f00\u5173\u673a(\u5373\u5f00\u673a\u7684\u60c5\u51b5\u4e0b\u6a21\u62df\u7684\u4e3a\u77ed\u6309\u5173\u673a\uff0c\u5173\u673a\u7684\u60c5\u51b5\u4e0b\u4e3a\u77ed\u6309\u5f00\u673a); 2. 192\u4e3a\u5f3a\u5236\u5173\u673a(\u6a21\u62df\u957f\u6309\u5f3a\u5236\u5173\u673a); 3. cmd\u4e3a8\u8868\u793a\u91cd\u542f\u3002\u5982: { \"cmd\": 128 } \u54cd\u5e94\u7ed3\u679c\u5982\u4e0b\uff0c\u82e5status\u4e0d\u4e3a1\uff0c\u5219\u5931\u8d25\u3002 { \"status\": 1, \"info\": \"success\", } mjepg\u56fe\u50cf \u6b64API\u7528\u4e8e\u5728\u56fe\u50cf\u6a21\u5f0f\u4e3amjepg\u7684\u6a21\u5f0f\u4e0b\uff0c\u62ff\u5230mjpeg\u7684\u89c6\u5c4f\u6d41\u3002 - \u8bf7\u6c42URL: http://kvmip:8008/stream \uff0c\u6b64API\u7528\u4e8e\u5728\u56fe\u50cf\u6a21\u5f0f\u4e3amjepg\u7684\u6a21\u5f0f\u4e0b\uff0c\u62ff\u5230mjpeg\u7684\u4e00\u5e27\u56fe\u7247\u3002 - \u8bf7\u6c42URL: http://kvmip:8008/snapshot - \u8bf7\u6c42\u65b9\u6cd5: GET \u952e\u76d8 \u952e\u76d8\u5177\u4f53\u7f16\u7801\u53ef\u53c2\u8003 \"KeyA\"=> 4, \"KeyB\"=> 5, \"KeyC\"=> 6, \"KeyD\"=> 7, \"KeyE\"=> 8, \"KeyF\"=> 9, \"KeyG\"=> 10, \"KeyH\"=> 11, \"KeyI\"=> 12, \"KeyJ\"=> 13, \"KeyK\"=> 14, \"KeyL\"=> 15, \"KeyM\"=> 16, \"KeyN\"=> 17, \"KeyO\"=> 18, \"KeyP\"=> 19, \"KeyQ\"=> 20, \"KeyR\"=> 21, \"KeyS\"=> 22, \"KeyT\"=> 23, \"KeyU\"=> 24, \"KeyV\"=> 25, \"KeyW\"=> 26, \"KeyX\"=> 27, \"KeyY\"=> 28, \"KeyZ\"=> 29, \"Digit1\"=> 30, \"Digit2\"=> 31, \"Digit3\"=> 32, \"Digit4\"=> 33, \"Digit5\"=> 34, \"Digit6\"=> 35, \"Digit7\"=> 36, \"Digit8\"=> 37, \"Digit9\"=> 38, \"Digit0\"=> 39, \"Enter\"=> 40, \"Escape\"=> 41, \"Backspace\"=> 42, \"Tab\"=> 43, \"Space\"=> 44, \"Minus\"=> 45, \"Equal\"=> 46, \"BracketLeft\"=> 47, \"BracketRight\"=> 48, \"Backslash\"=> 49, \"Semicolon\"=> 51, \"Quote\"=> 52, \"Backquote\"=> 53, \"Comma\"=> 54, \"Period\"=> 55, \"Slash\"=> 56, \"CapsLock\"=> 57, \"F1\"=> 58, \"F2\"=> 59, \"F3\"=> 60, \"F4\"=> 61, \"F5\"=> 62, \"F6\"=> 63, \"F7\"=> 64, \"F8\"=> 65, \"F9\"=> 66, \"F10\"=> 67, \"F11\"=> 68, \"F12\"=> 69, \"PrtSc\"=> 70, \"ScrollLock\"=> 71, \"Pause\"=> 72, \"Insert\"=> 73, \"Home\"=> 74, \"PageUp\"=> 75, \"Delete\"=> 76, \"End\"=> 77, \"PageDown\"=> 78, \"ArrowRight\"=> 79, \"ArrowLeft\"=> 80, \"ArrowDown\"=> 81, \"ArrowUp\"=> 82, \"NumLock\"=> 83, \"NumpadDivide\"=> 84, \"NumpadMultiply\"=> 85, \"NumpadSubtract\"=> 86, \"NumpadAdd\"=> 87, \"NumpadEnter\"=> 88, \"Numpad1\"=> 89, \"Numpad2\"=> 90, \"Numpad3\"=> 91, \"Numpad4\"=> 92, \"Numpad5\"=> 93, \"Numpad6\"=> 94, \"Numpad7\"=> 95, \"Numpad8\"=> 96, \"Numpad9\"=> 97, \"Numpad0\"=> 98, \"NumpadDecimal\"=> 99 \u8bf7\u6c42URL: http://kvmip/keyboard \u8bf7\u6c42\u65b9\u6cd5: GET \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f,keycodes\u4e3a\u5b57\u7b26\u4e32\u6570\u7ec4\uff0c\u652f\u6301\u4e00\u6b21\u8f93\u5165\u591a\u4e2a,\u5982: { \"keycodes\": [\"Digit1\"] } \u54cd\u5e94\u7ed3\u679c\u5982: { \"status\": 1, \"info\": \"key input success\", \"data\": [] }","title":"http API"},{"location":"dev_api/#api","text":"\u7533\u660e: \u6b64API\u4e3a\u5b9e\u9a8c\u6027\u7684\uff0c\u4efb\u4f55\u65f6\u5019\u90fd\u6709\u53ef\u80fd\u88ab\u6539\u53d8!\u6b64\u6587\u6863\u53ea\u5728v1.4.0\u548c\u4e4b\u524d\u7248\u672c\u6709\u6548\uff0c\u5373\u5c06\u66f4\u65b0. \u6b64\u6587\u6863\u4e3aBLIKVM OS\u7684http API\u5f00\u53d1\u624b\u518c\uff0c\u82e5\u60a8\u6709\u65b0\u7684API\u9700\u6c42\u4e0d\u5728\u6b64\u6587\u6863\u4e2d\uff0c\u53ef\u4ee5\u5728github\u4e2d\u63d0pr\u83b7\u5f97\u652f\u6301\u3002\u8bf7\u6c42URL\u4e2d\u7684kvmip\u9700\u6839\u636e\u4f60kvm\u7684ip\u5b9e\u9645\u66ff\u6362\u3002","title":"API"},{"location":"dev_api/#_1","text":"\u6b64API\u7528\u4e8e\u7528\u6237\u767b\u5f55\uff0c\u5e76\u8fd4\u56de\u8bbf\u95ee\u4ee4\u724c\u3002\u540e\u7eed\u6709\u7684api\u5747\u9700\u8981token\u4ee4\u724c\u3002 \u8bf7\u6c42URL: http://kvmip/login_api \u8bf7\u6c42\u65b9\u6cd5: GET \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f,\u5982: { \"username\": \"admin\", \"password\": \"admin\" } \u54cd\u5e94\u7ed3\u679c\u5982\u4e0b\uff0c\u82e5status\u4e0d\u4e3a1\uff0c\u5219\u8ba4\u8bc1\u5931\u8d25\u3002 { \"status\": 1, \"info\": \"login success\", \"data\": { \"token\": \"2sscdada6a97a774fcd4714c\" } }","title":"\u767b\u5f55\u8ba4\u8bc1"},{"location":"dev_api/#atx","text":"\u6b64API\u7528\u4e8e\u63a7\u5236\u76ee\u6807\u8bbe\u5907\u5f00\u5173\u673a\uff0c\u548c\u91cd\u542f\u3002 - \u8bf7\u6c42URL: http://kvmip/atx - \u8bf7\u6c42\u65b9\u6cd5: POST - \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f: 1. \u5176\u4e2dcmd\u4e3a128\u4e3a\u5f00\u5173\u673a(\u5373\u5f00\u673a\u7684\u60c5\u51b5\u4e0b\u6a21\u62df\u7684\u4e3a\u77ed\u6309\u5173\u673a\uff0c\u5173\u673a\u7684\u60c5\u51b5\u4e0b\u4e3a\u77ed\u6309\u5f00\u673a); 2. 192\u4e3a\u5f3a\u5236\u5173\u673a(\u6a21\u62df\u957f\u6309\u5f3a\u5236\u5173\u673a); 3. cmd\u4e3a8\u8868\u793a\u91cd\u542f\u3002\u5982: { \"cmd\": 128 } \u54cd\u5e94\u7ed3\u679c\u5982\u4e0b\uff0c\u82e5status\u4e0d\u4e3a1\uff0c\u5219\u5931\u8d25\u3002 { \"status\": 1, \"info\": \"success\", }","title":"ATX\u5f00\u5173\u673a"},{"location":"dev_api/#mjepg","text":"\u6b64API\u7528\u4e8e\u5728\u56fe\u50cf\u6a21\u5f0f\u4e3amjepg\u7684\u6a21\u5f0f\u4e0b\uff0c\u62ff\u5230mjpeg\u7684\u89c6\u5c4f\u6d41\u3002 - \u8bf7\u6c42URL: http://kvmip:8008/stream \uff0c\u6b64API\u7528\u4e8e\u5728\u56fe\u50cf\u6a21\u5f0f\u4e3amjepg\u7684\u6a21\u5f0f\u4e0b\uff0c\u62ff\u5230mjpeg\u7684\u4e00\u5e27\u56fe\u7247\u3002 - \u8bf7\u6c42URL: http://kvmip:8008/snapshot - \u8bf7\u6c42\u65b9\u6cd5: GET","title":"mjepg\u56fe\u50cf"},{"location":"dev_api/#_2","text":"\u952e\u76d8\u5177\u4f53\u7f16\u7801\u53ef\u53c2\u8003 \"KeyA\"=> 4, \"KeyB\"=> 5, \"KeyC\"=> 6, \"KeyD\"=> 7, \"KeyE\"=> 8, \"KeyF\"=> 9, \"KeyG\"=> 10, \"KeyH\"=> 11, \"KeyI\"=> 12, \"KeyJ\"=> 13, \"KeyK\"=> 14, \"KeyL\"=> 15, \"KeyM\"=> 16, \"KeyN\"=> 17, \"KeyO\"=> 18, \"KeyP\"=> 19, \"KeyQ\"=> 20, \"KeyR\"=> 21, \"KeyS\"=> 22, \"KeyT\"=> 23, \"KeyU\"=> 24, \"KeyV\"=> 25, \"KeyW\"=> 26, \"KeyX\"=> 27, \"KeyY\"=> 28, \"KeyZ\"=> 29, \"Digit1\"=> 30, \"Digit2\"=> 31, \"Digit3\"=> 32, \"Digit4\"=> 33, \"Digit5\"=> 34, \"Digit6\"=> 35, \"Digit7\"=> 36, \"Digit8\"=> 37, \"Digit9\"=> 38, \"Digit0\"=> 39, \"Enter\"=> 40, \"Escape\"=> 41, \"Backspace\"=> 42, \"Tab\"=> 43, \"Space\"=> 44, \"Minus\"=> 45, \"Equal\"=> 46, \"BracketLeft\"=> 47, \"BracketRight\"=> 48, \"Backslash\"=> 49, \"Semicolon\"=> 51, \"Quote\"=> 52, \"Backquote\"=> 53, \"Comma\"=> 54, \"Period\"=> 55, \"Slash\"=> 56, \"CapsLock\"=> 57, \"F1\"=> 58, \"F2\"=> 59, \"F3\"=> 60, \"F4\"=> 61, \"F5\"=> 62, \"F6\"=> 63, \"F7\"=> 64, \"F8\"=> 65, \"F9\"=> 66, \"F10\"=> 67, \"F11\"=> 68, \"F12\"=> 69, \"PrtSc\"=> 70, \"ScrollLock\"=> 71, \"Pause\"=> 72, \"Insert\"=> 73, \"Home\"=> 74, \"PageUp\"=> 75, \"Delete\"=> 76, \"End\"=> 77, \"PageDown\"=> 78, \"ArrowRight\"=> 79, \"ArrowLeft\"=> 80, \"ArrowDown\"=> 81, \"ArrowUp\"=> 82, \"NumLock\"=> 83, \"NumpadDivide\"=> 84, \"NumpadMultiply\"=> 85, \"NumpadSubtract\"=> 86, \"NumpadAdd\"=> 87, \"NumpadEnter\"=> 88, \"Numpad1\"=> 89, \"Numpad2\"=> 90, \"Numpad3\"=> 91, \"Numpad4\"=> 92, \"Numpad5\"=> 93, \"Numpad6\"=> 94, \"Numpad7\"=> 95, \"Numpad8\"=> 96, \"Numpad9\"=> 97, \"Numpad0\"=> 98, \"NumpadDecimal\"=> 99 \u8bf7\u6c42URL: http://kvmip/keyboard \u8bf7\u6c42\u65b9\u6cd5: GET \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f,keycodes\u4e3a\u5b57\u7b26\u4e32\u6570\u7ec4\uff0c\u652f\u6301\u4e00\u6b21\u8f93\u5165\u591a\u4e2a,\u5982: { \"keycodes\": [\"Digit1\"] } \u54cd\u5e94\u7ed3\u679c\u5982: { \"status\": 1, \"info\": \"key input success\", \"data\": [] }","title":"\u952e\u76d8"},{"location":"edid/","text":"EDID EDID\u6587\u4ef6\u5728BliKVM\u4e2d\u7684\u4f5c\u7528\u662f\u544a\u8bc9\u88ab\u63a7\u8ba1\u7b97\u673a\u671f\u671b\u8f93\u51fa\u7684HDMI\u5206\u8fa8\u7387\uff0c\u5373\u5982\u4f55\u4f7f\u7528\u7684\u662f1080P60Hz\u7684EDID\uff0c\u82e5\u88ab\u63a7\u8ba1\u7b97\u673a\u652f\u6301\u8f93\u51fa\u6b64\u5206\u8fa8\u7387\uff0c\u88ab\u63a7\u8ba1\u7b97\u673a\u5c31\u4f1a\u63091080P60Hz\u8f93\u51fa\u3002\u53e6\u5916\u901a\u8fc7EDID\u8fd8\u53ef\u4ee5\u5c4f\u853d\u58f0\u97f3\uff0c\u4fee\u6539\u663e\u793a\u5668\u578b\u53f7\uff0c\u540d\u5b57\uff0c\u5382\u5546\u7b49\u4fe1\u606f\u3002\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u60a8\u4e0d\u9700\u8981\u66f4\u6539\u5b83\uff0c\u4f46\u6709\u65f6\uff0c\u4f8b\u5982\u5bf9\u4e8e\u5947\u602a\u7684 UEFI/BIOS\uff0c\u53ef\u80fd\u9700\u8981\u66f4\u6539\u5b83\u3002 Note BliKVM v1 v2 v3\u4f7f\u7528\u7684\u4e3aCSI\u89c6\u9891\u91c7\u96c6\u65b9\u6848\uff0c\u652f\u6301EDID\u8bbe\u7f6e\uff0cv4\u4f7f\u7528\u7684\u662fUSB\u89c6\u9891\u91c7\u96c6\u65b9\u6848\uff0c\u4e0d\u652f\u6301EDID\u8bbe\u7f6e\uff1b \u5176\u4e2dv3 HAT\u53d7\u6811\u8393\u6d3e4B\u53ea\u67092\u901a\u9053CSI\u9650\u5236\uff0c\u6700\u9ad8\u53ea\u80fd\u91c7\u96c61080P50Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u56e0\u6b64\u82e5\u5bf9v3\u8bbe\u7f6e1080P60Hz\u7684EDID\uff0cv3\u4f1a\u65e0\u6cd5\u6355\u83b7\u5230\u56fe\u50cf\uff1b \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM OS\uff0c\u53ef\u4ee5\u53c2\u7167 \u6b64\u94fe\u63a5 \u8fdb\u884c\u4fee\u6539; \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM OS\uff0cEDID\u6587\u4ef6\u5728 /usr/bin/blikvm/edid.txt ,\u6253\u5f00\u6b64\u6587\u4ef6\uff0c\u66ff\u6362\u4e0b\u9762\u4f60\u60f3\u8981\u5206\u8fa8\u7387\u7684EDID\u6587\u4ef6\u5373\u53ef\uff1b EDID \u4f8b\u5b50 1080P60Hz \u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u548cv2\u786c\u4ef6\u3002 1920x1080 60Hz, \u5e26\u97f3\u9891 00FFFFFFFFFFFF0031D8888800888888 1C150103800000780AEE91A3544C9926 0F50543FCD0001000101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0050 694B564D0A20202020202020000000FD 003B3D0F2E0F1E0A202020202020013C 02031E434F041303021211012021A23C 3D3E1F1066030C00300080E2007F8C0A D08A20E02D10103E9600C48E21000018 8C0AD08A20E02D10103E9600138E2100 00189729A0D051842230509816009A01 11000018000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000001C EDID \u4f8b\u5b50 1080P50Hz \u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u3001v2\u3001v3\u786c\u4ef6\uff0c\u5c24\u5176\u5f53\u5e0c\u671bv3 HAT\u6355\u83b71080P\u5206\u8fa8\u7387\u65f6\u53ef\u4ee5\u4f7f\u7528\u5b83\u3002 1920x1080 50Hz, \u5e26\u97f3\u9891 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a202020202020014f 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000028 EDID \u4f8b\u5b50 720P60Hz \u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u3001v2\u3001v3\u786c\u4ef6\u3002 1280x720 60Hz, \u5e26\u97f3\u9891 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 \u81ea\u5b9a\u4e49EDID \u6700\u597d\u4f7f\u7528\u7b2c\u4e09\u65b9\u5de5\u5177\u6765\u7f16\u8f91EDID\uff0c\u6bd4\u5982\u63a8\u8350\u7684\u9ad8\u7ea7 AW EDID Editor \uff08Windows\u73af\u5883\u4e0b\u8fd0\u884c\u826f\u597d\uff0c\u4e5f\u53ef\u5728wine\u4e2d\u4f7f\u7528\uff09\u6216\u8005 wxEDID \u3002\u8fd9\u4e24\u4e2a\u7f16\u8f91\u5668\u90fd\u53ef\u4ee5\u5904\u7406\u4e8c\u8fdb\u5236\u7684EDID\u683c\u5f0f\u3002 \u4f7f\u7528\u8fd9\u4e9b\u5de5\u5177\uff0c\u60a8\u53ef\u4ee5\u50cf\u7f16\u8f91\u6587\u4ef6\u4e00\u6837\u4fee\u6539EDID\u4fe1\u606f\uff0c\u7c7b\u4f3c\u4e8e\u66f4\u6539\u8eab\u4efd\u8bc1\u4fe1\u606f\u3002\u901a\u8fc7\u7f16\u8f91EDID\uff0c\u60a8\u53ef\u4ee5\u8c03\u6574\u663e\u793a\u5668\u7684\u53c2\u6570\u548c\u7279\u6027\uff0c\u4ee5\u9002\u5e94\u4e0d\u540c\u7684\u4f7f\u7528\u9700\u6c42\uff0c\u4ece\u800c\u83b7\u5f97\u66f4\u597d\u7684\u663e\u793a\u6548\u679c\u3002","title":"HDMI EDID\u8bbe\u7f6e"},{"location":"edid/#edid","text":"EDID\u6587\u4ef6\u5728BliKVM\u4e2d\u7684\u4f5c\u7528\u662f\u544a\u8bc9\u88ab\u63a7\u8ba1\u7b97\u673a\u671f\u671b\u8f93\u51fa\u7684HDMI\u5206\u8fa8\u7387\uff0c\u5373\u5982\u4f55\u4f7f\u7528\u7684\u662f1080P60Hz\u7684EDID\uff0c\u82e5\u88ab\u63a7\u8ba1\u7b97\u673a\u652f\u6301\u8f93\u51fa\u6b64\u5206\u8fa8\u7387\uff0c\u88ab\u63a7\u8ba1\u7b97\u673a\u5c31\u4f1a\u63091080P60Hz\u8f93\u51fa\u3002\u53e6\u5916\u901a\u8fc7EDID\u8fd8\u53ef\u4ee5\u5c4f\u853d\u58f0\u97f3\uff0c\u4fee\u6539\u663e\u793a\u5668\u578b\u53f7\uff0c\u540d\u5b57\uff0c\u5382\u5546\u7b49\u4fe1\u606f\u3002\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u60a8\u4e0d\u9700\u8981\u66f4\u6539\u5b83\uff0c\u4f46\u6709\u65f6\uff0c\u4f8b\u5982\u5bf9\u4e8e\u5947\u602a\u7684 UEFI/BIOS\uff0c\u53ef\u80fd\u9700\u8981\u66f4\u6539\u5b83\u3002 Note BliKVM v1 v2 v3\u4f7f\u7528\u7684\u4e3aCSI\u89c6\u9891\u91c7\u96c6\u65b9\u6848\uff0c\u652f\u6301EDID\u8bbe\u7f6e\uff0cv4\u4f7f\u7528\u7684\u662fUSB\u89c6\u9891\u91c7\u96c6\u65b9\u6848\uff0c\u4e0d\u652f\u6301EDID\u8bbe\u7f6e\uff1b \u5176\u4e2dv3 HAT\u53d7\u6811\u8393\u6d3e4B\u53ea\u67092\u901a\u9053CSI\u9650\u5236\uff0c\u6700\u9ad8\u53ea\u80fd\u91c7\u96c61080P50Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u56e0\u6b64\u82e5\u5bf9v3\u8bbe\u7f6e1080P60Hz\u7684EDID\uff0cv3\u4f1a\u65e0\u6cd5\u6355\u83b7\u5230\u56fe\u50cf\uff1b \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM OS\uff0c\u53ef\u4ee5\u53c2\u7167 \u6b64\u94fe\u63a5 \u8fdb\u884c\u4fee\u6539; \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM OS\uff0cEDID\u6587\u4ef6\u5728 /usr/bin/blikvm/edid.txt ,\u6253\u5f00\u6b64\u6587\u4ef6\uff0c\u66ff\u6362\u4e0b\u9762\u4f60\u60f3\u8981\u5206\u8fa8\u7387\u7684EDID\u6587\u4ef6\u5373\u53ef\uff1b","title":"EDID"},{"location":"edid/#edid-1080p60hz","text":"\u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u548cv2\u786c\u4ef6\u3002 1920x1080 60Hz, \u5e26\u97f3\u9891 00FFFFFFFFFFFF0031D8888800888888 1C150103800000780AEE91A3544C9926 0F50543FCD0001000101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0050 694B564D0A20202020202020000000FD 003B3D0F2E0F1E0A202020202020013C 02031E434F041303021211012021A23C 3D3E1F1066030C00300080E2007F8C0A D08A20E02D10103E9600C48E21000018 8C0AD08A20E02D10103E9600138E2100 00189729A0D051842230509816009A01 11000018000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000001C","title":"EDID \u4f8b\u5b50 1080P60Hz"},{"location":"edid/#edid-1080p50hz","text":"\u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u3001v2\u3001v3\u786c\u4ef6\uff0c\u5c24\u5176\u5f53\u5e0c\u671bv3 HAT\u6355\u83b71080P\u5206\u8fa8\u7387\u65f6\u53ef\u4ee5\u4f7f\u7528\u5b83\u3002 1920x1080 50Hz, \u5e26\u97f3\u9891 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a202020202020014f 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000028","title":"EDID \u4f8b\u5b50 1080P50Hz"},{"location":"edid/#edid-720p60hz","text":"\u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u3001v2\u3001v3\u786c\u4ef6\u3002 1280x720 60Hz, \u5e26\u97f3\u9891 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000","title":"EDID \u4f8b\u5b50 720P60Hz"},{"location":"edid/#edid_1","text":"\u6700\u597d\u4f7f\u7528\u7b2c\u4e09\u65b9\u5de5\u5177\u6765\u7f16\u8f91EDID\uff0c\u6bd4\u5982\u63a8\u8350\u7684\u9ad8\u7ea7 AW EDID Editor \uff08Windows\u73af\u5883\u4e0b\u8fd0\u884c\u826f\u597d\uff0c\u4e5f\u53ef\u5728wine\u4e2d\u4f7f\u7528\uff09\u6216\u8005 wxEDID \u3002\u8fd9\u4e24\u4e2a\u7f16\u8f91\u5668\u90fd\u53ef\u4ee5\u5904\u7406\u4e8c\u8fdb\u5236\u7684EDID\u683c\u5f0f\u3002 \u4f7f\u7528\u8fd9\u4e9b\u5de5\u5177\uff0c\u60a8\u53ef\u4ee5\u50cf\u7f16\u8f91\u6587\u4ef6\u4e00\u6837\u4fee\u6539EDID\u4fe1\u606f\uff0c\u7c7b\u4f3c\u4e8e\u66f4\u6539\u8eab\u4efd\u8bc1\u4fe1\u606f\u3002\u901a\u8fc7\u7f16\u8f91EDID\uff0c\u60a8\u53ef\u4ee5\u8c03\u6574\u663e\u793a\u5668\u7684\u53c2\u6570\u548c\u7279\u6027\uff0c\u4ee5\u9002\u5e94\u4e0d\u540c\u7684\u4f7f\u7528\u9700\u6c42\uff0c\u4ece\u800c\u83b7\u5f97\u66f4\u597d\u7684\u663e\u793a\u6548\u679c\u3002","title":"\u81ea\u5b9a\u4e49EDID"},{"location":"faq/","text":"FAQ & \u6545\u969c\u6392\u9664 \u4f5c\u4e3a\u7b2c\u4e00\u6b65\uff0c\u6211\u4eec\u5efa\u8bae\u4ed4\u7ec6\u9605\u8bfb\u6211\u4eec\u7684\u6587\u6863\u3002\u5927\u90e8\u5206\u8bbe\u7f6eBLIKVM\u6240\u9700\u7684\u6b65\u9aa4\u5df2\u7ecf\u5728\u6587\u6863\u4e2d\u63cf\u8ff0\u4e86\u3002\u5982\u679c\u60a8\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u60a8\u53ef\u4ee5\u67e5\u770b\u672c\u9875\uff0c\u5176\u4e2d\u5217\u51fa\u4e86\u5e38\u89c1\u9519\u8bef\u3002\u5982\u679c\u4ecd\u7136\u65e0\u6cd5\u89e3\u51b3\u95ee\u9898\uff0c\u6b22\u8fce\u63d0\u4ea4 \u95ee\u9898\u53cd\u9988 \u6216 \u52a0\u5165\u6211\u4eec\u7684Discord \u5bfb\u6c42\u8fdb\u4e00\u6b65\u5e2e\u52a9\u3002 \u5e38\u89c1\u95ee\u9898 \u6211\u53ef\u4ee5\u5c06\u591a\u53f0\u670d\u52a1\u5668\u8fde\u63a5\u5230\u5355\u4e2aBLIKVM\u5417\uff1f \u53ef\u4ee5\uff0c\u4f46\u9700\u8981\u8fdb\u884c\u989d\u5916\u7684\u8bbe\u7f6e\u5de5\u4f5c\u3002\u8bf7\u53c2\u8003 \u6b64\u9875\u9762 \u3002 \u5982\u4f55\u5728\u672c\u5730\u7f51\u7edc\u4e0a\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95eeBliKVM\uff1f \u5982\u679c\u60a8\u7684\u8def\u7531\u5668\u5177\u6709\u5916\u90e8IP\u5730\u5740\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u7aef\u53e3\u8f6c\u53d1\u6765\u8f6c\u53d180\u7aef\u53e3(Web),8008\u7aef\u53e3(mjpeg)\uff0c8188\u7aef\u53e3\uff08webrtc\uff09\u3002\u5728\u5176\u4ed6\u60c5\u51b5\u4e0b\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u51fa\u8272\u7684\u514d\u8d39VPN\u670d\u52a1Tailscale\u3002 BLiKVM\u6709\u591a\u6b3e\u786c\u4ef6\uff0c\u5982BliKVM V1 CM4\u3001BliKVM V2 PCIe\u3001BliKVM V3 Hat\uff0c\u6211\u5e94\u8be5\u9009\u54ea\u6b3e\uff1f \u9996\u5148\u5404\u4e2a\u7248\u672c\u7684\u4e3b\u8981\u53c2\u6570\u5bf9\u6bd4\u8bf7\u53c2\u8003 \u6b64\u9875\u9762 \u3002 V1\u548cV3\u5c5e\u4e8e\u5916\u7f6e\u65b9\u6848\uff0cV2\u5c5e\u4e8e\u5185\u7f6e\u673a\u7bb1\u65b9\u6848\u3002\u5982\u679c\u60a8\u662f\u673a\u7bb1\u5f62\u5f0f\uff0c\u5e76\u4e14\u673a\u7bb1\u5185\u90e8\u6709\u7a7a\u95f4\uff0c\u90a3\u4e48\u6beb\u65e0\u7591\u95ee\u9009\u62e9V2 PCIe\u7248\u672c\u662f\u8f83\u597d\u7684\u9009\u62e9\u3002 \u90a3\u4e48V1\u548cV3\u4e24\u4e2a\u5916\u7f6e\u65b9\u6848\u5982\u4f55\u9009\u62e9\u5462\uff0cV1\u57fa\u4e8eCM4\u7684\u65b9\u6848\uff0c\u96c6\u6210\u5ea6\u66f4\u9ad8\uff0c\u6709\u5230\u624b\u53ef\u7528\u7248\u672c\u3002V3\u57fa\u4e8e\u6811\u8393\u6d3e4B\u65b9\u6848\uff0c\u6240\u6709IO\u53e3\u5747\u5f15\u51fa\uff0c\u53ef\u6269\u5c55\u6027\u66f4\u5f3a\u3002\u4e24\u8005\u7684\u53e6\u4e00\u4e2a\u6838\u5fc3\u533a\u522b\u5c31\u662fV1\u6700\u9ad8\u652f\u63011080P60Hz\u8f93\u5165\uff0cV3\u6700\u9ad8\u652f\u63011080P50Hz\u8f93\u5165\u3002\u5f53\u7136\u540c\u65f6\u9700\u8981\u8003\u8651\u60a8\u662f\u5df2\u5426\u6709CM4\u6216\u80054B\uff0c\u5982\u679c\u6709\u7684\u8bdd\u53ea\u4e70\u5bf9\u5e94\u7684\u5e95\u677f\uff0c\u6027\u4ef7\u6bd4\u66f4\u9ad8\u3002 \u6211\u53ef\u4ee5\u7528BLIKVM\u8fdb\u884c\u6e38\u620f\u5417\uff1f \u4e0d\u53ef\u4ee5\uff0c\u539f\u56e0\u5982\u4e0b\uff1a \u5bf9\u4e8eHDMI-CSI\u6865\u63a5\u5668\uff0c\u603b\u7ebf\u5e26\u5bbd\u4e0d\u8db3\u4ee5\u4f20\u8f93\u8d85\u8fc71080p60\u7684\u89c6\u9891\u3002 \u5bf9\u4e8eHDMI-USB\u8f6c\u6362\u5668\uff0c\u5ef6\u8fdf\u8f83\u9ad8\u4e14\u89c6\u9891\u8d28\u91cf\u8f83\u4f4e\u3002 \u4e00\u822c\u7684\u786c\u4ef6\u89c6\u9891\u6355\u83b7\u4e0e\u8f6f\u4ef6\u6d41\u5a92\u4f53\u6709\u6240\u4e0d\u540c\uff0c\u4f1a\u5f15\u5165\u989d\u5916\u7684\u5ef6\u8fdf\u3002 BLIKVM\u652f\u63014K\u89c6\u9891\u5417\uff1f \u5bf9\u4e8eHDMI-CSI\u6865\u63a5\u5668\uff0c\u4e0d\u652f\u6301\u3002CSI\u603b\u7ebf\u7684\u5e26\u5bbd\u4e0d\u8db3\u4ee5\u5904\u7406\u5982\u6b64\u5927\u91cf\u7684\u6570\u636e\u30021080p60\u662f\u5e26\u5bbd\u7684\u4e0a\u9650\u3002 \u5bf9\u4e8eUSB\u6355\u83b7\u8bbe\u5907\uff1a\u4ece\u6280\u672f\u4e0a\u8bb2\uff0c\u662f\u53ef\u4ee5\u7684\uff0c\u4f46\u5b83\u4eec\u4f1a\u964d\u4f4e\u5206\u8fa8\u7387\u4ee5\u9002\u5e94USB 2.0\u7684\u5e26\u5bbd\u9650\u5236\uff0c\u56e0\u6b64\u6d41\u5a92\u4f53\u7684\u5206\u8fa8\u7387\u4e0d\u4f1a\u662f4K\u3002 \u65e0\u8bba\u5982\u4f55\uff0c4K\u5b9e\u65f6\u89c6\u9891\u4e5f\u65e0\u6cd5\u901a\u8fc7\u7f51\u7edc\u4f20\u8f93\u3002 \u5149\u6807/\u89c6\u9891\u5ef6\u8fdf\u662f\u7531\u4ec0\u4e48\u5f15\u8d77\u7684\uff1f \u56fe\u50cf\u4f20\u8f93\u5230\u6d4f\u89c8\u5668\u6216VNC\u5ba2\u6237\u7aef\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a \u6355\u83b7\u8bbe\u5907 -> \u538b\u7f29 -> \u7f51\u7edc -> \u89e3\u538b\u7f29 -> \u6e32\u67d3 \u5728\u6b64\u8fc7\u7a0b\u4e2d\uff0c100-200ms\u7684\u5ef6\u8fdf\u5df2\u7ecf\u975e\u5e38\u5feb\u901f\u4e86\u3002\u4f46\u6211\u4eec\u6b63\u5728\u52aa\u529b\u8fdb\u4e00\u6b65\u63d0\u9ad8\u901f\u5ea6\u3002 BLIKVM\u652f\u6301\u97f3\u9891\u5417\uff1f BliKVM v1 CM4, v2 PCIe, v3 HAT\u7248\u672c\u652f\u6301\uff0c v4 Allwinner\u7248\u672c\u4e0d\u652f\u6301\u3002 \u6211\u53ef\u4ee5\u901a\u8fc7PoE\u7ed9Pi\u4f9b\u7535\u5417\uff1f \u53ef\u4ee5\uff01Hat\u7248\u672c\u548cPCIe\u7248\u672c\u90fd\u652f\u6301PoE\u3002 \u7b2c\u4e00\u6b65 \u9ed8\u8ba4\u5bc6\u7801\u662f\u4ec0\u4e48\uff1f\u5982\u4f55\u66f4\u6539\u5bc6\u7801\uff1f \u5982\u679c\u60a8\u4f7f\u7528PiKVM\uff0c\u6709\u4e24\u79cd\u7c7b\u578b\u7684\u5e10\u6237\uff1a\u64cd\u4f5c\u7cfb\u7edf\u5e10\u6237\u548cPiKVM\uff08Web\u754c\u9762\uff09\u5e10\u6237\u3002\u7cfb\u7edf\u5e10\u6237 root \u53ef\u7528\u4e8eSSH/UART\u8bbf\u95ee\uff0c\u5bc6\u7801\u4e3a root \u3002Web\u754c\u9762\u5e10\u6237\u79f0\u4e3a admin \uff0c\u5bc6\u7801\u4e3a admin \u3002PiKVM\u5e10\u6237\u4e0d\u80fd\u7528\u4e8eSSH\u8bbf\u95ee\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002 \u8981\u66f4\u6539\u5bc6\u7801\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff08\u5728root\u7528\u6237\u4e0b\uff09\uff1a su - # \u5982\u679c\u60a8\u5728Webterm\u4e2d rw # \u5207\u6362\u6587\u4ef6\u7cfb\u7edf\u4e3a\u8bfb\u5199\u6a21\u5f0f passwd root # \u66f4\u6539\u64cd\u4f5c\u7cfb\u7edfroot\u5bc6\u7801 kvmd-htpasswd set admin # \u66f4\u6539Web\u754c\u9762\u7ba1\u7406\u5458\u5bc6\u7801 ro # \u5207\u6362\u56de\u53ea\u8bfb\u6a21\u5f0f \u5982\u679c\u60a8\u4f7f\u7528\u7684\u662fBliKVM\uff0cWeb\u754c\u9762\u5e10\u6237\u79f0\u4e3a admin \uff0c\u5bc6\u7801\u4e3a admin ,\u7ec8\u7aef\u7528\u6237\u540d\u79f0\u4e3a blikvm \uff0c\u5bc6\u7801\u4e3a blikvm \u3002 \u5982\u4f55\u6dfb\u52a0\u53e6\u4e00\u4e2a\u7528\u6237\uff1f \u5982\u679c\u60a8\u4f7f\u7528PiKVM\u8f6f\u4ef6\uff0c\u5982\u4e0a\u6240\u8ff0\uff0c\u60a8\u9700\u8981\u521b\u5efa2\u4e2a\u5e10\u6237\uff0c\u4e00\u4e2a\u7528\u4e8eShell\uff0c\u53e6\u4e00\u4e2a\u7528\u4e8ePiKVM Web\u754c\u9762\u3002 \u5982\u679c\u60a8\u9700\u8981\u4e3aPiKVM Web\u754c\u9762\u6dfb\u52a0\u5176\u4ed6\u7528\u6237\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff1a # rw # su - # kvmd-htpasswd set # \u6dfb\u52a0\u65b0\u7528\u6237 # kvmd-htpasswd set # \u8bbe\u7f6e\u5bc6\u7801\uff08\u53ea\u8981\u7528\u6237\u5b58\u5728\uff09 # kvmd-htpasswd del # \u5220\u9664\u7528\u6237 \u8981\u6dfb\u52a0Shell/\u7ec8\u7aef\u5e10\u6237\uff1a # rw # su - # adduser # passwd \u8bf7\u6ce8\u610f\uff0c\u6dfb\u52a0\u7684\u7528\u6237\u8d8a\u591a\uff0c\u8bbf\u95ee\u6d41\u5a92\u4f53\u65f6\u5e27\u7387\u4f1a\u964d\u4f4e\u3002 \u89c6\u9891\u95ee\u9898 BLIKVM\u6839\u672c\u6ca1\u6709\u663e\u793a\u6765\u81ea\u8ba1\u7b97\u673a\u7684\u89c6\u9891 \u8bf7\u4ed4\u7ec6\u68c0\u67e5\u89c6\u9891\u6355\u83b7\u8bbe\u5907\u7684\u8fde\u63a5\u60c5\u51b5\u3002\u5bf9\u4e8eCSI\u6865\u63a5\u5668\uff0c\u5e94\u8fde\u63a5\u5230\u76f8\u673a\u7aef\u53e3\u3002 \u6709\u4e9b\u7b14\u8bb0\u672c\u7535\u8111\u5728\u60a8\u5207\u6362\u8f93\u51fa\u4e4b\u524d\uff08\u901a\u5e38\u901a\u8fc7\u952e\u76d8\u4e0a\u7684FN +\u548cF5\u952e\uff09\u4e0d\u4f1a\u8f93\u51fa\u4efb\u4f55\u4fe1\u53f7\u3002 \u60a8\u7684\u8ba1\u7b97\u673a\u53ef\u80fd\u5df2\u7ecf\u5c06\u663e\u793a\u5668\u8bbe\u7f6e\u4e3a\u7761\u7720\u6a21\u5f0f\u3002\u79fb\u52a8\u9f20\u6807\u4ee5\u5173\u95ed\u7761\u7720\u6a21\u5f0f\u3002 \u5bf9\u4e8eWindows\u7cfb\u7edf\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u68c0\u67e5\u6d3b\u52a8\u4fe1\u53f7\u5206\u8fa8\u7387\u3002\u8981\u66f4\u6539\u6d3b\u52a8\u4fe1\u53f7\u5206\u8fa8\u7387\uff0c\u8bf7\u8f6c\u5230\u201c\u8bbe\u7f6e\u201d>\u201c\u7cfb\u7edf\u201d>\u201c\u663e\u793a\u201d>\u201c\u9ad8\u7ea7\u663e\u793a\u8bbe\u7f6e\u201d>\u201c\u663e\u793a\u9002\u914d\u5668\u5c5e\u6027\u201d\uff0c\u7136\u540e\u70b9\u51fb\u201c\u5217\u51fa\u6240\u6709\u6a21\u5f0f\u201d\uff0c\u9009\u62e9\u6240\u9700\u7684\u6a21\u5f0f\u3002\u5c1d\u8bd5\u4e0d\u540c\u7684\u5237\u65b0\u7387\u8bbe\u7f6e\u3002 \u5728\u5df2\u542f\u52a8\u7684\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u53ef\u4ee5\u770b\u5230\u89c6\u9891\uff0c\u4f46\u5728BIOS/UEFI\u4e2d\u770b\u4e0d\u5230 \u5f53\u4f7f\u7528CSI\u6865\u63a5\u5668\u65f6\uff0cIntel NUC\u3001GA-H77-DS3H\u548c\u4e00\u4e9b\u5176\u4ed6\u8bbe\u5907\u4e0a\u4f1a\u51fa\u73b0\u6b64\u95ee\u9898\u3002\u60a8\u53ea\u9700\u8981\u66f4\u6539EDID\u6570\u636e\uff0c\u8fd9\u662fCSI\u6865\u63a5\u5668\u5411\u8ba1\u7b97\u673a\u62a5\u544a\u7684\u652f\u6301\u7684\u5206\u8fa8\u7387\u4fe1\u606f\u3002 BIOS/UEFI\u5206\u8fa8\u7387\u51fa\u73b0\u6545\u969c\u6216\u9519\u8bef \u5728\u67d0\u4e9b\u4e3b\u677f\u4e0a\uff0cBIOS\u53ef\u80fd\u4ee5\u8f83\u4f4e\u7684\u5206\u8fa8\u7387\u663e\u793a\uff0c\u6216\u51fa\u73b0\u4e00\u4e9b\u6e32\u67d3\u95ee\u9898/\u6545\u969c\uff0c\u7279\u522b\u662f\u5728\u8f83\u65b0\u7684ASUS\u4e3b\u677f\u4e0a\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u60a8\u53ef\u4ee5\u901a\u8fc7\u5728BIOS\u4e2d\u542f\u7528 \u517c\u5bb9\u6027\u652f\u6301\u6a21\u5757\uff08CSM\uff09 \u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u901a\u5e38\u4f4d\u4e8e \u5f15\u5bfc \u9009\u9879\u4e0b\u3002 \u5982\u679c\u60a8\u65e0\u6cd5\u6216\u4e0d\u60f3\u542f\u7528CSM\uff0c\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u8fde\u63a5\u4e00\u4e2aDisplayPort\uff08DP\uff09\u663e\u793a\u5668\u6216 \u865a\u62df\u63d2\u5934 \u3002\u5982\u679c\u62d4\u6389DP\u7535\u7f06/\u8f6c\u63a5\u5668\uff0c\u95ee\u9898\u5c06\u91cd\u65b0\u51fa\u73b0\u3002 \u5982\u679c\u4e0a\u8ff0\u65b9\u6cd5\u90fd\u4e0d\u8d77\u4f5c\u7528\uff0c\u8bf7\u5c1d\u8bd5\u5148\u8fde\u63a5DP\u7535\u7f06\uff0c\u7136\u540e\u542f\u52a8\u5230BIOS\uff0c\u7981\u7528CSM\u5e76\u5173\u673a\uff08\u4e0d\u8981\u91cd\u65b0\u542f\u52a8\uff09\u60a8\u7684\u8ba1\u7b97\u673a\u3002\u7136\u540e\uff0c\u5728\u518d\u6b21\u542f\u52a8\u5230BIOS\u5e76\u542f\u7528CSM\u4e4b\u524d\uff0c\u8fde\u63a5HDMI\u5e76\u518d\u6b21\u6253\u5f00\u8ba1\u7b97\u673a\u3002 GRUB2\u4e2d\u6ca1\u6709\u89c6\u9891\uff0c\u4f46\u4e4b\u524d\u548c\u4e4b\u540e\u90fd\u6709 \u6709\u65f6\u8fd9\u53ef\u80fd\u662f\u7531\u4e8eBIOS/UEFI\u7684\u7279\u5b9a\u95ee\u9898\u4ee5\u53caGRUB2\u4e0e\u89c6\u9891\u7684\u5de5\u4f5c\u65b9\u5f0f\u6240\u5bfc\u81f4\u7684\u3002 \u60a8\u53ef\u4ee5\u901a\u8fc7\u5728BIOS\u4e2d\u542f\u7528 \u517c\u5bb9\u6027\u652f\u6301\u6a21\u5757\uff08CSM\uff09 \u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u901a\u5e38\u4f4d\u4e8e \u5f15\u5bfc \u9009\u9879\u4e0b\u3002\u89c6\u9891\u6a21\u5f0f\u4e5f\u4f4d\u4e8e\u540c\u4e00\u90e8\u5206\u3002\u5c06 \u89c6\u9891 \u6a21\u5f0f\u4ece UEFI \u5207\u6362\u4e3a Legacy \u3002 Linux + Awesome WM\u6ca1\u6709\u8ba1\u7b97\u673a\u56fe\u50cf \u6709\u65f6\uff0c\u5728Linux\u4e0a\u4f7f\u7528Awesome WM\u53ef\u80fd\u65e0\u6cd5\u8bc6\u522b\u7535\u7f06\u7684\u89c6\u9891\u8f93\u51fa\u66f4\u6539\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u7535\u7f06\u5148\u63d2\u5165\u663e\u793a\u5668\uff0c\u7136\u540e\u518d\u8fde\u63a5\u5230BLIKVM\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u60a8\u770b\u4e0d\u5230\u56fe\u50cf\u3002\u8fd9\u4f3c\u4e4e\u662fAwesome WM\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u4f8b\u5982\u5728KDE\u4e2d\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u590d\u73b0\u3002\u5982\u679c\u60a8\u5728\u8fde\u63a5BLIKVM\u540e\u542f\u52a8\u5de5\u4f5c\u7ad9\uff0c\u4e00\u5207\u90fd\u5c06\u6b63\u5e38\u5de5\u4f5c\u3002 USB\u95ee\u9898\uff08\u952e\u76d8\u3001\u9f20\u6807\u3001U\u76d8\u7b49\uff09 USB OTG\u7aef\u53e3\u7684\u901f\u5ea6\u662f\u591a\u5c11\uff1f \u6839\u636e\u5b98\u65b9\u7684RPI\u6587\u6863\uff0c\u8fd9\u662fSoC\u7684\u9650\u5236\u3002OTG\u7aef\u53e3\u53ea\u652f\u6301USB 2.0\uff0c\u56e0\u6b64\u901f\u5ea6\u9650\u5236\u4e3a455 Mbit/s\u3002 \u4e3a\u4ec0\u4e48\u65e0\u6cd5\u6355\u83b7\u67d0\u4e9b\u5b9e\u4f53\u952e\u76d8\u7684\u952e\u76d8\u5feb\u6377\u952e\uff0c\u4f46\u53ef\u4ee5\u6355\u83b7\u865a\u62df\u952e\u76d8\u7684\u952e\u76d8\u5feb\u6377\u952e\uff1f\u4f8b\u5982\uff0c\u65e0\u6cd5\u6355\u83b7Mac\u7535\u8111\u7684F11\u6309\u952e \u8fd9\u662f\u56e0\u4e3a\u4e00\u4e9b\u5feb\u6377\u952e\u5df2\u7ecf\u88ab\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u4e86\uff0c\u4f8b\u5982\u5728 macOS \u4e2d\uff0cF11 \u88ab\u9ed8\u8ba4\u5206\u914d\u7ed9\u4e86\u201c\u663e\u793a\u684c\u9762\u201d\u7684\u529f\u80fd\u3002\u5f53\u60a8\u5728Web\u754c\u9762\u6309\u4e0bF11\u65f6\uff0c\u952e\u76d8\u4e8b\u4ef6\u9996\u5148\u88ab\u64cd\u4f5c\u7cfb\u7edf\u6355\u83b7\uff0c\u5982\u679c\u64cd\u4f5c\u7cfb\u7edf\u6ce8\u518c\u4e86\u56de\u8c03\u51fd\u6570\uff0c\u952e\u76d8\u4e8b\u4ef6\u5c06\u4e0d\u4f1a\u4f20\u9012\u7ed9\u5e94\u7528\u7a0b\u5e8f\u3002\u8981\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u60a8\u53ef\u4ee5\u5173\u95ed\u64cd\u4f5c\u7cfb\u7edf\u8bbe\u7f6e\u4e2d\u7684\u5feb\u6377\u952e\uff0c\u6216\u8005\u4f7f\u7528\u865a\u62df\u952e\u76d8\u3002 \u786c\u4ef6\u95ee\u9898\uff08Wi-Fi\u3001ATX\u7b49\uff09 \u5982\u679c\u4f7f\u7528PiKVM\u8f6f\u4ef6\uff0cWeb\u754c\u9762\u663e\u793a FAN \u9519\u8bef\uff01 \u7531\u4e8eBLIKVM\u786c\u4ef6\u4f7f\u7528\u7684\u98ce\u6247\u578b\u53f7\u4e0ePIKVM\u786c\u4ef6\u4e0d\u540c\uff0c\u56e0\u6b64\u5728pikvm\u7684\u6700\u65b0\u7cfb\u7edf\u4e2d\uff0c\u901a\u8fc7Web\u754c\u9762\u67e5\u770b\u98ce\u6247\u72b6\u6001\u53ef\u80fd\u4f1a\u5931\u8d25\u3002\u4f46\u8fd9\u4e0d\u4f1a\u5f71\u54cdBLIKVM\u98ce\u6247\u7684\u6b63\u5e38\u8fd0\u884c\u3002\u56e0\u6b64\uff0c\u5728\u4f7f\u7528PIKVM\u955c\u50cf\u65f6\uff0c\u53ea\u8981\u786e\u4fdd \u5b89\u88c5\u811a\u672c \u663e\u793aOK\uff0c\u5c31\u8868\u793akvmd\u98ce\u6247\u7a0b\u5e8f\u7684\u66f4\u65b0\u6210\u529f\u3002\u9ed8\u8ba4\u7a0b\u5e8f\u8bbe\u7f6e\u7684\u6e29\u5ea6\u9608\u503c\u4e3a\u6444\u6c0f60\u5ea6\u3002\u5f53\u68c0\u6d4b\u5230CPU\u6e29\u5ea6\u8d85\u8fc760\u6444\u6c0f\u5ea6\u65f6\uff0c\u98ce\u6247\u5c06\u4ee585%\u7684\u901f\u5ea6\u5f00\u59cb\u65cb\u8f6c\u3002\u5982\u679c\u8981\u4fee\u6539\u6e29\u5ea6\u9608\u503c\u548c\u901f\u5ea6\uff0c\u53ef\u4ee5\u4fee\u6539kvmd-fan.py\u811a\u672c\uff0c\u7136\u540e\u91cd\u65b0\u6267\u884cinstall.sh\u3002 \u6211\u6839\u672c\u65e0\u6cd5\u8fde\u63a5\u5230Wi-Fi\uff01 \u5982\u679c\u60a8\u7684\u8bbe\u5907\u65e0\u6cd5\u8fde\u63a5\u5230\u60a8\u8bbe\u7f6e\u7684Wi-Fi\u7f51\u7edc\uff0c\u8bf7\u68c0\u67e5\u60a8\u7684Wi-Fi\u63a5\u5165\u70b9\u4f7f\u7528\u76842.4GHz Wi-Fi\u4fe1\u9053\u3002\u5982\u679c\u4f7f\u7528\u4e8612\u523014\u4fe1\u9053\uff08\u67d0\u4e9b\u56fd\u5bb6\u7981\u6b62\u4f7f\u7528\u8fd9\u4e9b\u4fe1\u9053\uff09\uff0c\u8bf7\u5c1d\u8bd5\u4f7f\u75281\u523011\u4e4b\u95f4\u7684\u4fe1\u9053\u3002 BLIKVM\u663e\u793a\u4f4e\u7535\u538b\u8b66\u544a \u60a8\u662f\u5426\u4f7f\u7528\u4e86\u201c\u6b63\u786e\u201d\u7684\u7535\u6e90\u9002\u914d\u5668\uff1f\u800c\u4e0d\u662f\u81ea\u5df1\u62fc\u51d1\u7684\u9002\u914d\u5668\uff1f \u4e00\u4e9bUSB\u7535\u6e90\u9002\u914d\u5668\u5ba3\u4f20\u4e3a5V 2.1A\u6216\u66f4\u9ad8\uff0c\u4f46\u65e0\u6cd5\u63d0\u4f9b\u7a33\u5b9a\u76845V\u7535\u538b\u3002\u6700\u597d\u4f7f\u7528\u6811\u8393\u6d3e\u57fa\u91d1\u4f1a\u63a8\u8350\u7684\u7535\u6e90\u9002\u914d\u5668\u3002\u5176\u8f93\u51fa\u5e94\u4e3a5.1V\u548c3A\u76f4\u6d41\u7535\u538b\u3002 \u5f53\u6211\u4f7f\u7528PoE\u65f6\uff0c\u662f\u5426\u4ecd\u7136\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u6765\u9632\u6b62\u673a\u5668USB\u7684\u53cd\u5411\u4f9b\u7535\uff1f \u53ea\u6709HAT\u7248\u672c\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u6765\u9632\u6b62\u53cd\u5411\u4f9b\u7535\u3002\u901a\u5e38\uff0c\u5927\u591a\u6570\u4e3b\u673a\u8ba1\u7b97\u673a\u90fd\u6709\u53cd\u5411\u4f9b\u7535\u4fdd\u62a4\uff0c\u56e0\u6b64\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e0d\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u3002 BLIKVM-CM4-V2.2\u548cBLIKVM-PCIe\u7248\u672c\u4e0d\u9700\u8981\u3002 \u5728\u4e00\u4e9b\u50cfBLIKVM-PCIe\u6216BLIKVM-CM4-V2.2\u8fd9\u6837\u7684\u677f\u5b50\u4e0a\u6709\u5f15\u5bfc\u5f15\u811a\uff0c\u5982\u4f55\u8fde\u63a5\uff1f \u5982\u679c\u5c06\u5b83\u4eec\u8fde\u63a5\u77ed\u8def\uff0cCM4\u5c06\u65e0\u6cd5\u6b63\u5e38\u542f\u52a8\uff0c\u800c\u5c06\u8fdb\u5165\u70e7\u5f55\u6620\u50cf\u6a21\u5f0f\u3002\u5982\u679c\u60a8\u7684\u786c\u4ef6\u7248\u672c\u7684\u5f15\u5bfc\u5f15\u811a\u53ea\u6709\u4e24\u4e2a\u5f15\u811a\uff0c\u4f7f\u7528\u8df3\u7ebf\u5e3d\u5c06\u8fd9\u4e24\u4e2a\u5f15\u811a\u8fde\u63a5\u8d77\u6765\uff0c\u5f62\u6210\u77ed\u8def\u3002\u5982\u679c\u60a8\u4e0d\u4f7f\u7528\u8df3\u7ebf\u5e3d\u6216\u53ea\u5c06\u5176\u63d2\u5165\u4e00\u4e2a\u5f15\u811a\uff0cCM4\u5c06\u6b63\u5e38\u542f\u52a8\u3002\u5982\u679c\u60a8\u4f7f\u7528\u7684\u662f\u4e09\u4e2a\u5f15\u5bfc\u5f15\u811a\u7684\u786c\u4ef6\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u8df3\u7ebf\u5e3d\u5c06GND\u548c\u53e6\u4e00\u4e2a\u975eGND\u5f15\u811a\u8fde\u63a5\u8d77\u6765\u4ee5\u793a\u77ed\u8def\uff0c\u5e76\u5c06\u8df3\u7ebf\u5e3d\u63d2\u5728\u4e24\u4e2aGND\u5f15\u811a\u4e0a\u6216\u4e0d\u4f7f\u7528\u8df3\u7ebf\u5e3d\uff0cCM4\u5c06\u6b63\u5e38\u542f\u52a8\u3002 Web\u95ee\u9898 BliKVM OS\u5360\u7528\u7684\u7aef\u53e3\u6709\u54ea\u4e9b\uff0c\u5728\u7528\u516c\u7f51\u670d\u52a1\u5668\u8f6c\u53d1\u65f6\uff0c\u5e94\u8be5\u600e\u4e48\u505a\uff1f Web\u754c\u9762\u4e3ahttp\u534f\u8bae\uff0c\u5360\u7528\u7684\u662f80\u7aef\u53e3\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV1 V2 V3\uff0c\u4f7f\u7528\u7684\u662f\u662fweb-rtc\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8188\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV4\uff0c\u4f7f\u7528\u7684\u662fmjepg\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8008\uff1b \u6ce8\u610f\u7aef\u53e3\u4e0d\u652f\u6301\u88ab\u4fee\u6539\uff0c\u53ea\u80fd\u914d\u7f6e\u8f6c\u53d1\uff1b \u6811\u8393\u6d3e\u76f8\u5173\u95ee\u9898 \u6211\u662f\u5426\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u5e26eMMC\u7248\u672c\u7684CM4\u548cSD\u5361? \u4e0d\u53ef\u4ee5\uff0c\u56e0\u4e3a\u5728CM4\u786c\u4ef6\u8bbe\u8ba1\u4e0a\uff0c\u51e0\u4e2aSD\u5361\u7684\u5f15\u811a\u53ea\u5728lite\u7248\u672c\u4e2d\u662f\u53ef\u7528\u7684\uff0c\u4f60\u53ef\u4ee5\u5728\u6811\u8393\u6d3e\u5b98\u7f51\u627e\u5230\u8bf4\u660e\u3002","title":"\u5e38\u89c1\u95ee\u9898\u89e3\u7b54"},{"location":"faq/#faq","text":"\u4f5c\u4e3a\u7b2c\u4e00\u6b65\uff0c\u6211\u4eec\u5efa\u8bae\u4ed4\u7ec6\u9605\u8bfb\u6211\u4eec\u7684\u6587\u6863\u3002\u5927\u90e8\u5206\u8bbe\u7f6eBLIKVM\u6240\u9700\u7684\u6b65\u9aa4\u5df2\u7ecf\u5728\u6587\u6863\u4e2d\u63cf\u8ff0\u4e86\u3002\u5982\u679c\u60a8\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u60a8\u53ef\u4ee5\u67e5\u770b\u672c\u9875\uff0c\u5176\u4e2d\u5217\u51fa\u4e86\u5e38\u89c1\u9519\u8bef\u3002\u5982\u679c\u4ecd\u7136\u65e0\u6cd5\u89e3\u51b3\u95ee\u9898\uff0c\u6b22\u8fce\u63d0\u4ea4 \u95ee\u9898\u53cd\u9988 \u6216 \u52a0\u5165\u6211\u4eec\u7684Discord \u5bfb\u6c42\u8fdb\u4e00\u6b65\u5e2e\u52a9\u3002","title":"FAQ & \u6545\u969c\u6392\u9664"},{"location":"faq/#_1","text":"\u6211\u53ef\u4ee5\u5c06\u591a\u53f0\u670d\u52a1\u5668\u8fde\u63a5\u5230\u5355\u4e2aBLIKVM\u5417\uff1f \u53ef\u4ee5\uff0c\u4f46\u9700\u8981\u8fdb\u884c\u989d\u5916\u7684\u8bbe\u7f6e\u5de5\u4f5c\u3002\u8bf7\u53c2\u8003 \u6b64\u9875\u9762 \u3002 \u5982\u4f55\u5728\u672c\u5730\u7f51\u7edc\u4e0a\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95eeBliKVM\uff1f \u5982\u679c\u60a8\u7684\u8def\u7531\u5668\u5177\u6709\u5916\u90e8IP\u5730\u5740\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u7aef\u53e3\u8f6c\u53d1\u6765\u8f6c\u53d180\u7aef\u53e3(Web),8008\u7aef\u53e3(mjpeg)\uff0c8188\u7aef\u53e3\uff08webrtc\uff09\u3002\u5728\u5176\u4ed6\u60c5\u51b5\u4e0b\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u51fa\u8272\u7684\u514d\u8d39VPN\u670d\u52a1Tailscale\u3002 BLiKVM\u6709\u591a\u6b3e\u786c\u4ef6\uff0c\u5982BliKVM V1 CM4\u3001BliKVM V2 PCIe\u3001BliKVM V3 Hat\uff0c\u6211\u5e94\u8be5\u9009\u54ea\u6b3e\uff1f \u9996\u5148\u5404\u4e2a\u7248\u672c\u7684\u4e3b\u8981\u53c2\u6570\u5bf9\u6bd4\u8bf7\u53c2\u8003 \u6b64\u9875\u9762 \u3002 V1\u548cV3\u5c5e\u4e8e\u5916\u7f6e\u65b9\u6848\uff0cV2\u5c5e\u4e8e\u5185\u7f6e\u673a\u7bb1\u65b9\u6848\u3002\u5982\u679c\u60a8\u662f\u673a\u7bb1\u5f62\u5f0f\uff0c\u5e76\u4e14\u673a\u7bb1\u5185\u90e8\u6709\u7a7a\u95f4\uff0c\u90a3\u4e48\u6beb\u65e0\u7591\u95ee\u9009\u62e9V2 PCIe\u7248\u672c\u662f\u8f83\u597d\u7684\u9009\u62e9\u3002 \u90a3\u4e48V1\u548cV3\u4e24\u4e2a\u5916\u7f6e\u65b9\u6848\u5982\u4f55\u9009\u62e9\u5462\uff0cV1\u57fa\u4e8eCM4\u7684\u65b9\u6848\uff0c\u96c6\u6210\u5ea6\u66f4\u9ad8\uff0c\u6709\u5230\u624b\u53ef\u7528\u7248\u672c\u3002V3\u57fa\u4e8e\u6811\u8393\u6d3e4B\u65b9\u6848\uff0c\u6240\u6709IO\u53e3\u5747\u5f15\u51fa\uff0c\u53ef\u6269\u5c55\u6027\u66f4\u5f3a\u3002\u4e24\u8005\u7684\u53e6\u4e00\u4e2a\u6838\u5fc3\u533a\u522b\u5c31\u662fV1\u6700\u9ad8\u652f\u63011080P60Hz\u8f93\u5165\uff0cV3\u6700\u9ad8\u652f\u63011080P50Hz\u8f93\u5165\u3002\u5f53\u7136\u540c\u65f6\u9700\u8981\u8003\u8651\u60a8\u662f\u5df2\u5426\u6709CM4\u6216\u80054B\uff0c\u5982\u679c\u6709\u7684\u8bdd\u53ea\u4e70\u5bf9\u5e94\u7684\u5e95\u677f\uff0c\u6027\u4ef7\u6bd4\u66f4\u9ad8\u3002 \u6211\u53ef\u4ee5\u7528BLIKVM\u8fdb\u884c\u6e38\u620f\u5417\uff1f \u4e0d\u53ef\u4ee5\uff0c\u539f\u56e0\u5982\u4e0b\uff1a \u5bf9\u4e8eHDMI-CSI\u6865\u63a5\u5668\uff0c\u603b\u7ebf\u5e26\u5bbd\u4e0d\u8db3\u4ee5\u4f20\u8f93\u8d85\u8fc71080p60\u7684\u89c6\u9891\u3002 \u5bf9\u4e8eHDMI-USB\u8f6c\u6362\u5668\uff0c\u5ef6\u8fdf\u8f83\u9ad8\u4e14\u89c6\u9891\u8d28\u91cf\u8f83\u4f4e\u3002 \u4e00\u822c\u7684\u786c\u4ef6\u89c6\u9891\u6355\u83b7\u4e0e\u8f6f\u4ef6\u6d41\u5a92\u4f53\u6709\u6240\u4e0d\u540c\uff0c\u4f1a\u5f15\u5165\u989d\u5916\u7684\u5ef6\u8fdf\u3002 BLIKVM\u652f\u63014K\u89c6\u9891\u5417\uff1f \u5bf9\u4e8eHDMI-CSI\u6865\u63a5\u5668\uff0c\u4e0d\u652f\u6301\u3002CSI\u603b\u7ebf\u7684\u5e26\u5bbd\u4e0d\u8db3\u4ee5\u5904\u7406\u5982\u6b64\u5927\u91cf\u7684\u6570\u636e\u30021080p60\u662f\u5e26\u5bbd\u7684\u4e0a\u9650\u3002 \u5bf9\u4e8eUSB\u6355\u83b7\u8bbe\u5907\uff1a\u4ece\u6280\u672f\u4e0a\u8bb2\uff0c\u662f\u53ef\u4ee5\u7684\uff0c\u4f46\u5b83\u4eec\u4f1a\u964d\u4f4e\u5206\u8fa8\u7387\u4ee5\u9002\u5e94USB 2.0\u7684\u5e26\u5bbd\u9650\u5236\uff0c\u56e0\u6b64\u6d41\u5a92\u4f53\u7684\u5206\u8fa8\u7387\u4e0d\u4f1a\u662f4K\u3002 \u65e0\u8bba\u5982\u4f55\uff0c4K\u5b9e\u65f6\u89c6\u9891\u4e5f\u65e0\u6cd5\u901a\u8fc7\u7f51\u7edc\u4f20\u8f93\u3002 \u5149\u6807/\u89c6\u9891\u5ef6\u8fdf\u662f\u7531\u4ec0\u4e48\u5f15\u8d77\u7684\uff1f \u56fe\u50cf\u4f20\u8f93\u5230\u6d4f\u89c8\u5668\u6216VNC\u5ba2\u6237\u7aef\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a \u6355\u83b7\u8bbe\u5907 -> \u538b\u7f29 -> \u7f51\u7edc -> \u89e3\u538b\u7f29 -> \u6e32\u67d3 \u5728\u6b64\u8fc7\u7a0b\u4e2d\uff0c100-200ms\u7684\u5ef6\u8fdf\u5df2\u7ecf\u975e\u5e38\u5feb\u901f\u4e86\u3002\u4f46\u6211\u4eec\u6b63\u5728\u52aa\u529b\u8fdb\u4e00\u6b65\u63d0\u9ad8\u901f\u5ea6\u3002 BLIKVM\u652f\u6301\u97f3\u9891\u5417\uff1f BliKVM v1 CM4, v2 PCIe, v3 HAT\u7248\u672c\u652f\u6301\uff0c v4 Allwinner\u7248\u672c\u4e0d\u652f\u6301\u3002 \u6211\u53ef\u4ee5\u901a\u8fc7PoE\u7ed9Pi\u4f9b\u7535\u5417\uff1f \u53ef\u4ee5\uff01Hat\u7248\u672c\u548cPCIe\u7248\u672c\u90fd\u652f\u6301PoE\u3002","title":"\u5e38\u89c1\u95ee\u9898"},{"location":"faq/#_2","text":"\u9ed8\u8ba4\u5bc6\u7801\u662f\u4ec0\u4e48\uff1f\u5982\u4f55\u66f4\u6539\u5bc6\u7801\uff1f \u5982\u679c\u60a8\u4f7f\u7528PiKVM\uff0c\u6709\u4e24\u79cd\u7c7b\u578b\u7684\u5e10\u6237\uff1a\u64cd\u4f5c\u7cfb\u7edf\u5e10\u6237\u548cPiKVM\uff08Web\u754c\u9762\uff09\u5e10\u6237\u3002\u7cfb\u7edf\u5e10\u6237 root \u53ef\u7528\u4e8eSSH/UART\u8bbf\u95ee\uff0c\u5bc6\u7801\u4e3a root \u3002Web\u754c\u9762\u5e10\u6237\u79f0\u4e3a admin \uff0c\u5bc6\u7801\u4e3a admin \u3002PiKVM\u5e10\u6237\u4e0d\u80fd\u7528\u4e8eSSH\u8bbf\u95ee\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002 \u8981\u66f4\u6539\u5bc6\u7801\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff08\u5728root\u7528\u6237\u4e0b\uff09\uff1a su - # \u5982\u679c\u60a8\u5728Webterm\u4e2d rw # \u5207\u6362\u6587\u4ef6\u7cfb\u7edf\u4e3a\u8bfb\u5199\u6a21\u5f0f passwd root # \u66f4\u6539\u64cd\u4f5c\u7cfb\u7edfroot\u5bc6\u7801 kvmd-htpasswd set admin # \u66f4\u6539Web\u754c\u9762\u7ba1\u7406\u5458\u5bc6\u7801 ro # \u5207\u6362\u56de\u53ea\u8bfb\u6a21\u5f0f \u5982\u679c\u60a8\u4f7f\u7528\u7684\u662fBliKVM\uff0cWeb\u754c\u9762\u5e10\u6237\u79f0\u4e3a admin \uff0c\u5bc6\u7801\u4e3a admin ,\u7ec8\u7aef\u7528\u6237\u540d\u79f0\u4e3a blikvm \uff0c\u5bc6\u7801\u4e3a blikvm \u3002 \u5982\u4f55\u6dfb\u52a0\u53e6\u4e00\u4e2a\u7528\u6237\uff1f \u5982\u679c\u60a8\u4f7f\u7528PiKVM\u8f6f\u4ef6\uff0c\u5982\u4e0a\u6240\u8ff0\uff0c\u60a8\u9700\u8981\u521b\u5efa2\u4e2a\u5e10\u6237\uff0c\u4e00\u4e2a\u7528\u4e8eShell\uff0c\u53e6\u4e00\u4e2a\u7528\u4e8ePiKVM Web\u754c\u9762\u3002 \u5982\u679c\u60a8\u9700\u8981\u4e3aPiKVM Web\u754c\u9762\u6dfb\u52a0\u5176\u4ed6\u7528\u6237\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff1a # rw # su - # kvmd-htpasswd set # \u6dfb\u52a0\u65b0\u7528\u6237 # kvmd-htpasswd set # \u8bbe\u7f6e\u5bc6\u7801\uff08\u53ea\u8981\u7528\u6237\u5b58\u5728\uff09 # kvmd-htpasswd del # \u5220\u9664\u7528\u6237 \u8981\u6dfb\u52a0Shell/\u7ec8\u7aef\u5e10\u6237\uff1a # rw # su - # adduser # passwd \u8bf7\u6ce8\u610f\uff0c\u6dfb\u52a0\u7684\u7528\u6237\u8d8a\u591a\uff0c\u8bbf\u95ee\u6d41\u5a92\u4f53\u65f6\u5e27\u7387\u4f1a\u964d\u4f4e\u3002","title":"\u7b2c\u4e00\u6b65"},{"location":"faq/#_3","text":"BLIKVM\u6839\u672c\u6ca1\u6709\u663e\u793a\u6765\u81ea\u8ba1\u7b97\u673a\u7684\u89c6\u9891 \u8bf7\u4ed4\u7ec6\u68c0\u67e5\u89c6\u9891\u6355\u83b7\u8bbe\u5907\u7684\u8fde\u63a5\u60c5\u51b5\u3002\u5bf9\u4e8eCSI\u6865\u63a5\u5668\uff0c\u5e94\u8fde\u63a5\u5230\u76f8\u673a\u7aef\u53e3\u3002 \u6709\u4e9b\u7b14\u8bb0\u672c\u7535\u8111\u5728\u60a8\u5207\u6362\u8f93\u51fa\u4e4b\u524d\uff08\u901a\u5e38\u901a\u8fc7\u952e\u76d8\u4e0a\u7684FN +\u548cF5\u952e\uff09\u4e0d\u4f1a\u8f93\u51fa\u4efb\u4f55\u4fe1\u53f7\u3002 \u60a8\u7684\u8ba1\u7b97\u673a\u53ef\u80fd\u5df2\u7ecf\u5c06\u663e\u793a\u5668\u8bbe\u7f6e\u4e3a\u7761\u7720\u6a21\u5f0f\u3002\u79fb\u52a8\u9f20\u6807\u4ee5\u5173\u95ed\u7761\u7720\u6a21\u5f0f\u3002 \u5bf9\u4e8eWindows\u7cfb\u7edf\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u68c0\u67e5\u6d3b\u52a8\u4fe1\u53f7\u5206\u8fa8\u7387\u3002\u8981\u66f4\u6539\u6d3b\u52a8\u4fe1\u53f7\u5206\u8fa8\u7387\uff0c\u8bf7\u8f6c\u5230\u201c\u8bbe\u7f6e\u201d>\u201c\u7cfb\u7edf\u201d>\u201c\u663e\u793a\u201d>\u201c\u9ad8\u7ea7\u663e\u793a\u8bbe\u7f6e\u201d>\u201c\u663e\u793a\u9002\u914d\u5668\u5c5e\u6027\u201d\uff0c\u7136\u540e\u70b9\u51fb\u201c\u5217\u51fa\u6240\u6709\u6a21\u5f0f\u201d\uff0c\u9009\u62e9\u6240\u9700\u7684\u6a21\u5f0f\u3002\u5c1d\u8bd5\u4e0d\u540c\u7684\u5237\u65b0\u7387\u8bbe\u7f6e\u3002 \u5728\u5df2\u542f\u52a8\u7684\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u53ef\u4ee5\u770b\u5230\u89c6\u9891\uff0c\u4f46\u5728BIOS/UEFI\u4e2d\u770b\u4e0d\u5230 \u5f53\u4f7f\u7528CSI\u6865\u63a5\u5668\u65f6\uff0cIntel NUC\u3001GA-H77-DS3H\u548c\u4e00\u4e9b\u5176\u4ed6\u8bbe\u5907\u4e0a\u4f1a\u51fa\u73b0\u6b64\u95ee\u9898\u3002\u60a8\u53ea\u9700\u8981\u66f4\u6539EDID\u6570\u636e\uff0c\u8fd9\u662fCSI\u6865\u63a5\u5668\u5411\u8ba1\u7b97\u673a\u62a5\u544a\u7684\u652f\u6301\u7684\u5206\u8fa8\u7387\u4fe1\u606f\u3002 BIOS/UEFI\u5206\u8fa8\u7387\u51fa\u73b0\u6545\u969c\u6216\u9519\u8bef \u5728\u67d0\u4e9b\u4e3b\u677f\u4e0a\uff0cBIOS\u53ef\u80fd\u4ee5\u8f83\u4f4e\u7684\u5206\u8fa8\u7387\u663e\u793a\uff0c\u6216\u51fa\u73b0\u4e00\u4e9b\u6e32\u67d3\u95ee\u9898/\u6545\u969c\uff0c\u7279\u522b\u662f\u5728\u8f83\u65b0\u7684ASUS\u4e3b\u677f\u4e0a\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u60a8\u53ef\u4ee5\u901a\u8fc7\u5728BIOS\u4e2d\u542f\u7528 \u517c\u5bb9\u6027\u652f\u6301\u6a21\u5757\uff08CSM\uff09 \u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u901a\u5e38\u4f4d\u4e8e \u5f15\u5bfc \u9009\u9879\u4e0b\u3002 \u5982\u679c\u60a8\u65e0\u6cd5\u6216\u4e0d\u60f3\u542f\u7528CSM\uff0c\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u8fde\u63a5\u4e00\u4e2aDisplayPort\uff08DP\uff09\u663e\u793a\u5668\u6216 \u865a\u62df\u63d2\u5934 \u3002\u5982\u679c\u62d4\u6389DP\u7535\u7f06/\u8f6c\u63a5\u5668\uff0c\u95ee\u9898\u5c06\u91cd\u65b0\u51fa\u73b0\u3002 \u5982\u679c\u4e0a\u8ff0\u65b9\u6cd5\u90fd\u4e0d\u8d77\u4f5c\u7528\uff0c\u8bf7\u5c1d\u8bd5\u5148\u8fde\u63a5DP\u7535\u7f06\uff0c\u7136\u540e\u542f\u52a8\u5230BIOS\uff0c\u7981\u7528CSM\u5e76\u5173\u673a\uff08\u4e0d\u8981\u91cd\u65b0\u542f\u52a8\uff09\u60a8\u7684\u8ba1\u7b97\u673a\u3002\u7136\u540e\uff0c\u5728\u518d\u6b21\u542f\u52a8\u5230BIOS\u5e76\u542f\u7528CSM\u4e4b\u524d\uff0c\u8fde\u63a5HDMI\u5e76\u518d\u6b21\u6253\u5f00\u8ba1\u7b97\u673a\u3002 GRUB2\u4e2d\u6ca1\u6709\u89c6\u9891\uff0c\u4f46\u4e4b\u524d\u548c\u4e4b\u540e\u90fd\u6709 \u6709\u65f6\u8fd9\u53ef\u80fd\u662f\u7531\u4e8eBIOS/UEFI\u7684\u7279\u5b9a\u95ee\u9898\u4ee5\u53caGRUB2\u4e0e\u89c6\u9891\u7684\u5de5\u4f5c\u65b9\u5f0f\u6240\u5bfc\u81f4\u7684\u3002 \u60a8\u53ef\u4ee5\u901a\u8fc7\u5728BIOS\u4e2d\u542f\u7528 \u517c\u5bb9\u6027\u652f\u6301\u6a21\u5757\uff08CSM\uff09 \u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u901a\u5e38\u4f4d\u4e8e \u5f15\u5bfc \u9009\u9879\u4e0b\u3002\u89c6\u9891\u6a21\u5f0f\u4e5f\u4f4d\u4e8e\u540c\u4e00\u90e8\u5206\u3002\u5c06 \u89c6\u9891 \u6a21\u5f0f\u4ece UEFI \u5207\u6362\u4e3a Legacy \u3002 Linux + Awesome WM\u6ca1\u6709\u8ba1\u7b97\u673a\u56fe\u50cf \u6709\u65f6\uff0c\u5728Linux\u4e0a\u4f7f\u7528Awesome WM\u53ef\u80fd\u65e0\u6cd5\u8bc6\u522b\u7535\u7f06\u7684\u89c6\u9891\u8f93\u51fa\u66f4\u6539\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u7535\u7f06\u5148\u63d2\u5165\u663e\u793a\u5668\uff0c\u7136\u540e\u518d\u8fde\u63a5\u5230BLIKVM\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u60a8\u770b\u4e0d\u5230\u56fe\u50cf\u3002\u8fd9\u4f3c\u4e4e\u662fAwesome WM\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u4f8b\u5982\u5728KDE\u4e2d\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u590d\u73b0\u3002\u5982\u679c\u60a8\u5728\u8fde\u63a5BLIKVM\u540e\u542f\u52a8\u5de5\u4f5c\u7ad9\uff0c\u4e00\u5207\u90fd\u5c06\u6b63\u5e38\u5de5\u4f5c\u3002","title":"\u89c6\u9891\u95ee\u9898"},{"location":"faq/#usbu","text":"USB OTG\u7aef\u53e3\u7684\u901f\u5ea6\u662f\u591a\u5c11\uff1f \u6839\u636e\u5b98\u65b9\u7684RPI\u6587\u6863\uff0c\u8fd9\u662fSoC\u7684\u9650\u5236\u3002OTG\u7aef\u53e3\u53ea\u652f\u6301USB 2.0\uff0c\u56e0\u6b64\u901f\u5ea6\u9650\u5236\u4e3a455 Mbit/s\u3002 \u4e3a\u4ec0\u4e48\u65e0\u6cd5\u6355\u83b7\u67d0\u4e9b\u5b9e\u4f53\u952e\u76d8\u7684\u952e\u76d8\u5feb\u6377\u952e\uff0c\u4f46\u53ef\u4ee5\u6355\u83b7\u865a\u62df\u952e\u76d8\u7684\u952e\u76d8\u5feb\u6377\u952e\uff1f\u4f8b\u5982\uff0c\u65e0\u6cd5\u6355\u83b7Mac\u7535\u8111\u7684F11\u6309\u952e \u8fd9\u662f\u56e0\u4e3a\u4e00\u4e9b\u5feb\u6377\u952e\u5df2\u7ecf\u88ab\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u4e86\uff0c\u4f8b\u5982\u5728 macOS \u4e2d\uff0cF11 \u88ab\u9ed8\u8ba4\u5206\u914d\u7ed9\u4e86\u201c\u663e\u793a\u684c\u9762\u201d\u7684\u529f\u80fd\u3002\u5f53\u60a8\u5728Web\u754c\u9762\u6309\u4e0bF11\u65f6\uff0c\u952e\u76d8\u4e8b\u4ef6\u9996\u5148\u88ab\u64cd\u4f5c\u7cfb\u7edf\u6355\u83b7\uff0c\u5982\u679c\u64cd\u4f5c\u7cfb\u7edf\u6ce8\u518c\u4e86\u56de\u8c03\u51fd\u6570\uff0c\u952e\u76d8\u4e8b\u4ef6\u5c06\u4e0d\u4f1a\u4f20\u9012\u7ed9\u5e94\u7528\u7a0b\u5e8f\u3002\u8981\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u60a8\u53ef\u4ee5\u5173\u95ed\u64cd\u4f5c\u7cfb\u7edf\u8bbe\u7f6e\u4e2d\u7684\u5feb\u6377\u952e\uff0c\u6216\u8005\u4f7f\u7528\u865a\u62df\u952e\u76d8\u3002","title":"USB\u95ee\u9898\uff08\u952e\u76d8\u3001\u9f20\u6807\u3001U\u76d8\u7b49\uff09"},{"location":"faq/#wi-fiatx","text":"\u5982\u679c\u4f7f\u7528PiKVM\u8f6f\u4ef6\uff0cWeb\u754c\u9762\u663e\u793a FAN \u9519\u8bef\uff01 \u7531\u4e8eBLIKVM\u786c\u4ef6\u4f7f\u7528\u7684\u98ce\u6247\u578b\u53f7\u4e0ePIKVM\u786c\u4ef6\u4e0d\u540c\uff0c\u56e0\u6b64\u5728pikvm\u7684\u6700\u65b0\u7cfb\u7edf\u4e2d\uff0c\u901a\u8fc7Web\u754c\u9762\u67e5\u770b\u98ce\u6247\u72b6\u6001\u53ef\u80fd\u4f1a\u5931\u8d25\u3002\u4f46\u8fd9\u4e0d\u4f1a\u5f71\u54cdBLIKVM\u98ce\u6247\u7684\u6b63\u5e38\u8fd0\u884c\u3002\u56e0\u6b64\uff0c\u5728\u4f7f\u7528PIKVM\u955c\u50cf\u65f6\uff0c\u53ea\u8981\u786e\u4fdd \u5b89\u88c5\u811a\u672c \u663e\u793aOK\uff0c\u5c31\u8868\u793akvmd\u98ce\u6247\u7a0b\u5e8f\u7684\u66f4\u65b0\u6210\u529f\u3002\u9ed8\u8ba4\u7a0b\u5e8f\u8bbe\u7f6e\u7684\u6e29\u5ea6\u9608\u503c\u4e3a\u6444\u6c0f60\u5ea6\u3002\u5f53\u68c0\u6d4b\u5230CPU\u6e29\u5ea6\u8d85\u8fc760\u6444\u6c0f\u5ea6\u65f6\uff0c\u98ce\u6247\u5c06\u4ee585%\u7684\u901f\u5ea6\u5f00\u59cb\u65cb\u8f6c\u3002\u5982\u679c\u8981\u4fee\u6539\u6e29\u5ea6\u9608\u503c\u548c\u901f\u5ea6\uff0c\u53ef\u4ee5\u4fee\u6539kvmd-fan.py\u811a\u672c\uff0c\u7136\u540e\u91cd\u65b0\u6267\u884cinstall.sh\u3002 \u6211\u6839\u672c\u65e0\u6cd5\u8fde\u63a5\u5230Wi-Fi\uff01 \u5982\u679c\u60a8\u7684\u8bbe\u5907\u65e0\u6cd5\u8fde\u63a5\u5230\u60a8\u8bbe\u7f6e\u7684Wi-Fi\u7f51\u7edc\uff0c\u8bf7\u68c0\u67e5\u60a8\u7684Wi-Fi\u63a5\u5165\u70b9\u4f7f\u7528\u76842.4GHz Wi-Fi\u4fe1\u9053\u3002\u5982\u679c\u4f7f\u7528\u4e8612\u523014\u4fe1\u9053\uff08\u67d0\u4e9b\u56fd\u5bb6\u7981\u6b62\u4f7f\u7528\u8fd9\u4e9b\u4fe1\u9053\uff09\uff0c\u8bf7\u5c1d\u8bd5\u4f7f\u75281\u523011\u4e4b\u95f4\u7684\u4fe1\u9053\u3002 BLIKVM\u663e\u793a\u4f4e\u7535\u538b\u8b66\u544a \u60a8\u662f\u5426\u4f7f\u7528\u4e86\u201c\u6b63\u786e\u201d\u7684\u7535\u6e90\u9002\u914d\u5668\uff1f\u800c\u4e0d\u662f\u81ea\u5df1\u62fc\u51d1\u7684\u9002\u914d\u5668\uff1f \u4e00\u4e9bUSB\u7535\u6e90\u9002\u914d\u5668\u5ba3\u4f20\u4e3a5V 2.1A\u6216\u66f4\u9ad8\uff0c\u4f46\u65e0\u6cd5\u63d0\u4f9b\u7a33\u5b9a\u76845V\u7535\u538b\u3002\u6700\u597d\u4f7f\u7528\u6811\u8393\u6d3e\u57fa\u91d1\u4f1a\u63a8\u8350\u7684\u7535\u6e90\u9002\u914d\u5668\u3002\u5176\u8f93\u51fa\u5e94\u4e3a5.1V\u548c3A\u76f4\u6d41\u7535\u538b\u3002 \u5f53\u6211\u4f7f\u7528PoE\u65f6\uff0c\u662f\u5426\u4ecd\u7136\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u6765\u9632\u6b62\u673a\u5668USB\u7684\u53cd\u5411\u4f9b\u7535\uff1f \u53ea\u6709HAT\u7248\u672c\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u6765\u9632\u6b62\u53cd\u5411\u4f9b\u7535\u3002\u901a\u5e38\uff0c\u5927\u591a\u6570\u4e3b\u673a\u8ba1\u7b97\u673a\u90fd\u6709\u53cd\u5411\u4f9b\u7535\u4fdd\u62a4\uff0c\u56e0\u6b64\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e0d\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u3002 BLIKVM-CM4-V2.2\u548cBLIKVM-PCIe\u7248\u672c\u4e0d\u9700\u8981\u3002 \u5728\u4e00\u4e9b\u50cfBLIKVM-PCIe\u6216BLIKVM-CM4-V2.2\u8fd9\u6837\u7684\u677f\u5b50\u4e0a\u6709\u5f15\u5bfc\u5f15\u811a\uff0c\u5982\u4f55\u8fde\u63a5\uff1f \u5982\u679c\u5c06\u5b83\u4eec\u8fde\u63a5\u77ed\u8def\uff0cCM4\u5c06\u65e0\u6cd5\u6b63\u5e38\u542f\u52a8\uff0c\u800c\u5c06\u8fdb\u5165\u70e7\u5f55\u6620\u50cf\u6a21\u5f0f\u3002\u5982\u679c\u60a8\u7684\u786c\u4ef6\u7248\u672c\u7684\u5f15\u5bfc\u5f15\u811a\u53ea\u6709\u4e24\u4e2a\u5f15\u811a\uff0c\u4f7f\u7528\u8df3\u7ebf\u5e3d\u5c06\u8fd9\u4e24\u4e2a\u5f15\u811a\u8fde\u63a5\u8d77\u6765\uff0c\u5f62\u6210\u77ed\u8def\u3002\u5982\u679c\u60a8\u4e0d\u4f7f\u7528\u8df3\u7ebf\u5e3d\u6216\u53ea\u5c06\u5176\u63d2\u5165\u4e00\u4e2a\u5f15\u811a\uff0cCM4\u5c06\u6b63\u5e38\u542f\u52a8\u3002\u5982\u679c\u60a8\u4f7f\u7528\u7684\u662f\u4e09\u4e2a\u5f15\u5bfc\u5f15\u811a\u7684\u786c\u4ef6\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u8df3\u7ebf\u5e3d\u5c06GND\u548c\u53e6\u4e00\u4e2a\u975eGND\u5f15\u811a\u8fde\u63a5\u8d77\u6765\u4ee5\u793a\u77ed\u8def\uff0c\u5e76\u5c06\u8df3\u7ebf\u5e3d\u63d2\u5728\u4e24\u4e2aGND\u5f15\u811a\u4e0a\u6216\u4e0d\u4f7f\u7528\u8df3\u7ebf\u5e3d\uff0cCM4\u5c06\u6b63\u5e38\u542f\u52a8\u3002","title":"\u786c\u4ef6\u95ee\u9898\uff08Wi-Fi\u3001ATX\u7b49\uff09"},{"location":"faq/#web","text":"BliKVM OS\u5360\u7528\u7684\u7aef\u53e3\u6709\u54ea\u4e9b\uff0c\u5728\u7528\u516c\u7f51\u670d\u52a1\u5668\u8f6c\u53d1\u65f6\uff0c\u5e94\u8be5\u600e\u4e48\u505a\uff1f Web\u754c\u9762\u4e3ahttp\u534f\u8bae\uff0c\u5360\u7528\u7684\u662f80\u7aef\u53e3\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV1 V2 V3\uff0c\u4f7f\u7528\u7684\u662f\u662fweb-rtc\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8188\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV4\uff0c\u4f7f\u7528\u7684\u662fmjepg\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8008\uff1b \u6ce8\u610f\u7aef\u53e3\u4e0d\u652f\u6301\u88ab\u4fee\u6539\uff0c\u53ea\u80fd\u914d\u7f6e\u8f6c\u53d1\uff1b","title":"Web\u95ee\u9898"},{"location":"faq/#_4","text":"\u6211\u662f\u5426\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u5e26eMMC\u7248\u672c\u7684CM4\u548cSD\u5361? \u4e0d\u53ef\u4ee5\uff0c\u56e0\u4e3a\u5728CM4\u786c\u4ef6\u8bbe\u8ba1\u4e0a\uff0c\u51e0\u4e2aSD\u5361\u7684\u5f15\u811a\u53ea\u5728lite\u7248\u672c\u4e2d\u662f\u53ef\u7528\u7684\uff0c\u4f60\u53ef\u4ee5\u5728\u6811\u8393\u6d3e\u5b98\u7f51\u627e\u5230\u8bf4\u660e\u3002","title":"\u6811\u8393\u6d3e\u76f8\u5173\u95ee\u9898"},{"location":"first_steps/","text":"\u521d\u6b65\u64cd\u4f5c \u9996\u6b21\u4e0a\u7535 \u53ef\u9009\uff1a\u8bbe\u7f6eWi-Fi\u8fde\u63a5 \u8bf7\u9605\u8bfb\u4ee5\u4e0b\u6ce8\u610f\u4e8b\u9879 \u6709\u7ebf\u4ee5\u592a\u7f51\u8fde\u63a5\u662f\u6700\u53ef\u9760\u7684\u65b9\u5f0f\uff0c\u56e0\u6b64\u6700\u597d\u4f7f\u7528 \u6709\u7ebf\u7535\u7f06 \u3002\u4f46\u6211\u4eec\u4e0d\u80fd\u963b\u6b62\u60a8\u4f7f\u7528\u65e0\u7ebf\u8fde\u63a5... :) \u786e\u8ba4\u60a8\u4f7f\u7528\u7684\u7248\u672c\u542b\u6709Wi-Fi\u529f\u80fd\uff0c\u5e76\u4e14Wi-Fi\u5929\u7ebf\u5df2\u5b89\u88c5. \u8bf7\u53c2\u8003 Wi-Fi\u8fde\u63a5\u6307\u5357 \uff0c\u5bf9\u60a8\u7684\u8bbe\u5907\u8fdb\u884cWi-Fi\u8bbe\u7f6e\uff1b \u7ed9\u8bbe\u5907\u4f9b\u7535\u3002 \u5728\u8bbe\u5907\u5b8c\u5168\u542f\u52a8\u524d\uff0c\u8bf7\u52ff\u5173\u95ed\u7535\u6e90 \u8bbf\u95eeBliKVM \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cBliKVM\u901a\u8fc7DHCP\u63a5\u6536\u52a8\u6001IP\u5730\u5740\u3002\u4f1a\u5728BliKVM\u663e\u793a\u5668\u4e0a\u663e\u793aIP\u5730\u5740\u3002\u5982\u679c\u60a8\u662fDIY\u786c\u4ef6\u6ca1\u6709\u663e\u793a\u5668\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u63d0\u793a\uff1a \u5728\u7f51\u7edc\u4e2d\u67e5\u627eBliKVM \u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u65b9\u6cd5\u786e\u5b9aBliKVM\u7684IP\u5730\u5740\uff1a \u5e38\u7528\u65b9\u6cd5\uff1a \u6253\u5f00\u8def\u7531\u5668\u7684Web\u754c\u9762\uff0c\u5e76\u67e5\u627e\u5df2\u5206\u914d\u7684IP\u5730\u5740\u5217\u8868\u3002\u5177\u4f53\u65b9\u6cd5\u53d6\u51b3\u4e8e\u8def\u7531\u5668\u578b\u53f7\u3002 \u4ec5\u9650Linux\uff1a \u4f7f\u7528\u547d\u4ee4 arp-scan --localnet \u3002 Linux\u3001MacOS\u3001Windows\uff1a \u4e0b\u8f7d\u5e76\u8fd0\u884c Angry IP Scanner \u3002 Windows PowerShell\uff1a \u4f7f\u7528\u547d\u4ee4 arp -a \u3002 \u5728\u4e0b\u9762\u7684\u793a\u4f8b\u4e2d\uff0c\u8ba9\u6211\u4eec\u5047\u8bbe\u60a8\u7684BliKVM\u5df2\u83b7\u5f97\u5730\u5740 192.168.0.100 \uff0c\u60a8\u5df2\u7ecf\u6210\u529f\u4f7f\u7528\u4e0a\u8ff0\u6307\u793a\u627e\u5230\u4e86\u8be5\u5730\u5740\u3002 \u8bbf\u95eeBliKVM Web\u754c\u9762 \u5728 \u5927\u591a\u6570 \u7f51\u7edc\u4e2d\uff0c\u60a8\u53ef\u4ee5\u5728\u4efb\u4f55\u6d4f\u89c8\u5668\u4e2d\u4f7f\u7528\u4ee5\u4e0bURL\u8bbf\u95eeBliKVM\uff1a http://192.168.0.100/ \u3002Google Chrome\uff08Chromium\uff09\u3001Firefox\u548cSafari\u4e0e\u542f\u75280\u4e2a\u6269\u5c55\u7684\u60c5\u51b5\u4e0b\u6548\u679c\u6700\u4f73\uff0c\u5982\u679c\u5176\u4e2d\u4e00\u4e2a\u53ef\u4ee5\u6b63\u5e38\u5de5\u4f5c\u800c\u53e6\u4e00\u4e2a\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\uff0c\u5219\u53ef\u80fd\u662f\u6d4f\u89c8\u5668/\u6269\u5c55\u7684\u95ee\u9898\u3002\u5efa\u8bae\u60a8\u4f7f\u7528\u79c1\u5bc6\u6d4f\u89c8\u7a97\u53e3\u6216\u65e0\u75d5\u6a21\u5f0f\u3002\u4e0d\u652f\u6301Internet Explorer\u548c\u65e9\u671f\u7248\u672c\u7684Microsoft Edge\uff08\u975eChromium\u7248\u672c\uff09\u3002 \u9ed8\u8ba4\u7528\u6237\u540d\u4e3a admin \uff0c\u5bc6\u7801\u4e5f\u4e3a admin \u3002 \u767b\u5f55\u540e\uff0c\u60a8\u5c06\u83b7\u5f97\u8bbf\u95ee\u4e3b\u8981\u529f\u80fd\u83dc\u5355\u7684\u6743\u9650\u3002\u4f7f\u7528Web\u7684\u4fee\u6539\u8d26\u53f7\u5bc6\u7801\u529f\u80fd\uff0c\u60a8\u53ef\u4ee5\u66f4\u6539\u7cfb\u7edf\u8bbe\u7f6e\u548c\u5bc6\u7801\u3002 \u6ce8\u610f\u5f53\u524d\u8bbf\u95eeBliKVM web\u662fhttp\uff0c\u800c\u975ehttps \u901a\u8fc7SSH\u8bbf\u95eeBliKVM SSH\u662fLinux\u4e16\u754c\u4e2d\u6700\u5e38\u7528\u7684\u8fdc\u7a0b\u8bbf\u95ee\u65b9\u6cd5\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7SSH\u8bbf\u95eeBliKVM\u3002\u6b64\u65b9\u6cd5\u7528\u4e8e\u7ba1\u7406\u8bbe\u5907\uff1a Linux\u3001MacOS\uff1a \u6253\u5f00\u4efb\u4f55\u7ec8\u7aef\u5e94\u7528\u7a0b\u5e8f\uff0c\u7136\u540e\u8fd0\u884c\uff1a ssh blikvm@192.168.0.100 \u3002 Windows\uff1a \u4f7f\u7528 PuTTY \u8fdb\u884c\u64cd\u4f5c\u3002 \u9ed8\u8ba4\u7684 blikvm \u7528\u6237\u5bc6\u7801\u4e3a blikvm \u3002 \u60a8\u53ef\u4ee5\u4f7f\u7528 sudo -i \u83b7\u5f97root\u6743\u9650\u3002 \u53ef\u9009\uff1a\u66f4\u65b0BliKVM\u8f6f\u4ef6 \u8fd9\u90e8\u5206\u4e0d\u662f\u5fc5\u9700\u7684\uff0c\u4ec5\u5728\u60a8\u5728BliKVM\u65c1\u8fb9\u4ee5\u4fbf\u6062\u590d\u5b83\u65f6\u624d\u5e94\u6267\u884c\uff0c\u53ef\u4ee5\u53c2\u8003 \u66f4\u65b0\u8f6f\u4ef6\u6307\u5357 \u5b8c\u6210\uff1b BliKVM OS\u7ec8\u7aef\u4f7f\u7528\u6ce8\u610f\u4e8b\u9879 \u4e00\u4e9b\u914d\u7f6e\u66f4\u6539\u90fd\u5fc5\u987b\u5728 root \u7528\u6237\uff08\u5373\u7ba1\u7406\u5458\uff09\u4e0b\u8fdb\u884c\u3002 \u83b7\u53d6root\u6743\u9650 \u5982\u679c\u60a8\u901a\u8fc7SSH\u767b\u5f55\uff0c\u9700\u4f7f\u7528 sudo -i \u83b7\u5f97root\u6743\u9650\uff1b v1\u3001v2\u3001v3\u7248\u672c\u7684BliKVM\u5b58\u50a8\u5361\u4ee5\u53ea\u8bfb\u6a21\u5f0f\u6302\u8f7d\u3002\u8fd9\u6837\u53ef\u4ee5\u5728\u7a81\u7136\u505c\u7535\u65f6\u4fdd\u62a4\u6587\u4ef6\u7cfb\u7edf\u514d\u53d7\u635f\u574f\u3002\u8981\u7f16\u8f91\u4efb\u4f55\u6587\u4ef6\u5e76\u8fdb\u884c\u66f4\u6539\uff0c\u9700\u8981\u5c06\u6587\u4ef6\u7cfb\u7edf\u91cd\u65b0\u6302\u8f7d\u4e3a\u8bfb\u5199\u6a21\u5f0f\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u7ec8\u7aef\u662f\u6709\u6709ro\u6216rw\u5b57\u6837\u6765\u5224\u65ad\u5f53\u524d\u7cfb\u7edf\u6a21\u5f0f\u3002 \u542f\u7528\u5199\u5165\u6a21\u5f0f \u8981\u542f\u7528\u5199\u5165\u6a21\u5f0f\uff0c\u8bf7\u8fd0\u884c rw \u547d\u4ee4\u3002 \u8981\u7981\u7528\u5199\u5165\u6a21\u5f0f\uff0c\u8bf7\u8fd0\u884c ro \u547d\u4ee4\u3002 \u5982\u679c\u6536\u5230 \"Device is busy\"\uff08\u8bbe\u5907\u5fd9\uff09\u7684\u6d88\u606f\uff0c\u8bf7\u6267\u884c reboot \u547d\u4ee4\u3002 \u4e0b\u4e00\u6b65\u662f\u4ec0\u4e48\uff1f \u4f7f\u7528 \u7aef\u53e3\u8f6c\u53d1 \u6216 Tailscale VPN \u8bbe\u7f6e\u4e92\u8054\u7f51\u8bbf\u95ee\u3002 \u4f7f\u7528\u5de6\u4fa7\u7684\u76ee\u5f55\u5bfc\u822a\u63a2\u7d22BliKVM\u7684\u529f\u80fd\u3002 \u52a0\u5165\u6211\u4eec\u7684 Discord \u4e0e\u793e\u533a\u548c\u5f00\u53d1\u4eba\u5458\u4ea4\u6d41\u3002 \u67e5\u770b GitHub - BliKVM \u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u9879\u76ee\uff01 \u5e38\u89c1\u95ee\u9898\u548c\u6545\u969c\u6392\u9664 \u5982\u679c\u60a8\u6709\u4efb\u4f55\u95ee\u9898\u6216\u9047\u5230\u95ee\u9898\uff0c\u8bf7\u67e5\u770b \u5e38\u89c1\u95ee\u9898 \u3002 \u771f\u7684\uff0c\u5b83\u975e\u5e38\u6709\u7528\uff01\u6211\u4eec\u53ef\u80fd\u5df2\u7ecf\u4e3a\u60a8\u627e\u5230\u89e3\u51b3\u65b9\u6848\u4e86 :) \u5982\u679c\u9700\u8981\u4efb\u4f55\u5176\u4ed6\u5e2e\u52a9\u548c\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7 Discord\u804a\u5929 \u4e0e\u6211\u4eec\u8054\u7cfb\u3002","title":"\u7b2c\u4e00\u6b65"},{"location":"first_steps/#_1","text":"","title":"\u521d\u6b65\u64cd\u4f5c"},{"location":"first_steps/#_2","text":"\u53ef\u9009\uff1a\u8bbe\u7f6eWi-Fi\u8fde\u63a5 \u8bf7\u9605\u8bfb\u4ee5\u4e0b\u6ce8\u610f\u4e8b\u9879 \u6709\u7ebf\u4ee5\u592a\u7f51\u8fde\u63a5\u662f\u6700\u53ef\u9760\u7684\u65b9\u5f0f\uff0c\u56e0\u6b64\u6700\u597d\u4f7f\u7528 \u6709\u7ebf\u7535\u7f06 \u3002\u4f46\u6211\u4eec\u4e0d\u80fd\u963b\u6b62\u60a8\u4f7f\u7528\u65e0\u7ebf\u8fde\u63a5... :) \u786e\u8ba4\u60a8\u4f7f\u7528\u7684\u7248\u672c\u542b\u6709Wi-Fi\u529f\u80fd\uff0c\u5e76\u4e14Wi-Fi\u5929\u7ebf\u5df2\u5b89\u88c5. \u8bf7\u53c2\u8003 Wi-Fi\u8fde\u63a5\u6307\u5357 \uff0c\u5bf9\u60a8\u7684\u8bbe\u5907\u8fdb\u884cWi-Fi\u8bbe\u7f6e\uff1b \u7ed9\u8bbe\u5907\u4f9b\u7535\u3002 \u5728\u8bbe\u5907\u5b8c\u5168\u542f\u52a8\u524d\uff0c\u8bf7\u52ff\u5173\u95ed\u7535\u6e90","title":"\u9996\u6b21\u4e0a\u7535"},{"location":"first_steps/#blikvm","text":"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cBliKVM\u901a\u8fc7DHCP\u63a5\u6536\u52a8\u6001IP\u5730\u5740\u3002\u4f1a\u5728BliKVM\u663e\u793a\u5668\u4e0a\u663e\u793aIP\u5730\u5740\u3002\u5982\u679c\u60a8\u662fDIY\u786c\u4ef6\u6ca1\u6709\u663e\u793a\u5668\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u63d0\u793a\uff1a \u5728\u7f51\u7edc\u4e2d\u67e5\u627eBliKVM \u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u65b9\u6cd5\u786e\u5b9aBliKVM\u7684IP\u5730\u5740\uff1a \u5e38\u7528\u65b9\u6cd5\uff1a \u6253\u5f00\u8def\u7531\u5668\u7684Web\u754c\u9762\uff0c\u5e76\u67e5\u627e\u5df2\u5206\u914d\u7684IP\u5730\u5740\u5217\u8868\u3002\u5177\u4f53\u65b9\u6cd5\u53d6\u51b3\u4e8e\u8def\u7531\u5668\u578b\u53f7\u3002 \u4ec5\u9650Linux\uff1a \u4f7f\u7528\u547d\u4ee4 arp-scan --localnet \u3002 Linux\u3001MacOS\u3001Windows\uff1a \u4e0b\u8f7d\u5e76\u8fd0\u884c Angry IP Scanner \u3002 Windows PowerShell\uff1a \u4f7f\u7528\u547d\u4ee4 arp -a \u3002 \u5728\u4e0b\u9762\u7684\u793a\u4f8b\u4e2d\uff0c\u8ba9\u6211\u4eec\u5047\u8bbe\u60a8\u7684BliKVM\u5df2\u83b7\u5f97\u5730\u5740 192.168.0.100 \uff0c\u60a8\u5df2\u7ecf\u6210\u529f\u4f7f\u7528\u4e0a\u8ff0\u6307\u793a\u627e\u5230\u4e86\u8be5\u5730\u5740\u3002 \u8bbf\u95eeBliKVM Web\u754c\u9762 \u5728 \u5927\u591a\u6570 \u7f51\u7edc\u4e2d\uff0c\u60a8\u53ef\u4ee5\u5728\u4efb\u4f55\u6d4f\u89c8\u5668\u4e2d\u4f7f\u7528\u4ee5\u4e0bURL\u8bbf\u95eeBliKVM\uff1a http://192.168.0.100/ \u3002Google Chrome\uff08Chromium\uff09\u3001Firefox\u548cSafari\u4e0e\u542f\u75280\u4e2a\u6269\u5c55\u7684\u60c5\u51b5\u4e0b\u6548\u679c\u6700\u4f73\uff0c\u5982\u679c\u5176\u4e2d\u4e00\u4e2a\u53ef\u4ee5\u6b63\u5e38\u5de5\u4f5c\u800c\u53e6\u4e00\u4e2a\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\uff0c\u5219\u53ef\u80fd\u662f\u6d4f\u89c8\u5668/\u6269\u5c55\u7684\u95ee\u9898\u3002\u5efa\u8bae\u60a8\u4f7f\u7528\u79c1\u5bc6\u6d4f\u89c8\u7a97\u53e3\u6216\u65e0\u75d5\u6a21\u5f0f\u3002\u4e0d\u652f\u6301Internet Explorer\u548c\u65e9\u671f\u7248\u672c\u7684Microsoft Edge\uff08\u975eChromium\u7248\u672c\uff09\u3002 \u9ed8\u8ba4\u7528\u6237\u540d\u4e3a admin \uff0c\u5bc6\u7801\u4e5f\u4e3a admin \u3002 \u767b\u5f55\u540e\uff0c\u60a8\u5c06\u83b7\u5f97\u8bbf\u95ee\u4e3b\u8981\u529f\u80fd\u83dc\u5355\u7684\u6743\u9650\u3002\u4f7f\u7528Web\u7684\u4fee\u6539\u8d26\u53f7\u5bc6\u7801\u529f\u80fd\uff0c\u60a8\u53ef\u4ee5\u66f4\u6539\u7cfb\u7edf\u8bbe\u7f6e\u548c\u5bc6\u7801\u3002 \u6ce8\u610f\u5f53\u524d\u8bbf\u95eeBliKVM web\u662fhttp\uff0c\u800c\u975ehttps \u901a\u8fc7SSH\u8bbf\u95eeBliKVM SSH\u662fLinux\u4e16\u754c\u4e2d\u6700\u5e38\u7528\u7684\u8fdc\u7a0b\u8bbf\u95ee\u65b9\u6cd5\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7SSH\u8bbf\u95eeBliKVM\u3002\u6b64\u65b9\u6cd5\u7528\u4e8e\u7ba1\u7406\u8bbe\u5907\uff1a Linux\u3001MacOS\uff1a \u6253\u5f00\u4efb\u4f55\u7ec8\u7aef\u5e94\u7528\u7a0b\u5e8f\uff0c\u7136\u540e\u8fd0\u884c\uff1a ssh blikvm@192.168.0.100 \u3002 Windows\uff1a \u4f7f\u7528 PuTTY \u8fdb\u884c\u64cd\u4f5c\u3002 \u9ed8\u8ba4\u7684 blikvm \u7528\u6237\u5bc6\u7801\u4e3a blikvm \u3002 \u60a8\u53ef\u4ee5\u4f7f\u7528 sudo -i \u83b7\u5f97root\u6743\u9650\u3002 \u53ef\u9009\uff1a\u66f4\u65b0BliKVM\u8f6f\u4ef6 \u8fd9\u90e8\u5206\u4e0d\u662f\u5fc5\u9700\u7684\uff0c\u4ec5\u5728\u60a8\u5728BliKVM\u65c1\u8fb9\u4ee5\u4fbf\u6062\u590d\u5b83\u65f6\u624d\u5e94\u6267\u884c\uff0c\u53ef\u4ee5\u53c2\u8003 \u66f4\u65b0\u8f6f\u4ef6\u6307\u5357 \u5b8c\u6210\uff1b","title":"\u8bbf\u95eeBliKVM"},{"location":"first_steps/#blikvm-os","text":"\u4e00\u4e9b\u914d\u7f6e\u66f4\u6539\u90fd\u5fc5\u987b\u5728 root \u7528\u6237\uff08\u5373\u7ba1\u7406\u5458\uff09\u4e0b\u8fdb\u884c\u3002 \u83b7\u53d6root\u6743\u9650 \u5982\u679c\u60a8\u901a\u8fc7SSH\u767b\u5f55\uff0c\u9700\u4f7f\u7528 sudo -i \u83b7\u5f97root\u6743\u9650\uff1b v1\u3001v2\u3001v3\u7248\u672c\u7684BliKVM\u5b58\u50a8\u5361\u4ee5\u53ea\u8bfb\u6a21\u5f0f\u6302\u8f7d\u3002\u8fd9\u6837\u53ef\u4ee5\u5728\u7a81\u7136\u505c\u7535\u65f6\u4fdd\u62a4\u6587\u4ef6\u7cfb\u7edf\u514d\u53d7\u635f\u574f\u3002\u8981\u7f16\u8f91\u4efb\u4f55\u6587\u4ef6\u5e76\u8fdb\u884c\u66f4\u6539\uff0c\u9700\u8981\u5c06\u6587\u4ef6\u7cfb\u7edf\u91cd\u65b0\u6302\u8f7d\u4e3a\u8bfb\u5199\u6a21\u5f0f\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u7ec8\u7aef\u662f\u6709\u6709ro\u6216rw\u5b57\u6837\u6765\u5224\u65ad\u5f53\u524d\u7cfb\u7edf\u6a21\u5f0f\u3002 \u542f\u7528\u5199\u5165\u6a21\u5f0f \u8981\u542f\u7528\u5199\u5165\u6a21\u5f0f\uff0c\u8bf7\u8fd0\u884c rw \u547d\u4ee4\u3002 \u8981\u7981\u7528\u5199\u5165\u6a21\u5f0f\uff0c\u8bf7\u8fd0\u884c ro \u547d\u4ee4\u3002 \u5982\u679c\u6536\u5230 \"Device is busy\"\uff08\u8bbe\u5907\u5fd9\uff09\u7684\u6d88\u606f\uff0c\u8bf7\u6267\u884c reboot \u547d\u4ee4\u3002","title":"BliKVM OS\u7ec8\u7aef\u4f7f\u7528\u6ce8\u610f\u4e8b\u9879"},{"location":"first_steps/#_3","text":"\u4f7f\u7528 \u7aef\u53e3\u8f6c\u53d1 \u6216 Tailscale VPN \u8bbe\u7f6e\u4e92\u8054\u7f51\u8bbf\u95ee\u3002 \u4f7f\u7528\u5de6\u4fa7\u7684\u76ee\u5f55\u5bfc\u822a\u63a2\u7d22BliKVM\u7684\u529f\u80fd\u3002 \u52a0\u5165\u6211\u4eec\u7684 Discord \u4e0e\u793e\u533a\u548c\u5f00\u53d1\u4eba\u5458\u4ea4\u6d41\u3002 \u67e5\u770b GitHub - BliKVM \u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u9879\u76ee\uff01","title":"\u4e0b\u4e00\u6b65\u662f\u4ec0\u4e48\uff1f"},{"location":"first_steps/#_4","text":"\u5982\u679c\u60a8\u6709\u4efb\u4f55\u95ee\u9898\u6216\u9047\u5230\u95ee\u9898\uff0c\u8bf7\u67e5\u770b \u5e38\u89c1\u95ee\u9898 \u3002 \u771f\u7684\uff0c\u5b83\u975e\u5e38\u6709\u7528\uff01\u6211\u4eec\u53ef\u80fd\u5df2\u7ecf\u4e3a\u60a8\u627e\u5230\u89e3\u51b3\u65b9\u6848\u4e86 :) \u5982\u679c\u9700\u8981\u4efb\u4f55\u5176\u4ed6\u5e2e\u52a9\u548c\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7 Discord\u804a\u5929 \u4e0e\u6211\u4eec\u8054\u7cfb\u3002","title":"\u5e38\u89c1\u95ee\u9898\u548c\u6545\u969c\u6392\u9664"},{"location":"flashing_os/","text":"Flashing the OS image Micro-SD Card Requirements Minimum 16 Gb Class 10 is strongly recommended \u4e3a\u4ec0\u4e48\u8f6f\u4ef6\u6709BLIKVM\u548cPiKVM\u4e24\u4e2a\u7248\u672c\uff1f\u4e24\u4e2a\u7248\u672c\u6709\u4ec0\u4e48\u533a\u522b\uff1f\u6211\u5e94\u8be5\u9009\u62e9\u54ea\u4e2a\uff1f\u6211\u53ef\u4ee5\u7528PiKVM\u5b98\u65b9\u955c\u50cf\u5417\uff1f BLIKVM\u9879\u76ee\u8bde\u751f\u4e4b\u521d\u5148\u7814\u53d1\u4e86\u786c\u4ef6\uff0c\u8f6f\u4ef6\u76f4\u63a5\u4f7f\u7528\u4e86PiKVM\u3002\u968f\u7740\u9879\u76ee\u7684\u4e0d\u65ad\u8fdb\u884c\uff0cBLIKVM\u81ea\u7814\u4e86\u81ea\u5df1\u7684\u5168\u65b0\u67b6\u6784\u7684\u8f6f\u4ef6\u7248\u672c\uff0c\u4e5f\u540c\u65f6\u4e3a\u66f4\u6df1\u5ea6\u7684\u548c\u81ea\u5df1\u7684\u786c\u4ef6\u914d\u5408\u505a\u597d\u57fa\u7840\uff1b BLIKVM\u548cPiKVM\u6700\u6838\u5fc3\u7684\u529f\u80fd\u5bf9\u7528\u6237\u6765\u8bf4\u662f\u4e00\u81f4\u7684\uff0c\u4e00\u4e9b\u7ec6\u5206\u529f\u80fd\u4e0d\u592a\u4e00\u6837\uff0c\u5982BLIKVM\u652f\u6301\u591a\u8bed\u8a00\uff1b \u9700\u6839\u636e\u60a8\u81ea\u5df1\u4f7f\u7528\u611f\u53d7\u53bb\u9009\u62e9\uff1b \u53ef\u4ee5\u4f7f\u7528PiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u4f46\u9700\u8981\u60a8\u6839\u636e\u786c\u4ef6\u7684\u4e0d\u540c\u505a\u4e00\u4e9b\u9002\u914d\uff0c\u4e3b\u8981\u6d89\u53ca\u5230\u7684\u6709\u5c4f\u5e55\u3001\u98ce\u6247\u7b49\uff0c\u56e0PiKVM\u5b98\u7f51\u955c\u50cf\u4e00\u76f4\u518d\u66f4\u65b0\uff0c\u6240\u4ee5\u5177\u4f53\u9002\u914d\u60c5\u51b5\u9700\u6839\u636e\u5f53\u65f6\u60a8\u4f7f\u7528\u5177\u4f53\u9047\u5230\u7684\u60c5\u51b5\u518d\u770b\uff1b Download the image \u9700\u8981\u5728v4\u4e0a\u8fd0\u884c\u81ea\u884c\u5b89\u88c5PiKVM\u7684\u7528\u6237\u53ef\u4ee5\u53c2\u8003\u6b64 \u8bf4\u660e \u3002 BLIKVM software You\u53ef\u4ee5\u4ece\u4e0b\u9762\u7684\u94fe\u63a5\u4e2d\u4e0b\u8f7dBliKVM v1 CM4, v2 PCIe, v3 HAT, v4 Allwinner\u7684BliKVM\u955c\u50cf, v1 v2 v3\u4f7f\u7528\u540c\u4e00\u4e2a\u955c\u50cf\u3002 BLIKVM image Web UI\u98ce\u683c\u5982\u4e0b: Base on PiKVM software \u57fa\u4e8ePiIKVM\u7684\u955c\u50cf\uff0c\u6811\u8393\u6d3e4B\u548cCM4\u4e0d\u516c\u7528\u4e00\u4e2a\u955c\u50cf\uff0c\u8fdb\u5165\u94fe\u63a5\u540e\u53ef\u770b\u5230\u4ee5\u5404\u786c\u4ef6\u7248\u672c(HAT CM4 PCIe)\u547d\u540d\u7684\u955c\u50cf\u3002 PiKVM image Flash the image Tip Ignore request to format your sd card, this step is not nessessary. Choose the most suitable method for you. How to flash the eMMC on a Raspberry Pi Compute Module 4 Board Link \u5982\u679c\u4f60\u4f7f\u7528\u7684CM4\u662f\u542beMMC\u7684\u7248\u672c\uff0c\u5982CM4102016\u578b\u53f7\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528v1\u548cv2\u786c\u4ef6\u76f4\u63a5\u5bf9CM4\u7684eMMC\u8fdb\u884c\u70e7\u5f55\u3002\u5982\u679c\u4f60\u7684CM4\u4e0d\u5e26eMMC\uff0c\u800c\u662f\u4f7f\u7528SD\u5361\uff0c\u4f60\u5219\u4e0d\u9700\u8981\u770b\u6b64\u7ae0\u8282\u3002\u9996\u5148\u5728blikvm\u786c\u4ef6\u4e0a\u5bf9CM4\u7684eMMC\u8fdb\u884c\u70e7\u5f55\uff0c\u4f60\u9700\u8981\u5148\u77ed\u63a5boot\u5f15\u811a\u3002 If you use BLIKVM CM4 version Then connect the data cable to the USB OTG interface. Power on blikvm and observe the act light, the green light is always on. If you use BLIKVM PCIe version Then connect the data cable to the USB-PC interface. Power on blikvm and observe the ACT and PWR LED isn't light. After initialize EMMC through the usbboot/rpiboot, the ACT and PWR LED light is always on. EMMC knowledge If you use raspberry pi computing modules such as CM3 or CM4 EMMC\uff0cyou can initialize EMMC through the usbboot. Note that the EMMC version cannot directly use the SD card to start the image. From this video you can learn how to flash image quickly. How to flash the eMMC on a Raspberry Pi Compute Module 4 video Taking Ubuntu system as an example: Linux usbboot If you use an Micro-SD Card, you don't need to care about that. # sudo apt-get install libusb-1.0-0-dev # git clone --depth=1 https://github.com/raspberrypi/usbboot # cd usbboot # make # sudo ./rpiboot If the content shown in the figure below appears, it indicates that EMMC initialization is successful. Using RPi Imager (Linux, MacOS and Windows) Download and install the latest version of RPi Imager . Run RPi Imager: Press CHOOSE OS and select Use custom image at bottom of the list: After clicking on this item, select the image file ( .img.xz ), then click CHOOSE STORAGE : Insert the memory card into the card reader. Choose the card reader from this list. Be careful and choose the right device: After choosing the memory card, press the WRITE button. Confirm the operation when you are asked about it: Wait for the process to finish. Get yourself a coffee or do some stretching :) Tip The process may hang at 99% for a long time, this is okay, just wait for it to complete 8.Remove the memory card after successful completion: Tip If an error occurs during flashing or booting PiKVM, repeat the process.","title":"\u70e7\u5f55\u955c\u50cf"},{"location":"flashing_os/#flashing-the-os-image","text":"Micro-SD Card Requirements Minimum 16 Gb Class 10 is strongly recommended \u4e3a\u4ec0\u4e48\u8f6f\u4ef6\u6709BLIKVM\u548cPiKVM\u4e24\u4e2a\u7248\u672c\uff1f\u4e24\u4e2a\u7248\u672c\u6709\u4ec0\u4e48\u533a\u522b\uff1f\u6211\u5e94\u8be5\u9009\u62e9\u54ea\u4e2a\uff1f\u6211\u53ef\u4ee5\u7528PiKVM\u5b98\u65b9\u955c\u50cf\u5417\uff1f BLIKVM\u9879\u76ee\u8bde\u751f\u4e4b\u521d\u5148\u7814\u53d1\u4e86\u786c\u4ef6\uff0c\u8f6f\u4ef6\u76f4\u63a5\u4f7f\u7528\u4e86PiKVM\u3002\u968f\u7740\u9879\u76ee\u7684\u4e0d\u65ad\u8fdb\u884c\uff0cBLIKVM\u81ea\u7814\u4e86\u81ea\u5df1\u7684\u5168\u65b0\u67b6\u6784\u7684\u8f6f\u4ef6\u7248\u672c\uff0c\u4e5f\u540c\u65f6\u4e3a\u66f4\u6df1\u5ea6\u7684\u548c\u81ea\u5df1\u7684\u786c\u4ef6\u914d\u5408\u505a\u597d\u57fa\u7840\uff1b BLIKVM\u548cPiKVM\u6700\u6838\u5fc3\u7684\u529f\u80fd\u5bf9\u7528\u6237\u6765\u8bf4\u662f\u4e00\u81f4\u7684\uff0c\u4e00\u4e9b\u7ec6\u5206\u529f\u80fd\u4e0d\u592a\u4e00\u6837\uff0c\u5982BLIKVM\u652f\u6301\u591a\u8bed\u8a00\uff1b \u9700\u6839\u636e\u60a8\u81ea\u5df1\u4f7f\u7528\u611f\u53d7\u53bb\u9009\u62e9\uff1b \u53ef\u4ee5\u4f7f\u7528PiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u4f46\u9700\u8981\u60a8\u6839\u636e\u786c\u4ef6\u7684\u4e0d\u540c\u505a\u4e00\u4e9b\u9002\u914d\uff0c\u4e3b\u8981\u6d89\u53ca\u5230\u7684\u6709\u5c4f\u5e55\u3001\u98ce\u6247\u7b49\uff0c\u56e0PiKVM\u5b98\u7f51\u955c\u50cf\u4e00\u76f4\u518d\u66f4\u65b0\uff0c\u6240\u4ee5\u5177\u4f53\u9002\u914d\u60c5\u51b5\u9700\u6839\u636e\u5f53\u65f6\u60a8\u4f7f\u7528\u5177\u4f53\u9047\u5230\u7684\u60c5\u51b5\u518d\u770b\uff1b","title":"Flashing the OS image"},{"location":"flashing_os/#download-the-image","text":"\u9700\u8981\u5728v4\u4e0a\u8fd0\u884c\u81ea\u884c\u5b89\u88c5PiKVM\u7684\u7528\u6237\u53ef\u4ee5\u53c2\u8003\u6b64 \u8bf4\u660e \u3002","title":"Download the image"},{"location":"flashing_os/#blikvm-software","text":"You\u53ef\u4ee5\u4ece\u4e0b\u9762\u7684\u94fe\u63a5\u4e2d\u4e0b\u8f7dBliKVM v1 CM4, v2 PCIe, v3 HAT, v4 Allwinner\u7684BliKVM\u955c\u50cf, v1 v2 v3\u4f7f\u7528\u540c\u4e00\u4e2a\u955c\u50cf\u3002 BLIKVM image Web UI\u98ce\u683c\u5982\u4e0b:","title":"BLIKVM software"},{"location":"flashing_os/#base-on-pikvm-software","text":"\u57fa\u4e8ePiIKVM\u7684\u955c\u50cf\uff0c\u6811\u8393\u6d3e4B\u548cCM4\u4e0d\u516c\u7528\u4e00\u4e2a\u955c\u50cf\uff0c\u8fdb\u5165\u94fe\u63a5\u540e\u53ef\u770b\u5230\u4ee5\u5404\u786c\u4ef6\u7248\u672c(HAT CM4 PCIe)\u547d\u540d\u7684\u955c\u50cf\u3002 PiKVM image","title":"Base on PiKVM software"},{"location":"flashing_os/#flash-the-image","text":"Tip Ignore request to format your sd card, this step is not nessessary. Choose the most suitable method for you. How to flash the eMMC on a Raspberry Pi Compute Module 4","title":"Flash the image"},{"location":"flashing_os/#board-link","text":"\u5982\u679c\u4f60\u4f7f\u7528\u7684CM4\u662f\u542beMMC\u7684\u7248\u672c\uff0c\u5982CM4102016\u578b\u53f7\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528v1\u548cv2\u786c\u4ef6\u76f4\u63a5\u5bf9CM4\u7684eMMC\u8fdb\u884c\u70e7\u5f55\u3002\u5982\u679c\u4f60\u7684CM4\u4e0d\u5e26eMMC\uff0c\u800c\u662f\u4f7f\u7528SD\u5361\uff0c\u4f60\u5219\u4e0d\u9700\u8981\u770b\u6b64\u7ae0\u8282\u3002\u9996\u5148\u5728blikvm\u786c\u4ef6\u4e0a\u5bf9CM4\u7684eMMC\u8fdb\u884c\u70e7\u5f55\uff0c\u4f60\u9700\u8981\u5148\u77ed\u63a5boot\u5f15\u811a\u3002 If you use BLIKVM CM4 version Then connect the data cable to the USB OTG interface. Power on blikvm and observe the act light, the green light is always on. If you use BLIKVM PCIe version Then connect the data cable to the USB-PC interface. Power on blikvm and observe the ACT and PWR LED isn't light. After initialize EMMC through the usbboot/rpiboot, the ACT and PWR LED light is always on. EMMC knowledge If you use raspberry pi computing modules such as CM3 or CM4 EMMC\uff0cyou can initialize EMMC through the usbboot. Note that the EMMC version cannot directly use the SD card to start the image. From this video you can learn how to flash image quickly. How to flash the eMMC on a Raspberry Pi Compute Module 4 video Taking Ubuntu system as an example:","title":"Board Link"},{"location":"flashing_os/#linux-usbboot","text":"If you use an Micro-SD Card, you don't need to care about that. # sudo apt-get install libusb-1.0-0-dev # git clone --depth=1 https://github.com/raspberrypi/usbboot # cd usbboot # make # sudo ./rpiboot If the content shown in the figure below appears, it indicates that EMMC initialization is successful.","title":"Linux usbboot"},{"location":"flashing_os/#using-rpi-imager-linux-macos-and-windows","text":"Download and install the latest version of RPi Imager . Run RPi Imager: Press CHOOSE OS and select Use custom image at bottom of the list: After clicking on this item, select the image file ( .img.xz ), then click CHOOSE STORAGE : Insert the memory card into the card reader. Choose the card reader from this list. Be careful and choose the right device: After choosing the memory card, press the WRITE button. Confirm the operation when you are asked about it: Wait for the process to finish. Get yourself a coffee or do some stretching :) Tip The process may hang at 99% for a long time, this is okay, just wait for it to complete 8.Remove the memory card after successful completion: Tip If an error occurs during flashing or booting PiKVM, repeat the process.","title":"Using RPi Imager (Linux, MacOS and Windows)"},{"location":"hdmi-csi-i2s/","text":"HDMI\u8f6cCSI&I2S\u6a21\u5757\u624b\u518c \u5c06HDMI\u4fe1\u53f7\u8f6c\u6362\u6210CSI\u89c6\u9891\u4fe1\u53f7\u548cI2S\u97f3\u9891\u4fe1\u53f7, \u76ee\u524d\u5168\u5e73\u53f0\u652f\u6301(zero, Pi3B, Pi4B, CM4, Pi5B),\u5176\u4e2d\u6700\u9ad8\u91c7\u96c6\u5206\u8fa8\u7387\u4e0d\u4ec5\u4ec5\u53d6\u51b3\u4e8eHDMI\u8f6cCSI\u8f6c\u6362\u677f\uff0c\u540c\u65f6\u4e5f\u53d6\u51b3\u4e8e\u4f60\u4f7f\u7528\u7684\u6811\u8393\u6d3e\u786c\u4ef6\u7248\u672c\uff0c\u6811\u8393\u6d3e\u786c\u4ef6\u7248\u76ee\u524d\u4e3b\u8981\u5206\u4e24\u4e2a\u7cfb\u5217\uff0c\u6700\u9ad8\u652f\u63011080P60Hz\uff0c\u548c\u6700\u9ad8\u652f\u63011080P50Hz\u3002 \u6700\u9ad8\u652f\u63011080P60Hz\u7684Pi\u7248\u672c(CM3\uff0cCM4\uff0cPi5B) \u6700\u9ad8\u652f\u63011080P50Hz\u7684Pi\u7248\u672c(zero, zero2, Pi3B, Pi4B\u7b49) \u7b80\u4ecb \u6b64\u6a21\u5757\u5c06HDMI\u4fe1\u53f7\u8f6c\u6362\u6210CSI\u89c6\u9891\u4fe1\u53f7\u548cI2S\u97f3\u9891\u4fe1\u53f7\uff0c\u6700\u9ad8\u652f\u63011080P60Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u5728\u6811\u8393\u6d3e\u4e0a\u5de5\u4f5c\u7684\u5f88\u597d\uff0c\u76ee\u524d\u5171\u67093\u4e2a\u7248\u672c(C779\u3001C780\u3001C790). C790\u662f\u76ee\u524d\u6700\u65b0\u7684\u7248\u672c\uff0c\u89e3\u51b3\u4e86\u6240\u6709\u5df2\u77e5\u7684\u95ee\u9898\uff0c\u540c\u662f\u6709CSI 2\u901a\u9053\u548c4\u901a\u9053\u63a5\u53e3\uff0cI2S\u97f3\u9891\u63a5\u53e3\uff0c\u4fee\u590d\u4e86HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898\u3002 \u6027\u80fd\u53c2\u6570 C790 \u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u5728\u6811\u8393\u6d3e\u4e0a\u6b64\u6a21\u5757\u6700\u9ad8\u652f\u63011080P60Hz\u8f93\u5165\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG 4\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f CSI-2\u63a5\u53e31: 15 pin FPC, \u95f4\u8ddd1.0 mm, \u5728C790\u6a21\u5757\u7684\u6b63\u9762. CSI-2\u63a5\u53e32, 22 pin FPC, \u95f4\u8ddd0.5 mm, \u5728C790\u6a21\u5757\u7684\u80cc\u9762. \u5c3a\u5bf8: 30 x 45 mm \u5b89\u88c5\u5b54\u4f4d:4 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u6811\u8393\u6d3e4B\u53ea\u652f\u63011080P50Hz(\u56e0\u4e3a4B\u53ea\u6709\u4e24\u4e2aCSI-2\u901a\u9053) ,\u6811\u8393\u6d3eCM4\u53ea\u652f\u63011080P60Hz,\u6240\u4ee5\u5982\u679c\u4f60\u7684\u8f93\u5165\u8bbe\u5907\u4e00\u5b9a\u8981\u662f1080P60Hz\uff0c\u8bf7\u540c\u65f6\u4f7f\u7528CM4\u548cC790. \u63a5\u53e3 C790\u6709\u4e24\u4e2aCSI\u8f93\u51fa\u63a5\u53e3: \u63a5\u53e31\uff0c\u5728C790\u6b63\u9762\uff0c15 pin FPC, \u95f4\u8ddd1.0 mm; \u63a5\u53e31\uff0c\u5728C790\u80cc\u9762,22 pin FPC, \u95f4\u8ddd0.5 mm\u3002 \u5c3a\u5bf8 \u5b89\u88c5\u53c2\u8003 C780 C780A\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P50Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 2\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 15 pin FPC, \u95f4\u8ddd 1.0 mm\uff1b \u5c3a\u5bf8: 30 x 65 mm (\u6298\u65ad\u524d); 30 x 45 mm (\u6298\u65ad\u540e) \u5b89\u88c5\u5b54\u4f4d:6 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g C780B\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P60Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 4\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 22 pin FPC, \u95f4\u8ddd 0.5 mm\uff1b \u5c3a\u5bf8: 30 x 65 mm (\u6298\u65ad\u524d); 30 x 45 mm (\u6298\u65ad\u540e) \u5b89\u88c5\u5b54\u4f4d:6 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u63a5\u53e3 \u97f3\u9891\u5f15\u811a\u5b9a\u4e49\u5982\u4e0b\u56fe\u6240\u793a: \u5c3a\u5bf8 \u5c3a\u5bf8\u5982\u4e0b\u56fe\u6240\u793a. \u67096\u4e2a\u76f4\u5f84\u4e3a2\u300275mm\u7684\u5b54\u4f4d\u7528\u4e8e\u5b89\u88c5\uff0c\u5b89\u88c5\u87ba\u9489\u53ef\u4ee5\u9009\u62e9M2.5\u3002 \u5982\u4e0b\u56fe\u6240\u793a\uff0cC780\u88ab\u8bbe\u8ba1\u6210\u53ef\u6298\u65ad\u5f0f\u7684\uff0cC780\u6a21\u5757\u5728\u672a\u88ab\u6298\u65ad\u524d\u53ef\u4ee5\u5b8c\u7f8e\u7684\u5b89\u88c5\u5728zero\u4e0a\u3002 C779 \u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P50Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 2\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 15 pin FPC, \u95f4\u8ddd 1.0 mm\uff1b \u5c3a\u5bf8: 35 x 50 mm \u5b89\u88c5\u5b54\u4f4d:4 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u5c3a\u5bf8 \u5c3a\u5bf8\u5982\u4e0b\u56fe\u6240\u793a. \u67094\u4e2a\u76f4\u5f84\u4e3a2.75mm\u7684\u5b54\u4f4d\u7528\u4e8e\u5b89\u88c5\uff0c\u5b89\u88c5\u87ba\u9489\u53ef\u4ee5\u9009\u62e9M2.5\u3002 CSI\u63a5\u53e3\u5b9a\u4e49 \u5176\u4e2dC779\uff0cC780A\u53ea\u670915PIN\u5f15\u811a\uff0cC780B\u53ea\u670922PIN\u5f15\u811a\uff0cC790\u540c\u65f6\u670915\u548c22PIN\u5f15\u811a\u3002 \u8f6f\u4ef6\u4f7f\u7528demo \u4e0b\u6587\u4e2d\u7684\u8f6f\u4ef6\u4f7f\u7528\u65b9\u6cd5\u8ddf\u4f60\u4f7f\u7528\u7684\u6811\u8393\u6d3e\u955c\u50cf\u7248\u672c\u6709\u5173\uff0c\u53ef\u80fd\u5b58\u5728\u4e0d\u540c\u3002\u5982\u679c\u4f60\u6709\u4efb\u4f55\u7591\u95ee\uff0c\u8bf7\u52a0\u5165 BLIKVM Discord \u793e\u533a \u83b7\u5f97\u652f\u6301\u3001\u89e3\u7b54\u548c\u65b0\u95fb\u3002 \u4ee5\u4e0b\u8bf4\u660e\u9002\u7528\u4e8e\u5185\u6838\u4e3a5.4\u6216\u8005\u66f4\u9ad8\u7248\u672c\u3002\u5982\u679c\u4f60\u7684\u6811\u8393\u6d3e\u955c\u50cf\u4f4e\u4e8e\u6b64\u7248\u672c\uff0c\u8bf7\u5347\u7ea7\u3002\u7ec8\u7aef\u4f7f\u7528\u4f7f\u7528\u201cuname-a\u201d\u53ef\u4ee5\u67e5\u770b\u4f60\u7cfb\u7edf\u7684\u5185\u6838\u7248\u672c\u3002 pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux 1. \u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u8fdb\u884c\u5347\u7ea7 (\u4e0d\u662f\u5fc5\u987b\u7684\uff0c\u5728\u67d0\u4e9b\u56fd\u5bb6\u8fd9\u4e2a\u82b1\u8d39\u7684\u65f6\u95f4\u53ef\u80fd\u5f88\u957f) sudo apt-get update sudo apt-get upgrade 2. \u4f7f\u80fd\u76f8\u673a\u6a21\u5757(\u5728\u6811\u8393\u6d3eBullseys OS\u7cfb\u7edf\u4e2d\uff0c\u76f8\u673a\u5df2\u9ed8\u8ba4\u88ab\u4f7f\u80fd) sudo raspi-config sudo reboot \u79fb\u52a8\u5149\u6807\u5230\u2018Interfacing Options\u2019\uff0c\u7136\u540e\u6309Enter\u952e\u8fdb\u5165\u3002\u7136\u540e\u9009\u62e9\u2018Camera\u2019\u9009\u9879\uff0c\u6309Enter\u952e\u8fdb\u5165\u540e\uff0c\u4f7f\u80fd\u76f8\u673a\u3002\u7136\u540e\u9009\u62e9\u201cFinish\u201d\u540e\uff0c \u9009\u62e9\u201creboot\u201d\u3002 \u91cd\u542f\u975e\u5e38\u91cd\u8981!! \u7531\u4e8ePi5B\u53d6\u6d88\u4e86\u786c\u7f16\u7801\u5668\uff0c\u4e0b\u9762\u8f6f\u4ef6\u4f7f\u7528\u65b9\u6cd5\u5728Pi\u5e73\u53f0\u76ee\u524d\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0cPi5B\u914d\u7f6e\uff0c\u548c\u5176\u5b83Pi\u5e73\u53f0\u914d\u7f6e\u3002 \u5728zero, zero2,Pi3B,Pi4B\u7b49\u5e73\u53f0HDMI\u8f6cCSI\u6a21\u5757\u6d4b\u8bd5demo\u53c2\u8003 \u7f16\u8f91 /boot/config.txt (\u9700\u8981sudo\u6743\u9650) sudo nano /boot/config.txt \u6dfb\u52a0\u4e0b\u9762\u7684\u5185\u5bb9 dtoverlay=tc358743 \u5982\u679c\u4f60\u7684\u6a21\u5757(C780\u548cC790)\u652f\u6301\u58f0\u97f3\uff0c\u6dfb\u52a0\u4e0b\u9762\u5185\u5bb9\u652f\u6301\u58f0\u97f3 dtoverlay=tc358743-audio \u5982\u679c\u4f60\u662f\u7528\u6811\u8393\u6d3e\u8ba1\u7b97\u6a21\u7ec4(CM3\u3001CM4)\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5217\u914d\u7f6e\uff0c\u4f7f\u80fdCSI\u76844\u4e2a\u901a\u9053\u3002 dtoverlay=tc358743,4lane=1 \u4f7f\u7528\u201cdmesg | grep cma\u201d\u68c0\u67e5\u5206\u914d\u7ed9CMA\u5806\u7684\u5185\u5b58\u91cf\uff0c\u7ec8\u7aef\u51fa\u73b0\u7684\u7b2c\u4e00\u884c\u5185\u5bb9\u5e94\u8be5\u5982\u4e0b\u6240\u793a: pi@raspberrypi:~ $ dmesg | grep cma [0.000000] cma: Reserved 256 MiB at 0x000000001ec00000 \u5982\u679c\u663e\u793a\u5c11\u4e8e96MB\uff0c\u7f16\u8f91/boot/cmdline.txt\uff0c\u6dfb\u52a0\u4e0b\u9762\u4e00\u884c\u3002 cma=96M \u91cd\u542f\u6811\u8393\u6d3e\uff0c\u5982\u679c\u914d\u7f6e\u6210\u529f\uff0c\u4f60\u5c06\u4f1a\u770b\u5230/dev/video0\u8bbe\u5907\u63cf\u8ff0\u7b26\u51fa\u73b0\u3002\u53ef\u4ee5\u4f7f\u7528\u201cv4l2-ctl \u2013list-devices\u201d \u547d\u4ee4\u5217\u51fa\u6240\u6709\u7684video\u63cf\u8ff0\u7b26\u3002\u518d\u5c06\u6811\u8393\u6d3e\u4e0e\u6a21\u5757\u6b63\u786e\u8fde\u63a5\u540e\uff0c\u6811\u8393\u6d3e\u4e0a\u7535\uff0c\u4f60\u53ef\u4ee5\u770b\u5230C790\u6a21\u5757\u4e0a\u6709\u4e00\u4e2a\u7eff\u8272\u706f\u5e38\u4eae\uff0c\u7136\u540e\u53ef\u4ee5\u6309\u7167\u4e0b\u9762\u7684\u547d\u4ee4\uff0c\u68c0\u67e5\u662f\u5426\u5df2\u7ecf\u6b63\u5e38\u51fa\u73b0\u4e86video0\u3002 pi@raspberrypi:~ $ ls /dev/video0 /dev/video0 pi@raspberrypi:~ $ v4l2-ctl --list-devices bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/video18 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 unicam (platform:fe801000.csi): /dev/video0 /dev/video1 /dev/media2 \u9ed8\u8ba4\u6ca1\u6709\u52a0\u8f7dEDID,\u5982\u679c\u4f60\u6709EDID\u7f16\u8f91\u5668\uff0c\u4f60\u53ef\u4ee5\u81ea\u5df1\u7f16\u8f91\u4f60\u6240\u9700\u8981\u7684\u5206\u8fa8\u7387\uff0c\u6216\u8005\u4f7f\u7528\u4e0b\u9762\u63d0\u4f9b\u7684EDID\u5206\u8fa8\u7387\uff08720p60hz\uff09\u3002 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 cd ~ sudo nano edid.txt # \u62f7\u8d1d\u4e0a\u95e8\u7684\u5185\u5bb9\u5230edid.txt\u6587\u4ef6\u4e2d\uff0c\u7136\u540e\u4fdd\u5b58\u9000\u51fa\u3002\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u8bbe\u7f6e\u52a0\u8f7dedid\uff0c\u5982\u679c\u6b63\u786e\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u770b\u5230\u5982\u4e0b\u7684\u8f93\u51fa\u3002 pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums CTA-861 Header IT Formats Underscanned: yes Audio: yes YCbCr 4:4:4: no YCbCr 4:2:2: no HDMI Vendor-Specific Data Block Physical Address: 3.0.0.0 YCbCr 4:4:4 Deep Color: no 30-bit: no 36-bit: no 48-bit: no CTA-861 Video Capability Descriptor RGB Quantization Range: yes YCC Quantization Range: no PT: Supports both over- and underscan IT: Supports both over- and underscan CE: Supports both over- and underscan \u9a71\u52a8\u7a0b\u5e8f\u4e0d\u4f1a\u81ea\u52a8\u5207\u6362\u5230\u68c0\u6d4b\u5230\u7684\u5206\u8fa8\u7387\u3002\u662f\u7528\u4e0b\u5217\u547d\u4ee4\u68c0\u67e5\u76ee\u524dHDMI\u7684\u8f93\u5165 pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings Active width: 1280 Active height: 720 Total width: 1650 Total height: 750 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (60.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 370 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 30 Vertical backporch: 0 Standards: Flags: \u4f60\u5fc5\u987b\u4f7f\u7528\u201cv4l2-ctl \u2013set-dv-bt-timings\u201d\u547d\u4ee4\u8bbe\u7f6e\u9a71\u52a8\u7a0b\u5e8f\u4f7f\u7528\u76ee\u524d\u7684\u8f93\u5165\u5206\u8fa8\u7387 v4l2-ctl --set-dv-bt-timings query to select the currently detected timings. v4l2-ctl -V should now reflect the resolution detected. \u82af\u7247\u652f\u6301\u4e24\u79cd\u683c\u5f0f(BGR3\u548cUYVY)\uff0cBGR3\u50cf\u7d20\u6df1\u5ea6\u4e3a24bpp\uff0cUYVY\u4e3aYUV4:2:2 16bpp\u3002\u5982\u679c\u4f7f\u7528CSI 2\u901a\u9053\uff0cBGR3\u683c\u5f0f\u6700\u5927\u652f\u63011080P30Hz\u7684\u8f93\u5165\uff0c\u4f7f\u7528UYVY\u5219\u6700\u5927\u652f\u63011080P60Hz\u7684\u8f93\u5165\u3002\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8bbe\u7f6e\u4e3aUYVY\u683c\u5f0f\u3002 v4l2-ctl -v pixelformat=UYVY \u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff0c\u68c0\u67e5\u97f3\u9891\u786c\u4ef6\u548c\u9a71\u52a8\u662f\u5426\u6b63\u5e38\u3002 pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0 Note: card 1: tc358743\u610f\u5473\u7740\u97f3\u9891\u76f8\u5173\u786c\u4ef6\u5df2\u88ab\u6b63\u786e\u52a0\u8f7d\uff0c\u6ce8\u610f\u8fd9\u91cc\u76841\u53ef\u80fd\u4e0d\u540c\u3002 \u5b89\u88c5GStreamer\u5de5\u5177. sudo apt install gstreamer1.0-tools sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad sudo apt-get install gstreamer1.0-plugins-base \u68c0\u67e5gstreamer\u5de5\u5177\u7248\u672c: pi@raspberrypi:~ $ gst-launch-1.0 --version gst-launch-1.0 version 1.18.4 GStreamer 1.18.4 http://packages.qa.debian.org/gstreamer1.0 Note:\u4e0d\u540c\u7684\u7248\u672c\u8fd9\u91cc\u8f93\u51fa\u53ef\u80fd\u4e0d\u540c. \u4f7f\u7528gstreamer\u53bb\u5f55\u5236\u89c6\u9891\u6216\u8005\u58f0\u97f3 #GStreamer v1.14 command gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. \u4f60\u4f1a\u5f97\u5230\u4e00\u4e2afoo.mkv\u6587\u4ef6. \u5982\u679c\u4f60\u7684gstreamer\u662f1.8\u6216\u8005\u66f4\u9ad8\u7248\u672c\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u3002\u5176\u4e2ddevice=hw:1\u8868\u793a\u7684\u662fTC358743\u58f0\u5361\u3002 #The command to recode a video with audio. (GStreamer 1.18.4) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. #The sample command to recode a video without audio. (C779 doesn't support audio) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Press CTRL+C to end recording. PS: \u8fd9\u91cc\u6211\u4eec\u5efa\u8bae\u4f60\u4f7f\u7528\u5b9e\u9645\u7684\u8f93\u5165\u5e27\u7387\u53bb\u91c7\u96c6HDMI\u4fe1\u53f7\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528 \u2018v4l2-ctl \u2013query-dv-timings\u2019\u53bb\u68c0\u67e5\u5b9e\u9645\u8f93\u5165\u5e27\u7387\u3002 \u5982\u4e0a\u56fe\u4e2d\u7684HDMI\u8f93\u5165\u8bbe\u5907\uff0c\u5e27\u7387\u662f60Hz\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u53bb\u5f55\u5236\u89c6\u9891\uff1a gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv \u5f55\u5236\u89c6\u9891\u548c\u97f3\u9891: (\u5982\u679c\u4f60\u7684\u8bbe\u5907\u652f\u6301\u97f3\u9891\u7684\u8bdd) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. Note: alsasrc device=hw:1 \u2013 \u201c1\u201d means the audio card number, You must change to correct audio card number. (Query the car number via \u2018arecord \u2013l\u2019, refer to step 9) Pi5B\u7b49\u5e73\u53f0HDMI\u8f6cCSI\u6a21\u5757\u6d4b\u8bd5demo\u53c2\u8003 \u7f16\u8f91 /boot/config.txt (\u9700\u8981sudo\u6743\u9650) sudo nano /boot/config.txt \u6dfb\u52a0\u4e0b\u9762\u7684\u5185\u5bb9 dtoverlay=tc358743 \u5982\u679c\u4f60\u7684\u6a21\u5757(C780\u548cC790)\u652f\u6301\u58f0\u97f3\uff0c\u6dfb\u52a0\u4e0b\u9762\u5185\u5bb9\u652f\u6301\u58f0\u97f3 dtoverlay=tc358743-audio \u91cd\u542f\u6811\u8393\u6d3e,\u6267\u884c\u4e0b\u9762\u6307\u4ee4\uff0c\u627e\u5230csi\u5bf9\u5e94\u7684media\u8282\u70b9\u4e3amedia0,\u5373rp1-cfe (platform:1f00128000.csi)\u5b57\u6bb5\u4e0b\u7684media\u8bbe\u5907: blikvm@blikvm:~ $ v4l2-ctl --list-devices pispbe (platform:1000880000.pisp_be): /dev/video20 /dev/video21 /dev/video22 /dev/video23 /dev/video24 /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31 /dev/video32 /dev/video33 /dev/video34 /dev/video35 /dev/video36 /dev/video37 /dev/media1 /dev/media2 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/media0 rpivid (platform:rpivid): /dev/video19 /dev/media3 \u627e\u5230tc358743\u5bf9\u5e94\u8282\u70b9\u4e3av4l-subdev2\uff0crp1-cfe-csi2_ch0\u7684pad0\u4e3avideo0: blikvm@blikvm:~ $ media-ctl -d /dev/media0 -p Media controller API version 6.1.63 Media device information ------------------------ driver rp1-cfe model rp1-cfe serial bus info platform:1f00128000.csi hw revision 0x114666 driver version 6.1.63 Device topology - entity 1: csi2 (8 pads, 8 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev0 pad0: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"tc358743 4-000f\":0 [ENABLED,IMMUTABLE] pad1: Sink [fmt:unknown/8192x1 field:none] pad2: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad3: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad4: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch0\":0 [] -> \"pisp-fe\":0 [] pad5: Source [fmt:unknown/8192x1 field:none] -> \"rp1-cfe-embedded\":0 [] pad6: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch2\":0 [] -> \"pisp-fe\":0 [] pad7: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch3\":0 [] -> \"pisp-fe\":0 [] - entity 10: pisp-fe (5 pads, 7 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Sink [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"csi2\":4 [] <- \"csi2\":6 [] <- \"csi2\":7 [] pad1: Sink [fmt:FIXED/8192x1 field:none] <- \"rp1-cfe-fe_config\":0 [] pad2: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image0\":0 [] pad3: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image1\":0 [] pad4: Source [fmt:FIXED/8192x1 field:none] -> \"rp1-cfe-fe_stats\":0 [] - entity 16: tc358743 4-000f (1 pad, 1 link) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev2 pad0: Source [fmt:RGB888_1X24/640x480 field:none colorspace:srgb] [dv.caps:BT.656/1120 min:640x350@13000000 max:1920x1200@165000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom] [dv.detect:BT.656/1120 1920x1080p24 (2750x1125) stds: flags:] [dv.current:BT.656/1120 640x480p59 (800x525) stds:CEA-861,DMT flags:has-cea861-vic] -> \"csi2\":0 [ENABLED,IMMUTABLE] - entity 18: rp1-cfe-csi2_ch0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 pad0: Sink <- \"csi2\":4 [] - entity 22: rp1-cfe-embedded (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video1 pad0: Sink <- \"csi2\":5 [] - entity 26: rp1-cfe-csi2_ch2 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video2 pad0: Sink <- \"csi2\":6 [] - entity 30: rp1-cfe-csi2_ch3 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video3 pad0: Sink <- \"csi2\":7 [] - entity 34: rp1-cfe-fe_image0 (1 pad, 1 link) type Node subtype V4L flags 1 device node name /dev/video4 pad0: Sink <- \"pisp-fe\":2 [] - entity 38: rp1-cfe-fe_image1 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video5 pad0: Sink <- \"pisp-fe\":3 [] - entity 42: rp1-cfe-fe_stats (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video6 pad0: Sink <- \"pisp-fe\":4 [] - entity 46: rp1-cfe-fe_config (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video7 pad0: Source -> \"pisp-fe\":1 [] \u67e5\u8be2\u5f53\u524d\u8f93\u5165\u6e90\u4fe1\u606f,\u82e5\u5206\u8fa8\u7387\u663e\u793a0\u5219\u8868\u793a\u4e3a\u68c0\u67e5\u5230\u8f93\u5165\u6e90\u4fe1\u53f7\uff0c\u9700\u8981\u68c0\u67e5\u786c\u4ef6\u8fde\u63a5\u548c\u4e0a\u8ff0\u6b65\u9aa4\u6392\u67e5\u3002 blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings Active width: 1920 Active height: 1080 Total width: 2750 Total height: 1125 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (24.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 830 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 45 Vertical backporch: 0 Standards: Flags: \u786e\u8ba4\u5f53\u524d\u8f93\u5165\u6e90\u4fe1\u606f blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query BT timings set \u521d\u59cb\u5316media0 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -r \u628acsi2\u7684pad4\u8fde\u63a5\u5230rp1-cfe-csi2_ch0\u7684pad0 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -l ''\\''csi2'\\'':4 -> '\\''rp1-cfe-csi2_ch0'\\'':0 [1]' \u914d\u7f6emedia\u8282\u70b9 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' \u8bbe\u7f6e\u8f93\u51fa\u683c\u5f0f v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3 \u91c7\u96c6\u4e24\u5e27\u753b\u9762\u7528\u4e8e\u6d4b\u8bd5tc358743\u662f\u5426\u53ef\u4ee5\u5de5\u4f5c\uff0c\u5176\u5b83\u5982\u4f7f\u7528gstreamer\u7684\u65b9\u6cd5\u6682\u65f6\u672a v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='RGB3' --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll Pi\u5982\u679c\u5b89\u88c5\u7684\u662f\u5e26\u684c\u9762\u7684\u7cfb\u7edf\uff0c\u53ef\u4ee5\u4f7f\u7528ffplay\u76f4\u63a5\u64ad\u653eyuv\u6587\u4ef6\u3002 ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 hdmiin.yuv windows\u7535\u8111\u53ef\u4ee5\u4f7f\u75287yuv\u7b49\u8f6f\u4ef6\u67e5\u770b.yuv\u6587\u4ef6\uff0c\u6559\u7a0b\u8f93\u5165\u683c\u5f0f\u4e3a1920 1080\uff0c\u6240\u4ee5\u57287yuv\u53f3\u4e0a\u89d2\u683c\u5f0f\u9009\u62e9BGR888\uff0c\u5206\u8fa8\u7387\u8bbe\u7f6e1920 1080\uff0c\u5373\u53ef\u770b\u5230\u4e24\u5e27\u521a\u91c7\u96c6\u5230\u7684\u753b\u9762 \u82af\u7247\u8d44\u6599 tc358743\u82af\u7247\u8d44\u6599 \u53d1\u8d27\u6e05\u5355 C790 \u6d4b\u8bd5\u89c6\u9891 C780A \u6d4b\u8bd5:https://www.youtube.com/watch?v=ecqyINoiHNQ C780B \u6d4b\u8bd5:https://www.youtube.com/watch?v=nc-hwPT2Uak&t=15s \u91c7\u8d2d\u8fde\u63a5 \u4e2d\u56fd\u5ba2\u6237\u91c7\u8d2d\u94fe\u63a5\uff1a C790 & C780 \u5176\u5b83\u56fd\u5bb6\u5ba2\u6237\u91c7\u8d2d\u8fde\u63a5\uff1a C779","title":"HDMI\u8f6cCSI & Audio\u6a21\u5757\u7528\u6237\u624b\u518c"},{"location":"hdmi-csi-i2s/#hdmicsii2s","text":"\u5c06HDMI\u4fe1\u53f7\u8f6c\u6362\u6210CSI\u89c6\u9891\u4fe1\u53f7\u548cI2S\u97f3\u9891\u4fe1\u53f7, \u76ee\u524d\u5168\u5e73\u53f0\u652f\u6301(zero, Pi3B, Pi4B, CM4, Pi5B),\u5176\u4e2d\u6700\u9ad8\u91c7\u96c6\u5206\u8fa8\u7387\u4e0d\u4ec5\u4ec5\u53d6\u51b3\u4e8eHDMI\u8f6cCSI\u8f6c\u6362\u677f\uff0c\u540c\u65f6\u4e5f\u53d6\u51b3\u4e8e\u4f60\u4f7f\u7528\u7684\u6811\u8393\u6d3e\u786c\u4ef6\u7248\u672c\uff0c\u6811\u8393\u6d3e\u786c\u4ef6\u7248\u76ee\u524d\u4e3b\u8981\u5206\u4e24\u4e2a\u7cfb\u5217\uff0c\u6700\u9ad8\u652f\u63011080P60Hz\uff0c\u548c\u6700\u9ad8\u652f\u63011080P50Hz\u3002 \u6700\u9ad8\u652f\u63011080P60Hz\u7684Pi\u7248\u672c(CM3\uff0cCM4\uff0cPi5B) \u6700\u9ad8\u652f\u63011080P50Hz\u7684Pi\u7248\u672c(zero, zero2, Pi3B, Pi4B\u7b49)","title":"HDMI\u8f6cCSI&I2S\u6a21\u5757\u624b\u518c"},{"location":"hdmi-csi-i2s/#_1","text":"\u6b64\u6a21\u5757\u5c06HDMI\u4fe1\u53f7\u8f6c\u6362\u6210CSI\u89c6\u9891\u4fe1\u53f7\u548cI2S\u97f3\u9891\u4fe1\u53f7\uff0c\u6700\u9ad8\u652f\u63011080P60Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u5728\u6811\u8393\u6d3e\u4e0a\u5de5\u4f5c\u7684\u5f88\u597d\uff0c\u76ee\u524d\u5171\u67093\u4e2a\u7248\u672c(C779\u3001C780\u3001C790). C790\u662f\u76ee\u524d\u6700\u65b0\u7684\u7248\u672c\uff0c\u89e3\u51b3\u4e86\u6240\u6709\u5df2\u77e5\u7684\u95ee\u9898\uff0c\u540c\u662f\u6709CSI 2\u901a\u9053\u548c4\u901a\u9053\u63a5\u53e3\uff0cI2S\u97f3\u9891\u63a5\u53e3\uff0c\u4fee\u590d\u4e86HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898\u3002","title":"\u7b80\u4ecb"},{"location":"hdmi-csi-i2s/#_2","text":"","title":"\u6027\u80fd\u53c2\u6570"},{"location":"hdmi-csi-i2s/#c790","text":"\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u5728\u6811\u8393\u6d3e\u4e0a\u6b64\u6a21\u5757\u6700\u9ad8\u652f\u63011080P60Hz\u8f93\u5165\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG 4\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f CSI-2\u63a5\u53e31: 15 pin FPC, \u95f4\u8ddd1.0 mm, \u5728C790\u6a21\u5757\u7684\u6b63\u9762. CSI-2\u63a5\u53e32, 22 pin FPC, \u95f4\u8ddd0.5 mm, \u5728C790\u6a21\u5757\u7684\u80cc\u9762. \u5c3a\u5bf8: 30 x 45 mm \u5b89\u88c5\u5b54\u4f4d:4 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u6811\u8393\u6d3e4B\u53ea\u652f\u63011080P50Hz(\u56e0\u4e3a4B\u53ea\u6709\u4e24\u4e2aCSI-2\u901a\u9053) ,\u6811\u8393\u6d3eCM4\u53ea\u652f\u63011080P60Hz,\u6240\u4ee5\u5982\u679c\u4f60\u7684\u8f93\u5165\u8bbe\u5907\u4e00\u5b9a\u8981\u662f1080P60Hz\uff0c\u8bf7\u540c\u65f6\u4f7f\u7528CM4\u548cC790. \u63a5\u53e3 C790\u6709\u4e24\u4e2aCSI\u8f93\u51fa\u63a5\u53e3: \u63a5\u53e31\uff0c\u5728C790\u6b63\u9762\uff0c15 pin FPC, \u95f4\u8ddd1.0 mm; \u63a5\u53e31\uff0c\u5728C790\u80cc\u9762,22 pin FPC, \u95f4\u8ddd0.5 mm\u3002 \u5c3a\u5bf8 \u5b89\u88c5\u53c2\u8003","title":"C790"},{"location":"hdmi-csi-i2s/#c780","text":"C780A\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P50Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 2\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 15 pin FPC, \u95f4\u8ddd 1.0 mm\uff1b \u5c3a\u5bf8: 30 x 65 mm (\u6298\u65ad\u524d); 30 x 45 mm (\u6298\u65ad\u540e) \u5b89\u88c5\u5b54\u4f4d:6 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g C780B\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P60Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 4\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 22 pin FPC, \u95f4\u8ddd 0.5 mm\uff1b \u5c3a\u5bf8: 30 x 65 mm (\u6298\u65ad\u524d); 30 x 45 mm (\u6298\u65ad\u540e) \u5b89\u88c5\u5b54\u4f4d:6 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u63a5\u53e3 \u97f3\u9891\u5f15\u811a\u5b9a\u4e49\u5982\u4e0b\u56fe\u6240\u793a: \u5c3a\u5bf8 \u5c3a\u5bf8\u5982\u4e0b\u56fe\u6240\u793a. \u67096\u4e2a\u76f4\u5f84\u4e3a2\u300275mm\u7684\u5b54\u4f4d\u7528\u4e8e\u5b89\u88c5\uff0c\u5b89\u88c5\u87ba\u9489\u53ef\u4ee5\u9009\u62e9M2.5\u3002 \u5982\u4e0b\u56fe\u6240\u793a\uff0cC780\u88ab\u8bbe\u8ba1\u6210\u53ef\u6298\u65ad\u5f0f\u7684\uff0cC780\u6a21\u5757\u5728\u672a\u88ab\u6298\u65ad\u524d\u53ef\u4ee5\u5b8c\u7f8e\u7684\u5b89\u88c5\u5728zero\u4e0a\u3002","title":"C780"},{"location":"hdmi-csi-i2s/#c779","text":"\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P50Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 2\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 15 pin FPC, \u95f4\u8ddd 1.0 mm\uff1b \u5c3a\u5bf8: 35 x 50 mm \u5b89\u88c5\u5b54\u4f4d:4 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u5c3a\u5bf8 \u5c3a\u5bf8\u5982\u4e0b\u56fe\u6240\u793a. \u67094\u4e2a\u76f4\u5f84\u4e3a2.75mm\u7684\u5b54\u4f4d\u7528\u4e8e\u5b89\u88c5\uff0c\u5b89\u88c5\u87ba\u9489\u53ef\u4ee5\u9009\u62e9M2.5\u3002","title":"C779"},{"location":"hdmi-csi-i2s/#csi","text":"\u5176\u4e2dC779\uff0cC780A\u53ea\u670915PIN\u5f15\u811a\uff0cC780B\u53ea\u670922PIN\u5f15\u811a\uff0cC790\u540c\u65f6\u670915\u548c22PIN\u5f15\u811a\u3002","title":"CSI\u63a5\u53e3\u5b9a\u4e49"},{"location":"hdmi-csi-i2s/#demo","text":"\u4e0b\u6587\u4e2d\u7684\u8f6f\u4ef6\u4f7f\u7528\u65b9\u6cd5\u8ddf\u4f60\u4f7f\u7528\u7684\u6811\u8393\u6d3e\u955c\u50cf\u7248\u672c\u6709\u5173\uff0c\u53ef\u80fd\u5b58\u5728\u4e0d\u540c\u3002\u5982\u679c\u4f60\u6709\u4efb\u4f55\u7591\u95ee\uff0c\u8bf7\u52a0\u5165 BLIKVM Discord \u793e\u533a \u83b7\u5f97\u652f\u6301\u3001\u89e3\u7b54\u548c\u65b0\u95fb\u3002 \u4ee5\u4e0b\u8bf4\u660e\u9002\u7528\u4e8e\u5185\u6838\u4e3a5.4\u6216\u8005\u66f4\u9ad8\u7248\u672c\u3002\u5982\u679c\u4f60\u7684\u6811\u8393\u6d3e\u955c\u50cf\u4f4e\u4e8e\u6b64\u7248\u672c\uff0c\u8bf7\u5347\u7ea7\u3002\u7ec8\u7aef\u4f7f\u7528\u4f7f\u7528\u201cuname-a\u201d\u53ef\u4ee5\u67e5\u770b\u4f60\u7cfb\u7edf\u7684\u5185\u6838\u7248\u672c\u3002 pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux 1. \u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u8fdb\u884c\u5347\u7ea7 (\u4e0d\u662f\u5fc5\u987b\u7684\uff0c\u5728\u67d0\u4e9b\u56fd\u5bb6\u8fd9\u4e2a\u82b1\u8d39\u7684\u65f6\u95f4\u53ef\u80fd\u5f88\u957f) sudo apt-get update sudo apt-get upgrade 2. \u4f7f\u80fd\u76f8\u673a\u6a21\u5757(\u5728\u6811\u8393\u6d3eBullseys OS\u7cfb\u7edf\u4e2d\uff0c\u76f8\u673a\u5df2\u9ed8\u8ba4\u88ab\u4f7f\u80fd) sudo raspi-config sudo reboot \u79fb\u52a8\u5149\u6807\u5230\u2018Interfacing Options\u2019\uff0c\u7136\u540e\u6309Enter\u952e\u8fdb\u5165\u3002\u7136\u540e\u9009\u62e9\u2018Camera\u2019\u9009\u9879\uff0c\u6309Enter\u952e\u8fdb\u5165\u540e\uff0c\u4f7f\u80fd\u76f8\u673a\u3002\u7136\u540e\u9009\u62e9\u201cFinish\u201d\u540e\uff0c \u9009\u62e9\u201creboot\u201d\u3002 \u91cd\u542f\u975e\u5e38\u91cd\u8981!! \u7531\u4e8ePi5B\u53d6\u6d88\u4e86\u786c\u7f16\u7801\u5668\uff0c\u4e0b\u9762\u8f6f\u4ef6\u4f7f\u7528\u65b9\u6cd5\u5728Pi\u5e73\u53f0\u76ee\u524d\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0cPi5B\u914d\u7f6e\uff0c\u548c\u5176\u5b83Pi\u5e73\u53f0\u914d\u7f6e\u3002 \u5728zero, zero2,Pi3B,Pi4B\u7b49\u5e73\u53f0HDMI\u8f6cCSI\u6a21\u5757\u6d4b\u8bd5demo\u53c2\u8003 \u7f16\u8f91 /boot/config.txt (\u9700\u8981sudo\u6743\u9650) sudo nano /boot/config.txt \u6dfb\u52a0\u4e0b\u9762\u7684\u5185\u5bb9 dtoverlay=tc358743 \u5982\u679c\u4f60\u7684\u6a21\u5757(C780\u548cC790)\u652f\u6301\u58f0\u97f3\uff0c\u6dfb\u52a0\u4e0b\u9762\u5185\u5bb9\u652f\u6301\u58f0\u97f3 dtoverlay=tc358743-audio \u5982\u679c\u4f60\u662f\u7528\u6811\u8393\u6d3e\u8ba1\u7b97\u6a21\u7ec4(CM3\u3001CM4)\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5217\u914d\u7f6e\uff0c\u4f7f\u80fdCSI\u76844\u4e2a\u901a\u9053\u3002 dtoverlay=tc358743,4lane=1 \u4f7f\u7528\u201cdmesg | grep cma\u201d\u68c0\u67e5\u5206\u914d\u7ed9CMA\u5806\u7684\u5185\u5b58\u91cf\uff0c\u7ec8\u7aef\u51fa\u73b0\u7684\u7b2c\u4e00\u884c\u5185\u5bb9\u5e94\u8be5\u5982\u4e0b\u6240\u793a: pi@raspberrypi:~ $ dmesg | grep cma [0.000000] cma: Reserved 256 MiB at 0x000000001ec00000 \u5982\u679c\u663e\u793a\u5c11\u4e8e96MB\uff0c\u7f16\u8f91/boot/cmdline.txt\uff0c\u6dfb\u52a0\u4e0b\u9762\u4e00\u884c\u3002 cma=96M \u91cd\u542f\u6811\u8393\u6d3e\uff0c\u5982\u679c\u914d\u7f6e\u6210\u529f\uff0c\u4f60\u5c06\u4f1a\u770b\u5230/dev/video0\u8bbe\u5907\u63cf\u8ff0\u7b26\u51fa\u73b0\u3002\u53ef\u4ee5\u4f7f\u7528\u201cv4l2-ctl \u2013list-devices\u201d \u547d\u4ee4\u5217\u51fa\u6240\u6709\u7684video\u63cf\u8ff0\u7b26\u3002\u518d\u5c06\u6811\u8393\u6d3e\u4e0e\u6a21\u5757\u6b63\u786e\u8fde\u63a5\u540e\uff0c\u6811\u8393\u6d3e\u4e0a\u7535\uff0c\u4f60\u53ef\u4ee5\u770b\u5230C790\u6a21\u5757\u4e0a\u6709\u4e00\u4e2a\u7eff\u8272\u706f\u5e38\u4eae\uff0c\u7136\u540e\u53ef\u4ee5\u6309\u7167\u4e0b\u9762\u7684\u547d\u4ee4\uff0c\u68c0\u67e5\u662f\u5426\u5df2\u7ecf\u6b63\u5e38\u51fa\u73b0\u4e86video0\u3002 pi@raspberrypi:~ $ ls /dev/video0 /dev/video0 pi@raspberrypi:~ $ v4l2-ctl --list-devices bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/video18 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 unicam (platform:fe801000.csi): /dev/video0 /dev/video1 /dev/media2 \u9ed8\u8ba4\u6ca1\u6709\u52a0\u8f7dEDID,\u5982\u679c\u4f60\u6709EDID\u7f16\u8f91\u5668\uff0c\u4f60\u53ef\u4ee5\u81ea\u5df1\u7f16\u8f91\u4f60\u6240\u9700\u8981\u7684\u5206\u8fa8\u7387\uff0c\u6216\u8005\u4f7f\u7528\u4e0b\u9762\u63d0\u4f9b\u7684EDID\u5206\u8fa8\u7387\uff08720p60hz\uff09\u3002 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 cd ~ sudo nano edid.txt # \u62f7\u8d1d\u4e0a\u95e8\u7684\u5185\u5bb9\u5230edid.txt\u6587\u4ef6\u4e2d\uff0c\u7136\u540e\u4fdd\u5b58\u9000\u51fa\u3002\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u8bbe\u7f6e\u52a0\u8f7dedid\uff0c\u5982\u679c\u6b63\u786e\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u770b\u5230\u5982\u4e0b\u7684\u8f93\u51fa\u3002 pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums CTA-861 Header IT Formats Underscanned: yes Audio: yes YCbCr 4:4:4: no YCbCr 4:2:2: no HDMI Vendor-Specific Data Block Physical Address: 3.0.0.0 YCbCr 4:4:4 Deep Color: no 30-bit: no 36-bit: no 48-bit: no CTA-861 Video Capability Descriptor RGB Quantization Range: yes YCC Quantization Range: no PT: Supports both over- and underscan IT: Supports both over- and underscan CE: Supports both over- and underscan \u9a71\u52a8\u7a0b\u5e8f\u4e0d\u4f1a\u81ea\u52a8\u5207\u6362\u5230\u68c0\u6d4b\u5230\u7684\u5206\u8fa8\u7387\u3002\u662f\u7528\u4e0b\u5217\u547d\u4ee4\u68c0\u67e5\u76ee\u524dHDMI\u7684\u8f93\u5165 pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings Active width: 1280 Active height: 720 Total width: 1650 Total height: 750 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (60.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 370 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 30 Vertical backporch: 0 Standards: Flags: \u4f60\u5fc5\u987b\u4f7f\u7528\u201cv4l2-ctl \u2013set-dv-bt-timings\u201d\u547d\u4ee4\u8bbe\u7f6e\u9a71\u52a8\u7a0b\u5e8f\u4f7f\u7528\u76ee\u524d\u7684\u8f93\u5165\u5206\u8fa8\u7387 v4l2-ctl --set-dv-bt-timings query to select the currently detected timings. v4l2-ctl -V should now reflect the resolution detected. \u82af\u7247\u652f\u6301\u4e24\u79cd\u683c\u5f0f(BGR3\u548cUYVY)\uff0cBGR3\u50cf\u7d20\u6df1\u5ea6\u4e3a24bpp\uff0cUYVY\u4e3aYUV4:2:2 16bpp\u3002\u5982\u679c\u4f7f\u7528CSI 2\u901a\u9053\uff0cBGR3\u683c\u5f0f\u6700\u5927\u652f\u63011080P30Hz\u7684\u8f93\u5165\uff0c\u4f7f\u7528UYVY\u5219\u6700\u5927\u652f\u63011080P60Hz\u7684\u8f93\u5165\u3002\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8bbe\u7f6e\u4e3aUYVY\u683c\u5f0f\u3002 v4l2-ctl -v pixelformat=UYVY \u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff0c\u68c0\u67e5\u97f3\u9891\u786c\u4ef6\u548c\u9a71\u52a8\u662f\u5426\u6b63\u5e38\u3002 pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0 Note: card 1: tc358743\u610f\u5473\u7740\u97f3\u9891\u76f8\u5173\u786c\u4ef6\u5df2\u88ab\u6b63\u786e\u52a0\u8f7d\uff0c\u6ce8\u610f\u8fd9\u91cc\u76841\u53ef\u80fd\u4e0d\u540c\u3002 \u5b89\u88c5GStreamer\u5de5\u5177. sudo apt install gstreamer1.0-tools sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad sudo apt-get install gstreamer1.0-plugins-base \u68c0\u67e5gstreamer\u5de5\u5177\u7248\u672c: pi@raspberrypi:~ $ gst-launch-1.0 --version gst-launch-1.0 version 1.18.4 GStreamer 1.18.4 http://packages.qa.debian.org/gstreamer1.0 Note:\u4e0d\u540c\u7684\u7248\u672c\u8fd9\u91cc\u8f93\u51fa\u53ef\u80fd\u4e0d\u540c. \u4f7f\u7528gstreamer\u53bb\u5f55\u5236\u89c6\u9891\u6216\u8005\u58f0\u97f3 #GStreamer v1.14 command gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. \u4f60\u4f1a\u5f97\u5230\u4e00\u4e2afoo.mkv\u6587\u4ef6. \u5982\u679c\u4f60\u7684gstreamer\u662f1.8\u6216\u8005\u66f4\u9ad8\u7248\u672c\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u3002\u5176\u4e2ddevice=hw:1\u8868\u793a\u7684\u662fTC358743\u58f0\u5361\u3002 #The command to recode a video with audio. (GStreamer 1.18.4) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. #The sample command to recode a video without audio. (C779 doesn't support audio) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Press CTRL+C to end recording. PS: \u8fd9\u91cc\u6211\u4eec\u5efa\u8bae\u4f60\u4f7f\u7528\u5b9e\u9645\u7684\u8f93\u5165\u5e27\u7387\u53bb\u91c7\u96c6HDMI\u4fe1\u53f7\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528 \u2018v4l2-ctl \u2013query-dv-timings\u2019\u53bb\u68c0\u67e5\u5b9e\u9645\u8f93\u5165\u5e27\u7387\u3002 \u5982\u4e0a\u56fe\u4e2d\u7684HDMI\u8f93\u5165\u8bbe\u5907\uff0c\u5e27\u7387\u662f60Hz\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u53bb\u5f55\u5236\u89c6\u9891\uff1a gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv \u5f55\u5236\u89c6\u9891\u548c\u97f3\u9891: (\u5982\u679c\u4f60\u7684\u8bbe\u5907\u652f\u6301\u97f3\u9891\u7684\u8bdd) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. Note: alsasrc device=hw:1 \u2013 \u201c1\u201d means the audio card number, You must change to correct audio card number. (Query the car number via \u2018arecord \u2013l\u2019, refer to step 9) Pi5B\u7b49\u5e73\u53f0HDMI\u8f6cCSI\u6a21\u5757\u6d4b\u8bd5demo\u53c2\u8003 \u7f16\u8f91 /boot/config.txt (\u9700\u8981sudo\u6743\u9650) sudo nano /boot/config.txt \u6dfb\u52a0\u4e0b\u9762\u7684\u5185\u5bb9 dtoverlay=tc358743 \u5982\u679c\u4f60\u7684\u6a21\u5757(C780\u548cC790)\u652f\u6301\u58f0\u97f3\uff0c\u6dfb\u52a0\u4e0b\u9762\u5185\u5bb9\u652f\u6301\u58f0\u97f3 dtoverlay=tc358743-audio \u91cd\u542f\u6811\u8393\u6d3e,\u6267\u884c\u4e0b\u9762\u6307\u4ee4\uff0c\u627e\u5230csi\u5bf9\u5e94\u7684media\u8282\u70b9\u4e3amedia0,\u5373rp1-cfe (platform:1f00128000.csi)\u5b57\u6bb5\u4e0b\u7684media\u8bbe\u5907: blikvm@blikvm:~ $ v4l2-ctl --list-devices pispbe (platform:1000880000.pisp_be): /dev/video20 /dev/video21 /dev/video22 /dev/video23 /dev/video24 /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31 /dev/video32 /dev/video33 /dev/video34 /dev/video35 /dev/video36 /dev/video37 /dev/media1 /dev/media2 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/media0 rpivid (platform:rpivid): /dev/video19 /dev/media3 \u627e\u5230tc358743\u5bf9\u5e94\u8282\u70b9\u4e3av4l-subdev2\uff0crp1-cfe-csi2_ch0\u7684pad0\u4e3avideo0: blikvm@blikvm:~ $ media-ctl -d /dev/media0 -p Media controller API version 6.1.63 Media device information ------------------------ driver rp1-cfe model rp1-cfe serial bus info platform:1f00128000.csi hw revision 0x114666 driver version 6.1.63 Device topology - entity 1: csi2 (8 pads, 8 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev0 pad0: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"tc358743 4-000f\":0 [ENABLED,IMMUTABLE] pad1: Sink [fmt:unknown/8192x1 field:none] pad2: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad3: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad4: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch0\":0 [] -> \"pisp-fe\":0 [] pad5: Source [fmt:unknown/8192x1 field:none] -> \"rp1-cfe-embedded\":0 [] pad6: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch2\":0 [] -> \"pisp-fe\":0 [] pad7: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch3\":0 [] -> \"pisp-fe\":0 [] - entity 10: pisp-fe (5 pads, 7 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Sink [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"csi2\":4 [] <- \"csi2\":6 [] <- \"csi2\":7 [] pad1: Sink [fmt:FIXED/8192x1 field:none] <- \"rp1-cfe-fe_config\":0 [] pad2: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image0\":0 [] pad3: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image1\":0 [] pad4: Source [fmt:FIXED/8192x1 field:none] -> \"rp1-cfe-fe_stats\":0 [] - entity 16: tc358743 4-000f (1 pad, 1 link) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev2 pad0: Source [fmt:RGB888_1X24/640x480 field:none colorspace:srgb] [dv.caps:BT.656/1120 min:640x350@13000000 max:1920x1200@165000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom] [dv.detect:BT.656/1120 1920x1080p24 (2750x1125) stds: flags:] [dv.current:BT.656/1120 640x480p59 (800x525) stds:CEA-861,DMT flags:has-cea861-vic] -> \"csi2\":0 [ENABLED,IMMUTABLE] - entity 18: rp1-cfe-csi2_ch0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 pad0: Sink <- \"csi2\":4 [] - entity 22: rp1-cfe-embedded (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video1 pad0: Sink <- \"csi2\":5 [] - entity 26: rp1-cfe-csi2_ch2 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video2 pad0: Sink <- \"csi2\":6 [] - entity 30: rp1-cfe-csi2_ch3 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video3 pad0: Sink <- \"csi2\":7 [] - entity 34: rp1-cfe-fe_image0 (1 pad, 1 link) type Node subtype V4L flags 1 device node name /dev/video4 pad0: Sink <- \"pisp-fe\":2 [] - entity 38: rp1-cfe-fe_image1 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video5 pad0: Sink <- \"pisp-fe\":3 [] - entity 42: rp1-cfe-fe_stats (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video6 pad0: Sink <- \"pisp-fe\":4 [] - entity 46: rp1-cfe-fe_config (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video7 pad0: Source -> \"pisp-fe\":1 [] \u67e5\u8be2\u5f53\u524d\u8f93\u5165\u6e90\u4fe1\u606f,\u82e5\u5206\u8fa8\u7387\u663e\u793a0\u5219\u8868\u793a\u4e3a\u68c0\u67e5\u5230\u8f93\u5165\u6e90\u4fe1\u53f7\uff0c\u9700\u8981\u68c0\u67e5\u786c\u4ef6\u8fde\u63a5\u548c\u4e0a\u8ff0\u6b65\u9aa4\u6392\u67e5\u3002 blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings Active width: 1920 Active height: 1080 Total width: 2750 Total height: 1125 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (24.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 830 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 45 Vertical backporch: 0 Standards: Flags: \u786e\u8ba4\u5f53\u524d\u8f93\u5165\u6e90\u4fe1\u606f blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query BT timings set \u521d\u59cb\u5316media0 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -r \u628acsi2\u7684pad4\u8fde\u63a5\u5230rp1-cfe-csi2_ch0\u7684pad0 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -l ''\\''csi2'\\'':4 -> '\\''rp1-cfe-csi2_ch0'\\'':0 [1]' \u914d\u7f6emedia\u8282\u70b9 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' \u8bbe\u7f6e\u8f93\u51fa\u683c\u5f0f v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3 \u91c7\u96c6\u4e24\u5e27\u753b\u9762\u7528\u4e8e\u6d4b\u8bd5tc358743\u662f\u5426\u53ef\u4ee5\u5de5\u4f5c\uff0c\u5176\u5b83\u5982\u4f7f\u7528gstreamer\u7684\u65b9\u6cd5\u6682\u65f6\u672a v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='RGB3' --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll Pi\u5982\u679c\u5b89\u88c5\u7684\u662f\u5e26\u684c\u9762\u7684\u7cfb\u7edf\uff0c\u53ef\u4ee5\u4f7f\u7528ffplay\u76f4\u63a5\u64ad\u653eyuv\u6587\u4ef6\u3002 ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 hdmiin.yuv windows\u7535\u8111\u53ef\u4ee5\u4f7f\u75287yuv\u7b49\u8f6f\u4ef6\u67e5\u770b.yuv\u6587\u4ef6\uff0c\u6559\u7a0b\u8f93\u5165\u683c\u5f0f\u4e3a1920 1080\uff0c\u6240\u4ee5\u57287yuv\u53f3\u4e0a\u89d2\u683c\u5f0f\u9009\u62e9BGR888\uff0c\u5206\u8fa8\u7387\u8bbe\u7f6e1920 1080\uff0c\u5373\u53ef\u770b\u5230\u4e24\u5e27\u521a\u91c7\u96c6\u5230\u7684\u753b\u9762","title":"\u8f6f\u4ef6\u4f7f\u7528demo"},{"location":"hdmi-csi-i2s/#_3","text":"tc358743\u82af\u7247\u8d44\u6599","title":"\u82af\u7247\u8d44\u6599"},{"location":"hdmi-csi-i2s/#_4","text":"C790","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"hdmi-csi-i2s/#_5","text":"C780A \u6d4b\u8bd5:https://www.youtube.com/watch?v=ecqyINoiHNQ C780B \u6d4b\u8bd5:https://www.youtube.com/watch?v=nc-hwPT2Uak&t=15s","title":"\u6d4b\u8bd5\u89c6\u9891"},{"location":"hdmi-csi-i2s/#_6","text":"\u4e2d\u56fd\u5ba2\u6237\u91c7\u8d2d\u94fe\u63a5\uff1a C790 & C780 \u5176\u5b83\u56fd\u5bb6\u5ba2\u6237\u91c7\u8d2d\u8fde\u63a5\uff1a C779","title":"\u91c7\u8d2d\u8fde\u63a5"},{"location":"hid/","text":"\u89c6\u9891 \u952e\u76d8 \u9f20\u6807 \u5feb\u6377\u952e \u5728v1.4.5\u7248\u672c\u540e\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u5feb\u6377\u952e,\u627e\u5230shortcuts\u914d\u7f6e\u9879\u76ee, \u5176\u4e2dkey\u4e3aweb ui\u4e0a\u7684\u6309\u94ae\u540d\u79f0\uff0cvalue\u4e3a\u5177\u4f53\u7684\u6309\u952e\u3002 sudo -s vim /mnt/exec/release/config/app.json ## \u9ed8\u8ba4\u914d\u7f6e\u5982\u4e0b\uff1a \"shortcuts\": { \"Ctrl+Alt+Del\": [\"ControlLeft\",\"AltLeft\",\"Delete\"], \"Alt+Tab\": [\"AltLeft\",\"Tab\"], \"Alt+F4\": [\"AltLeft\",\"F4\"], \"Alt+Enter\": [\"AltLeft\",\"Enter\"], \"Ctrl+W\": [\"ControlLeft\",\"KeyW\"] } \u5176\u4e2d\u6309\u952e\u540d\u79f0\u5177\u6709\u552f\u4e00\u6027\uff0c\u4e0b\u9762\u63d0\u4f9b\u5177\u4f53\u7684\u6309\u952e\u540d\u79f0 \"{backspace}\": \"Backspace\", \"{tab}\": \"Tab\", \"{enter}\": \"Enter\", \"{shiftleft}\": \"ShiftLeft\", \"{shiftright}\": \"ShiftRight\", \"{altleft}\": \"AltLeft\", \"{altright}\": \"AltRight\", \"{prtscr}\": \"PrtScr\", \"{pause}\": \"Pause\", \"{scrolllock}\": \"ScrollLock\", \"{controlleft}\": \"ControlLeft\", \"{controlright}\": \"ControlRight\", \"{metaleft}\": \"MetaLeft\", \"{metaright}\": \"MetaRight\", \"{capslock}\": \"CapsLock\", \"{escape}\": \"Escape\", \"{space}\": \"Space\", \"{pageup}\": \"PageUp\", \"{pagedown}\": \"PageDown\", \"{end}\": \"End\", \"{home}\": \"Home\", \"{arrowleft}\": \"ArrowLeft\", \"{arrowup}\": \"ArrowUp\", \"{arrowright}\": \"ArrowRight\", \"{arrowdown}\": \"ArrowDown\", \"{insert}\": \"Insert\", \"{delete}\": \"Delete\", // Digits keys 1: \"Digit1\", 2: \"Digit2\", 3: \"Digit3\", 4: \"Digit4\", 5: \"Digit5\", 6: \"Digit6\", 7: \"Digit7\", 8: \"Digit8\", 9: \"Digit9\", 0: \"Digit0\", // \"!\": \"Digit1\", // ! maps to the '1' key \"@\": \"Digit2\", // @ maps to the '2' key \"#\": \"Digit3\", // # maps to the '3' key $: \"Digit4\", // $ maps to the '4' key \"%\": \"Digit5\", // % maps to the '5' key \"^\": \"Digit6\", // ^ maps to the '6' key \"&\": \"Digit7\", // & maps to the '7' key \"*\": \"Digit8\", // * maps to the '8' key \"(\": \"Digit9\", // ( maps to the '9' key \")\": \"Digit0\", // ) maps to the '0' key a: \"KeyA\", b: \"KeyB\", c: \"KeyC\", d: \"KeyD\", e: \"KeyE\", f: \"KeyF\", g: \"KeyG\", h: \"KeyH\", i: \"KeyI\", j: \"KeyJ\", k: \"KeyK\", l: \"KeyL\", m: \"KeyM\", n: \"KeyN\", o: \"KeyO\", p: \"KeyP\", q: \"KeyQ\", r: \"KeyR\", s: \"KeyS\", t: \"KeyT\", u: \"KeyU\", v: \"KeyV\", w: \"KeyW\", x: \"KeyX\", y: \"KeyY\", z: \"KeyZ\", // A: \"KeyA\", B: \"KeyB\", C: \"KeyC\", D: \"KeyD\", E: \"KeyE\", F: \"KeyF\", G: \"KeyG\", H: \"KeyH\", I: \"KeyI\", J: \"KeyJ\", K: \"KeyK\", L: \"KeyL\", M: \"KeyM\", N: \"KeyN\", O: \"KeyO\", P: \"KeyP\", Q: \"KeyQ\", R: \"KeyR\", S: \"KeyS\", T: \"KeyT\", U: \"KeyU\", V: \"KeyV\", W: \"KeyW\", X: \"KeyX\", Y: \"KeyY\", Z: \"KeyZ\", \"-\": \"Minus\", _: \"Minus\", \"=\": \"Equal\", \"+\": \"Equal\", \"[\": \"BracketLeft\", \"{\": \"BracketLeft\", \"]\": \"BracketRight\", \"}\": \"BracketRight\", \"|\": \"Backslash\", \"\\\\\": \"Backslash\", \"`\": \"Backquote\", \"~\": \"Backquote\", \";\": \"Semicolon\", \":\": \"Semicolon\", \"'\": \"Quote\", '\"': \"Quote\", \",\": \"Comma\", \"<\": \"Comma\", \".\": \"Period\", \">\": \"Period\", \"/\": \"Slash\", \"?\": \"Slash\", // Numpad keys \"{numpad0}\": \"Numpad0\", \"{numpad1}\": \"Numpad1\", \"{numpad2}\": \"Numpad2\", \"{numpad3}\": \"Numpad3\", \"{numpad4}\": \"Numpad4\", \"{numpad5}\": \"Numpad5\", \"{numpad6}\": \"Numpad6\", \"{numpad7}\": \"Numpad7\", \"{numpad8}\": \"Numpad8\", \"{numpad9}\": \"Numpad9\", \"{numlock}\": \"numlock\", \"{numpadmultiply}\": \"NumpadMultiply\", \"{numpadadd}\": \"NumpadAdd\", \"{numpadsubtract}\": \"NumpadSubtract\", \"{numpaddecimal}\": \"NumpadDecimal\", \"{numpaddivide}\": \"NumpadDivide\", \"{numpadenter}\": \"NumpadEnter\", // Function keys \"{f1}\": \"F1\", \"{f2}\": \"F2\", \"{f3}\": \"F3\", \"{f4}\": \"F4\", \"{f5}\": \"F5\", \"{f6}\": \"F6\", \"{f7}\": \"F7\", \"{f8}\": \"F8\", \"{f9}\": \"F9\", \"{f10}\": \"F10\", \"{f11}\": \"F11\", \"{f12}\": \"F12\"","title":"\u89c6\u9891&\u952e\u9f20"},{"location":"hid/#_1","text":"","title":"\u89c6\u9891 \u952e\u76d8 \u9f20\u6807"},{"location":"hid/#_2","text":"\u5728v1.4.5\u7248\u672c\u540e\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u5feb\u6377\u952e,\u627e\u5230shortcuts\u914d\u7f6e\u9879\u76ee, \u5176\u4e2dkey\u4e3aweb ui\u4e0a\u7684\u6309\u94ae\u540d\u79f0\uff0cvalue\u4e3a\u5177\u4f53\u7684\u6309\u952e\u3002 sudo -s vim /mnt/exec/release/config/app.json ## \u9ed8\u8ba4\u914d\u7f6e\u5982\u4e0b\uff1a \"shortcuts\": { \"Ctrl+Alt+Del\": [\"ControlLeft\",\"AltLeft\",\"Delete\"], \"Alt+Tab\": [\"AltLeft\",\"Tab\"], \"Alt+F4\": [\"AltLeft\",\"F4\"], \"Alt+Enter\": [\"AltLeft\",\"Enter\"], \"Ctrl+W\": [\"ControlLeft\",\"KeyW\"] } \u5176\u4e2d\u6309\u952e\u540d\u79f0\u5177\u6709\u552f\u4e00\u6027\uff0c\u4e0b\u9762\u63d0\u4f9b\u5177\u4f53\u7684\u6309\u952e\u540d\u79f0 \"{backspace}\": \"Backspace\", \"{tab}\": \"Tab\", \"{enter}\": \"Enter\", \"{shiftleft}\": \"ShiftLeft\", \"{shiftright}\": \"ShiftRight\", \"{altleft}\": \"AltLeft\", \"{altright}\": \"AltRight\", \"{prtscr}\": \"PrtScr\", \"{pause}\": \"Pause\", \"{scrolllock}\": \"ScrollLock\", \"{controlleft}\": \"ControlLeft\", \"{controlright}\": \"ControlRight\", \"{metaleft}\": \"MetaLeft\", \"{metaright}\": \"MetaRight\", \"{capslock}\": \"CapsLock\", \"{escape}\": \"Escape\", \"{space}\": \"Space\", \"{pageup}\": \"PageUp\", \"{pagedown}\": \"PageDown\", \"{end}\": \"End\", \"{home}\": \"Home\", \"{arrowleft}\": \"ArrowLeft\", \"{arrowup}\": \"ArrowUp\", \"{arrowright}\": \"ArrowRight\", \"{arrowdown}\": \"ArrowDown\", \"{insert}\": \"Insert\", \"{delete}\": \"Delete\", // Digits keys 1: \"Digit1\", 2: \"Digit2\", 3: \"Digit3\", 4: \"Digit4\", 5: \"Digit5\", 6: \"Digit6\", 7: \"Digit7\", 8: \"Digit8\", 9: \"Digit9\", 0: \"Digit0\", // \"!\": \"Digit1\", // ! maps to the '1' key \"@\": \"Digit2\", // @ maps to the '2' key \"#\": \"Digit3\", // # maps to the '3' key $: \"Digit4\", // $ maps to the '4' key \"%\": \"Digit5\", // % maps to the '5' key \"^\": \"Digit6\", // ^ maps to the '6' key \"&\": \"Digit7\", // & maps to the '7' key \"*\": \"Digit8\", // * maps to the '8' key \"(\": \"Digit9\", // ( maps to the '9' key \")\": \"Digit0\", // ) maps to the '0' key a: \"KeyA\", b: \"KeyB\", c: \"KeyC\", d: \"KeyD\", e: \"KeyE\", f: \"KeyF\", g: \"KeyG\", h: \"KeyH\", i: \"KeyI\", j: \"KeyJ\", k: \"KeyK\", l: \"KeyL\", m: \"KeyM\", n: \"KeyN\", o: \"KeyO\", p: \"KeyP\", q: \"KeyQ\", r: \"KeyR\", s: \"KeyS\", t: \"KeyT\", u: \"KeyU\", v: \"KeyV\", w: \"KeyW\", x: \"KeyX\", y: \"KeyY\", z: \"KeyZ\", // A: \"KeyA\", B: \"KeyB\", C: \"KeyC\", D: \"KeyD\", E: \"KeyE\", F: \"KeyF\", G: \"KeyG\", H: \"KeyH\", I: \"KeyI\", J: \"KeyJ\", K: \"KeyK\", L: \"KeyL\", M: \"KeyM\", N: \"KeyN\", O: \"KeyO\", P: \"KeyP\", Q: \"KeyQ\", R: \"KeyR\", S: \"KeyS\", T: \"KeyT\", U: \"KeyU\", V: \"KeyV\", W: \"KeyW\", X: \"KeyX\", Y: \"KeyY\", Z: \"KeyZ\", \"-\": \"Minus\", _: \"Minus\", \"=\": \"Equal\", \"+\": \"Equal\", \"[\": \"BracketLeft\", \"{\": \"BracketLeft\", \"]\": \"BracketRight\", \"}\": \"BracketRight\", \"|\": \"Backslash\", \"\\\\\": \"Backslash\", \"`\": \"Backquote\", \"~\": \"Backquote\", \";\": \"Semicolon\", \":\": \"Semicolon\", \"'\": \"Quote\", '\"': \"Quote\", \",\": \"Comma\", \"<\": \"Comma\", \".\": \"Period\", \">\": \"Period\", \"/\": \"Slash\", \"?\": \"Slash\", // Numpad keys \"{numpad0}\": \"Numpad0\", \"{numpad1}\": \"Numpad1\", \"{numpad2}\": \"Numpad2\", \"{numpad3}\": \"Numpad3\", \"{numpad4}\": \"Numpad4\", \"{numpad5}\": \"Numpad5\", \"{numpad6}\": \"Numpad6\", \"{numpad7}\": \"Numpad7\", \"{numpad8}\": \"Numpad8\", \"{numpad9}\": \"Numpad9\", \"{numlock}\": \"numlock\", \"{numpadmultiply}\": \"NumpadMultiply\", \"{numpadadd}\": \"NumpadAdd\", \"{numpadsubtract}\": \"NumpadSubtract\", \"{numpaddecimal}\": \"NumpadDecimal\", \"{numpaddivide}\": \"NumpadDivide\", \"{numpadenter}\": \"NumpadEnter\", // Function keys \"{f1}\": \"F1\", \"{f2}\": \"F2\", \"{f3}\": \"F3\", \"{f4}\": \"F4\", \"{f5}\": \"F5\", \"{f6}\": \"F6\", \"{f7}\": \"F7\", \"{f8}\": \"F8\", \"{f9}\": \"F9\", \"{f10}\": \"F10\", \"{f11}\": \"F11\", \"{f12}\": \"F12\"","title":"\u5feb\u6377\u952e"},{"location":"https/","text":"\u52a0\u5bc6\u8bc1\u4e66 blikvm v1.4.4\u7248\u672c\u540e,\u5f00\u59cb\u652f\u6301http\u548chttps\u4e24\u79cd\u6a21\u5f0f, \u9ed8\u8ba4\u4ee5http\u5f62\u5f0f\u542f\u52a8\uff0c\u5982\u679c\u9700\u8981\u4ee5https\u542f\u52a8\uff0c\u9700\u8981\u4fee\u6539\u4ee5\u4e0b\u914d\u7f6e: sudo -s vim /mnt/exec/release/config/app.json \u627e\u5230\u4e0b\u9762\u914d\u7f6e\u5185\u5bb9\uff0c\u5c06protocol\u5b57\u6bb5\u5bf9\u5e94http\u6539\u4e3ahttps\uff0cport\u7aef\u53e3\u753180\u6539\u4e3a443\uff0c\u5176\u4e2dkey\u548ccert\u5728 /mnt/exec/release/lib/https/ \u6b64\u8def\u5f84\uff0c\u7528\u6237\u53ef\u4ee5\u81ea\u5df1\u8fdb\u884c\u66ff\u6362\u3002 \"server\": { \"protocol\": \"http\", \"port\":80, \"ssl\": { \"key\": \"./lib/https/key.pem\", \"cert\": \"./lib/https/cert.pem\" }","title":"\u52a0\u5bc6\u8bc1\u4e66"},{"location":"https/#_1","text":"blikvm v1.4.4\u7248\u672c\u540e,\u5f00\u59cb\u652f\u6301http\u548chttps\u4e24\u79cd\u6a21\u5f0f, \u9ed8\u8ba4\u4ee5http\u5f62\u5f0f\u542f\u52a8\uff0c\u5982\u679c\u9700\u8981\u4ee5https\u542f\u52a8\uff0c\u9700\u8981\u4fee\u6539\u4ee5\u4e0b\u914d\u7f6e: sudo -s vim /mnt/exec/release/config/app.json \u627e\u5230\u4e0b\u9762\u914d\u7f6e\u5185\u5bb9\uff0c\u5c06protocol\u5b57\u6bb5\u5bf9\u5e94http\u6539\u4e3ahttps\uff0cport\u7aef\u53e3\u753180\u6539\u4e3a443\uff0c\u5176\u4e2dkey\u548ccert\u5728 /mnt/exec/release/lib/https/ \u6b64\u8def\u5f84\uff0c\u7528\u6237\u53ef\u4ee5\u81ea\u5df1\u8fdb\u884c\u66ff\u6362\u3002 \"server\": { \"protocol\": \"http\", \"port\":80, \"ssl\": { \"key\": \"./lib/https/key.pem\", \"cert\": \"./lib/https/cert.pem\" }","title":"\u52a0\u5bc6\u8bc1\u4e66"},{"location":"jetson_nano_tc358743/","text":"\u5728jstson nano\u4e0a\u4f7f\u7528C790 C779 C780 C790\u5168\u90e8\u9002\u7528\u6b64\u6587\u6863\uff0c\u672c\u6587\u6d4b\u8bd5\u5e95\u677f\u4e3ajetson nano b01\uff0c\u82e5\u4f60\u5176\u5b83\u5e95\u677f\u6709\u4e00\u4e9b\u8bbe\u8ba1\u5230\u8ddf\u677f\u5b50\u578b\u53f7\u76f8\u5173\u7684\u6b65\u9aa4\uff0c\u9700\u8981\u5bf9\u5e94\u6539\u53d8\uff0c\u8bf7\u6ce8\u610f\u3002 \u73b0\u5728\u5185\u6838\u6e90\u7801 wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/sources/t210/public_sources.tbz2 tar -xf public_sources.tbz2 Linux_for_Tegra/source/public/kernel_src.tbz2 --strip-components=3 tar xf kernel_src.tbz2 \u6839\u636e\u4ed3\u5e93\u91cc\u7684\u76ee\u5f55\u7ed3\u6784\u8fdb\u884c\u6587\u4ef6\u66ff\u6362\uff0c\u8981\u5168\u90e8\u66ff\u6362 git clone https://github.com/ThomasVon2021/jetson_tc358743 cp ~/jetson_tc358743/* ./ -r . \u2514\u2500\u2500 jetson_tc358743-main \u251c\u2500\u2500 hardware \u2502 \u2514\u2500\u2500 nvidia \u2502 \u2514\u2500\u2500 platform \u2502 \u2514\u2500\u2500 t210 \u2502 \u251c\u2500\u2500 batuu \u2502 \u2502 \u2514\u2500\u2500 kernel-dts \u2502 \u2502 \u2514\u2500\u2500 tegra210-p3448-0003-p3542-0000.dts \u2502 \u2514\u2500\u2500 porg \u2502 \u2514\u2500\u2500 kernel-dts \u2502 \u251c\u2500\u2500 Makefile \u2502 \u251c\u2500\u2500 porg-platforms \u2502 \u2502 \u251c\u2500\u2500 tegra210-dual-tc358743.dtsi \u2502 \u2502 \u251c\u2500\u2500 tegra210-porg-dual-tc358743.dtsi \u2502 \u2502 \u251c\u2500\u2500 tegra210-porg-tc358743.dtsi \u2502 \u2502 \u2514\u2500\u2500 tegra210-tc358743.dtsi \u2502 \u251c\u2500\u2500 tegra210-p3448-0000-p3449-0000-b00.dts \u2502 \u251c\u2500\u2500 tegra210-p3448-all-p3449-0000-camera-tc358743-dual.dts \u2502 \u2514\u2500\u2500 tegra210-p3448-common-tc358743.dts \u251c\u2500\u2500 kernel \u2502 \u2514\u2500\u2500 kernel-4.9 \u2502 \u251c\u2500\u2500 drivers \u2502 \u2502 \u2514\u2500\u2500 media \u2502 \u2502 \u2514\u2500\u2500 i2c \u2502 \u2502 \u251c\u2500\u2500 tc358743.c \u2502 \u2502 \u2514\u2500\u2500 tc358743_regs.h \u2502 \u2514\u2500\u2500 include \u2502 \u2514\u2500\u2500 media \u2502 \u2514\u2500\u2500 i2c \u2502 \u2514\u2500\u2500 tc358743.h \u2514\u2500\u2500 README.md \u4ea4\u53c9\u7f16\u8bd1\u94fe\u4e0b\u8f7d,\u540e\u9762make\u65f6\uff0c\u4f60\u9700\u8981\u6307\u5b9a\u7f16\u8bd1\u94fe wget http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz \u8fdb\u5165\u5230kernel/kernel-4.9/\uff0c\u5148\u914d\u7f6e\u518d\u7f16\u8bd1\uff0c make ARCH=arm64 tegra_defconfig menuconfig Device Drivers > Multimedia Support > I2C Encoders, decoders, sensors and other helper chips Toshiba TC358743 decoder should be * (press y or space on the option) grep -i tc358743 .config #checking if its really enabled make ARCH=arm64 CROSS_COMPILE=/root/work/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- -j4 \u5c06\u7f16\u8bd1\u51fa\u6765\u7684Image\u548cdtb\u6587\u4ef6\u5206\u522b\u62f7\u8d1d\u5230nano\u7684\u7cfb\u7edf\u7684\u4e0b\u9762\u8def\u5f84\u4e0b,\u82e5\u4f60\u7684\u8f7d\u677f\u4e0d\u662fB01\uff0c\u9700\u8981\u66f4\u6362\u5bf9\u5e94\u7684dtb\u6587\u4ef6\uff0cdtb\u6587\u4ef6\u4e0e\u4f60\u7684\u677f\u5b50\u578b\u53f7\u5bf9\u5e94\u5173\u7cfb\uff0c\u53ef\u4ee5\u67e5\u627e wiki kernel/kernel-4.9/arch/arm64/boot/Image ==> /boot/Image kernel/kernel-4.9/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-b00.dtb ==> /boot/veyecam/ #\u5176\u4e2d\u4f60\u7684nano\u8def\u5f84\u5982\u679c\u4e0d\u5b58\u5728veyecam\u6587\u4ef6\u5939\uff0c\u5148\u521b\u5efa sudo mkdir /boot/veyecam/ sudo cp / /boot/veyecam/ -f \u5148\u5907\u4efd extlinux.conf \u6587\u4ef6\uff0c\u7136\u540e\u7f16\u8f91/boot/extlinux/extlinux.conf\u6587\u4ef6\uff0c\u5728\u8be5\u6587\u4ef6\u4e0b\u589e\u52a0\uff1a FDT /boot/veyecam/ \u6ce8\u610f \u4e3a\u4f60\u7248\u672c\u7f16\u8bd1\u51fa\u6765\u7684dtb\u5b9e\u9645\u6587\u4ef6\u540d\uff0c \u91cd\u542f\u540e\u751f\u6548","title":"\u5728jstson nano\u4e0a\u4f7f\u7528C790"},{"location":"jetson_nano_tc358743/#jstson-nanoc790","text":"C779 C780 C790\u5168\u90e8\u9002\u7528\u6b64\u6587\u6863\uff0c\u672c\u6587\u6d4b\u8bd5\u5e95\u677f\u4e3ajetson nano b01\uff0c\u82e5\u4f60\u5176\u5b83\u5e95\u677f\u6709\u4e00\u4e9b\u8bbe\u8ba1\u5230\u8ddf\u677f\u5b50\u578b\u53f7\u76f8\u5173\u7684\u6b65\u9aa4\uff0c\u9700\u8981\u5bf9\u5e94\u6539\u53d8\uff0c\u8bf7\u6ce8\u610f\u3002 \u73b0\u5728\u5185\u6838\u6e90\u7801 wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/sources/t210/public_sources.tbz2 tar -xf public_sources.tbz2 Linux_for_Tegra/source/public/kernel_src.tbz2 --strip-components=3 tar xf kernel_src.tbz2 \u6839\u636e\u4ed3\u5e93\u91cc\u7684\u76ee\u5f55\u7ed3\u6784\u8fdb\u884c\u6587\u4ef6\u66ff\u6362\uff0c\u8981\u5168\u90e8\u66ff\u6362 git clone https://github.com/ThomasVon2021/jetson_tc358743 cp ~/jetson_tc358743/* ./ -r . \u2514\u2500\u2500 jetson_tc358743-main \u251c\u2500\u2500 hardware \u2502 \u2514\u2500\u2500 nvidia \u2502 \u2514\u2500\u2500 platform \u2502 \u2514\u2500\u2500 t210 \u2502 \u251c\u2500\u2500 batuu \u2502 \u2502 \u2514\u2500\u2500 kernel-dts \u2502 \u2502 \u2514\u2500\u2500 tegra210-p3448-0003-p3542-0000.dts \u2502 \u2514\u2500\u2500 porg \u2502 \u2514\u2500\u2500 kernel-dts \u2502 \u251c\u2500\u2500 Makefile \u2502 \u251c\u2500\u2500 porg-platforms \u2502 \u2502 \u251c\u2500\u2500 tegra210-dual-tc358743.dtsi \u2502 \u2502 \u251c\u2500\u2500 tegra210-porg-dual-tc358743.dtsi \u2502 \u2502 \u251c\u2500\u2500 tegra210-porg-tc358743.dtsi \u2502 \u2502 \u2514\u2500\u2500 tegra210-tc358743.dtsi \u2502 \u251c\u2500\u2500 tegra210-p3448-0000-p3449-0000-b00.dts \u2502 \u251c\u2500\u2500 tegra210-p3448-all-p3449-0000-camera-tc358743-dual.dts \u2502 \u2514\u2500\u2500 tegra210-p3448-common-tc358743.dts \u251c\u2500\u2500 kernel \u2502 \u2514\u2500\u2500 kernel-4.9 \u2502 \u251c\u2500\u2500 drivers \u2502 \u2502 \u2514\u2500\u2500 media \u2502 \u2502 \u2514\u2500\u2500 i2c \u2502 \u2502 \u251c\u2500\u2500 tc358743.c \u2502 \u2502 \u2514\u2500\u2500 tc358743_regs.h \u2502 \u2514\u2500\u2500 include \u2502 \u2514\u2500\u2500 media \u2502 \u2514\u2500\u2500 i2c \u2502 \u2514\u2500\u2500 tc358743.h \u2514\u2500\u2500 README.md \u4ea4\u53c9\u7f16\u8bd1\u94fe\u4e0b\u8f7d,\u540e\u9762make\u65f6\uff0c\u4f60\u9700\u8981\u6307\u5b9a\u7f16\u8bd1\u94fe wget http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz \u8fdb\u5165\u5230kernel/kernel-4.9/\uff0c\u5148\u914d\u7f6e\u518d\u7f16\u8bd1\uff0c make ARCH=arm64 tegra_defconfig menuconfig Device Drivers > Multimedia Support > I2C Encoders, decoders, sensors and other helper chips Toshiba TC358743 decoder should be * (press y or space on the option) grep -i tc358743 .config #checking if its really enabled make ARCH=arm64 CROSS_COMPILE=/root/work/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- -j4 \u5c06\u7f16\u8bd1\u51fa\u6765\u7684Image\u548cdtb\u6587\u4ef6\u5206\u522b\u62f7\u8d1d\u5230nano\u7684\u7cfb\u7edf\u7684\u4e0b\u9762\u8def\u5f84\u4e0b,\u82e5\u4f60\u7684\u8f7d\u677f\u4e0d\u662fB01\uff0c\u9700\u8981\u66f4\u6362\u5bf9\u5e94\u7684dtb\u6587\u4ef6\uff0cdtb\u6587\u4ef6\u4e0e\u4f60\u7684\u677f\u5b50\u578b\u53f7\u5bf9\u5e94\u5173\u7cfb\uff0c\u53ef\u4ee5\u67e5\u627e wiki kernel/kernel-4.9/arch/arm64/boot/Image ==> /boot/Image kernel/kernel-4.9/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-b00.dtb ==> /boot/veyecam/ #\u5176\u4e2d\u4f60\u7684nano\u8def\u5f84\u5982\u679c\u4e0d\u5b58\u5728veyecam\u6587\u4ef6\u5939\uff0c\u5148\u521b\u5efa sudo mkdir /boot/veyecam/ sudo cp / /boot/veyecam/ -f \u5148\u5907\u4efd extlinux.conf \u6587\u4ef6\uff0c\u7136\u540e\u7f16\u8f91/boot/extlinux/extlinux.conf\u6587\u4ef6\uff0c\u5728\u8be5\u6587\u4ef6\u4e0b\u589e\u52a0\uff1a FDT /boot/veyecam/ \u6ce8\u610f \u4e3a\u4f60\u7248\u672c\u7f16\u8bd1\u51fa\u6765\u7684dtb\u5b9e\u9645\u6587\u4ef6\u540d\uff0c \u91cd\u542f\u540e\u751f\u6548","title":"\u5728jstson nano\u4e0a\u4f7f\u7528C790"},{"location":"make-image/","text":"Make your owner image \u5f53\u4f60\u5bf9\u955c\u50cf\u8fdb\u884c\u4e86\u4fee\u6539\uff0c\u60f3\u5236\u4f5c\u81ea\u5df1\u7684\u955c\u50cf\u65f6\uff0c\u53ef\u4ee5\u53c2\u8003\u4e0b\u9762\u5728linux\u4e0b\u7684\u65b9\u6cd5\uff0c\u5236\u4f5c\u4e00\u4e2a\u6700\u5c0f\u955c\u50cf\u3002 \u9996\u5148\u4f7f\u7528gparted\u8f6f\u4ef6\uff0c\u6253\u5f00\u6240\u8981\u5236\u4f5c\u7684\u955c\u50cf\u7684sd\u5361\u3002\u5c06\u672a\u4f7f\u7528\u7684\u7a7a\u95f4\u901a\u8fc7gparted\u8f6f\u4ef6\u5c06\u5176\u5206\u5272\u51fa\u6765\uff0c\u5e76\u5c06\u5176\u8bbe\u7f6e\u4e3a\u672a\u5206\u914d\u3002\u8fd9\u6837\u5236\u4f5c\u955c\u50cf\u65f6\uff0c\u8fd9\u90e8\u5206\u65e0\u4efb\u4f55\u6709\u6548\u5185\u5bb9\u7684\u7a7a\u95f4\u5c31\u4e0d\u4f1a\u88ab\u5236\u4f5c\u4e86\u3002 \u7136\u540e\u4f7f\u7528\u9996\u5148\u4f7f\u7528fdisk\u547d\u4ee4\u67e5\u770b\u6709\u6548\u7a7a\u95f4\u7684\u5927\u5c0f\uff0c\u5982\u4e0b\u56fe,\u537310151935\u3002 \u7136\u540e\u4f7f\u7528dd\u547d\u4ee4\u5f80\u4e00\u4e2a\u7a7a\u7684img\u6587\u4ef6\u91cc\u5199\u5165\u5373\u53ef,\u5176\u4e2dcount\u7684\u5927\u5c0f\u6bd4fdisk\u770b\u5230\u7684\u5377\u5c3e\u5927\u5c0f\u5927\u4e8e1\u5373\u53ef\u3002 touch blikvm-armbian-v4-20230623.img sudo dd if=/dev/sdb of=./blikvm-armbian-v4-20230623.img bs=512 count=10151936 \u7b49\u5f85dd\u547d\u4ee4\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002","title":"\u5236\u4f5c\u955c\u50cf"},{"location":"make-image/#make-your-owner-image","text":"\u5f53\u4f60\u5bf9\u955c\u50cf\u8fdb\u884c\u4e86\u4fee\u6539\uff0c\u60f3\u5236\u4f5c\u81ea\u5df1\u7684\u955c\u50cf\u65f6\uff0c\u53ef\u4ee5\u53c2\u8003\u4e0b\u9762\u5728linux\u4e0b\u7684\u65b9\u6cd5\uff0c\u5236\u4f5c\u4e00\u4e2a\u6700\u5c0f\u955c\u50cf\u3002 \u9996\u5148\u4f7f\u7528gparted\u8f6f\u4ef6\uff0c\u6253\u5f00\u6240\u8981\u5236\u4f5c\u7684\u955c\u50cf\u7684sd\u5361\u3002\u5c06\u672a\u4f7f\u7528\u7684\u7a7a\u95f4\u901a\u8fc7gparted\u8f6f\u4ef6\u5c06\u5176\u5206\u5272\u51fa\u6765\uff0c\u5e76\u5c06\u5176\u8bbe\u7f6e\u4e3a\u672a\u5206\u914d\u3002\u8fd9\u6837\u5236\u4f5c\u955c\u50cf\u65f6\uff0c\u8fd9\u90e8\u5206\u65e0\u4efb\u4f55\u6709\u6548\u5185\u5bb9\u7684\u7a7a\u95f4\u5c31\u4e0d\u4f1a\u88ab\u5236\u4f5c\u4e86\u3002 \u7136\u540e\u4f7f\u7528\u9996\u5148\u4f7f\u7528fdisk\u547d\u4ee4\u67e5\u770b\u6709\u6548\u7a7a\u95f4\u7684\u5927\u5c0f\uff0c\u5982\u4e0b\u56fe,\u537310151935\u3002 \u7136\u540e\u4f7f\u7528dd\u547d\u4ee4\u5f80\u4e00\u4e2a\u7a7a\u7684img\u6587\u4ef6\u91cc\u5199\u5165\u5373\u53ef,\u5176\u4e2dcount\u7684\u5927\u5c0f\u6bd4fdisk\u770b\u5230\u7684\u5377\u5c3e\u5927\u5c0f\u5927\u4e8e1\u5373\u53ef\u3002 touch blikvm-armbian-v4-20230623.img sudo dd if=/dev/sdb of=./blikvm-armbian-v4-20230623.img bs=512 count=10151936 \u7b49\u5f85dd\u547d\u4ee4\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002","title":"Make your owner image"},{"location":"modify_pikvm_image/","text":"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u9700\u8981\u505a\u4ee5\u4e0b\u4fee\u6539\u6765\u9002\u914dBLIKVM\u786c\u4ef6 \u56e0\u4e3ablikvm\u786c\u4ef6\u5b9e\u73b0\u65b9\u6848\u548cPiKVM\u786c\u4ef6\u5b9e\u73b0\u65b9\u6848\u5e76\u4e0d\u5b8c\u5168\u76f8\u540c\uff0c\u56e0\u6b64\u9488\u5bf9PiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u60a8\u9700\u8981\u901a\u8fc7\u4e0b\u5217\u914d\u7f6e\u4fee\u6539\u4e00\u4e9b\u9519\u8bef\u3002\u5f53\u7136\u60a8\u53ef\u4ee5\u4f7f\u7528\u6211\u4eec\u5df2\u7ecf\u505a\u597d\u914d\u7f6e\u7684 \u955c\u50cf \u98ce\u6247 \u56e0BLIKVM\u786c\u4ef6\u4e0ePiKVM\u4f7f\u7528\u98ce\u6247\u4e0d\u540c\uff0c\u9996\u5148\u9700\u66ff\u6362\u63a7\u5236\u98ce\u6247\u811a\u672c\uff0c\u4e0b\u5217\u9ed8\u8ba4\u5f00\u59cb\u98ce\u6247\u6e29\u5ea6\u4e3a40\u6444\u6c0f\u5ea6 su - rw git clone https://github.com/ThomasVon2021/blikvm.git cd blikvm/package/kvmd-fan bash install-kvmd-fan.sh ro \u7f16\u8f91/etc/kvmd/override.yaml\u6587\u4ef6\uff0c\u6dfb\u52a0\u4e0b\u5217\u5185\u5bb9\u5df2\u53bb\u9664Web UI\u5173\u4e8e\u98ce\u6247\u7684\u9519\u8bef\u8b66\u544a\u3002 kvmd: info: fan: unix: '' 2. EDID\u6587\u4ef6\u66f4\u6362 EDID\u6587\u4ef6\u4f5c\u7528\u4e3a\uff0c\u8bbe\u7f6e\u88ab\u63a7\u8ba1\u7b97\u673a\u6309\u7167\u671f\u671b\u7684\u5206\u8fa8\u7387\u8fdb\u884c\u8f93\u5165\uff0c\u7531\u4e8ePiKVM\u4e0d\u540c\u65f6\u671f\u7684\u955c\u50cfEDID\u6587\u4ef6\u4e0d\u4e00\u5b9a\u662f\u6ee1\u8db31080P60Hz, \u5f53\u4f60\u4f7f\u7528\u7684\u786c\u4ef6\u4e3aCM4\u7248\u672c\uff0c\u53d1\u73b0\u88ab\u63a7\u7535\u8111\u9ed8\u8ba4\u8f93\u51fa\u4e0d\u662f1080P60Hz\uff0c\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539/etc/kvmd/tc358743-edid.hex\u4e3a\u4e0b\u5217\u5185\u5bb9\uff1a 00FFFFFFFFFFFF005262888800888888 1C150103800000780AEE91A3544C9926 0F505400000001010101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0054 6F73686962612D4832430A20000000FD 003B3D0F2E0F1E0A202020202020014F 020323454F041303021211012021A23C 3D3E1F102309070766030C00300080E3 007F8C8C0AD08A20E02D10103E9600C4 8E210000188C0AD08A20E02D10103E96 00138E210000188C0AA01451F0160026 7C4300138E2100009800000000000000 00000000000000000000000000000000 00000000000000000000000000000087 \u786e\u8ba4 /boot/config.txt \u6dfb\u52a0\u4e86\u4e0b\u5217\u914d\u7f6e\uff0c\u4ece\u800c\u652f\u63011080p60hz\u89c6\u9891\u8f93\u5165\u548c\u58f0\u97f3\u8f93\u5165\uff0c\u76f8\u5173\u914d\u7f6e\u53c2\u8003\u5982\u4e0b\uff1a # Video and audio dtoverlay=tc358743,4lane=1 dtoverlay=tc358743-audio \u5982\u679c\u4f60\u4f7f\u7528webrtc\u6ca1\u6709\u58f0\u97f3\uff0c\u5c1d\u8bd5\u5728/etc/kvmd/janus/janus.plugin.ustreamer.jcfg\u6b64\u6587\u4ef6\u4e2d\u6dfb\u52a0\u4e0b\u5217\u5185\u5bb9 audio: { device = \"hw:0,0\" tc358743 = \"/dev/kvmd-video\" } 3. OLED\u542f\u7528 PiKVM\u955c\u50cf\uff0c\u6309\u7167\u4e0b\u9762\u7684\u65b9\u6cd5\u542f\u7528OLED\u3002 \u5982\u679c\u60a8\u4f7f\u7528PiKVM\u955c\u50cf\uff0c\u8bf7\u767b\u5f55\u5230PiKVM\u5e76\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a # rw # systemctl enable --now kvmd-oled //\u542f\u7528OLED # ro \u5982\u679cOLED\u4ecd\u7136\u65e0\u6cd5\u5de5\u4f5c\uff0c\u60a8\u9700\u8981\u68c0\u67e5\"/boot/config.txt\"\u6587\u4ef6\u4e2d\u662f\u5426\u6709\"dtparam=i2c_arm=on\"\uff0c\u4ee5\u53ca\"/etc/modules-load.d/i2c.conf\"\u6587\u4ef6\u4e2d\u662f\u5426\u6709\"i2c-dev\"\u3002\u5982\u679c\u6ca1\u6709\uff0c\u8bf7\u521b\u5efa\u5e76\u6dfb\u52a0\u5b83\u4eec\u3002 \u5982\u679c\u5728\u4e0a\u8ff0\u914d\u7f6e\u4e4b\u540e\u4ecd\u7136\u65e0\u6cd5\u5de5\u4f5c\uff0c\u8bf7\u523b\u5f55 blikvm\u63d0\u4f9b\u7684\u6d4b\u8bd5\u955c\u50cf \u6765\u68c0\u67e5OLED\u786c\u4ef6\u662f\u5426\u635f\u574f\u3002 4. \u5173\u4e8e v4mini \u955c\u50cf\u7684\u914d\u7f6e \u5982\u679c\u4f60\u60f3\u5728 blikvm v1 \u548c v2 \u4e0a\u4f7f\u7528 PiKVM v4mini \u955c\u50cf\uff0c\u7531\u4e8e v4mini \u955c\u50cf\u4f7f\u7528\u4e86\u4e0d\u540c\u7684 GPIO \u5f15\u811a\u6765\u63a7\u5236 ATX\uff0c\u56e0\u6b64\u4f60\u9700\u8981\u8fdb\u884c\u4ee5\u4e0b\u8986\u76d6\u914d\u7f6e\u3002\u5982\u679c\u4f60\u5e0c\u671b\u5728 blikvm v1 \u6216 v2 \u7248\u672c\u4e0a\u8fd0\u884c v4mini \u955c\u50cf\u5e76\u80fd\u591f\u4f7f\u7528 ATX \u63a7\u5236\uff0c\u4f60\u5fc5\u987b\u8fdb\u884c\u8fd9\u4e9b\u4fee\u6539\uff1b\u5982\u679c\u4e0d\u8fdb\u884c\u66f4\u6539\uff0cATX \u63a7\u5236\u5c06\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\uff08LED \u5f15\u811a\u4e0d\u540c\uff09\u3002 \u7f16\u8f91 /etc/kvmd/override.yaml \u6587\u4ef6\uff0c\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a kvmd: ### \u7981\u7528\u98ce\u6247\u63d2\u5ea7\u68c0\u67e5 ### info: fan: unix: '' atx: hdd_led_pin: 22 power_led_pin: 24 power_switch_pin: 23 reset_switch_pin: 27 type: gpio gpio: scheme: __v3_usb_breaker__: pin: 5 mode: output initial: false pulse: delay: 0","title":"\u914d\u7f6ePiKVM OS"},{"location":"modify_pikvm_image/#pikvmblikvm","text":"\u56e0\u4e3ablikvm\u786c\u4ef6\u5b9e\u73b0\u65b9\u6848\u548cPiKVM\u786c\u4ef6\u5b9e\u73b0\u65b9\u6848\u5e76\u4e0d\u5b8c\u5168\u76f8\u540c\uff0c\u56e0\u6b64\u9488\u5bf9PiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u60a8\u9700\u8981\u901a\u8fc7\u4e0b\u5217\u914d\u7f6e\u4fee\u6539\u4e00\u4e9b\u9519\u8bef\u3002\u5f53\u7136\u60a8\u53ef\u4ee5\u4f7f\u7528\u6211\u4eec\u5df2\u7ecf\u505a\u597d\u914d\u7f6e\u7684 \u955c\u50cf","title":"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u9700\u8981\u505a\u4ee5\u4e0b\u4fee\u6539\u6765\u9002\u914dBLIKVM\u786c\u4ef6"},{"location":"modify_pikvm_image/#_1","text":"\u56e0BLIKVM\u786c\u4ef6\u4e0ePiKVM\u4f7f\u7528\u98ce\u6247\u4e0d\u540c\uff0c\u9996\u5148\u9700\u66ff\u6362\u63a7\u5236\u98ce\u6247\u811a\u672c\uff0c\u4e0b\u5217\u9ed8\u8ba4\u5f00\u59cb\u98ce\u6247\u6e29\u5ea6\u4e3a40\u6444\u6c0f\u5ea6 su - rw git clone https://github.com/ThomasVon2021/blikvm.git cd blikvm/package/kvmd-fan bash install-kvmd-fan.sh ro \u7f16\u8f91/etc/kvmd/override.yaml\u6587\u4ef6\uff0c\u6dfb\u52a0\u4e0b\u5217\u5185\u5bb9\u5df2\u53bb\u9664Web UI\u5173\u4e8e\u98ce\u6247\u7684\u9519\u8bef\u8b66\u544a\u3002 kvmd: info: fan: unix: ''","title":"\u98ce\u6247"},{"location":"modify_pikvm_image/#2-edid","text":"EDID\u6587\u4ef6\u4f5c\u7528\u4e3a\uff0c\u8bbe\u7f6e\u88ab\u63a7\u8ba1\u7b97\u673a\u6309\u7167\u671f\u671b\u7684\u5206\u8fa8\u7387\u8fdb\u884c\u8f93\u5165\uff0c\u7531\u4e8ePiKVM\u4e0d\u540c\u65f6\u671f\u7684\u955c\u50cfEDID\u6587\u4ef6\u4e0d\u4e00\u5b9a\u662f\u6ee1\u8db31080P60Hz, \u5f53\u4f60\u4f7f\u7528\u7684\u786c\u4ef6\u4e3aCM4\u7248\u672c\uff0c\u53d1\u73b0\u88ab\u63a7\u7535\u8111\u9ed8\u8ba4\u8f93\u51fa\u4e0d\u662f1080P60Hz\uff0c\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539/etc/kvmd/tc358743-edid.hex\u4e3a\u4e0b\u5217\u5185\u5bb9\uff1a 00FFFFFFFFFFFF005262888800888888 1C150103800000780AEE91A3544C9926 0F505400000001010101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0054 6F73686962612D4832430A20000000FD 003B3D0F2E0F1E0A202020202020014F 020323454F041303021211012021A23C 3D3E1F102309070766030C00300080E3 007F8C8C0AD08A20E02D10103E9600C4 8E210000188C0AD08A20E02D10103E96 00138E210000188C0AA01451F0160026 7C4300138E2100009800000000000000 00000000000000000000000000000000 00000000000000000000000000000087 \u786e\u8ba4 /boot/config.txt \u6dfb\u52a0\u4e86\u4e0b\u5217\u914d\u7f6e\uff0c\u4ece\u800c\u652f\u63011080p60hz\u89c6\u9891\u8f93\u5165\u548c\u58f0\u97f3\u8f93\u5165\uff0c\u76f8\u5173\u914d\u7f6e\u53c2\u8003\u5982\u4e0b\uff1a # Video and audio dtoverlay=tc358743,4lane=1 dtoverlay=tc358743-audio \u5982\u679c\u4f60\u4f7f\u7528webrtc\u6ca1\u6709\u58f0\u97f3\uff0c\u5c1d\u8bd5\u5728/etc/kvmd/janus/janus.plugin.ustreamer.jcfg\u6b64\u6587\u4ef6\u4e2d\u6dfb\u52a0\u4e0b\u5217\u5185\u5bb9 audio: { device = \"hw:0,0\" tc358743 = \"/dev/kvmd-video\" }","title":"2. EDID\u6587\u4ef6\u66f4\u6362"},{"location":"modify_pikvm_image/#3-oled","text":"PiKVM\u955c\u50cf\uff0c\u6309\u7167\u4e0b\u9762\u7684\u65b9\u6cd5\u542f\u7528OLED\u3002 \u5982\u679c\u60a8\u4f7f\u7528PiKVM\u955c\u50cf\uff0c\u8bf7\u767b\u5f55\u5230PiKVM\u5e76\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a # rw # systemctl enable --now kvmd-oled //\u542f\u7528OLED # ro \u5982\u679cOLED\u4ecd\u7136\u65e0\u6cd5\u5de5\u4f5c\uff0c\u60a8\u9700\u8981\u68c0\u67e5\"/boot/config.txt\"\u6587\u4ef6\u4e2d\u662f\u5426\u6709\"dtparam=i2c_arm=on\"\uff0c\u4ee5\u53ca\"/etc/modules-load.d/i2c.conf\"\u6587\u4ef6\u4e2d\u662f\u5426\u6709\"i2c-dev\"\u3002\u5982\u679c\u6ca1\u6709\uff0c\u8bf7\u521b\u5efa\u5e76\u6dfb\u52a0\u5b83\u4eec\u3002 \u5982\u679c\u5728\u4e0a\u8ff0\u914d\u7f6e\u4e4b\u540e\u4ecd\u7136\u65e0\u6cd5\u5de5\u4f5c\uff0c\u8bf7\u523b\u5f55 blikvm\u63d0\u4f9b\u7684\u6d4b\u8bd5\u955c\u50cf \u6765\u68c0\u67e5OLED\u786c\u4ef6\u662f\u5426\u635f\u574f\u3002","title":"3. OLED\u542f\u7528"},{"location":"modify_pikvm_image/#4-v4mini","text":"\u5982\u679c\u4f60\u60f3\u5728 blikvm v1 \u548c v2 \u4e0a\u4f7f\u7528 PiKVM v4mini \u955c\u50cf\uff0c\u7531\u4e8e v4mini \u955c\u50cf\u4f7f\u7528\u4e86\u4e0d\u540c\u7684 GPIO \u5f15\u811a\u6765\u63a7\u5236 ATX\uff0c\u56e0\u6b64\u4f60\u9700\u8981\u8fdb\u884c\u4ee5\u4e0b\u8986\u76d6\u914d\u7f6e\u3002\u5982\u679c\u4f60\u5e0c\u671b\u5728 blikvm v1 \u6216 v2 \u7248\u672c\u4e0a\u8fd0\u884c v4mini \u955c\u50cf\u5e76\u80fd\u591f\u4f7f\u7528 ATX \u63a7\u5236\uff0c\u4f60\u5fc5\u987b\u8fdb\u884c\u8fd9\u4e9b\u4fee\u6539\uff1b\u5982\u679c\u4e0d\u8fdb\u884c\u66f4\u6539\uff0cATX \u63a7\u5236\u5c06\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\uff08LED \u5f15\u811a\u4e0d\u540c\uff09\u3002 \u7f16\u8f91 /etc/kvmd/override.yaml \u6587\u4ef6\uff0c\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a kvmd: ### \u7981\u7528\u98ce\u6247\u63d2\u5ea7\u68c0\u67e5 ### info: fan: unix: '' atx: hdd_led_pin: 22 power_led_pin: 24 power_switch_pin: 23 reset_switch_pin: 27 type: gpio gpio: scheme: __v3_usb_breaker__: pin: 5 mode: output initial: false pulse: delay: 0","title":"4.\u5173\u4e8e v4mini \u955c\u50cf\u7684\u914d\u7f6e"},{"location":"msd/","text":"U\u76d8\u8bbe\u5907\u6a21\u62df \u91cd\u88c5\u7cfb\u7edf\u89c6\u9891 BliKVM\u652f\u6301U\u76d8\u8bbe\u5907\u6a21\u62df\uff0c\u901a\u8fc7\u6b64\u529f\u80fd\u53ef\u4ee5\u8fdb\u884c\u8fdc\u7a0b\u6302\u8f7d\u955c\u50cf\uff0c\u8fdb\u884c\u91cd\u88c5\u7cfb\u7edf\u3002 Web UI msd\u865a\u62dfU\u76d8\u5165\u53e3\u4e3a: \u4f7f\u7528web\u4e0a\u4f20\u955c\u50cf\u548c\u5236\u4f5c\u542f\u52a8\u76d8\uff0c\u5747\u662f\u540c\u6b65\u7ebf\u7a0b\uff0c\u4e0a\u4f20\u955c\u50cf\u9000\u51faMSD\u7684UI\u754c\u9762\u540e\uff0c\u4e0b\u6b21\u518d\u9009\u62e9\u76f8\u540c\u955c\u50cf\u53ef\u65ad\u70b9\u7eed\u4f20\u3002\u5236\u4f5c\u542f\u52a8\u76d8\u63a8\u51fa\u540e\u4e0d\u53ef\u65ad\u70b9\u91cd\u505a\uff0c\u9700\u91cd\u65b0\u5f00\u59cb\u3002 \u4e0a\u4f20\u955c\u50cf\u9ed8\u8ba4\u8def\u5f84\u4e3a/mnt/upload,\u82e5\u51fa\u73b0\u4e0a\u4f20\u5931\u8d25\uff0c\u5220\u9664\u4e3a\u6210\u529f\u7684\u7f13\u5b58\u6587\u4ef6\uff0c\u53ef\u624b\u52a8\u5220\u9664\u6b64\u6587\u4ef6\u5939\uff1b \u56e0\u90e8\u5206\u955c\u50cf\u6587\u4ef6\u5927\u5c0f\u8f83\u5927\uff0c\u91c7\u53d6\u4e0a\u4f20\u955c\u50cf\u65b9\u6848\u4e3a\u5207\u7247\u4e0a\u4f20\u548c\u5408\u5e76\uff0c\u5408\u5e76\u8fc7\u7a0b\u4e0d\u80fd\u65ad\u70b9\u91cd\u6765\uff0c\u5207\u8bb0\u7b49\u5f85\u5408\u5e76\u5b8c\u6210\u540e(\u65f6\u95f4\u8f83\u957f)\uff0c\u518d\u8fdb\u5165\u4e0b\u4e00\u6b65\uff1b \u5236\u4f5c\u542f\u52a8\u76d8\u4e5f\u5f88\u4e3a\u4e24\u4e2a\u6b65\u9aa4\uff0c\u5236\u4f5c\u865a\u62dfU\u76d8\uff0c\u5c06\u9009\u62e9\u7684iso\u955c\u50cf\u62f7\u8d1d\u5230\u5236\u4f5c\u597d\u7684\u865a\u62dfU\u76d8\u91cc\uff0c\u4e24\u4e2a\u6b65\u9aa4\u5747\u6709\u8fdb\u5ea6\uff0c\u8bf7\u7b49\u4e24\u8005\u8fdb\u5ea6\u5747100%\u540e\u518d\u70b9\u51fb\u4e0b\u4e00\u6b65\u6309\u94ae\u3002 \u624b\u52a8 (\u4e0d\u4f7f\u7528Web UI) 1. \u786e\u8ba4\u7cfb\u7edf\u5b58\u5728\u4e0b\u97624\u4e2a\u8def\u5f84\u3002\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662f\u6700\u65b0\u7684BliKVM\u955c\u50cf\uff0c\u65e0\u9700\u8fdb\u884c\u68c0\u67e5\u3002\u5176\u4e2d/opt/bin/msd/user\u8def\u5f84\u7528\u4e8e\u5b58\u653e\u7cfb\u7edf\u955c\u50cf\u3002 /usr/bin/blikvm/ventoy-1.0.88 /usr/bin/blikvm/kvmd-msd.sh /mnt/msd/user /mnt/msd/ventoy 2. \u901a\u8fc7SSH\u767b\u9646\u5230BliKVM\u7ec8\u7aef\uff0c\u7528\u6237\u540d\u548c\u5bc6\u7801\u5747\u4e3ablikvm\uff0c\u901a\u8fc7rw\u547d\u4ee4\uff0c\u4f7f\u53ea\u8bfb\u7cfb\u7edf\u53d8\u4e3a\u53ef\u5199\u7cfb\u7edf\u3002 sudo rw 3. \u5728\u4f60\u63a7\u5236\u7aef\u7684\u7535\u8111\uff0c\u53ef\u4ee5\u5728\u7ec8\u7aef\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06iso\u955c\u50cf\u6587\u4ef6\u62f7\u8d1d\u5230BliKVM\u955c\u50cf\u7684\u6307\u5b9a\u8def\u5f84\u4e0b\u3002 scp ***.iso blikvm@xxx.xxx.xxx.xxx:/mnt/msd/user/ \u5f53\u7136\uff0c\u4f60\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5176\u4ed6\u4efb\u4f55\u4f60\u719f\u6089\u7684\u65b9\u5f0f\u5c06iso\u955c\u50cf\u6587\u4ef6\u62f7\u8d1d\u5230\u6307\u5b9a\u8def\u5f84\u4e0b\u3002 4. \u901a\u8fc7\u4f7f\u7528\u4e0b\u5217\u4e24\u79cd\u547d\u4ee4\u4e2d\u7684\u4e00\u4e2a\uff0c\u5c06\u955c\u50cf\u62f7\u8d1d\u5230\u6a21\u62df\u7684U\u76d8\u4e2d\u3002U\u76d8\u9ed8\u8ba4\u5927\u5c0f\u8bbe\u7f6e\u7684\u4e3a5GB\uff0c\u5982\u679c\u4f60\u9700\u8981\u66f4\u5927\u7684\u7a7a\u95f4\uff0c\u4f60\u9700\u8981\u4fee\u6539kvmd-msd.sh\u811a\u672c\u3002 \u5982\u679c /mnt/msd/user \u8def\u5f84\u4e0b\u53ea\u6709\u4e00\u4e2a\u955c\u50cf\u6587\u4ef6, \u4f60\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6b64\u547d\u4ee4. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make \u5982\u679c /mnt/msd/user \u8def\u5f84\u4e0b\u6709\u4e0d\u6b62\u4e00\u4e2a\u955c\u50cf\u6587\u4ef6, \u4f60\u53ef\u4ee5\u4f7f\u7528\u4e0b\u5217\u6587\u4ef6\u6307\u5b9a. xxx.iso \u8868\u793a\u955c\u50cf\u7684\u540d\u79f0.\u5176\u4e2d-s\u540e\u8ddf\u7684\u6570\u5b57\u5373\u662f\u5236\u4f5c\u7684U\u76d8\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u662fG\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u9700\u6c42\u4fee\u6539\u3002-n\u540e\u8ddf\u7684\u5b57\u7b26\u4e32\u662fu\u76d8\u540d\u79f0\u3002 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 5 -n ventoy -f xxx.iso cp\u8fc7\u7a0b\u975e\u5e38\u6162\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u3002 5. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06\u6a21\u62df\u7684U\u76d8\u8fde\u63a5\u5230\u5230\u4f60\u7684\u88ab\u63a7\u8bbe\u5907\u4e0a sudo bash /usr/bin/blikvm/kvmd-msd.sh -c conn 6. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06\u6a21\u62df\u7684U\u76d8\u4ece\u4f60\u7684\u88ab\u63a7\u8bbe\u5907\u4e0a\u5f39\u51fa sudo bash /usr/bin/blikvm/kvmd-msd.sh -c disconn 7. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u6e05\u9664\u6389\u6a21\u62df\u7684U\u76d8\uff0c\u5c06\u4f1a\u91ca\u653e\u6389\u5bf9\u5e94\u7684\u7a7a\u95f4 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c clean 8. \u4e00\u5207\u6b63\u786e\u7684\u8bdd\uff0c\u6b64\u65f6\u4f60\u53ef\u4ee5\u5728\u4e00\u4e2aPC\u7cfb\u7edf\u91cc\u770b\u5230\u4f60\u6a21\u62df\u51fa\u7684U\u76d8\u3002\u901a\u8fc7WEB\u91cd\u542f\u7684\u4f60\u7684PC\uff0c\u7136\u540e\u4f7f\u7528\u5feb\u6377\u952e\uff08\u5f88\u591a\u7535\u8111\u662f\u6309F2\uff09\u8fdb\u5165BIOS\uff0c\u4fee\u6539boot\u542f\u52a8\u4f18\u5148\u7ea7\uff0c\u5c06\u6a21\u62df\u51fa\u7684U\u76d8\u8bbe\u5907\u4f18\u5148\u7ea7\u8bbe\u7f6e\u5728\u6700\u524d\u9762\u3002 9. \u6839\u636ebios\u7cfb\u7edf\u63d0\u793a\uff0c\u4fdd\u5b58\u91cd\u542f\uff0c\u5373\u53ef\u8fdb\u884cventoy\u7684\u5f15\u5bfc\u754c\u9762\u8fdb\u884c\u91cd\u88c5\u7cfb\u7edf\u3002 \u901a\u7528U\u76d8 \u4f20\u9012\u901a\u7528\u6587\u4ef6\uff0c\u6ce8\u610f\u6587\u4ef6\u540d\u9700\u547d\u540d\u4e3a\u82f1\u6587\uff0c\u4e2d\u6587\u4f1a\u4e71\u7801\u3002 conn\uff0c disconn, clean\u547d\u4ee4\u9488\u5bf9\u901a\u7528U\u76d8\u4f9d\u65e7\u6709\u6548\u3002 \u5236\u4f5c\u901a\u7528U\u76d8 -s\u540e\u8ddf\u7684\u662f\u5236\u4f5c\u901a\u7528U\u76d8\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u4e3aGb\uff0c\u5bb9\u91cf\u8d8a\u5927\uff0c\u5236\u4f5c\u65f6\u95f4\u8d8a\u957f\uff0c\u8bf7\u7ed3\u5408\u5b9e\u9645\u60c5\u51b5\u8bbe\u7f6e\u3002 -t \u5fc5\u987b\u4e3aother sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 4 -t other \u6587\u4ef6\u4ece\u7528\u6237\u7535\u8111==\u300bKVM==\u300b\u88ab\u63a7\u7535\u8111 \u9996\u5148\u4f60\u9700\u8981\u5c06\u6587\u4ef6\u4ece\u7528\u6237\u63a7\u5236\u7535\u8111\u53d1\u9001\u5230kvm scp xxx blikvm@xxxx:/mnt/msd/user/ \u5c06\u6587\u4ef6\u540c\u6b65\u5230\u88ab\u63a7\u7535\u8111\uff0c\u5e76\u8fde\u63a5\u4e0a\u7535\u8111 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c forward \u540e\u9762\u6709\u9700\u8981\u65b0\u7684\u5185\u5bb9\u4ece\u7528\u6237\u7535\u8111\uff0c\u4f20\u9012\u5230\u88ab\u63a7\u7535\u8111\uff0c\u91cd\u590d\u7b2c1\u548c\u7b2c2\u6b65\u5373\u53ef \u6587\u4ef6\u4ece\u88ab\u63a7\u7535\u8111==\u300bKVM==\u7528\u6237\u7535\u8111 \u9996\u5148\u5728\u88ab\u63a7\u7535\u8111\u4e0a\u5c06\u6587\u4ef6\u62f7\u8d1d\u5230\u6a21\u62df\u7684\u865a\u62dfU\u76d8\u91cc\uff0c\u7136\u540e\u6267\u884c\u4e0b\u9762\u7684\u6307\u4ee4\uff0c\u5c06\u6587\u4ef6\u62f7\u8d1d\u5230kvm\u7684/mnt/msd/user/\u76ee\u5f55\u4e0b sudo bash /usr/bin/blikvm/kvmd-msd.sh -c rever \u5c06\u6587\u4ef6\u4ecekvm\u62f7\u8d1d\u5230\u7528\u6237\u7535\u8111 scp blikvm@xxxx:/mnt/msd/user/* .","title":"U\u76d8\u9a71\u52a8"},{"location":"msd/#u","text":"\u91cd\u88c5\u7cfb\u7edf\u89c6\u9891 BliKVM\u652f\u6301U\u76d8\u8bbe\u5907\u6a21\u62df\uff0c\u901a\u8fc7\u6b64\u529f\u80fd\u53ef\u4ee5\u8fdb\u884c\u8fdc\u7a0b\u6302\u8f7d\u955c\u50cf\uff0c\u8fdb\u884c\u91cd\u88c5\u7cfb\u7edf\u3002","title":"U\u76d8\u8bbe\u5907\u6a21\u62df"},{"location":"msd/#web-ui","text":"msd\u865a\u62dfU\u76d8\u5165\u53e3\u4e3a: \u4f7f\u7528web\u4e0a\u4f20\u955c\u50cf\u548c\u5236\u4f5c\u542f\u52a8\u76d8\uff0c\u5747\u662f\u540c\u6b65\u7ebf\u7a0b\uff0c\u4e0a\u4f20\u955c\u50cf\u9000\u51faMSD\u7684UI\u754c\u9762\u540e\uff0c\u4e0b\u6b21\u518d\u9009\u62e9\u76f8\u540c\u955c\u50cf\u53ef\u65ad\u70b9\u7eed\u4f20\u3002\u5236\u4f5c\u542f\u52a8\u76d8\u63a8\u51fa\u540e\u4e0d\u53ef\u65ad\u70b9\u91cd\u505a\uff0c\u9700\u91cd\u65b0\u5f00\u59cb\u3002 \u4e0a\u4f20\u955c\u50cf\u9ed8\u8ba4\u8def\u5f84\u4e3a/mnt/upload,\u82e5\u51fa\u73b0\u4e0a\u4f20\u5931\u8d25\uff0c\u5220\u9664\u4e3a\u6210\u529f\u7684\u7f13\u5b58\u6587\u4ef6\uff0c\u53ef\u624b\u52a8\u5220\u9664\u6b64\u6587\u4ef6\u5939\uff1b \u56e0\u90e8\u5206\u955c\u50cf\u6587\u4ef6\u5927\u5c0f\u8f83\u5927\uff0c\u91c7\u53d6\u4e0a\u4f20\u955c\u50cf\u65b9\u6848\u4e3a\u5207\u7247\u4e0a\u4f20\u548c\u5408\u5e76\uff0c\u5408\u5e76\u8fc7\u7a0b\u4e0d\u80fd\u65ad\u70b9\u91cd\u6765\uff0c\u5207\u8bb0\u7b49\u5f85\u5408\u5e76\u5b8c\u6210\u540e(\u65f6\u95f4\u8f83\u957f)\uff0c\u518d\u8fdb\u5165\u4e0b\u4e00\u6b65\uff1b \u5236\u4f5c\u542f\u52a8\u76d8\u4e5f\u5f88\u4e3a\u4e24\u4e2a\u6b65\u9aa4\uff0c\u5236\u4f5c\u865a\u62dfU\u76d8\uff0c\u5c06\u9009\u62e9\u7684iso\u955c\u50cf\u62f7\u8d1d\u5230\u5236\u4f5c\u597d\u7684\u865a\u62dfU\u76d8\u91cc\uff0c\u4e24\u4e2a\u6b65\u9aa4\u5747\u6709\u8fdb\u5ea6\uff0c\u8bf7\u7b49\u4e24\u8005\u8fdb\u5ea6\u5747100%\u540e\u518d\u70b9\u51fb\u4e0b\u4e00\u6b65\u6309\u94ae\u3002","title":"Web UI"},{"location":"msd/#web-ui_1","text":"1. \u786e\u8ba4\u7cfb\u7edf\u5b58\u5728\u4e0b\u97624\u4e2a\u8def\u5f84\u3002\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662f\u6700\u65b0\u7684BliKVM\u955c\u50cf\uff0c\u65e0\u9700\u8fdb\u884c\u68c0\u67e5\u3002\u5176\u4e2d/opt/bin/msd/user\u8def\u5f84\u7528\u4e8e\u5b58\u653e\u7cfb\u7edf\u955c\u50cf\u3002 /usr/bin/blikvm/ventoy-1.0.88 /usr/bin/blikvm/kvmd-msd.sh /mnt/msd/user /mnt/msd/ventoy 2. \u901a\u8fc7SSH\u767b\u9646\u5230BliKVM\u7ec8\u7aef\uff0c\u7528\u6237\u540d\u548c\u5bc6\u7801\u5747\u4e3ablikvm\uff0c\u901a\u8fc7rw\u547d\u4ee4\uff0c\u4f7f\u53ea\u8bfb\u7cfb\u7edf\u53d8\u4e3a\u53ef\u5199\u7cfb\u7edf\u3002 sudo rw 3. \u5728\u4f60\u63a7\u5236\u7aef\u7684\u7535\u8111\uff0c\u53ef\u4ee5\u5728\u7ec8\u7aef\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06iso\u955c\u50cf\u6587\u4ef6\u62f7\u8d1d\u5230BliKVM\u955c\u50cf\u7684\u6307\u5b9a\u8def\u5f84\u4e0b\u3002 scp ***.iso blikvm@xxx.xxx.xxx.xxx:/mnt/msd/user/ \u5f53\u7136\uff0c\u4f60\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5176\u4ed6\u4efb\u4f55\u4f60\u719f\u6089\u7684\u65b9\u5f0f\u5c06iso\u955c\u50cf\u6587\u4ef6\u62f7\u8d1d\u5230\u6307\u5b9a\u8def\u5f84\u4e0b\u3002 4. \u901a\u8fc7\u4f7f\u7528\u4e0b\u5217\u4e24\u79cd\u547d\u4ee4\u4e2d\u7684\u4e00\u4e2a\uff0c\u5c06\u955c\u50cf\u62f7\u8d1d\u5230\u6a21\u62df\u7684U\u76d8\u4e2d\u3002U\u76d8\u9ed8\u8ba4\u5927\u5c0f\u8bbe\u7f6e\u7684\u4e3a5GB\uff0c\u5982\u679c\u4f60\u9700\u8981\u66f4\u5927\u7684\u7a7a\u95f4\uff0c\u4f60\u9700\u8981\u4fee\u6539kvmd-msd.sh\u811a\u672c\u3002 \u5982\u679c /mnt/msd/user \u8def\u5f84\u4e0b\u53ea\u6709\u4e00\u4e2a\u955c\u50cf\u6587\u4ef6, \u4f60\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6b64\u547d\u4ee4. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make \u5982\u679c /mnt/msd/user \u8def\u5f84\u4e0b\u6709\u4e0d\u6b62\u4e00\u4e2a\u955c\u50cf\u6587\u4ef6, \u4f60\u53ef\u4ee5\u4f7f\u7528\u4e0b\u5217\u6587\u4ef6\u6307\u5b9a. xxx.iso \u8868\u793a\u955c\u50cf\u7684\u540d\u79f0.\u5176\u4e2d-s\u540e\u8ddf\u7684\u6570\u5b57\u5373\u662f\u5236\u4f5c\u7684U\u76d8\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u662fG\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u9700\u6c42\u4fee\u6539\u3002-n\u540e\u8ddf\u7684\u5b57\u7b26\u4e32\u662fu\u76d8\u540d\u79f0\u3002 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 5 -n ventoy -f xxx.iso cp\u8fc7\u7a0b\u975e\u5e38\u6162\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u3002 5. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06\u6a21\u62df\u7684U\u76d8\u8fde\u63a5\u5230\u5230\u4f60\u7684\u88ab\u63a7\u8bbe\u5907\u4e0a sudo bash /usr/bin/blikvm/kvmd-msd.sh -c conn 6. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06\u6a21\u62df\u7684U\u76d8\u4ece\u4f60\u7684\u88ab\u63a7\u8bbe\u5907\u4e0a\u5f39\u51fa sudo bash /usr/bin/blikvm/kvmd-msd.sh -c disconn 7. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u6e05\u9664\u6389\u6a21\u62df\u7684U\u76d8\uff0c\u5c06\u4f1a\u91ca\u653e\u6389\u5bf9\u5e94\u7684\u7a7a\u95f4 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c clean 8. \u4e00\u5207\u6b63\u786e\u7684\u8bdd\uff0c\u6b64\u65f6\u4f60\u53ef\u4ee5\u5728\u4e00\u4e2aPC\u7cfb\u7edf\u91cc\u770b\u5230\u4f60\u6a21\u62df\u51fa\u7684U\u76d8\u3002\u901a\u8fc7WEB\u91cd\u542f\u7684\u4f60\u7684PC\uff0c\u7136\u540e\u4f7f\u7528\u5feb\u6377\u952e\uff08\u5f88\u591a\u7535\u8111\u662f\u6309F2\uff09\u8fdb\u5165BIOS\uff0c\u4fee\u6539boot\u542f\u52a8\u4f18\u5148\u7ea7\uff0c\u5c06\u6a21\u62df\u51fa\u7684U\u76d8\u8bbe\u5907\u4f18\u5148\u7ea7\u8bbe\u7f6e\u5728\u6700\u524d\u9762\u3002 9. \u6839\u636ebios\u7cfb\u7edf\u63d0\u793a\uff0c\u4fdd\u5b58\u91cd\u542f\uff0c\u5373\u53ef\u8fdb\u884cventoy\u7684\u5f15\u5bfc\u754c\u9762\u8fdb\u884c\u91cd\u88c5\u7cfb\u7edf\u3002","title":"\u624b\u52a8 (\u4e0d\u4f7f\u7528Web UI)"},{"location":"msd/#u_1","text":"\u4f20\u9012\u901a\u7528\u6587\u4ef6\uff0c\u6ce8\u610f\u6587\u4ef6\u540d\u9700\u547d\u540d\u4e3a\u82f1\u6587\uff0c\u4e2d\u6587\u4f1a\u4e71\u7801\u3002 conn\uff0c disconn, clean\u547d\u4ee4\u9488\u5bf9\u901a\u7528U\u76d8\u4f9d\u65e7\u6709\u6548\u3002","title":"\u901a\u7528U\u76d8"},{"location":"msd/#u_2","text":"-s\u540e\u8ddf\u7684\u662f\u5236\u4f5c\u901a\u7528U\u76d8\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u4e3aGb\uff0c\u5bb9\u91cf\u8d8a\u5927\uff0c\u5236\u4f5c\u65f6\u95f4\u8d8a\u957f\uff0c\u8bf7\u7ed3\u5408\u5b9e\u9645\u60c5\u51b5\u8bbe\u7f6e\u3002 -t \u5fc5\u987b\u4e3aother sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 4 -t other","title":"\u5236\u4f5c\u901a\u7528U\u76d8"},{"location":"msd/#kvm","text":"\u9996\u5148\u4f60\u9700\u8981\u5c06\u6587\u4ef6\u4ece\u7528\u6237\u63a7\u5236\u7535\u8111\u53d1\u9001\u5230kvm scp xxx blikvm@xxxx:/mnt/msd/user/ \u5c06\u6587\u4ef6\u540c\u6b65\u5230\u88ab\u63a7\u7535\u8111\uff0c\u5e76\u8fde\u63a5\u4e0a\u7535\u8111 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c forward \u540e\u9762\u6709\u9700\u8981\u65b0\u7684\u5185\u5bb9\u4ece\u7528\u6237\u7535\u8111\uff0c\u4f20\u9012\u5230\u88ab\u63a7\u7535\u8111\uff0c\u91cd\u590d\u7b2c1\u548c\u7b2c2\u6b65\u5373\u53ef","title":"\u6587\u4ef6\u4ece\u7528\u6237\u7535\u8111==\u300bKVM==\u300b\u88ab\u63a7\u7535\u8111"},{"location":"msd/#kvm_1","text":"\u9996\u5148\u5728\u88ab\u63a7\u7535\u8111\u4e0a\u5c06\u6587\u4ef6\u62f7\u8d1d\u5230\u6a21\u62df\u7684\u865a\u62dfU\u76d8\u91cc\uff0c\u7136\u540e\u6267\u884c\u4e0b\u9762\u7684\u6307\u4ee4\uff0c\u5c06\u6587\u4ef6\u62f7\u8d1d\u5230kvm\u7684/mnt/msd/user/\u76ee\u5f55\u4e0b sudo bash /usr/bin/blikvm/kvmd-msd.sh -c rever \u5c06\u6587\u4ef6\u4ecekvm\u62f7\u8d1d\u5230\u7528\u6237\u7535\u8111 scp blikvm@xxxx:/mnt/msd/user/* .","title":"\u6587\u4ef6\u4ece\u88ab\u63a7\u7535\u8111==\u300bKVM==\u7528\u6237\u7535\u8111"},{"location":"port-forwarding/","text":"\u7aef\u53e3\u8f6c\u53d1 \u5982\u679c\u60a8\u7684ISP\u4e3a\u8def\u7531\u5668\u63d0\u4f9b\u4e86\u5916\u90e8IP\u5730\u5740\uff0c\u60a8\u53ef\u4ee5\u914d\u7f6e\u7aef\u53e3\u8f6c\u53d1\u4ee5\u8bbf\u95eeBliKVM\u3002 Web\u754c\u9762\u4e3ahttp\u534f\u8bae\uff0c\u5360\u7528\u7684\u662f80\u7aef\u53e3\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV1 V2 V3\uff0c\u4f7f\u7528\u7684\u662f\u662fweb-rtc\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8188\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV4\uff0c\u4f7f\u7528\u7684\u662fmjepg\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8008\uff1b \u6ce8\u610f\u7aef\u53e3\u4e0d\u652f\u6301\u88ab\u4fee\u6539\uff0c\u53ea\u80fd\u914d\u7f6e\u8f6c\u53d1\uff1b \u5982\u679c\u60a8\u6ca1\u6709\u5916\u90e8IP\u5730\u5740\uff0c\u6211\u4eec\u5efa\u8bae\u5c1d\u8bd5\u4f7f\u7528 Tailscale VPN \u3002","title":"\u7aef\u53e3\u8f6c\u53d1"},{"location":"port-forwarding/#_1","text":"\u5982\u679c\u60a8\u7684ISP\u4e3a\u8def\u7531\u5668\u63d0\u4f9b\u4e86\u5916\u90e8IP\u5730\u5740\uff0c\u60a8\u53ef\u4ee5\u914d\u7f6e\u7aef\u53e3\u8f6c\u53d1\u4ee5\u8bbf\u95eeBliKVM\u3002 Web\u754c\u9762\u4e3ahttp\u534f\u8bae\uff0c\u5360\u7528\u7684\u662f80\u7aef\u53e3\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV1 V2 V3\uff0c\u4f7f\u7528\u7684\u662f\u662fweb-rtc\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8188\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV4\uff0c\u4f7f\u7528\u7684\u662fmjepg\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8008\uff1b \u6ce8\u610f\u7aef\u53e3\u4e0d\u652f\u6301\u88ab\u4fee\u6539\uff0c\u53ea\u80fd\u914d\u7f6e\u8f6c\u53d1\uff1b \u5982\u679c\u60a8\u6ca1\u6709\u5916\u90e8IP\u5730\u5740\uff0c\u6211\u4eec\u5efa\u8bae\u5c1d\u8bd5\u4f7f\u7528 Tailscale VPN \u3002","title":"\u7aef\u53e3\u8f6c\u53d1"},{"location":"rtc/","text":"RTC\u65f6\u949f RTC\uff08Real-Time Clock\uff0c\u5b9e\u65f6\u65f6\u949f\uff09\u7684\u4f5c\u7528\u662f\u63d0\u4f9b\u8bbe\u5907\u6216\u7cfb\u7edf\u7684\u5b9e\u65f6\u65f6\u95f4\u548c\u65e5\u671f\u4fe1\u606f\u3002\u5b83\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u65f6\u949f\u82af\u7247\u6216\u6a21\u5757\uff0c\u5177\u6709\u81ea\u5df1\u7684\u7535\u6e90\uff0c\u53ef\u4ee5\u5728\u8bbe\u5907\u5173\u95ed\u6216\u65ad\u7535\u65f6\u4ecd\u7136\u4fdd\u6301\u65f6\u95f4\u7684\u51c6\u786e\u6027\u3002\u56e0\u56fd\u9645\u5feb\u9012\u7535\u6c60\u4e0d\u65b9\u4fbf\u90ae\u5bc4\u95ee\u9898\uff0c\u51fa\u5382\u786c\u4ef6\u65e0\u7535\u6c60\uff0c\u9700\u7528\u6237\u81ea\u5df1\u8d2d\u4e70(\u7ebd\u6263\u7535\u6c60\u578b\u53f7CR1220)\u3002BliKVM\u4e0d\u540c\u786c\u4ef6\u7248\u672c\u4e0a\u4f7f\u7528\u7684RTC\u65f6\u949f\u578b\u53f7\u4e0d\u5b8c\u5168\u4e00\u6837\uff0c\u4f7f\u7528\u65b9\u6cd5\u4e5f\u7565\u6709\u4e0d\u540c\u3002 BliKVM V2 PCIe and BliKVM V3 Hat - pcf8563 1. \u68c0\u67e5i2c\u603b\u7ebf\u4e0a\u662f\u5426\u6b63\u5e38\u8bc6\u522b\u5230\u4e86pcf8563 RTC\u65f6\u949f\u786c\u4ef6\uff0cpcf8563\u7684i2c\u5730\u5740\u662fx51\uff0c\u672c\u8282\u6240\u6709\u547d\u4ee4\u5747\u9700\u5728root\u6743\u9650\u4e0b\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u80fd\u6b63\u786e\u67e5\u770b\u5230x51\u5373\u8bc1\u660ertc\u65f6\u949f\u5df2\u88abi2c\u603b\u7ebf\u6b63\u786e\u8bc6\u522b\u5230\u3002 root@mangopimcore:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. \u5411Linux \u7cfb\u7edf\u7684i2c\u5b50\u7cfb\u7edf\u6ce8\u518c\u4e00\u4e2a\u65b0\u7684i2c\u8bbe\u5907\uff0c\u8be5\u8bbe\u5907\u7684\u578b\u53f7\u662f pcf8563\uff0c\u8bbe\u5907\u7684i2c\u5730\u5740\u4e3a 0x51\u3002\u518d\u4f7f\u7528 ls /dev | grep rtc \u547d\u4ee4\u67e5\u770b\u662f\u5426\u6b63\u786e\u51fa\u73b0rtc1\u8bbe\u5907\uff0c\u51fa\u73b0\u5373\u6ce8\u518c\u6210\u529f\u3002 echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 3. \u5c06\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\u8bbe\u7f6e\u4e3artc\u65f6\u949f\u65f6\u95f4\u3002 hwclock -f /dev/rtc0 -w 4. \u4ecertc\u65f6\u949f\u8bfb\u53d6\u65f6\u95f4\uff0c\u5982\u679c\u80fd\u8bfb\u53d6\u5230\u65f6\u95f4\u5373\u8868\u660ertc\u6a21\u5757\u6b63\u5e38\u3002 root@mangopimcore:~# hwclock -f /dev/rtc0 -r 2023-05-28 05:04:08.679152-02:30 BliKVM V4 - pcf8563 1. \u68c0\u67e5i2c\u603b\u7ebf\u4e0a\u662f\u5426\u6b63\u5e38\u8bc6\u522b\u5230\u4e86pcf8563 RTC\u65f6\u949f\u786c\u4ef6\uff0cpcf8563\u7684i2c\u5730\u5740\u662fx51\uff0c\u672c\u8282\u6240\u6709\u547d\u4ee4\u5747\u9700\u5728root\u6743\u9650\u4e0b\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u80fd\u6b63\u786e\u67e5\u770b\u5230x51\u5373\u8bc1\u660ertc\u65f6\u949f\u5df2\u88abi2c\u603b\u7ebf\u6b63\u786e\u8bc6\u522b\u5230\u3002 root@mangopimcore:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. \u5411Linux \u7cfb\u7edf\u7684i2c\u5b50\u7cfb\u7edf\u6ce8\u518c\u4e00\u4e2a\u65b0\u7684i2c\u8bbe\u5907\uff0c\u8be5\u8bbe\u5907\u7684\u578b\u53f7\u662f pcf8563\uff0c\u8bbe\u5907\u7684i2c\u5730\u5740\u4e3a 0x51\u3002\u518d\u4f7f\u7528 ls /dev | grep rtc \u547d\u4ee4\u67e5\u770b\u662f\u5426\u6b63\u786e\u51fa\u73b0rtc1\u8bbe\u5907\uff0c\u51fa\u73b0\u5373\u6ce8\u518c\u6210\u529f\u3002 echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-0/new_device 3. \u5c06\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\u8bbe\u7f6e\u4e3artc\u65f6\u949f\u65f6\u95f4\u3002 hwclock -f /dev/rtc1 -w 4. \u4ecertc\u65f6\u949f\u8bfb\u53d6\u65f6\u95f4\uff0c\u5982\u679c\u80fd\u8bfb\u53d6\u5230\u65f6\u95f4\u5373\u8868\u660ertc\u6a21\u5757\u6b63\u5e38\u3002 root@mangopimcore:~# hwclock -f /dev/rtc1 -r 2023-05-28 05:04:08.679152-02:30","title":"RTC\u65f6\u949f"},{"location":"rtc/#rtc","text":"RTC\uff08Real-Time Clock\uff0c\u5b9e\u65f6\u65f6\u949f\uff09\u7684\u4f5c\u7528\u662f\u63d0\u4f9b\u8bbe\u5907\u6216\u7cfb\u7edf\u7684\u5b9e\u65f6\u65f6\u95f4\u548c\u65e5\u671f\u4fe1\u606f\u3002\u5b83\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u65f6\u949f\u82af\u7247\u6216\u6a21\u5757\uff0c\u5177\u6709\u81ea\u5df1\u7684\u7535\u6e90\uff0c\u53ef\u4ee5\u5728\u8bbe\u5907\u5173\u95ed\u6216\u65ad\u7535\u65f6\u4ecd\u7136\u4fdd\u6301\u65f6\u95f4\u7684\u51c6\u786e\u6027\u3002\u56e0\u56fd\u9645\u5feb\u9012\u7535\u6c60\u4e0d\u65b9\u4fbf\u90ae\u5bc4\u95ee\u9898\uff0c\u51fa\u5382\u786c\u4ef6\u65e0\u7535\u6c60\uff0c\u9700\u7528\u6237\u81ea\u5df1\u8d2d\u4e70(\u7ebd\u6263\u7535\u6c60\u578b\u53f7CR1220)\u3002BliKVM\u4e0d\u540c\u786c\u4ef6\u7248\u672c\u4e0a\u4f7f\u7528\u7684RTC\u65f6\u949f\u578b\u53f7\u4e0d\u5b8c\u5168\u4e00\u6837\uff0c\u4f7f\u7528\u65b9\u6cd5\u4e5f\u7565\u6709\u4e0d\u540c\u3002","title":"RTC\u65f6\u949f"},{"location":"rtc/#blikvm-v2-pcie-and-blikvm-v3-hat-pcf8563","text":"1. \u68c0\u67e5i2c\u603b\u7ebf\u4e0a\u662f\u5426\u6b63\u5e38\u8bc6\u522b\u5230\u4e86pcf8563 RTC\u65f6\u949f\u786c\u4ef6\uff0cpcf8563\u7684i2c\u5730\u5740\u662fx51\uff0c\u672c\u8282\u6240\u6709\u547d\u4ee4\u5747\u9700\u5728root\u6743\u9650\u4e0b\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u80fd\u6b63\u786e\u67e5\u770b\u5230x51\u5373\u8bc1\u660ertc\u65f6\u949f\u5df2\u88abi2c\u603b\u7ebf\u6b63\u786e\u8bc6\u522b\u5230\u3002 root@mangopimcore:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. \u5411Linux \u7cfb\u7edf\u7684i2c\u5b50\u7cfb\u7edf\u6ce8\u518c\u4e00\u4e2a\u65b0\u7684i2c\u8bbe\u5907\uff0c\u8be5\u8bbe\u5907\u7684\u578b\u53f7\u662f pcf8563\uff0c\u8bbe\u5907\u7684i2c\u5730\u5740\u4e3a 0x51\u3002\u518d\u4f7f\u7528 ls /dev | grep rtc \u547d\u4ee4\u67e5\u770b\u662f\u5426\u6b63\u786e\u51fa\u73b0rtc1\u8bbe\u5907\uff0c\u51fa\u73b0\u5373\u6ce8\u518c\u6210\u529f\u3002 echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 3. \u5c06\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\u8bbe\u7f6e\u4e3artc\u65f6\u949f\u65f6\u95f4\u3002 hwclock -f /dev/rtc0 -w 4. \u4ecertc\u65f6\u949f\u8bfb\u53d6\u65f6\u95f4\uff0c\u5982\u679c\u80fd\u8bfb\u53d6\u5230\u65f6\u95f4\u5373\u8868\u660ertc\u6a21\u5757\u6b63\u5e38\u3002 root@mangopimcore:~# hwclock -f /dev/rtc0 -r 2023-05-28 05:04:08.679152-02:30","title":"BliKVM V2 PCIe and BliKVM V3 Hat - pcf8563"},{"location":"rtc/#blikvm-v4-pcf8563","text":"1. \u68c0\u67e5i2c\u603b\u7ebf\u4e0a\u662f\u5426\u6b63\u5e38\u8bc6\u522b\u5230\u4e86pcf8563 RTC\u65f6\u949f\u786c\u4ef6\uff0cpcf8563\u7684i2c\u5730\u5740\u662fx51\uff0c\u672c\u8282\u6240\u6709\u547d\u4ee4\u5747\u9700\u5728root\u6743\u9650\u4e0b\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u80fd\u6b63\u786e\u67e5\u770b\u5230x51\u5373\u8bc1\u660ertc\u65f6\u949f\u5df2\u88abi2c\u603b\u7ebf\u6b63\u786e\u8bc6\u522b\u5230\u3002 root@mangopimcore:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. \u5411Linux \u7cfb\u7edf\u7684i2c\u5b50\u7cfb\u7edf\u6ce8\u518c\u4e00\u4e2a\u65b0\u7684i2c\u8bbe\u5907\uff0c\u8be5\u8bbe\u5907\u7684\u578b\u53f7\u662f pcf8563\uff0c\u8bbe\u5907\u7684i2c\u5730\u5740\u4e3a 0x51\u3002\u518d\u4f7f\u7528 ls /dev | grep rtc \u547d\u4ee4\u67e5\u770b\u662f\u5426\u6b63\u786e\u51fa\u73b0rtc1\u8bbe\u5907\uff0c\u51fa\u73b0\u5373\u6ce8\u518c\u6210\u529f\u3002 echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-0/new_device 3. \u5c06\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\u8bbe\u7f6e\u4e3artc\u65f6\u949f\u65f6\u95f4\u3002 hwclock -f /dev/rtc1 -w 4. \u4ecertc\u65f6\u949f\u8bfb\u53d6\u65f6\u95f4\uff0c\u5982\u679c\u80fd\u8bfb\u53d6\u5230\u65f6\u95f4\u5373\u8868\u660ertc\u6a21\u5757\u6b63\u5e38\u3002 root@mangopimcore:~# hwclock -f /dev/rtc1 -r 2023-05-28 05:04:08.679152-02:30","title":"BliKVM V4 - pcf8563"},{"location":"serial_over_usb/","text":"\u4e32\u53e3\u7ec8\u7aef\u8fde\u63a5 \u53ef\u4ee5\u901a\u8fc7\u4e32\u53e3\u7ec8\u7aef\u5bf9BliKVM\u8bbe\u5907\u8fdb\u884c\u8bbf\u95ee\u3002 1.\u786c\u4ef6\u8fde\u63a5\uff0c\u60a8\u5e94\u8be5\u4f7f\u7528USB\u8f6cttl\u6a21\u5757\u5c06\u8ba1\u7b97\u673a\u7684USB\u8fde\u63a5\u5230BliKVM\u7684uart\u3002\u5176\u4e2d\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fHat\u7248\u672c\uff0c\u8bf7\u6ce8\u610f\u8fde\u63a5GPIO14\u548cGPIO15\u8fd9\u4e2a\u4e32\u53e3\uff0c\u82e5\u662fPCIe\u7248\u672c\uff0c\u8fde\u63a5\u4e1d\u5370\u6807\u6ce8\u7684 GRT \u5f15\u811a\u5373\u53ef 2.\u7535\u8111\u4e0a\u5b89\u88c5\u53ef\u7ec8\u7aef\u767b\u9646\u7684\u5de5\u5177\uff0c\u5982\u5728windows\u4e0a\u53ef\u4ee5\u5b89\u88c5putty\u5de5\u5177 3. putty\u4f7f\u7528\u8bf4\u660e,\u8f93\u5165\u6b63\u786e\u7684COM\u53e3\uff0c\u9ed8\u8ba4\u6ce2\u7279\u7387115200\uff0c\u9009\u62e9\u8fde\u63a5\u65b9\u5f0f\u4e3aserial,\u7136\u540e\u70b9\u51fbopen\u5373\u53ef\uff08\u4ee5\u4f7f\u7528PiKVM\u56fa\u4ef6\u4e3a\u4f8b\uff09 \u5982\u679c\u4f60\u7684\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8bc6\u522busb\u8f6cttl\u6a21\u5757\uff0c\u8bf7\u6309\u7167\u4e0b\u5217\u6b65\u9aa4\u5bf9\u7535\u8111\u5b89\u88c5\u9a71\u52a8 \u5c06usb-a\u5934\u8fde\u63a5\u5230\u60a8\u7684\u4e3b\u673a\uff08\u5728\u672c\u4f8b\u4e2d\uff0c\u5b83\u4f4d\u4e8ewindows\u4e3b\u673a\u4e0a\uff09\u3002\u56e0\u6b64\uff0c\u8bbe\u5907\u7ba1\u7406\u5668\u5c06\u5728\u5176\u4ed6\u8bbe\u5907\u4e2d\u663e\u793a\u4e00\u4e2a\u65b0\u7684USB\u4e32\u884c\u8bbe\u5907\u3002 \u4e0b\u8f7d\u5e76\u63d0\u53d6/\u8fd0\u884c\u9a71\u52a8\u7a0b\u5e8f\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6211\u4e0b\u8f7d\u5e76\u63d0\u53d6\u4e86ZIP\u6587\u4ef6\u3002 https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all \u66f4\u65b0\u65b0USB\u4e32\u884c\u8bbe\u5907\u7684\u9a71\u52a8\u7a0b\u5e8f\uff0c\u5c06\u5176\u6307\u5411\u63d0\u53d6\u6587\u4ef6\u7684\u4f4d\u7f6e\uff0c\u7136\u540e\u5355\u51fb\u4e0b\u4e00\u6b65\uff0c\u7136\u540e\u5355\u51fb\u5173\u95ed\u3002 \u5982\u679c\u4e00\u5207\u6b63\u786e\uff0c\u65b0\u7684USB\u4e32\u884c\u8bbe\u5907\u73b0\u5728\u5e94\u8be5\u663e\u793a\u5728\u7aef\u53e3\u4e0b\u7684USB-serial CH340\uff08COMX\uff09\u3002","title":"\u4e32\u53e3\u7ec8\u7aef"},{"location":"serial_over_usb/#_1","text":"\u53ef\u4ee5\u901a\u8fc7\u4e32\u53e3\u7ec8\u7aef\u5bf9BliKVM\u8bbe\u5907\u8fdb\u884c\u8bbf\u95ee\u3002 1.\u786c\u4ef6\u8fde\u63a5\uff0c\u60a8\u5e94\u8be5\u4f7f\u7528USB\u8f6cttl\u6a21\u5757\u5c06\u8ba1\u7b97\u673a\u7684USB\u8fde\u63a5\u5230BliKVM\u7684uart\u3002\u5176\u4e2d\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fHat\u7248\u672c\uff0c\u8bf7\u6ce8\u610f\u8fde\u63a5GPIO14\u548cGPIO15\u8fd9\u4e2a\u4e32\u53e3\uff0c\u82e5\u662fPCIe\u7248\u672c\uff0c\u8fde\u63a5\u4e1d\u5370\u6807\u6ce8\u7684 GRT \u5f15\u811a\u5373\u53ef 2.\u7535\u8111\u4e0a\u5b89\u88c5\u53ef\u7ec8\u7aef\u767b\u9646\u7684\u5de5\u5177\uff0c\u5982\u5728windows\u4e0a\u53ef\u4ee5\u5b89\u88c5putty\u5de5\u5177 3. putty\u4f7f\u7528\u8bf4\u660e,\u8f93\u5165\u6b63\u786e\u7684COM\u53e3\uff0c\u9ed8\u8ba4\u6ce2\u7279\u7387115200\uff0c\u9009\u62e9\u8fde\u63a5\u65b9\u5f0f\u4e3aserial,\u7136\u540e\u70b9\u51fbopen\u5373\u53ef\uff08\u4ee5\u4f7f\u7528PiKVM\u56fa\u4ef6\u4e3a\u4f8b\uff09 \u5982\u679c\u4f60\u7684\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8bc6\u522busb\u8f6cttl\u6a21\u5757\uff0c\u8bf7\u6309\u7167\u4e0b\u5217\u6b65\u9aa4\u5bf9\u7535\u8111\u5b89\u88c5\u9a71\u52a8 \u5c06usb-a\u5934\u8fde\u63a5\u5230\u60a8\u7684\u4e3b\u673a\uff08\u5728\u672c\u4f8b\u4e2d\uff0c\u5b83\u4f4d\u4e8ewindows\u4e3b\u673a\u4e0a\uff09\u3002\u56e0\u6b64\uff0c\u8bbe\u5907\u7ba1\u7406\u5668\u5c06\u5728\u5176\u4ed6\u8bbe\u5907\u4e2d\u663e\u793a\u4e00\u4e2a\u65b0\u7684USB\u4e32\u884c\u8bbe\u5907\u3002 \u4e0b\u8f7d\u5e76\u63d0\u53d6/\u8fd0\u884c\u9a71\u52a8\u7a0b\u5e8f\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6211\u4e0b\u8f7d\u5e76\u63d0\u53d6\u4e86ZIP\u6587\u4ef6\u3002 https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all \u66f4\u65b0\u65b0USB\u4e32\u884c\u8bbe\u5907\u7684\u9a71\u52a8\u7a0b\u5e8f\uff0c\u5c06\u5176\u6307\u5411\u63d0\u53d6\u6587\u4ef6\u7684\u4f4d\u7f6e\uff0c\u7136\u540e\u5355\u51fb\u4e0b\u4e00\u6b65\uff0c\u7136\u540e\u5355\u51fb\u5173\u95ed\u3002 \u5982\u679c\u4e00\u5207\u6b63\u786e\uff0c\u65b0\u7684USB\u4e32\u884c\u8bbe\u5907\u73b0\u5728\u5e94\u8be5\u663e\u793a\u5728\u7aef\u53e3\u4e0b\u7684USB-serial CH340\uff08COMX\uff09\u3002","title":"\u4e32\u53e3\u7ec8\u7aef\u8fde\u63a5"},{"location":"ssh/","text":"SSH\u914d\u7f6e \u57281.4.7\u7248\u672c\u53ca\u4ee5\u540e\uff0cweb\u652f\u6301\u76f4\u63a5\u8fdb\u5165blikvm\u7684ssh\u7ec8\u7aef\uff0c\u9ed8\u8ba4\u8fdb\u5165\u7ec8\u7aef\u7684\u8d26\u53f7\u5bc6\u7801\u4e3a blikvm/blikvm\uff0c \u5982\u679c\u4fee\u6539\u4e86\u6b64\u7528\u6237\u7684\u5bc6\u7801\u4fe1\u606f\uff0c\u9700\u8981\u5728app.json\u6587\u4ef6\u4e2d\u4fee\u6539\u5bf9\u5e94\u7684\u8d26\u53f7\u5bc6\u7801 sudo -s vim /mnt/exec/release/config/app.json // \u627e\u5230\u4e0b\u9762\u914d\u7f6e\uff0c\u4fee\u6539\u6210\u4f60\u4fee\u6539\u540e\u7684\u3002 \"sshUser\": \"blikvm\", \"sshPassword\": \"blikvm\"","title":"SSH\u7ec8\u7aef"},{"location":"ssh/#ssh","text":"\u57281.4.7\u7248\u672c\u53ca\u4ee5\u540e\uff0cweb\u652f\u6301\u76f4\u63a5\u8fdb\u5165blikvm\u7684ssh\u7ec8\u7aef\uff0c\u9ed8\u8ba4\u8fdb\u5165\u7ec8\u7aef\u7684\u8d26\u53f7\u5bc6\u7801\u4e3a blikvm/blikvm\uff0c \u5982\u679c\u4fee\u6539\u4e86\u6b64\u7528\u6237\u7684\u5bc6\u7801\u4fe1\u606f\uff0c\u9700\u8981\u5728app.json\u6587\u4ef6\u4e2d\u4fee\u6539\u5bf9\u5e94\u7684\u8d26\u53f7\u5bc6\u7801 sudo -s vim /mnt/exec/release/config/app.json // \u627e\u5230\u4e0b\u9762\u914d\u7f6e\uff0c\u4fee\u6539\u6210\u4f60\u4fee\u6539\u540e\u7684\u3002 \"sshUser\": \"blikvm\", \"sshPassword\": \"blikvm\"","title":"SSH\u914d\u7f6e"},{"location":"static_ip/","text":"BliKVM OS\u8bbe\u7f6e\u9759\u6001IP v1 v2 v3\u53c2\u8003 \u4f7f\u7528SSH\u8fde\u63a5\u5230BliKVM\u7684\u7ec8\u7aef,\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\u3002 \u6253\u5f00\u7f51\u7edc\u914d\u7f6e\u6587\u4ef6 /etc/dhcpcd.conf \u4ee5\u8fdb\u884c\u7f16\u8f91\uff1a sudo vim /etc/dhcpcd.conf \u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u66ff\u6362\u4e3a\u60a8\u60f3\u8981\u8bbe\u7f6e\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\uff1a interface eth0 static ip_address=192.168.0.100/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 \u6ce8\u610f\uff1a\u6839\u636e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\uff0c\u53ef\u80fd\u9700\u8981\u4fee\u6539\u4e0a\u8ff0\u793a\u4f8b\u4e2d\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u503c\u3002 \u4fdd\u5b58\u6587\u4ef6\u5e76\u9000\u51fa\u7f16\u8f91\u5668\u3002 \u91cd\u65b0\u542f\u52a8BliKVM\u4ee5\u4f7f\u9759\u6001IP\u8bbe\u7f6e\u751f\u6548\uff1a sudo reboot v4\u53c2\u8003 \u4f7f\u7528SSH\u8fde\u63a5\u5230BliKVM\u7684\u7ec8\u7aef,\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\u3002 \u6253\u5f00\u7f51\u7edc\u914d\u7f6e\u6587\u4ef6 /etc/network/interfaces \u4ee5\u8fdb\u884c\u7f16\u8f91\uff1a sudo vim /etc/network/interfaces \u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u66ff\u6362\u4e3a\u60a8\u60f3\u8981\u8bbe\u7f6e\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\uff1a source /etc/network/interfaces.d/* auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 \u6ce8\u610f\uff1a\u6839\u636e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\uff0c\u53ef\u80fd\u9700\u8981\u4fee\u6539\u4e0a\u8ff0\u793a\u4f8b\u4e2d\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u503c\u3002 \u4fdd\u5b58\u6587\u4ef6\u5e76\u9000\u51fa\u7f16\u8f91\u5668\u3002 \u91cd\u65b0\u542f\u52a8BliKVM\u4ee5\u4f7f\u9759\u6001IP\u8bbe\u7f6e\u751f\u6548\uff1a sudo reboot \u6839\u636e\u60a8\u7684\u7f51\u7edc\u73af\u5883\u548c\u9700\u6c42\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u4e0a\u8ff0\u6b65\u9aa4\u81ea\u5b9a\u4e49\u914d\u7f6e\u9759\u6001IP\u5730\u5740\u3002\u8bf7\u786e\u4fddIP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u8bbe\u7f6e\u4e0e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\u76f8\u5339\u914d\u3002","title":"\u8bbe\u7f6e\u9759\u6001IP"},{"location":"static_ip/#blikvm-osip","text":"","title":"BliKVM OS\u8bbe\u7f6e\u9759\u6001IP"},{"location":"static_ip/#v1-v2-v3","text":"\u4f7f\u7528SSH\u8fde\u63a5\u5230BliKVM\u7684\u7ec8\u7aef,\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\u3002 \u6253\u5f00\u7f51\u7edc\u914d\u7f6e\u6587\u4ef6 /etc/dhcpcd.conf \u4ee5\u8fdb\u884c\u7f16\u8f91\uff1a sudo vim /etc/dhcpcd.conf \u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u66ff\u6362\u4e3a\u60a8\u60f3\u8981\u8bbe\u7f6e\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\uff1a interface eth0 static ip_address=192.168.0.100/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 \u6ce8\u610f\uff1a\u6839\u636e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\uff0c\u53ef\u80fd\u9700\u8981\u4fee\u6539\u4e0a\u8ff0\u793a\u4f8b\u4e2d\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u503c\u3002 \u4fdd\u5b58\u6587\u4ef6\u5e76\u9000\u51fa\u7f16\u8f91\u5668\u3002 \u91cd\u65b0\u542f\u52a8BliKVM\u4ee5\u4f7f\u9759\u6001IP\u8bbe\u7f6e\u751f\u6548\uff1a sudo reboot","title":"v1 v2 v3\u53c2\u8003"},{"location":"static_ip/#v4","text":"\u4f7f\u7528SSH\u8fde\u63a5\u5230BliKVM\u7684\u7ec8\u7aef,\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\u3002 \u6253\u5f00\u7f51\u7edc\u914d\u7f6e\u6587\u4ef6 /etc/network/interfaces \u4ee5\u8fdb\u884c\u7f16\u8f91\uff1a sudo vim /etc/network/interfaces \u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u66ff\u6362\u4e3a\u60a8\u60f3\u8981\u8bbe\u7f6e\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\uff1a source /etc/network/interfaces.d/* auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 \u6ce8\u610f\uff1a\u6839\u636e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\uff0c\u53ef\u80fd\u9700\u8981\u4fee\u6539\u4e0a\u8ff0\u793a\u4f8b\u4e2d\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u503c\u3002 \u4fdd\u5b58\u6587\u4ef6\u5e76\u9000\u51fa\u7f16\u8f91\u5668\u3002 \u91cd\u65b0\u542f\u52a8BliKVM\u4ee5\u4f7f\u9759\u6001IP\u8bbe\u7f6e\u751f\u6548\uff1a sudo reboot \u6839\u636e\u60a8\u7684\u7f51\u7edc\u73af\u5883\u548c\u9700\u6c42\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u4e0a\u8ff0\u6b65\u9aa4\u81ea\u5b9a\u4e49\u914d\u7f6e\u9759\u6001IP\u5730\u5740\u3002\u8bf7\u786e\u4fddIP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u8bbe\u7f6e\u4e0e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\u76f8\u5339\u914d\u3002","title":"v4\u53c2\u8003"},{"location":"switch-guide/","text":"HDMI\u5207\u6362\u5668\u624b\u518c BliKVM-Switch-V1.0\u5b9e\u9645\u4f7f\u7528\u548c\u6d4b\u8bd5\u89c6\u9891\uff0c\u652f\u6301BliKVM\u548cPiKVM \u7b80\u4ecb BliKVM-Switch-V1.0\u4e3a\u56db\u901a\u9053HDMI+USB\u5207\u6362\u5668\uff0c\u652f\u6301\u673a\u5668\u6309\u952e\u5207\u6362\uff0c\u684c\u9762\u63a7\u5236\u5668\u5207\u6362\uff0cKVM\u8fdc\u7a0b\u5207\u6362\uff0c3\u79cd\u5207\u6362\u6a21\u5f0f\u3002\u5207\u6362\u5668\u672c\u8eab\u6700\u9ad8\u652f\u63014K@60HZ\u7684\u8f93\u5165\uff0c\u5373\u63d2\u5373\u7528\uff0c\u514d\u9a71\u52a8\u3002 BliKVM-Switch-V1.0\u4f7f\u7528\u548cXH-HK4401\u76f8\u540c\u7684\u786c\u4ef6\u65b9\u6848,AG7210 HDMI\u5207\u6362\u82af\u7247\u6700\u9ad8\u652f\u6301\u52304K@60Hz\uff0cCH444G USB\u5207\u6362\u82af\u7247\u652f\u6301USB2.0\u3002\u4e0d\u540c\u7684\u662fBliKVM-Switch-V1.0\u914d\u5907\u6709KVM USB cable,\u53ef\u4ee5\u901a\u8fc7KVM USB cable\u8fde\u63a5BliKVM-Switch-V1.0,\u5b9e\u73b0\u5bf9KVM\u7aef\u53e3\u7684\u9009\u62e9\u3002BliKVM-Switch-V1.0\u9002\u914dBliKVM\u548cPiKVM\u3002 \u6ce8\u610f\u4e8b\u9879 switch\u53ef\u4ee5\u76f4\u63a5\u4ece\u8f93\u5165\u7535\u8111\u7684USB\u53d6\u7535\uff0c\u5373\u4e00\u822c\u4e0d\u9700\u8981\u7ed9switch\u4f9b\u7535\uff0c\u5373\u53ef\u6b63\u5e38\u5de5\u4f5c\uff1b \u82e5\u88ab\u63a7\u7535\u8111\u7684USB\u4f9b\u7535\u65e0\u6cd5\u4f7fswitch\u5de5\u4f5c\uff0c\u53ef\u4ee5\u5bf9switch\u8fdb\u884c\u5355\u72ec\u4f9b\u7535\u4f7f\u7528\uff1b switch\u5957\u88c5\u53ea\u63d0\u4f9b\u4e86USB\u7535\u6e90\u7ebf\uff0c\u5e76\u6ca1\u6709\u63d0\u4f9b\u7535\u6e90\u9002\u914d\u5668\uff0c\u9700\u8981\u5ba2\u6237\u81ea\u884c\u914d\u7f6e\u7535\u6e90\u9002\u914d\u5668\uff085V\uff09\uff1b \u684c\u9762\u63a7\u5236\u5668 \u53ef\u4ee5\u901a\u8fc7USB\u7535\u7f06\u63a7\u5236\u5207\u6362\uff0c\u5bf9\u4e8e\u4e0d\u4f7f\u7528KVM\u7684\u5ba2\u6237\uff0c\u5f53\u60a8\u5728\u8bbe\u5907\u65c1\u8fb9\u65f6\uff0c\u8fd9\u662f\u9664\u4f7f\u7528switch\u8bbe\u5907\u4e0a\u6309\u94ae\u5207\u6362\u4e4b\u5916\u7684\u53e6\u4e00\u79cd\u5207\u6362\u65b9\u5f0f\uff1b HDMI\u8f93\u5165\u6700\u9ad8\u652f\u6301 4096x2160/60Hz \uff1b 4K 60Hz\u7684HDMI\u8f93\u5165, \u529f\u7387\u5927\u6982\u662f200mW; \u63a5\u53e3\u793a\u610f\u56fe \u8fd9\u91cc\u9700\u8981\u4e24\u6839USB\u7ebf\uff0c\u8fde\u63a5switch\u548ckvm\u786c\u4ef6\uff0c\u4e00\u6839\u7528\u4e8e\u4f20\u8f93\u63a7\u5236\u5207\u6362\u901a\u9053\u4fe1\u606f\uff0c\u4e00\u6839\u7528\u4e8e\u4f20\u8f93\u9f20\u6807\u952e\u76d8\u6570\u636e\uff0c\u5177\u4f53\u8fde\u63a5\u53ef\u4ee5\u53c2\u8003\u9762\u8bf4\u660e\u3002 \u6b63\u9762\u548c\u53cd\u9762\u63a5\u53e3\u793a\u610f\u56fe\uff0c\u53f3\u4fa7\u56fe\u4e2d\u7684control\u63a5\u53e3\u5373\u4e3a\u8fdc\u7a0b\u63a7\u5236\u63a5\u53e3, \u4e00\u5934\u4e3aUSB-A\uff0c\u53e6\u4e00\u5934\u4e3amicro usb\u5e76\u4e14\u6807\u7b7e\u5e26\u6709kvm\u5b57\u6837\u7684\u7ebf\uff0c\u4e3a\u63a7\u5236\u7ebf\uff0c\u5176\u4e2dmicro usb\u53e3\u4e0eswitch\u7684control\u63a5\u53e3\u8fde\u63a5\uff0cUSB-A\u63a5\u53e3\u4e0eKVM\u7684USB\u53e3\u8fde\u63a5\u3002 \u4fa7\u9762\u63a5\u53e3\u793a\u610f\u56fe \u8bbe\u5907\u8fde\u63a5\u793a\u610f\u56fe \u8f6f\u4ef6\u914d\u7f6e !!! info \"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM\u8f6f\u4ef6\uff0c\u5728BliKVM\u542f\u52a8\u524d\u5148\u628aswitch\u901a\u7535\u5e76\u63a5\u597d\u7ebf\uff0c\u901a\u8fc7\u7ec8\u7aef\u786e\u8ba4switch\u63d2\u5165BliKVM\u540e\uff0c\u8bc6\u522b\u5230\u7684\u8bbe\u5907\u63cf\u8ff0\u7b26\u540d\u79f0\uff0c\u5982 /dev/ttyUSB0 ,\u7136\u540e\u7f16\u8f91 /usr/bin/blikvm/package.json \u4e2d\u7684 switch_handle \u5b57\u6bb5\uff0c\u5c06switch_enable\u8d4b\u503c\u4e3a1, switch_path\u8d4b\u503c\u4e3a /dev/ttyUSB0 \uff0c\u7136\u540e\u91cd\u542fBliKVM\u5373\u53ef\u3002 \u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u5148\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u7cfb\u7edf\u53d8\u4e3a\u53ef\u8bfb\u5199\u7cfb\u7edf\u3002\u7f16\u8f91\u914d\u7f6e\u6587\u4ef6\u53ef\u4ee5\u53c2\u8003\u4e0b\u547d\u4ee4: sudo vim /usr/bin/blikvm/package.json \u70b9\u51fb\u5de6\u4e0b\u89d2\u7684MORE\uff0c\u627e\u5230BliKVM switch\u8fd9\u4e00\u680f\uff0c\u8fdb\u884c\u5207\u6362\u9009\u62e9\u5373\u53ef\u3002\u6ce8\u610f\u5bf9\u5e94\u901a\u9053\u84dd\u8272\u5c0f\u70b9\u95ea\u52a8\u8868\u793a\u8bc6\u522b\u5230\u4e86switch\u63d2\u5165\uff0c\u5e76\u4e14\u6b63\u5904\u4e8e\u5f53\u524d\u901a\u9053\uff0c\u82e5\u65e0\u84dd\u8272\u5c0f\u70b9\u5219\u8868\u793a\u672a\u8bc6\u522b\u5230switch\u63d2\u5165\u3002\" \u82e5\u60a8\u4f7f\u7528\u7684PiKVM\u8f6f\u4ef6\uff0c\u8bf7\u6309\u7167\u4e0b\u9762\u7684\u8bf4\u660e\u8fdb\u884c\u914d\u7f6e \u901a\u8fc7SSH\u767b\u9646PiKVM\uff0c\u7528\u6237\u540d\u548c\u5bc6\u7801\u5747\u4e3aroot; \u7ec8\u7aef\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u7cfb\u7edf\u6539\u4e3a\u53ef\u8bfb\u5199\u7cfb\u7edf; \u7f16\u8f91 /etc/kvmd/override.yaml \u6b64\u6587\u4ef6\uff0c\u4f7f\u6539\u6587\u4ef6\u5305\u542b\u4e0b\u9762\u7684\u5185\u5bb9\uff0c\u5373\u5728\u539f\u6709\u5185\u5bb9\u540e\u8ffd\u52a0. kvmd: gpio: drivers: hk: type: xh_hk4401 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk pin: 0 mode: input ch1_led: driver: hk pin: 1 mode: input ch2_led: driver: hk pin: 2 mode: input ch3_led: driver: hk pin: 3 mode: input ch0_button: driver: hk pin: 0 mode: output switch: false ch1_button: driver: hk pin: 1 mode: output switch: false ch2_button: driver: hk pin: 2 mode: output switch: false ch3_button: driver: hk pin: 3 mode: output switch: false view: table: - [\"#Input 1\", ch0_led, ch0_button] - [\"#Input 2\", ch1_led, ch1_button] - [\"#Input 3\", ch2_led, ch2_button] - [\"#Input 4\", ch3_led, ch3_button] !!! warning \"\u4e0a\u8ff0\u914d\u7f6e\u57fa\u4e8e2022 pikvm\u56fe\u50cf\u3002\u5982\u679c\u60a8\u4f7f\u7528\u7684\u662f\u6700\u65b0\u7684pikvm\u6620\u50cf\u6216\u6700\u65b0\u7684\u8f6f\u4ef6\u7248\u672c\uff0c\u8bf7\u7f16\u8f91\u6587\u4ef6/etc/kvmd/override.yaml\u5e76\u6dfb\u52a0\u884c\uff1aprotocol:2\uff0c\u4f8b\u5b50\u5982\u4e0b:\" kvmd: gpio: drivers: hk: type: xh_hk4401 protocol: 2 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk ... \u7ec8\u7aef\u4f7f\u7528 ro \u547d\u4ee4\u5c06\u7cfb\u7edf\u91cd\u65b0\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\u7cfb\u7edf\uff1b \u7ec8\u7aef\u4f7f\u7528 systemctl restart kvmd \u91cd\u542f\u670d\u52a1\u3002 \u8fdb\u5165PiKVM web\u754c\u9762\uff0c\u5e76\u5355\u51fb\u201cGPIO\u201d\u83dc\u5355\u3002\u60a8\u5e94\u8be5\u770b\u52304\u4e2a\u8f93\u5165\uff0c\u5176\u4e2d\u4e00\u4e2a\u8f93\u5165\u6709\u4e00\u4e2a\u7eff\u8272\u5706\u5708\uff0c\u8868\u793a\u5f53\u524d\u5df2\u9009\u4e2d\u3002\u5355\u51fb\u5176\u4ed6\u8f93\u5165\u4ee5\u66f4\u6539\u9009\u5b9a\u7684\u4e3b\u673a\u3002 \u63a7\u5236\u534f\u8bae \u82e5\u60a8\u5e0c\u671b\u5c06blicube\u7684switch\u7528\u5728\u5176\u5b83\u5e73\u53f0\u4e0a\uff0c\u8bf7\u53c2\u8003\u4e0b\u9762\u7684\u534f\u8bae \u901a\u4fe1\u6ce2\u7279\u7387\u4e3a19200 \u5207\u6362\u52301\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW1\\r\\nG01gA \u5207\u6362\u52302\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW2\\r\\nG02gA \u5207\u6362\u52303\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW3\\r\\nG03gA \u5207\u6362\u52304\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW4\\r\\nG04gA switch\u8fd4\u56de\u5f53\u524d\u6240\u5728\u901a\u9053\u6d88\u606f\u4e3a: G01gA , G02gA , G03gA , G04gA \u53d1\u8d27\u6e05\u5355 \u4ea7\u54c1 \u6570\u91cf \u5907\u6ce8\uff5c KVM Switch\u5207\u6362\u5668\uff084\u901a\u9053) 1 110mm * 60mm * 33mm USB\u684c\u9762\u63a7\u5236\u5668 1 USB\u6570\u636e\u7ebf 4 \u957f\u5ea6: 1.2m HDMI\uff08\u6807\u51c6\u63a5\u5934\uff09\u7ebf 4 \u957f\u5ea6: 1.5m USB\u7535\u6e90\u7ebf 1 \u957f\u5ea6: 0.8m KVM USB\u7ebf 1 \u957f\u5ea6: 1.5m USB\u684c\u9762\u63a7\u5236\u7ebf 1 \u957f\u5ea6: 1m","title":"switch\u5207\u6362\u5668\u624b\u518c"},{"location":"switch-guide/#hdmi","text":"BliKVM-Switch-V1.0\u5b9e\u9645\u4f7f\u7528\u548c\u6d4b\u8bd5\u89c6\u9891\uff0c\u652f\u6301BliKVM\u548cPiKVM","title":"HDMI\u5207\u6362\u5668\u624b\u518c"},{"location":"switch-guide/#_1","text":"BliKVM-Switch-V1.0\u4e3a\u56db\u901a\u9053HDMI+USB\u5207\u6362\u5668\uff0c\u652f\u6301\u673a\u5668\u6309\u952e\u5207\u6362\uff0c\u684c\u9762\u63a7\u5236\u5668\u5207\u6362\uff0cKVM\u8fdc\u7a0b\u5207\u6362\uff0c3\u79cd\u5207\u6362\u6a21\u5f0f\u3002\u5207\u6362\u5668\u672c\u8eab\u6700\u9ad8\u652f\u63014K@60HZ\u7684\u8f93\u5165\uff0c\u5373\u63d2\u5373\u7528\uff0c\u514d\u9a71\u52a8\u3002 BliKVM-Switch-V1.0\u4f7f\u7528\u548cXH-HK4401\u76f8\u540c\u7684\u786c\u4ef6\u65b9\u6848,AG7210 HDMI\u5207\u6362\u82af\u7247\u6700\u9ad8\u652f\u6301\u52304K@60Hz\uff0cCH444G USB\u5207\u6362\u82af\u7247\u652f\u6301USB2.0\u3002\u4e0d\u540c\u7684\u662fBliKVM-Switch-V1.0\u914d\u5907\u6709KVM USB cable,\u53ef\u4ee5\u901a\u8fc7KVM USB cable\u8fde\u63a5BliKVM-Switch-V1.0,\u5b9e\u73b0\u5bf9KVM\u7aef\u53e3\u7684\u9009\u62e9\u3002BliKVM-Switch-V1.0\u9002\u914dBliKVM\u548cPiKVM\u3002 \u6ce8\u610f\u4e8b\u9879 switch\u53ef\u4ee5\u76f4\u63a5\u4ece\u8f93\u5165\u7535\u8111\u7684USB\u53d6\u7535\uff0c\u5373\u4e00\u822c\u4e0d\u9700\u8981\u7ed9switch\u4f9b\u7535\uff0c\u5373\u53ef\u6b63\u5e38\u5de5\u4f5c\uff1b \u82e5\u88ab\u63a7\u7535\u8111\u7684USB\u4f9b\u7535\u65e0\u6cd5\u4f7fswitch\u5de5\u4f5c\uff0c\u53ef\u4ee5\u5bf9switch\u8fdb\u884c\u5355\u72ec\u4f9b\u7535\u4f7f\u7528\uff1b switch\u5957\u88c5\u53ea\u63d0\u4f9b\u4e86USB\u7535\u6e90\u7ebf\uff0c\u5e76\u6ca1\u6709\u63d0\u4f9b\u7535\u6e90\u9002\u914d\u5668\uff0c\u9700\u8981\u5ba2\u6237\u81ea\u884c\u914d\u7f6e\u7535\u6e90\u9002\u914d\u5668\uff085V\uff09\uff1b \u684c\u9762\u63a7\u5236\u5668 \u53ef\u4ee5\u901a\u8fc7USB\u7535\u7f06\u63a7\u5236\u5207\u6362\uff0c\u5bf9\u4e8e\u4e0d\u4f7f\u7528KVM\u7684\u5ba2\u6237\uff0c\u5f53\u60a8\u5728\u8bbe\u5907\u65c1\u8fb9\u65f6\uff0c\u8fd9\u662f\u9664\u4f7f\u7528switch\u8bbe\u5907\u4e0a\u6309\u94ae\u5207\u6362\u4e4b\u5916\u7684\u53e6\u4e00\u79cd\u5207\u6362\u65b9\u5f0f\uff1b HDMI\u8f93\u5165\u6700\u9ad8\u652f\u6301 4096x2160/60Hz \uff1b 4K 60Hz\u7684HDMI\u8f93\u5165, \u529f\u7387\u5927\u6982\u662f200mW;","title":"\u7b80\u4ecb"},{"location":"switch-guide/#_2","text":"\u8fd9\u91cc\u9700\u8981\u4e24\u6839USB\u7ebf\uff0c\u8fde\u63a5switch\u548ckvm\u786c\u4ef6\uff0c\u4e00\u6839\u7528\u4e8e\u4f20\u8f93\u63a7\u5236\u5207\u6362\u901a\u9053\u4fe1\u606f\uff0c\u4e00\u6839\u7528\u4e8e\u4f20\u8f93\u9f20\u6807\u952e\u76d8\u6570\u636e\uff0c\u5177\u4f53\u8fde\u63a5\u53ef\u4ee5\u53c2\u8003\u9762\u8bf4\u660e\u3002 \u6b63\u9762\u548c\u53cd\u9762\u63a5\u53e3\u793a\u610f\u56fe\uff0c\u53f3\u4fa7\u56fe\u4e2d\u7684control\u63a5\u53e3\u5373\u4e3a\u8fdc\u7a0b\u63a7\u5236\u63a5\u53e3, \u4e00\u5934\u4e3aUSB-A\uff0c\u53e6\u4e00\u5934\u4e3amicro usb\u5e76\u4e14\u6807\u7b7e\u5e26\u6709kvm\u5b57\u6837\u7684\u7ebf\uff0c\u4e3a\u63a7\u5236\u7ebf\uff0c\u5176\u4e2dmicro usb\u53e3\u4e0eswitch\u7684control\u63a5\u53e3\u8fde\u63a5\uff0cUSB-A\u63a5\u53e3\u4e0eKVM\u7684USB\u53e3\u8fde\u63a5\u3002 \u4fa7\u9762\u63a5\u53e3\u793a\u610f\u56fe \u8bbe\u5907\u8fde\u63a5\u793a\u610f\u56fe","title":"\u63a5\u53e3\u793a\u610f\u56fe"},{"location":"switch-guide/#_3","text":"!!! info \"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM\u8f6f\u4ef6\uff0c\u5728BliKVM\u542f\u52a8\u524d\u5148\u628aswitch\u901a\u7535\u5e76\u63a5\u597d\u7ebf\uff0c\u901a\u8fc7\u7ec8\u7aef\u786e\u8ba4switch\u63d2\u5165BliKVM\u540e\uff0c\u8bc6\u522b\u5230\u7684\u8bbe\u5907\u63cf\u8ff0\u7b26\u540d\u79f0\uff0c\u5982 /dev/ttyUSB0 ,\u7136\u540e\u7f16\u8f91 /usr/bin/blikvm/package.json \u4e2d\u7684 switch_handle \u5b57\u6bb5\uff0c\u5c06switch_enable\u8d4b\u503c\u4e3a1, switch_path\u8d4b\u503c\u4e3a /dev/ttyUSB0 \uff0c\u7136\u540e\u91cd\u542fBliKVM\u5373\u53ef\u3002 \u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u5148\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u7cfb\u7edf\u53d8\u4e3a\u53ef\u8bfb\u5199\u7cfb\u7edf\u3002\u7f16\u8f91\u914d\u7f6e\u6587\u4ef6\u53ef\u4ee5\u53c2\u8003\u4e0b\u547d\u4ee4: sudo vim /usr/bin/blikvm/package.json \u70b9\u51fb\u5de6\u4e0b\u89d2\u7684MORE\uff0c\u627e\u5230BliKVM switch\u8fd9\u4e00\u680f\uff0c\u8fdb\u884c\u5207\u6362\u9009\u62e9\u5373\u53ef\u3002\u6ce8\u610f\u5bf9\u5e94\u901a\u9053\u84dd\u8272\u5c0f\u70b9\u95ea\u52a8\u8868\u793a\u8bc6\u522b\u5230\u4e86switch\u63d2\u5165\uff0c\u5e76\u4e14\u6b63\u5904\u4e8e\u5f53\u524d\u901a\u9053\uff0c\u82e5\u65e0\u84dd\u8272\u5c0f\u70b9\u5219\u8868\u793a\u672a\u8bc6\u522b\u5230switch\u63d2\u5165\u3002\" \u82e5\u60a8\u4f7f\u7528\u7684PiKVM\u8f6f\u4ef6\uff0c\u8bf7\u6309\u7167\u4e0b\u9762\u7684\u8bf4\u660e\u8fdb\u884c\u914d\u7f6e \u901a\u8fc7SSH\u767b\u9646PiKVM\uff0c\u7528\u6237\u540d\u548c\u5bc6\u7801\u5747\u4e3aroot; \u7ec8\u7aef\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u7cfb\u7edf\u6539\u4e3a\u53ef\u8bfb\u5199\u7cfb\u7edf; \u7f16\u8f91 /etc/kvmd/override.yaml \u6b64\u6587\u4ef6\uff0c\u4f7f\u6539\u6587\u4ef6\u5305\u542b\u4e0b\u9762\u7684\u5185\u5bb9\uff0c\u5373\u5728\u539f\u6709\u5185\u5bb9\u540e\u8ffd\u52a0. kvmd: gpio: drivers: hk: type: xh_hk4401 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk pin: 0 mode: input ch1_led: driver: hk pin: 1 mode: input ch2_led: driver: hk pin: 2 mode: input ch3_led: driver: hk pin: 3 mode: input ch0_button: driver: hk pin: 0 mode: output switch: false ch1_button: driver: hk pin: 1 mode: output switch: false ch2_button: driver: hk pin: 2 mode: output switch: false ch3_button: driver: hk pin: 3 mode: output switch: false view: table: - [\"#Input 1\", ch0_led, ch0_button] - [\"#Input 2\", ch1_led, ch1_button] - [\"#Input 3\", ch2_led, ch2_button] - [\"#Input 4\", ch3_led, ch3_button] !!! warning \"\u4e0a\u8ff0\u914d\u7f6e\u57fa\u4e8e2022 pikvm\u56fe\u50cf\u3002\u5982\u679c\u60a8\u4f7f\u7528\u7684\u662f\u6700\u65b0\u7684pikvm\u6620\u50cf\u6216\u6700\u65b0\u7684\u8f6f\u4ef6\u7248\u672c\uff0c\u8bf7\u7f16\u8f91\u6587\u4ef6/etc/kvmd/override.yaml\u5e76\u6dfb\u52a0\u884c\uff1aprotocol:2\uff0c\u4f8b\u5b50\u5982\u4e0b:\" kvmd: gpio: drivers: hk: type: xh_hk4401 protocol: 2 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk ... \u7ec8\u7aef\u4f7f\u7528 ro \u547d\u4ee4\u5c06\u7cfb\u7edf\u91cd\u65b0\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\u7cfb\u7edf\uff1b \u7ec8\u7aef\u4f7f\u7528 systemctl restart kvmd \u91cd\u542f\u670d\u52a1\u3002 \u8fdb\u5165PiKVM web\u754c\u9762\uff0c\u5e76\u5355\u51fb\u201cGPIO\u201d\u83dc\u5355\u3002\u60a8\u5e94\u8be5\u770b\u52304\u4e2a\u8f93\u5165\uff0c\u5176\u4e2d\u4e00\u4e2a\u8f93\u5165\u6709\u4e00\u4e2a\u7eff\u8272\u5706\u5708\uff0c\u8868\u793a\u5f53\u524d\u5df2\u9009\u4e2d\u3002\u5355\u51fb\u5176\u4ed6\u8f93\u5165\u4ee5\u66f4\u6539\u9009\u5b9a\u7684\u4e3b\u673a\u3002","title":"\u8f6f\u4ef6\u914d\u7f6e"},{"location":"switch-guide/#_4","text":"\u82e5\u60a8\u5e0c\u671b\u5c06blicube\u7684switch\u7528\u5728\u5176\u5b83\u5e73\u53f0\u4e0a\uff0c\u8bf7\u53c2\u8003\u4e0b\u9762\u7684\u534f\u8bae \u901a\u4fe1\u6ce2\u7279\u7387\u4e3a19200 \u5207\u6362\u52301\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW1\\r\\nG01gA \u5207\u6362\u52302\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW2\\r\\nG02gA \u5207\u6362\u52303\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW3\\r\\nG03gA \u5207\u6362\u52304\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW4\\r\\nG04gA switch\u8fd4\u56de\u5f53\u524d\u6240\u5728\u901a\u9053\u6d88\u606f\u4e3a: G01gA , G02gA , G03gA , G04gA","title":"\u63a7\u5236\u534f\u8bae"},{"location":"switch-guide/#_5","text":"\u4ea7\u54c1 \u6570\u91cf \u5907\u6ce8\uff5c KVM Switch\u5207\u6362\u5668\uff084\u901a\u9053) 1 110mm * 60mm * 33mm USB\u684c\u9762\u63a7\u5236\u5668 1 USB\u6570\u636e\u7ebf 4 \u957f\u5ea6: 1.2m HDMI\uff08\u6807\u51c6\u63a5\u5934\uff09\u7ebf 4 \u957f\u5ea6: 1.5m USB\u7535\u6e90\u7ebf 1 \u957f\u5ea6: 0.8m KVM USB\u7ebf 1 \u957f\u5ea6: 1.5m USB\u684c\u9762\u63a7\u5236\u7ebf 1 \u957f\u5ea6: 1m","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"tailscale/","text":"Tailscale VPN Tailscale \u53ef\u4ee5\u7528\u4e8e\u5c06\u60a8\u7684\u4e3b\u673a\u548cBliKVM\u5728\u516c\u7f51\u4e0b\u8fdb\u884c\u8bbf\u95ee\u3002\u8fd9\u662f\u4e00\u4e2a\u65b9\u4fbf\u4e14\u514d\u8d39\u7684\u7ec4\u7f51\u5de5\u5177\uff0c\u7528\u4e8e\u7ec4\u7ec7\u5c0f\u578bVPN\u7f51\u7edc\u3002\u672c\u6587\u6863\u63d0\u4f9b\u4e86\u4e00\u4e2a\u793a\u4f8b\uff0c\u7528\u4e8e\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95ee\u60a8\u7684BliKVM\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528Zerotier\u6216\u8005\u5176\u5b83VPN\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u672c\u652f\u6301\u7684\u793a\u4f8b\uff0c\u9047\u5230\u4efb\u4f55\u95ee\u9898\u53ef\u4ee5\u53bbTailscale\u5b98\u7f51\u67e5\u627e\u3002 BliKVM\u5b89\u88c5Tailscale \u9996\u5148\u786e\u8ba4\u5f53\u524d\u7cfb\u7edf\u662f\u8bfb\u5199\u6743\u9650\uff0c\u82e5\u662f\u53ea\u8bfb\u7cfb\u7edf\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8fdb\u884c \u5b89\u88c5 : curl -fsSL https://tailscale.com/install.sh | sh \u6709\u4e00\u4e9b\u5730\u533a\u5982\u4e2d\u56fd\uff0c\u6709\u53ef\u80fd\u4f1a\u56e0\u4e3a\u7f51\u7edc\u539f\u56e0\u65e0\u6cd5\u987a\u5229\u4e0b\u8f7d\uff0c\u8bf7\u6b63\u786e\u914d\u7f6e\u7f51\u7edc \u4f7fBliKVM\u52a0\u5165\u5230\u4f60\u7684Tailscale\u5c40\u57df\u7f51\u4e2d \u5728\u5b98\u7f51\u6ce8\u518c\u4f60\u7684tailscale\u8d26\u6237\uff0c\u5e76\u5728\u8bbe\u7f6e\u4e2d\u751f\u6210\u4f60\u81ea\u5df1\u7684keys\uff0c\u5728BliKVM\u7ec8\u7aef\u4e0a\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\uff0c\u5373\u53ef\u5c06BliKVM\u52a0\u5165\u5230tailscale\u751f\u6210\u7684\u5c40\u57df\u7f51\u4e2d\u3002 sudo tailscale up --authkey=your-auth-key --accept-routes \u82e5\u4e00\u5207\u987a\u5229\uff0c\u4f60\u5728BliKMV\u7ec8\u7aef\u8fd0\u884c ip addr show tailscale0 \uff0c\u5373\u53ef\u67e5\u770b\u5230tailscale0\u751f\u6210\u7684\u865a\u62df\u5c40\u57df\u7f51\u7684ip\u5730\u5740\uff0c\u4e00\u4e2a\u4f8b\u5b50\u5982\u4e0b\uff1a 3: tailscale0: mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 100.126.223.28/32 scope global tailscale0 valid_lft forever preferred_lft forever inet6 fd7a:115c:a1e0:ab12:4843:cd96:627e:df1c/128 scope global valid_lft forever preferred_lft forever inet6 fe80::8955:99dc:4e7d:b08b/64 scope link stable-privacy valid_lft forever preferred_lft forever \u5176\u4e2d100.126.223.28\u5c31\u662f\u53ef\u4ee5\u7528\u6765\u5728\u4e3b\u673a\u4e0a\u8bbf\u95eeBliKVM web\u754c\u9762\u7684UI\u5730\u5740\u3002 \u4e3b\u673a\u5b89\u88c5Tailscale \u5c06Tailscale \u4e0b\u8f7d \u5e76\u5b89\u88c5\u5230\u60a8\u7684\u63a7\u5236\u4e3b\u673a\u4e0a\uff0c\u767b\u5f55\u5bf9\u5e94\u7684\u8d26\u6237\uff0c\u7136\u540e\u60a8\u53ef\u4ee5\u5728Tailscale\u7684 \u63a7\u5236\u754c\u9762 \uff0c\u67e5\u770b\u60a8\u7684\u4e24\u53f0\u673a\u5668\u662f\u5426\u90fd\u5728\u7ebf\uff0c\u5982\u679c\u90fd\u5728\u7ebf\uff0c\u5373\u53ef\u4f7f\u7528\u4e0b\u9762\u5730\u5740\uff0c\u5728\u60a8\u7684\u63a7\u5236\u4e3b\u673a\u4e0a\u8bbf\u95eeBliKVM http://","title":"Tailscale VPN"},{"location":"tailscale/#tailscale-vpn","text":"Tailscale \u53ef\u4ee5\u7528\u4e8e\u5c06\u60a8\u7684\u4e3b\u673a\u548cBliKVM\u5728\u516c\u7f51\u4e0b\u8fdb\u884c\u8bbf\u95ee\u3002\u8fd9\u662f\u4e00\u4e2a\u65b9\u4fbf\u4e14\u514d\u8d39\u7684\u7ec4\u7f51\u5de5\u5177\uff0c\u7528\u4e8e\u7ec4\u7ec7\u5c0f\u578bVPN\u7f51\u7edc\u3002\u672c\u6587\u6863\u63d0\u4f9b\u4e86\u4e00\u4e2a\u793a\u4f8b\uff0c\u7528\u4e8e\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95ee\u60a8\u7684BliKVM\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528Zerotier\u6216\u8005\u5176\u5b83VPN\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u672c\u652f\u6301\u7684\u793a\u4f8b\uff0c\u9047\u5230\u4efb\u4f55\u95ee\u9898\u53ef\u4ee5\u53bbTailscale\u5b98\u7f51\u67e5\u627e\u3002","title":"Tailscale VPN"},{"location":"tailscale/#blikvmtailscale","text":"\u9996\u5148\u786e\u8ba4\u5f53\u524d\u7cfb\u7edf\u662f\u8bfb\u5199\u6743\u9650\uff0c\u82e5\u662f\u53ea\u8bfb\u7cfb\u7edf\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8fdb\u884c \u5b89\u88c5 : curl -fsSL https://tailscale.com/install.sh | sh \u6709\u4e00\u4e9b\u5730\u533a\u5982\u4e2d\u56fd\uff0c\u6709\u53ef\u80fd\u4f1a\u56e0\u4e3a\u7f51\u7edc\u539f\u56e0\u65e0\u6cd5\u987a\u5229\u4e0b\u8f7d\uff0c\u8bf7\u6b63\u786e\u914d\u7f6e\u7f51\u7edc","title":"BliKVM\u5b89\u88c5Tailscale"},{"location":"tailscale/#blikvmtailscale_1","text":"\u5728\u5b98\u7f51\u6ce8\u518c\u4f60\u7684tailscale\u8d26\u6237\uff0c\u5e76\u5728\u8bbe\u7f6e\u4e2d\u751f\u6210\u4f60\u81ea\u5df1\u7684keys\uff0c\u5728BliKVM\u7ec8\u7aef\u4e0a\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\uff0c\u5373\u53ef\u5c06BliKVM\u52a0\u5165\u5230tailscale\u751f\u6210\u7684\u5c40\u57df\u7f51\u4e2d\u3002 sudo tailscale up --authkey=your-auth-key --accept-routes \u82e5\u4e00\u5207\u987a\u5229\uff0c\u4f60\u5728BliKMV\u7ec8\u7aef\u8fd0\u884c ip addr show tailscale0 \uff0c\u5373\u53ef\u67e5\u770b\u5230tailscale0\u751f\u6210\u7684\u865a\u62df\u5c40\u57df\u7f51\u7684ip\u5730\u5740\uff0c\u4e00\u4e2a\u4f8b\u5b50\u5982\u4e0b\uff1a 3: tailscale0: mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 100.126.223.28/32 scope global tailscale0 valid_lft forever preferred_lft forever inet6 fd7a:115c:a1e0:ab12:4843:cd96:627e:df1c/128 scope global valid_lft forever preferred_lft forever inet6 fe80::8955:99dc:4e7d:b08b/64 scope link stable-privacy valid_lft forever preferred_lft forever \u5176\u4e2d100.126.223.28\u5c31\u662f\u53ef\u4ee5\u7528\u6765\u5728\u4e3b\u673a\u4e0a\u8bbf\u95eeBliKVM web\u754c\u9762\u7684UI\u5730\u5740\u3002","title":"\u4f7fBliKVM\u52a0\u5165\u5230\u4f60\u7684Tailscale\u5c40\u57df\u7f51\u4e2d"},{"location":"tailscale/#tailscale","text":"\u5c06Tailscale \u4e0b\u8f7d \u5e76\u5b89\u88c5\u5230\u60a8\u7684\u63a7\u5236\u4e3b\u673a\u4e0a\uff0c\u767b\u5f55\u5bf9\u5e94\u7684\u8d26\u6237\uff0c\u7136\u540e\u60a8\u53ef\u4ee5\u5728Tailscale\u7684 \u63a7\u5236\u754c\u9762 \uff0c\u67e5\u770b\u60a8\u7684\u4e24\u53f0\u673a\u5668\u662f\u5426\u90fd\u5728\u7ebf\uff0c\u5982\u679c\u90fd\u5728\u7ebf\uff0c\u5373\u53ef\u4f7f\u7528\u4e0b\u9762\u5730\u5740\uff0c\u5728\u60a8\u7684\u63a7\u5236\u4e3b\u673a\u4e0a\u8bbf\u95eeBliKVM http://","title":"\u4e3b\u673a\u5b89\u88c5Tailscale"},{"location":"update/","text":"\u8f6f\u4ef6\u66f4\u65b0\u4ecb\u7ecd \u4ecb\u7ecd BLIKVM\u9879\u76ee\u76ee\u524d\u53ef\u7528\u7248\u672c\u6258\u7ba1\u5728github\u4ed3\u5e93\u7684release\u5305\u91cc\uff0c\u66f4\u65b0\u8f6f\u4ef6\u529f\u80fd\u9700\u4fdd\u6301\u8bbe\u5907\u8054\u7f51\uff0c\u66f4\u65b0\u8f6f\u4ef6\u76ee\u524d\u63d0\u4f9b\u4e24\u79cd\u65b9\u5f0f \u65b9\u5f0f1\uff0c\u901a\u8fc7web\u754c\u9762\u70b9\u51fb\u66f4\u65b0\u6309\u94ae\uff0c\u7a0b\u5e8f\u81ea\u52a8\u8fdb\u884c\u66f4\u65b0,\u66f4\u65b0\u5b8c\u9700\u8981\u91cd\u542f\u3002 \u65b9\u5f0f2\uff0c\u624b\u52a8\u5728KVM\u7ec8\u7aef\u4e0a\u8fd0\u884c\u811a\u672c\u8fdb\u884c\u66f4\u65b0\uff0c\u66f4\u65b0\u5b8c\u540e\u9700\u8981\u91cd\u542f\u3002 \u5347\u7ea7\u9519\u8bef\u5e38\u89c1\u539f\u56e0 \u8bbe\u5907\u672a\u8054\u7f51; \u7f51\u7edc\u8bbf\u95eegithub\u53d7\u9650; \u6211\u4eec\u5f3a\u70c8\u5efa\u8bae\u60a8\u5728\u9760\u8fd1\u8981\u5347\u7ea7\u7684BliKVM\u786c\u4ef6\u65f6\u6267\u884c\u66f4\u65b0\u3002\u539f\u56e0\u662f\uff0c\u5982\u679c\u51fa\u73b0\u4efb\u4f55\u95ee\u9898\uff0c\u4f60\u53ef\u4ee5\u8fdb\u884c\u5e72\u9884\u3002 \u5982\u679c\u60a8\u719f\u6089\u547d\u4ee4\u884c\u64cd\u4f5c\uff0c\u5efa\u8bae\u60a8\u624b\u52a8\u66f4\u65b0\u53ef\u4ee5\u5b9e\u65f6\u67e5\u770b\u547d\u4ee4\u884c\u72b6\u6001\u3002 \u82e5\u66f4\u65b0\u5f02\u5e38\uff0cweb\u754c\u9762\u65e0\u6cd5\u9000\u51fa\u66f4\u65b0\u72b6\u6001\uff0c\u53ef\u4ee5\u7ec8\u7aefssh\u8fdb\u5165kvm\u540e\u91cd\u542f\u6062\u590d\u3002 \u624b\u52a8\u8fd0\u884c\u811a\u672c\u66f4\u65b0 ssh\u8fdb\u5165\u8bbe\u5907\u7ec8\u7aef\u3002\u82e5\u5f53\u524d\u7cfb\u7edf\u7ec8\u7aef\u53ef\u4ee5\u770b\u5230ro\u5173\u952e\u5b57\uff0c\u4e3a\u53ea\u8bfb\u7cfb\u7edf\uff0c\u9700\u4f7f\u7528 rw \u8ba9\u7cfb\u7edf\u4e3a\u53ef\u5199\u6743\u9650\u3002 sudo -i cd /opt/bin/blikvm/ git pull --rebase python3 /opt/bin/blikvm/script/update.py //\u5982\u679c\u4f60\u60f3\u6d4b\u8bd5\u6700\u65b0\u7684\u6d4b\u8bd5\u7248\u672c\uff0c\u4f7f\u7528\u4e0b\u9762\u7684\u547d\u4ee4 python3 /opt/bin/blikvm/script/update.py alpha \u89c2\u5bdf\u7ec8\u7aef\u8f93\u51fa\uff0c\u5f53\u770b\u5230\u5347\u7ea7\u5347\u7ea7\u6210\u529f\u6d88\u606f\u63d0\u9192\u65f6\uff0c\u7ec8\u7aef\u8f93\u5165reboot\uff0c\u91cd\u542f\u751f\u6548\u3002 \u82e5\u60a8\u56e0\u7f51\u7edc\u539f\u56e0\uff0c\u4e00\u76f4\u65e0\u6cd5\u66f4\u65b0\u6210\u529f\uff0c\u53ef\u4ee5\u91c7\u7528\u5728\u5176\u5b83\u7f51\u7edcok\u7684PC\u4e0a\u4e0b\u8f7d\u6700\u65b0\u7684release\u5305\uff0c\u7136\u540e\u6309\u7167\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\u3002 \u4e0b\u8f7d\u5730\u5740: https://github.com/ThomasVon2021/blikvm/releases \u5176\u4e2dv1 v2 v3\u786c\u4ef6\u4f7f\u7528 release.tar.gz v4\u786c\u4ef6\u4f7f\u7528 release-h616-v4.tar.gz ssh\u8fdb\u5165\u8bbe\u5907\u7ec8\u7aef\uff0c\u5e76\u4f7f\u7528 tar -zxvf release.tar.gz \u89e3\u538brelease.tar.gz\u3002 sudo -i cd /your release path/ python3 install_release.py --releasepath=./ \u53ef\u4ee5\u89c2\u5bdf/usr/bin/blikvm/package.json\u524d\u540e\u7684\u7248\u672c\u5bf9\u6bd4\uff0c\u82e5\u5347\u7ea7\u5230\u4e86\u6307\u5b9a\u7248\u672c\uff0c\u5219\u6210\u529f\uff0c\u91cd\u542f\u751f\u6548\u3002 Web\u754c\u9762\u66f4\u65b0 \u5f53\u524dweb\u5347\u7ea7\u529f\u80fd\u6682\u65f6\u5173\u95ed\uff0c\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u66f4\u65b0 \u70b9\u51fb\u66f4\u591a\u9009\u9879\u6309\u94ae\u540e\uff0c\u627e\u5230 \u68c0\u67e5\u66f4\u65b0 \u6309\u94ae\u5e76\u70b9\u51fb,\u82e5\u53d1\u73b0\u53ef\u7528\u7248\u672c\uff0c\u4f1a\u51fa\u73b0\u4e0b\u56fe\u4e2d\u7684\u5f39\u6846\uff0c\u70b9\u51fb OK ,\u5373\u8fdb\u5165\u5347\u7ea7\uff0c\u5347\u7ea7\u8fc7\u7a0b\u4e2dweb\u754c\u9762\u6682\u65f6\u4e0d\u53ef\u64cd\u4f5c\u3002\u901a\u8fc7\u624b\u52a8\u5237\u65b0\u9875\u9762\uff0c\u67e5\u770b\u76ee\u524d\u66f4\u65b0\u72b6\u6001\u3002\u5f53\u51fa\u73b0\u66f4\u65b0\u6210\u529f\u7684\u6d88\u606f\u63d0\u9192\u65f6\uff0c\u5373\u8868\u793a\u66f4\u65b0\u5df2\u6210\u529f\uff0c\u70b9\u51fb\u91cd\u542f\u6309\u94ae\uff0c\u65b0\u7248\u672c\u8f6f\u4ef6\u5c31\u4f1a\u751f\u6548\u3002","title":"\u66f4\u65b0\u8f6f\u4ef6"},{"location":"update/#_1","text":"","title":"\u8f6f\u4ef6\u66f4\u65b0\u4ecb\u7ecd"},{"location":"update/#_2","text":"BLIKVM\u9879\u76ee\u76ee\u524d\u53ef\u7528\u7248\u672c\u6258\u7ba1\u5728github\u4ed3\u5e93\u7684release\u5305\u91cc\uff0c\u66f4\u65b0\u8f6f\u4ef6\u529f\u80fd\u9700\u4fdd\u6301\u8bbe\u5907\u8054\u7f51\uff0c\u66f4\u65b0\u8f6f\u4ef6\u76ee\u524d\u63d0\u4f9b\u4e24\u79cd\u65b9\u5f0f \u65b9\u5f0f1\uff0c\u901a\u8fc7web\u754c\u9762\u70b9\u51fb\u66f4\u65b0\u6309\u94ae\uff0c\u7a0b\u5e8f\u81ea\u52a8\u8fdb\u884c\u66f4\u65b0,\u66f4\u65b0\u5b8c\u9700\u8981\u91cd\u542f\u3002 \u65b9\u5f0f2\uff0c\u624b\u52a8\u5728KVM\u7ec8\u7aef\u4e0a\u8fd0\u884c\u811a\u672c\u8fdb\u884c\u66f4\u65b0\uff0c\u66f4\u65b0\u5b8c\u540e\u9700\u8981\u91cd\u542f\u3002 \u5347\u7ea7\u9519\u8bef\u5e38\u89c1\u539f\u56e0 \u8bbe\u5907\u672a\u8054\u7f51; \u7f51\u7edc\u8bbf\u95eegithub\u53d7\u9650; \u6211\u4eec\u5f3a\u70c8\u5efa\u8bae\u60a8\u5728\u9760\u8fd1\u8981\u5347\u7ea7\u7684BliKVM\u786c\u4ef6\u65f6\u6267\u884c\u66f4\u65b0\u3002\u539f\u56e0\u662f\uff0c\u5982\u679c\u51fa\u73b0\u4efb\u4f55\u95ee\u9898\uff0c\u4f60\u53ef\u4ee5\u8fdb\u884c\u5e72\u9884\u3002 \u5982\u679c\u60a8\u719f\u6089\u547d\u4ee4\u884c\u64cd\u4f5c\uff0c\u5efa\u8bae\u60a8\u624b\u52a8\u66f4\u65b0\u53ef\u4ee5\u5b9e\u65f6\u67e5\u770b\u547d\u4ee4\u884c\u72b6\u6001\u3002 \u82e5\u66f4\u65b0\u5f02\u5e38\uff0cweb\u754c\u9762\u65e0\u6cd5\u9000\u51fa\u66f4\u65b0\u72b6\u6001\uff0c\u53ef\u4ee5\u7ec8\u7aefssh\u8fdb\u5165kvm\u540e\u91cd\u542f\u6062\u590d\u3002","title":"\u4ecb\u7ecd"},{"location":"update/#_3","text":"ssh\u8fdb\u5165\u8bbe\u5907\u7ec8\u7aef\u3002\u82e5\u5f53\u524d\u7cfb\u7edf\u7ec8\u7aef\u53ef\u4ee5\u770b\u5230ro\u5173\u952e\u5b57\uff0c\u4e3a\u53ea\u8bfb\u7cfb\u7edf\uff0c\u9700\u4f7f\u7528 rw \u8ba9\u7cfb\u7edf\u4e3a\u53ef\u5199\u6743\u9650\u3002 sudo -i cd /opt/bin/blikvm/ git pull --rebase python3 /opt/bin/blikvm/script/update.py //\u5982\u679c\u4f60\u60f3\u6d4b\u8bd5\u6700\u65b0\u7684\u6d4b\u8bd5\u7248\u672c\uff0c\u4f7f\u7528\u4e0b\u9762\u7684\u547d\u4ee4 python3 /opt/bin/blikvm/script/update.py alpha \u89c2\u5bdf\u7ec8\u7aef\u8f93\u51fa\uff0c\u5f53\u770b\u5230\u5347\u7ea7\u5347\u7ea7\u6210\u529f\u6d88\u606f\u63d0\u9192\u65f6\uff0c\u7ec8\u7aef\u8f93\u5165reboot\uff0c\u91cd\u542f\u751f\u6548\u3002 \u82e5\u60a8\u56e0\u7f51\u7edc\u539f\u56e0\uff0c\u4e00\u76f4\u65e0\u6cd5\u66f4\u65b0\u6210\u529f\uff0c\u53ef\u4ee5\u91c7\u7528\u5728\u5176\u5b83\u7f51\u7edcok\u7684PC\u4e0a\u4e0b\u8f7d\u6700\u65b0\u7684release\u5305\uff0c\u7136\u540e\u6309\u7167\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\u3002 \u4e0b\u8f7d\u5730\u5740: https://github.com/ThomasVon2021/blikvm/releases \u5176\u4e2dv1 v2 v3\u786c\u4ef6\u4f7f\u7528 release.tar.gz v4\u786c\u4ef6\u4f7f\u7528 release-h616-v4.tar.gz ssh\u8fdb\u5165\u8bbe\u5907\u7ec8\u7aef\uff0c\u5e76\u4f7f\u7528 tar -zxvf release.tar.gz \u89e3\u538brelease.tar.gz\u3002 sudo -i cd /your release path/ python3 install_release.py --releasepath=./ \u53ef\u4ee5\u89c2\u5bdf/usr/bin/blikvm/package.json\u524d\u540e\u7684\u7248\u672c\u5bf9\u6bd4\uff0c\u82e5\u5347\u7ea7\u5230\u4e86\u6307\u5b9a\u7248\u672c\uff0c\u5219\u6210\u529f\uff0c\u91cd\u542f\u751f\u6548\u3002","title":"\u624b\u52a8\u8fd0\u884c\u811a\u672c\u66f4\u65b0"},{"location":"update/#web","text":"\u5f53\u524dweb\u5347\u7ea7\u529f\u80fd\u6682\u65f6\u5173\u95ed\uff0c\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u66f4\u65b0 \u70b9\u51fb\u66f4\u591a\u9009\u9879\u6309\u94ae\u540e\uff0c\u627e\u5230 \u68c0\u67e5\u66f4\u65b0 \u6309\u94ae\u5e76\u70b9\u51fb,\u82e5\u53d1\u73b0\u53ef\u7528\u7248\u672c\uff0c\u4f1a\u51fa\u73b0\u4e0b\u56fe\u4e2d\u7684\u5f39\u6846\uff0c\u70b9\u51fb OK ,\u5373\u8fdb\u5165\u5347\u7ea7\uff0c\u5347\u7ea7\u8fc7\u7a0b\u4e2dweb\u754c\u9762\u6682\u65f6\u4e0d\u53ef\u64cd\u4f5c\u3002\u901a\u8fc7\u624b\u52a8\u5237\u65b0\u9875\u9762\uff0c\u67e5\u770b\u76ee\u524d\u66f4\u65b0\u72b6\u6001\u3002\u5f53\u51fa\u73b0\u66f4\u65b0\u6210\u529f\u7684\u6d88\u606f\u63d0\u9192\u65f6\uff0c\u5373\u8868\u793a\u66f4\u65b0\u5df2\u6210\u529f\uff0c\u70b9\u51fb\u91cd\u542f\u6309\u94ae\uff0c\u65b0\u7248\u672c\u8f6f\u4ef6\u5c31\u4f1a\u751f\u6548\u3002","title":"Web\u754c\u9762\u66f4\u65b0"},{"location":"usb-splitter-guide/","text":"USB\u548c\u7535\u6e90\u5206\u7ebf\u677f 1. \u7b80\u4ecb The adaptor allows the Raspberry Pi 4 to be used with a Pi USB-C power supply while allowing access to USB OTG data over a separate USB-C connection. USB-C (RPI4) <> USB-C (USB) and USB-C (PWR) USB-C(RPI4) USB Type-C(USB) USB Type-C(PWR) 5V 5V D- D- D+ D+ CC1 10k to 5V CC1 5.1k to GND CC1 5.1k to GND CC2 10k to 5V CC2 5.1k to GND CC2 5.1k to GND GND GND GND To use the adaptor with the Raspberry Pi 4 you need. USB-C to USB-C cable[1] between Pi4 and the adaptor board USB-C to USB-C or Type-A between adaptor board and PC Power[2] via Official Raspberry Pi USB Type-C Power Supply. [1] Whilst USB-C cables are generally designed for higher current I still advise using short power cable to the Pi where possible to reduce voltage drop. [2] PLEASE NOTE With the Pu/Pd resistors on this board it can only be used with 5V supply to power a 5V device. An adaptor of this kind does not fall within the USB specification. It's designed for use with the official Raspberry Pi USB-C power supply and raspberry pi, use with other power supplies/chargers and devices may cause issues/damage. 2.\u5c3a\u5bf8\u56fe 3.\u6d4b\u8bd5\u89c6\u9891 USB splitter Video 4.3D \u6253\u5370\u5916\u58f3 A simple snap fit case for the USB splitter. \u4e0b\u8f7d\u6587\u4ef6","title":"USB\u4e00\u5206\u4e8c\u7528\u6237\u624b\u518c"},{"location":"usb-splitter-guide/#usb","text":"","title":"USB\u548c\u7535\u6e90\u5206\u7ebf\u677f"},{"location":"usb-splitter-guide/#1","text":"The adaptor allows the Raspberry Pi 4 to be used with a Pi USB-C power supply while allowing access to USB OTG data over a separate USB-C connection. USB-C (RPI4) <> USB-C (USB) and USB-C (PWR) USB-C(RPI4) USB Type-C(USB) USB Type-C(PWR) 5V 5V D- D- D+ D+ CC1 10k to 5V CC1 5.1k to GND CC1 5.1k to GND CC2 10k to 5V CC2 5.1k to GND CC2 5.1k to GND GND GND GND To use the adaptor with the Raspberry Pi 4 you need. USB-C to USB-C cable[1] between Pi4 and the adaptor board USB-C to USB-C or Type-A between adaptor board and PC Power[2] via Official Raspberry Pi USB Type-C Power Supply. [1] Whilst USB-C cables are generally designed for higher current I still advise using short power cable to the Pi where possible to reduce voltage drop. [2] PLEASE NOTE With the Pu/Pd resistors on this board it can only be used with 5V supply to power a 5V device. An adaptor of this kind does not fall within the USB specification. It's designed for use with the official Raspberry Pi USB-C power supply and raspberry pi, use with other power supplies/chargers and devices may cause issues/damage.","title":"1. \u7b80\u4ecb"},{"location":"usb-splitter-guide/#2","text":"","title":"2.\u5c3a\u5bf8\u56fe"},{"location":"usb-splitter-guide/#3","text":"USB splitter Video","title":"3.\u6d4b\u8bd5\u89c6\u9891"},{"location":"usb-splitter-guide/#43d","text":"A simple snap fit case for the USB splitter. \u4e0b\u8f7d\u6587\u4ef6","title":"4.3D \u6253\u5370\u5916\u58f3"},{"location":"user-manager/","text":"\u4fee\u6539\u8d26\u53f7\u5bc6\u7801 \u5728\u66f4\u591a\u8bbe\u7f6e\u91cc\uff0c\u70b9\u51fb\u7528\u6237\u7ba1\u7406\uff0c\u4fee\u6539\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002\u4fee\u6539\u8d26\u53f7\u5bc6\u7801\u540e\uff0c\u9700\u8981\u91cd\u542fkvm\u7cfb\u7edf\u624d\u80fd\u751f\u6548\u3002 \u4fee\u6539\u5b8c\u540e\u539f\u6765\u7684admin\u7528\u6237\u4e0d\u53ef\u767b\u5f55\u3002 \u5168\u5c40\u9ed8\u8ba4\u5bc6\u7801\u8def\u5f84\u5728 /etc/kvm.d/conf/admin.ini","title":"\u4fee\u6539\u8d26\u53f7\u5bc6\u7801"},{"location":"user-manager/#_1","text":"\u5728\u66f4\u591a\u8bbe\u7f6e\u91cc\uff0c\u70b9\u51fb\u7528\u6237\u7ba1\u7406\uff0c\u4fee\u6539\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002\u4fee\u6539\u8d26\u53f7\u5bc6\u7801\u540e\uff0c\u9700\u8981\u91cd\u542fkvm\u7cfb\u7edf\u624d\u80fd\u751f\u6548\u3002 \u4fee\u6539\u5b8c\u540e\u539f\u6765\u7684admin\u7528\u6237\u4e0d\u53ef\u767b\u5f55\u3002 \u5168\u5c40\u9ed8\u8ba4\u5bc6\u7801\u8def\u5f84\u5728 /etc/kvm.d/conf/admin.ini","title":"\u4fee\u6539\u8d26\u53f7\u5bc6\u7801"},{"location":"wake-on-lan/","text":"Wake-on-LAN \u4ecb\u7ecd Wake-on-LAN\u7b80\u79f0WOL\u6216WoL\uff0c\u529f\u80fd\u4e3a\u8ba9\u5df2\u7ecf\u8fdb\u5165\u4f11\u7720\u72b6\u6001\u6216\u5173\u673a\u72b6\u6001\u7684\u8ba1\u7b97\u673a\uff0cKVM\u901a\u8fc7\u5c40\u57df\u7f51\u53d1\u9001\u7279\u5b9a\u6d88\u606f\uff0c\u4f7f\u88ab\u63a7\u7535\u8111\u4ece\u4f11\u7720\u72b6\u6001\u6216\u5173\u673a\u72b6\u6001\u6539\u4e3a\u5f00\u673a\u72b6\u6001\u3002WoL\u9700\u88ab\u63a7\u7535\u8111\u652f\u6301\uff0c\u5426\u5219\u8be5\u529f\u80fd\u65e0\u6548\uff0c\u53e6\u5916\u9700\u786e\u8ba4WoL\u5df2\u88ab\u5f00\u542f\u548c\u6b63\u786e\u914d\u7f6e\u3002\u4f7f\u7528\u6b64\u529f\u80fd\uff0c\u4e0d\u9700\u8981\u4f7f\u7528atx\u529f\u80fd\u4e5f\u53ef\u4ee5\u5b9e\u73b0\u5f00\u673a\u3002\u82e5\u7528\u6237\u5728\u4f7f\u7528kvm\u7684WoL\u7684\u9047\u5230\u5f02\u5e38\uff0c\u53ef\u5c1d\u8bd5\u4f7f\u7528\u652f\u6301WoL\u7684\u8f6f\u4ef6\u8fdb\u884c\u6d4b\u8bd5\u3002 \u4f7f\u7528\u65b9\u6cd5","title":"Wake-on-LAN"},{"location":"wake-on-lan/#wake-on-lan","text":"","title":"Wake-on-LAN"},{"location":"wake-on-lan/#_1","text":"Wake-on-LAN\u7b80\u79f0WOL\u6216WoL\uff0c\u529f\u80fd\u4e3a\u8ba9\u5df2\u7ecf\u8fdb\u5165\u4f11\u7720\u72b6\u6001\u6216\u5173\u673a\u72b6\u6001\u7684\u8ba1\u7b97\u673a\uff0cKVM\u901a\u8fc7\u5c40\u57df\u7f51\u53d1\u9001\u7279\u5b9a\u6d88\u606f\uff0c\u4f7f\u88ab\u63a7\u7535\u8111\u4ece\u4f11\u7720\u72b6\u6001\u6216\u5173\u673a\u72b6\u6001\u6539\u4e3a\u5f00\u673a\u72b6\u6001\u3002WoL\u9700\u88ab\u63a7\u7535\u8111\u652f\u6301\uff0c\u5426\u5219\u8be5\u529f\u80fd\u65e0\u6548\uff0c\u53e6\u5916\u9700\u786e\u8ba4WoL\u5df2\u88ab\u5f00\u542f\u548c\u6b63\u786e\u914d\u7f6e\u3002\u4f7f\u7528\u6b64\u529f\u80fd\uff0c\u4e0d\u9700\u8981\u4f7f\u7528atx\u529f\u80fd\u4e5f\u53ef\u4ee5\u5b9e\u73b0\u5f00\u673a\u3002\u82e5\u7528\u6237\u5728\u4f7f\u7528kvm\u7684WoL\u7684\u9047\u5230\u5f02\u5e38\uff0c\u53ef\u5c1d\u8bd5\u4f7f\u7528\u652f\u6301WoL\u7684\u8f6f\u4ef6\u8fdb\u884c\u6d4b\u8bd5\u3002","title":"\u4ecb\u7ecd"},{"location":"wake-on-lan/#_2","text":"","title":"\u4f7f\u7528\u65b9\u6cd5"},{"location":"wifi/","text":"Wifi\u529f\u80fd \u7531\u4e8eBLIKVM\u6709\u591a\u6b3e\u786c\u4ef6\uff0c\u652f\u6301\u4e0d\u540c\u7684OS\uff0c\u5982BLIKVM OS\u548cPiKVM OS\uff0c\u4e0d\u540cOS\u94fe\u63a5wifi\u65b9\u5f0f\u4e0d\u4e00\u5b9a\u76f8\u540c\uff0c\u8bf7\u5728\u4f7f\u7528\u672c\u6587\u6863\u65b9\u6cd5\u524d\uff0c\u8bf7\u786e\u8ba4\u81ea\u5df1\u786c\u4ef6\u548c\u4f7f\u7528OS\u7684\u60c5\u51b5\u3002 \u8bf7\u786e\u8ba4\u4f60\u4f7f\u7528\u7684\u786c\u4ef6\u652f\u6301wifi\u529f\u80fd\uff0c\u5982CM400200\u7248\u672c\u4e0d\u5e26wifi\u529f\u80fd\uff1b \u82e5KVM\u786c\u4ef6\u7684SOC\u4e3aCM4\uff0c\u8bf7\u786e\u8ba4\u662f\u5426\u8fde\u63a5\u4e86wifi\u5929\u7ebf\uff1b PiKVM OS\u4e3aarch linux\uff1b BLIKVM OS\u6811\u8393\u6d3e\u7cfb\u5217\u4e3adebian\u7cfb\u7edf\uff0cv4\u7cfb\u5217\u4e3aarmbian\u7cfb\u7edf\uff1b v1\uff0cv2\uff0cv3\u786c\u4ef6\u4f7f\u7528\u7684\u4e3a\u6811\u8393\u6d3edebian\u7cfb\u7edf\uff0c\u4f7f\u7528raspi-config\u8fdb\u884cwifi\u94fe\u63a5 \u767b\u5f55ssh,\u547d\u4ee4: ssh blikvm@ip \u7cfb\u7edf\u91cd\u52a0\u8f7d\u4e3a\u53ef\u5199, \u547d\u4ee4: rw \u542f\u52a8raspi-config, \u547d\u4ee4: sudo raspi-config \u9009\u62e9 System Options \u9009\u62e9 Wireless LAN \u9009\u62e9wifi\u6240\u5728\u56fd\u5bb6,\u4e2d\u56fd\u9009CN, \u5982\u679c\u4ee5\u524d\u8bbe\u7f6e\u8fc7,\u8fd9\u4e00\u6b65\u4f1a\u8df3\u8fc7\u76f4\u63a5\u52307 \u8f93\u5165Wi-Fi\u7684ssid(\u540d\u79f0) \u8f93\u5165Wi-Fi\u7684\u5bc6\u7801,\u5982\u679c\u6ca1\u6709\u5bc6\u7801\u76f4\u63a5\u56de\u8f66 \u8fd9\u65f6\u4f1a\u56de\u5230\u6b65\u9aa44\u7684\u754c\u9762,\u6309tab\u952e\u9009\u62e9 ,\u56de\u8f66 \u67e5\u770b\u662f\u5426\u8fde\u4e0awifi, \u547d\u4ee4: ifconfig wlan0 ,\u5982\u679c\u770b\u5230\u83b7\u53d6\u5230ip\u5c31\u662f\u5df2\u7ecf\u8fde\u4e0a\u4e86 \u5c06\u7cfb\u7edf\u6302\u8f7d\u4e3a\u53ea\u8bfb, \u547d\u4ee4: ro v4\u786c\u4ef6\u4f7f\u7528\u7684\u4e3aarmbian\u7cfb\u7edf\uff0c\u4f7f\u7528armbian-config \u767b\u5f55ssh,\u547d\u4ee4: ssh blikvm@ip\uff0c\u767b\u5f55\u5230 Armbian \u7cfb\u7edf\u3002 \u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\u4ee5\u542f\u52a8 armbian-config \u5de5\u5177\uff1a sudo armbian-config \u5728 armbian-config \u83dc\u5355\u4e2d\uff0c\u4f7f\u7528\u65b9\u5411\u952e\u548c\u56de\u8f66\u952e\u5bfc\u822a\u548c\u9009\u62e9\u9009\u9879\u3002 \u4f7f\u7528\u65b9\u5411\u952e\u5411\u4e0b\u6eda\u52a8\u5230 \"Network\" \u9009\u9879\uff0c\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165\u5b50\u83dc\u5355\u3002 \u5728 \"Network\" \u5b50\u83dc\u5355\u4e2d\uff0c\u9009\u62e9 \"Wireless\" \u9009\u9879\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165 Wi-Fi \u914d\u7f6e\u83dc\u5355\u3002 \u5728 Wi-Fi \u914d\u7f6e\u83dc\u5355\u4e2d\uff0c\u9009\u62e9 \"Connect to Wi-Fi\" \u9009\u9879\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165 Wi-Fi \u8fde\u63a5\u8bbe\u7f6e\u3002 armbian-config \u5c06\u5217\u51fa\u53ef\u7528\u7684\u65e0\u7ebf\u7f51\u7edc\u63a5\u53e3\u548c\u5df2\u914d\u7f6e\u7684\u7f51\u7edc\u3002\u9009\u62e9\u8981\u8fde\u63a5\u7684\u65e0\u7ebf\u7f51\u7edc\u63a5\u53e3\u5e76\u6309\u56de\u8f66\u952e\u3002 armbian-config \u5c06\u663e\u793a\u53ef\u7528\u7684 Wi-Fi \u7f51\u7edc\u5217\u8868\u3002\u4f7f\u7528\u65b9\u5411\u952e\u9009\u62e9\u8981\u8fde\u63a5\u7684 Wi-Fi \u7f51\u7edc\u5e76\u6309\u56de\u8f66\u952e\u3002 \u5982\u679c Wi-Fi \u7f51\u7edc\u53d7\u5230\u5bc6\u7801\u4fdd\u62a4\uff0c armbian-config \u5c06\u63d0\u793a\u60a8\u8f93\u5165 Wi-Fi \u5bc6\u7801\u3002\u8f93\u5165\u5bc6\u7801\u5e76\u6309\u56de\u8f66\u952e\u3002 \u7b49\u5f85\u7247\u523b\uff0cArmbian \u7cfb\u7edf\u5c06\u5c1d\u8bd5\u8fde\u63a5\u5230\u6307\u5b9a\u7684 Wi-Fi \u7f51\u7edc\u3002\u5982\u679c\u8fde\u63a5\u6210\u529f\uff0c\u60a8\u5c06\u5728\u5c4f\u5e55\u4e0a\u770b\u5230\u76f8\u5e94\u7684\u6d88\u606f\u3002 \u9000\u51fa armbian-config \u5de5\u5177\u3002 \u8bf7\u6ce8\u610f\uff0c\u4e0a\u8ff0\u6b65\u9aa4\u4e2d\u7684\u83dc\u5355\u9009\u9879\u548c\u914d\u7f6e\u53ef\u80fd\u4f1a\u6839\u636e\u4e0d\u540c\u7248\u672c\u7684 Armbian \u7cfb\u7edf\u7565\u6709\u4e0d\u540c\u3002\u786e\u4fdd\u6839\u636e\u60a8\u7684\u7cfb\u7edf\u7248\u672c\u548c\u914d\u7f6e\u8fdb\u884c\u76f8\u5e94\u7684\u64cd\u4f5c\u3002","title":"Wifi\u914d\u7f6e"},{"location":"wifi/#wifi","text":"\u7531\u4e8eBLIKVM\u6709\u591a\u6b3e\u786c\u4ef6\uff0c\u652f\u6301\u4e0d\u540c\u7684OS\uff0c\u5982BLIKVM OS\u548cPiKVM OS\uff0c\u4e0d\u540cOS\u94fe\u63a5wifi\u65b9\u5f0f\u4e0d\u4e00\u5b9a\u76f8\u540c\uff0c\u8bf7\u5728\u4f7f\u7528\u672c\u6587\u6863\u65b9\u6cd5\u524d\uff0c\u8bf7\u786e\u8ba4\u81ea\u5df1\u786c\u4ef6\u548c\u4f7f\u7528OS\u7684\u60c5\u51b5\u3002 \u8bf7\u786e\u8ba4\u4f60\u4f7f\u7528\u7684\u786c\u4ef6\u652f\u6301wifi\u529f\u80fd\uff0c\u5982CM400200\u7248\u672c\u4e0d\u5e26wifi\u529f\u80fd\uff1b \u82e5KVM\u786c\u4ef6\u7684SOC\u4e3aCM4\uff0c\u8bf7\u786e\u8ba4\u662f\u5426\u8fde\u63a5\u4e86wifi\u5929\u7ebf\uff1b PiKVM OS\u4e3aarch linux\uff1b BLIKVM OS\u6811\u8393\u6d3e\u7cfb\u5217\u4e3adebian\u7cfb\u7edf\uff0cv4\u7cfb\u5217\u4e3aarmbian\u7cfb\u7edf\uff1b","title":"Wifi\u529f\u80fd"},{"location":"wifi/#v1v2v3debianraspi-configwifi","text":"\u767b\u5f55ssh,\u547d\u4ee4: ssh blikvm@ip \u7cfb\u7edf\u91cd\u52a0\u8f7d\u4e3a\u53ef\u5199, \u547d\u4ee4: rw \u542f\u52a8raspi-config, \u547d\u4ee4: sudo raspi-config \u9009\u62e9 System Options \u9009\u62e9 Wireless LAN \u9009\u62e9wifi\u6240\u5728\u56fd\u5bb6,\u4e2d\u56fd\u9009CN, \u5982\u679c\u4ee5\u524d\u8bbe\u7f6e\u8fc7,\u8fd9\u4e00\u6b65\u4f1a\u8df3\u8fc7\u76f4\u63a5\u52307 \u8f93\u5165Wi-Fi\u7684ssid(\u540d\u79f0) \u8f93\u5165Wi-Fi\u7684\u5bc6\u7801,\u5982\u679c\u6ca1\u6709\u5bc6\u7801\u76f4\u63a5\u56de\u8f66 \u8fd9\u65f6\u4f1a\u56de\u5230\u6b65\u9aa44\u7684\u754c\u9762,\u6309tab\u952e\u9009\u62e9 ,\u56de\u8f66 \u67e5\u770b\u662f\u5426\u8fde\u4e0awifi, \u547d\u4ee4: ifconfig wlan0 ,\u5982\u679c\u770b\u5230\u83b7\u53d6\u5230ip\u5c31\u662f\u5df2\u7ecf\u8fde\u4e0a\u4e86 \u5c06\u7cfb\u7edf\u6302\u8f7d\u4e3a\u53ea\u8bfb, \u547d\u4ee4: ro","title":"v1\uff0cv2\uff0cv3\u786c\u4ef6\u4f7f\u7528\u7684\u4e3a\u6811\u8393\u6d3edebian\u7cfb\u7edf\uff0c\u4f7f\u7528raspi-config\u8fdb\u884cwifi\u94fe\u63a5"},{"location":"wifi/#v4armbianarmbian-config","text":"\u767b\u5f55ssh,\u547d\u4ee4: ssh blikvm@ip\uff0c\u767b\u5f55\u5230 Armbian \u7cfb\u7edf\u3002 \u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\u4ee5\u542f\u52a8 armbian-config \u5de5\u5177\uff1a sudo armbian-config \u5728 armbian-config \u83dc\u5355\u4e2d\uff0c\u4f7f\u7528\u65b9\u5411\u952e\u548c\u56de\u8f66\u952e\u5bfc\u822a\u548c\u9009\u62e9\u9009\u9879\u3002 \u4f7f\u7528\u65b9\u5411\u952e\u5411\u4e0b\u6eda\u52a8\u5230 \"Network\" \u9009\u9879\uff0c\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165\u5b50\u83dc\u5355\u3002 \u5728 \"Network\" \u5b50\u83dc\u5355\u4e2d\uff0c\u9009\u62e9 \"Wireless\" \u9009\u9879\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165 Wi-Fi \u914d\u7f6e\u83dc\u5355\u3002 \u5728 Wi-Fi \u914d\u7f6e\u83dc\u5355\u4e2d\uff0c\u9009\u62e9 \"Connect to Wi-Fi\" \u9009\u9879\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165 Wi-Fi \u8fde\u63a5\u8bbe\u7f6e\u3002 armbian-config \u5c06\u5217\u51fa\u53ef\u7528\u7684\u65e0\u7ebf\u7f51\u7edc\u63a5\u53e3\u548c\u5df2\u914d\u7f6e\u7684\u7f51\u7edc\u3002\u9009\u62e9\u8981\u8fde\u63a5\u7684\u65e0\u7ebf\u7f51\u7edc\u63a5\u53e3\u5e76\u6309\u56de\u8f66\u952e\u3002 armbian-config \u5c06\u663e\u793a\u53ef\u7528\u7684 Wi-Fi \u7f51\u7edc\u5217\u8868\u3002\u4f7f\u7528\u65b9\u5411\u952e\u9009\u62e9\u8981\u8fde\u63a5\u7684 Wi-Fi \u7f51\u7edc\u5e76\u6309\u56de\u8f66\u952e\u3002 \u5982\u679c Wi-Fi \u7f51\u7edc\u53d7\u5230\u5bc6\u7801\u4fdd\u62a4\uff0c armbian-config \u5c06\u63d0\u793a\u60a8\u8f93\u5165 Wi-Fi \u5bc6\u7801\u3002\u8f93\u5165\u5bc6\u7801\u5e76\u6309\u56de\u8f66\u952e\u3002 \u7b49\u5f85\u7247\u523b\uff0cArmbian \u7cfb\u7edf\u5c06\u5c1d\u8bd5\u8fde\u63a5\u5230\u6307\u5b9a\u7684 Wi-Fi \u7f51\u7edc\u3002\u5982\u679c\u8fde\u63a5\u6210\u529f\uff0c\u60a8\u5c06\u5728\u5c4f\u5e55\u4e0a\u770b\u5230\u76f8\u5e94\u7684\u6d88\u606f\u3002 \u9000\u51fa armbian-config \u5de5\u5177\u3002 \u8bf7\u6ce8\u610f\uff0c\u4e0a\u8ff0\u6b65\u9aa4\u4e2d\u7684\u83dc\u5355\u9009\u9879\u548c\u914d\u7f6e\u53ef\u80fd\u4f1a\u6839\u636e\u4e0d\u540c\u7248\u672c\u7684 Armbian \u7cfb\u7edf\u7565\u6709\u4e0d\u540c\u3002\u786e\u4fdd\u6839\u636e\u60a8\u7684\u7cfb\u7edf\u7248\u672c\u548c\u914d\u7f6e\u8fdb\u884c\u76f8\u5e94\u7684\u64cd\u4f5c\u3002","title":"v4\u786c\u4ef6\u4f7f\u7528\u7684\u4e3aarmbian\u7cfb\u7edf\uff0c\u4f7f\u7528armbian-config"},{"location":"zerotier/","text":"ZeroTier VPN ZeroTier \u5141\u8bb8\u901a\u8fc7 NAT \u5728\u53cc\u65b9\u4e4b\u95f4\u5b89\u5168\u8bbf\u95ee\u60a8\u7684 BliKVM\u3002\u5b83\u5141\u8bb8\u60a8\u6784\u5efa\u51e0\u4e4e\u4efb\u4f55\u7c7b\u578b\u7684\u73b0\u4ee3\u3001\u5b89\u5168\u7684\u591a\u70b9\u865a\u62df\u5316\u7f51\u7edc\u3002\u672c\u6587\u63d0\u4f9b\u4e86\u4e00\u4e2a\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95ee\u60a8\u7684 BliKVM \u7684\u793a\u4f8b\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528 Tailscale \u6216\u5176\u4ed6 VPN \u89e3\u51b3\u65b9\u6848\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u672c\u793a\u4f8b\uff0c\u5982\u9700\u4efb\u4f55\u7279\u5b9a\u8bbe\u7f6e\u6216\u529f\u80fd\uff0c\u8bf7\u53c2\u9605 ZeroTier\u6587\u6863 \u3002 \u5728 BliKVM \u4e0a\u5b89\u88c5 ZeroTier \u9996\u5148\uff0c\u5728 ZeroTier \u4e0a\u51c6\u5907\u8d26\u6237\u548c VPN \u7f51\u7edc\uff0c\u5177\u4f53\u64cd\u4f5c\u8bf7\u53c2\u89c1\u8fd9\u91cc\uff1a \u521b\u5efa\u7f51\u7edc \uff0c\u4fdd\u5b58\u7f51\u7edc ID \u4ee5\u4f9b\u4ee5\u540e\u4f7f\u7528\u3002\u63a5\u4e0b\u6765\uff0c\u4f7f\u7528 SSH \u534f\u8bae\u8fde\u63a5\u5230 BliKVM \u7ec8\u7aef\uff0c\u5e76\u68c0\u67e5\u8bfb\u5199\u6743\u9650\u3002\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u5176\u8bbe\u7f6e\u4e3a\u53ef\u5199\u3002 \u73b0\u5728\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5 ZeroTier \u5ba2\u6237\u7aef\uff1a curl -s https://install.zerotier.com | sudo bash \u8bf7\u6ce8\u610f\uff0c\u5728\u67d0\u4e9b\u5730\u533a\uff0c\u5982\u4e2d\u56fd\uff0c\u76f4\u63a5\u4e0b\u8f7d ZeroTier \u53ef\u80fd\u4f1a\u53d7\u5230\u7f51\u7edc\u9650\u5236\u7684\u5f71\u54cd\u3002\u8bf7\u76f8\u5e94\u914d\u7f6e\u60a8\u7684\u7f51\u7edc\u3002 \u5c06 BliKVM \u6dfb\u52a0\u5230\u60a8\u7684 ZeroTier \u7f51\u7edc \u5728 BliKVM \u7ec8\u7aef\u4e0a\uff0c\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5c06 BliKVM \u6dfb\u52a0\u5230\u60a8\u7684 ZeroTier \u7f51\u7edc\uff08\u4f7f\u7528 ZeroTier \u7f51\u7edc ID\uff0c\u4f8b\u5982 d5e04297a16fa690\uff09\uff1a sudo zerotier-cli join d5e04297a16fa690 \u5982\u679c\u4e00\u5207\u987a\u5229\uff0c\u60a8\u53ef\u4ee5\u5728 BliKVM \u7ec8\u7aef\u4e0a\u8fd0\u884c ip addr show zerotier \u7f51\u7edc\u8bbe\u5907\uff08\u540d\u79f0\u4ee5 zt \u5f00\u5934\uff09\u4ee5\u67e5\u770b ZeroTier \u4e3a\u865a\u62df\u7f51\u7edc\u5206\u914d\u7684 IP \u5730\u5740\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u8f93\u51fa\uff1a 3: zt6ovrlscs: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether d6:e4:eb:ae:db:64 brd ff:ff:ff:ff:ff:ff inet 172.25.96.75/16 brd 172.25.255.255 scope global zt6ovrlscs valid_lft forever preferred_lft forever inet6 fe80::d4e4:ebff:feae:db64/64 scope link valid_lft forever preferred_lft forever IP \u5730\u5740\uff0c\u4f8b\u5982 172.25.96.75\uff0c\u53ef\u7528\u4e8e\u4ece\u4e3b\u673a\u673a\u5668\u8bbf\u95ee BliKVM Web \u754c\u9762\u3002 \u5728\u5ba2\u6237\u8ba1\u7b97\u673a\u4e0a\u5b89\u88c5 ZeroTier \u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\uff0c\u5728 ZeroTier \u7f51\u7ad9\u4e0a\u5b89\u88c5 ZeroTier \u5230\u63a7\u5236\u4e3b\u673a\u3002\u52a0\u5165\u60a8\u7684 ZeroTier \u7f51\u7edc ID\uff0c\u7136\u540e\u60a8\u53ef\u4ee5\u68c0\u67e5\u60a8\u7684\u7f51\u7edc\u9875\u9762\uff0c\u9a8c\u8bc1\u4e24\u53f0\u673a\u5668\u662f\u5426\u5728\u7ebf\u3002\u68c0\u67e5\u5b83\u4eec\u662f\u5426\u88ab\u6388\u6743\u8fde\u63a5\u5230\u7f51\u7edc\uff08Auth? \u5217\uff09\u3002\u4e00\u65e6\u5b83\u4eec\u5728\u7ebf\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u5730\u5740\u4ece\u63a7\u5236\u4e3b\u673a\u673a\u5668\u8bbf\u95ee BliKVM\uff1a http://","title":"Zerotier VPN"},{"location":"zerotier/#zerotier-vpn","text":"ZeroTier \u5141\u8bb8\u901a\u8fc7 NAT \u5728\u53cc\u65b9\u4e4b\u95f4\u5b89\u5168\u8bbf\u95ee\u60a8\u7684 BliKVM\u3002\u5b83\u5141\u8bb8\u60a8\u6784\u5efa\u51e0\u4e4e\u4efb\u4f55\u7c7b\u578b\u7684\u73b0\u4ee3\u3001\u5b89\u5168\u7684\u591a\u70b9\u865a\u62df\u5316\u7f51\u7edc\u3002\u672c\u6587\u63d0\u4f9b\u4e86\u4e00\u4e2a\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95ee\u60a8\u7684 BliKVM \u7684\u793a\u4f8b\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528 Tailscale \u6216\u5176\u4ed6 VPN \u89e3\u51b3\u65b9\u6848\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u672c\u793a\u4f8b\uff0c\u5982\u9700\u4efb\u4f55\u7279\u5b9a\u8bbe\u7f6e\u6216\u529f\u80fd\uff0c\u8bf7\u53c2\u9605 ZeroTier\u6587\u6863 \u3002","title":"ZeroTier VPN"},{"location":"zerotier/#blikvm-zerotier","text":"\u9996\u5148\uff0c\u5728 ZeroTier \u4e0a\u51c6\u5907\u8d26\u6237\u548c VPN \u7f51\u7edc\uff0c\u5177\u4f53\u64cd\u4f5c\u8bf7\u53c2\u89c1\u8fd9\u91cc\uff1a \u521b\u5efa\u7f51\u7edc \uff0c\u4fdd\u5b58\u7f51\u7edc ID \u4ee5\u4f9b\u4ee5\u540e\u4f7f\u7528\u3002\u63a5\u4e0b\u6765\uff0c\u4f7f\u7528 SSH \u534f\u8bae\u8fde\u63a5\u5230 BliKVM \u7ec8\u7aef\uff0c\u5e76\u68c0\u67e5\u8bfb\u5199\u6743\u9650\u3002\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u5176\u8bbe\u7f6e\u4e3a\u53ef\u5199\u3002 \u73b0\u5728\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5 ZeroTier \u5ba2\u6237\u7aef\uff1a curl -s https://install.zerotier.com | sudo bash \u8bf7\u6ce8\u610f\uff0c\u5728\u67d0\u4e9b\u5730\u533a\uff0c\u5982\u4e2d\u56fd\uff0c\u76f4\u63a5\u4e0b\u8f7d ZeroTier \u53ef\u80fd\u4f1a\u53d7\u5230\u7f51\u7edc\u9650\u5236\u7684\u5f71\u54cd\u3002\u8bf7\u76f8\u5e94\u914d\u7f6e\u60a8\u7684\u7f51\u7edc\u3002","title":"\u5728 BliKVM \u4e0a\u5b89\u88c5 ZeroTier"},{"location":"zerotier/#blikvm-zerotier_1","text":"\u5728 BliKVM \u7ec8\u7aef\u4e0a\uff0c\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5c06 BliKVM \u6dfb\u52a0\u5230\u60a8\u7684 ZeroTier \u7f51\u7edc\uff08\u4f7f\u7528 ZeroTier \u7f51\u7edc ID\uff0c\u4f8b\u5982 d5e04297a16fa690\uff09\uff1a sudo zerotier-cli join d5e04297a16fa690 \u5982\u679c\u4e00\u5207\u987a\u5229\uff0c\u60a8\u53ef\u4ee5\u5728 BliKVM \u7ec8\u7aef\u4e0a\u8fd0\u884c ip addr show zerotier \u7f51\u7edc\u8bbe\u5907\uff08\u540d\u79f0\u4ee5 zt \u5f00\u5934\uff09\u4ee5\u67e5\u770b ZeroTier \u4e3a\u865a\u62df\u7f51\u7edc\u5206\u914d\u7684 IP \u5730\u5740\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u8f93\u51fa\uff1a 3: zt6ovrlscs: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether d6:e4:eb:ae:db:64 brd ff:ff:ff:ff:ff:ff inet 172.25.96.75/16 brd 172.25.255.255 scope global zt6ovrlscs valid_lft forever preferred_lft forever inet6 fe80::d4e4:ebff:feae:db64/64 scope link valid_lft forever preferred_lft forever IP \u5730\u5740\uff0c\u4f8b\u5982 172.25.96.75\uff0c\u53ef\u7528\u4e8e\u4ece\u4e3b\u673a\u673a\u5668\u8bbf\u95ee BliKVM Web \u754c\u9762\u3002","title":"\u5c06 BliKVM \u6dfb\u52a0\u5230\u60a8\u7684 ZeroTier \u7f51\u7edc"},{"location":"zerotier/#zerotier","text":"\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\uff0c\u5728 ZeroTier \u7f51\u7ad9\u4e0a\u5b89\u88c5 ZeroTier \u5230\u63a7\u5236\u4e3b\u673a\u3002\u52a0\u5165\u60a8\u7684 ZeroTier \u7f51\u7edc ID\uff0c\u7136\u540e\u60a8\u53ef\u4ee5\u68c0\u67e5\u60a8\u7684\u7f51\u7edc\u9875\u9762\uff0c\u9a8c\u8bc1\u4e24\u53f0\u673a\u5668\u662f\u5426\u5728\u7ebf\u3002\u68c0\u67e5\u5b83\u4eec\u662f\u5426\u88ab\u6388\u6743\u8fde\u63a5\u5230\u7f51\u7edc\uff08Auth? \u5217\uff09\u3002\u4e00\u65e6\u5b83\u4eec\u5728\u7ebf\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u5730\u5740\u4ece\u63a7\u5236\u4e3b\u673a\u673a\u5668\u8bbf\u95ee BliKVM\uff1a http://","title":"\u5728\u5ba2\u6237\u8ba1\u7b97\u673a\u4e0a\u5b89\u88c5 ZeroTier"}]} \ No newline at end of file +{"config":{"indexing":"full","lang":["en","ja","ru"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"BLIKVM Overview BLIKVM\u662f\u4e00\u6b3e\u5f00\u6e90\u8f6f\u4ef6\u7684KVM\u4e13\u4e1a\u8bbe\u5907\uff0c\u76ee\u524d\u67094\u4e2a\u7248\u672c\uff0cv1 CM4, v2 PCIe, v3 HAT, v4 Allwinner\u3002\u8be5\u8bbe\u5907\u5728\u4e8e\u5e2e\u52a9\u7528\u6237\u901a\u8fc7\u5f97\u5230\u63a7\u5236\u8bbe\u5907\u7684HDMI \u753b\u9762\u548c\u9f20\u6807\u952e\u76d8\uff0c\u53bb\u8fdc\u7a0b\u7ba1\u7406\u670d\u52a1\u5668\u3001\u5de5\u4f5c\u7ad9\u6216\u4e2a\u4ebaPC\u7b49\u3002 \u65e0\u8bba\u76ee\u6807\u8bbe\u5907\u7684\u64cd\u4f5c\u7cfb\u7edf\u662f\u5426\u80fd\u6b63\u5e38\u8fd0\u884c\uff0c\u53ef\u4ee5\u901a\u8fc7BLIKVM\u89e3\u51b3\u76ee\u6807\u8bbe\u5907\u7684\u4e00\u5207\u95ee\u9898\u3002\u5982\uff1a\u914d\u7f6eBIOS\u7cfb\u7edf\uff0c\u901a\u8fc7\u4f7f\u7528\u8fdc\u7a0bCD-ROM\u6216\u8005\u95ea\u5b58\u9a71\u52a8\u5668\u7ed9\u76ee\u6807\u8bbe\u5907\u91cd\u65b0\u5b89\u88c5\u64cd\u4f5c\u7cfb\u7edf\u3002\u548c\u57fa\u4e8e\u8f6f\u4ef6\u7684\u8fdc\u7a0b\u7ba1\u7406\u65b9\u5f0f\u4e0d\u540c\uff0c\u4f60\u65e0\u9700\u5728\u88ab\u63a7\u7535\u8111\u5b89\u88c5\u4efb\u4f55\u8f6f\u4ef6\uff0c\u505a\u5230\u65e0\u4fb5\u5165\u5f0f\u63a7\u5236\u3002 \u5728\u8fd9\u91cc\u4f60\u53ef\u4ee5\u627e\u5230\u5173\u4e8eBLIKVM\u6240\u6709\u7684\u4f7f\u7528\u6587\u6863\u3002\u6b22\u8fce\u52a0\u5165BLIKVM\u7684 Discord \u7fa4\u7ec4\u548c\u6765\u81ea\u5168\u4e16\u754c\u7684\u7231\u597d\u8005\u548c\u7528\u6237\u8fdb\u884c\u4ea4\u6d41\uff0c\u83b7\u5f97\u6280\u672f\u652f\u6301\uff0c\u5e38\u89c1\u95ee\u9898\u89e3\u7b54\u548c\u65b0\u95fb\u7b49\u3002 \u529f\u80fd BliKVM v1 CM4 BliKVM v2 PCIe BliKVM v3 HAT BliKVM v4 H616/H313 SOC \u6811\u8393\u6d3eCM4 \u6811\u8393\u6d3eCM4 \u6811\u8393\u6d3e4B \u5168\u5fd7H616/H313 \u652f\u6301\u8f93\u5165\u7684\u6700\u9ad8\u5206\u8fa8\u7387 1920x1080@60Hz 1920x1080@60Hz 1920x1080@50Hz 3840x2160@30Hz HDMI\u91c7\u96c6\u82af\u7247 TC358743 TC358743 TC358743 MS2131 HDMI\u73af\u51fa \u65e0 \u65e0 \u65e0 \u6709 PoE\u4f9b\u7535 \u4e0d\u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 DC\u4f9b\u7535 \u4e0d\u652f\u6301 \u4e0d\u652f\u6301 \u4e0d\u652f\u6301 \u652f\u6301 USB-C\u4f9b\u7535 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 USB\u7535\u6e90/\u6570\u636e\u5206\u79bb\u5668 \u6709 \u6709(\u989d\u5916\u6a21\u5757) \u6709 \u6709 \u4e32\u53e3\u7ec8\u7aef \u4e0d\u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 ATX\u5f00\u5173\u673a\u63a7\u5236 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 BIOS\u63a7\u5236 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u7cfb\u7edf\u5f00\u6e90 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u91cd\u88c5\u88ab\u63a7\u7535\u8111\u7cfb\u7edf \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u98ce\u6247 \u6709(\u4e0d\u652f\u6301\u8c03\u901f) \u6709 \u6709 \u53ef\u914d(\u9ed8\u8ba4\u914d\u6563\u70ed\u7247) \u5c4f\u5e55\u79cd\u7c7b OLED 128x64 \u767d\u8272 OLED 128x64 \u767d\u8272 OLED 128x32 \u767d\u8272 LCD 240x240 \u5f69\u8272 RTC\u65f6\u949f \u6709(DS1307) \u6709(PCF8563) \u6709(PCF8563) \u6709(PCF8563) \u5916\u58f3 \u91d1\u5c5e\u9ed1 \u65e0 \u91d1\u5c5e\u9ed1\u84dd\u6a58\u767d(1U\u673a\u67b6\u517c\u5bb9) \u91d1\u5c5e\u9ed1(1U\u673a\u67b6\u517c\u5bb9) \u8702\u9e23\u5668 \u65e0 \u65e0 \u65e0 \u6709 \u81ea\u5b9a\u4e49\u6309\u94ae \u65e0 \u65e0 \u65e0 \u6709 \u8f6f\u4ef6\u5347\u7ea7 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 32GB SD\u5361 \u6709(\u542bOS) \u6709(\u542bOS) \u6709(\u542bOS) \u6709(\u542bOS) \u89e3\u51b3HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898 \u672a\u89e3\u51b3 \u5df2\u89e3\u51b3 \u5df2\u89e3\u51b3 \u5df2\u89e3\u51b3 \u4e13\u4e1a\u6280\u672f\u652f\u6301 \u6709 \u6709 \u6709 \u6709 \u529f\u80fd HDMI\u89c6\u9891\u91c7\u96c6 (\u6700\u9ad8\u652f\u63011080P 60Hz) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 ATX\u5f00\u5173\u673a PWM\u98ce\u6247\u63a7\u5236 \u5168\u5c4f\u6a21\u5f0f \u4ece\u526a\u8d34\u677f\u7c98\u8d34\u6587\u672c VPN\u7ec4\u7f51\u652f\u6301 \u5927\u5bb9\u91cf\u5b58\u50a8\u9a71\u52a8\u5668 (\u6a21\u62dfCD-ROM\u6216\u95ea\u5b58\u9a71\u52a8\u5668) \u8fdc\u7a0b\u63a7\u5236\u591a\u53f0\u4e3b\u673a\uff08\u901a\u8fc7\u642d\u914dKVM\u5207\u6362\u5668\uff09 OLED\u5c4f\u5e55\u663e\u793a\u7cfb\u7edf\u4fe1\u606f\uff08\u6e29\u5ea6\u3001IP\u5730\u5740\uff0c\u8fd0\u884c\u65f6\u95f4\u7b49\uff09 \u8d26\u53f7\u5bc6\u7801\u8ba4\u8bc1 Guide 1.BliKVM v1 CM4 \u7248\u672c 2.BliKVM v2 PCIe \u7248\u672c 3.BliKVM v3 HAT \u7248\u672c 4.BliKVM v4 Allwinner \u7248\u672c","title":"BliKVM\u4ecb\u7ecd"},{"location":"#blikvm-overview","text":"BLIKVM\u662f\u4e00\u6b3e\u5f00\u6e90\u8f6f\u4ef6\u7684KVM\u4e13\u4e1a\u8bbe\u5907\uff0c\u76ee\u524d\u67094\u4e2a\u7248\u672c\uff0cv1 CM4, v2 PCIe, v3 HAT, v4 Allwinner\u3002\u8be5\u8bbe\u5907\u5728\u4e8e\u5e2e\u52a9\u7528\u6237\u901a\u8fc7\u5f97\u5230\u63a7\u5236\u8bbe\u5907\u7684HDMI \u753b\u9762\u548c\u9f20\u6807\u952e\u76d8\uff0c\u53bb\u8fdc\u7a0b\u7ba1\u7406\u670d\u52a1\u5668\u3001\u5de5\u4f5c\u7ad9\u6216\u4e2a\u4ebaPC\u7b49\u3002 \u65e0\u8bba\u76ee\u6807\u8bbe\u5907\u7684\u64cd\u4f5c\u7cfb\u7edf\u662f\u5426\u80fd\u6b63\u5e38\u8fd0\u884c\uff0c\u53ef\u4ee5\u901a\u8fc7BLIKVM\u89e3\u51b3\u76ee\u6807\u8bbe\u5907\u7684\u4e00\u5207\u95ee\u9898\u3002\u5982\uff1a\u914d\u7f6eBIOS\u7cfb\u7edf\uff0c\u901a\u8fc7\u4f7f\u7528\u8fdc\u7a0bCD-ROM\u6216\u8005\u95ea\u5b58\u9a71\u52a8\u5668\u7ed9\u76ee\u6807\u8bbe\u5907\u91cd\u65b0\u5b89\u88c5\u64cd\u4f5c\u7cfb\u7edf\u3002\u548c\u57fa\u4e8e\u8f6f\u4ef6\u7684\u8fdc\u7a0b\u7ba1\u7406\u65b9\u5f0f\u4e0d\u540c\uff0c\u4f60\u65e0\u9700\u5728\u88ab\u63a7\u7535\u8111\u5b89\u88c5\u4efb\u4f55\u8f6f\u4ef6\uff0c\u505a\u5230\u65e0\u4fb5\u5165\u5f0f\u63a7\u5236\u3002 \u5728\u8fd9\u91cc\u4f60\u53ef\u4ee5\u627e\u5230\u5173\u4e8eBLIKVM\u6240\u6709\u7684\u4f7f\u7528\u6587\u6863\u3002\u6b22\u8fce\u52a0\u5165BLIKVM\u7684 Discord \u7fa4\u7ec4\u548c\u6765\u81ea\u5168\u4e16\u754c\u7684\u7231\u597d\u8005\u548c\u7528\u6237\u8fdb\u884c\u4ea4\u6d41\uff0c\u83b7\u5f97\u6280\u672f\u652f\u6301\uff0c\u5e38\u89c1\u95ee\u9898\u89e3\u7b54\u548c\u65b0\u95fb\u7b49\u3002 \u529f\u80fd BliKVM v1 CM4 BliKVM v2 PCIe BliKVM v3 HAT BliKVM v4 H616/H313 SOC \u6811\u8393\u6d3eCM4 \u6811\u8393\u6d3eCM4 \u6811\u8393\u6d3e4B \u5168\u5fd7H616/H313 \u652f\u6301\u8f93\u5165\u7684\u6700\u9ad8\u5206\u8fa8\u7387 1920x1080@60Hz 1920x1080@60Hz 1920x1080@50Hz 3840x2160@30Hz HDMI\u91c7\u96c6\u82af\u7247 TC358743 TC358743 TC358743 MS2131 HDMI\u73af\u51fa \u65e0 \u65e0 \u65e0 \u6709 PoE\u4f9b\u7535 \u4e0d\u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 DC\u4f9b\u7535 \u4e0d\u652f\u6301 \u4e0d\u652f\u6301 \u4e0d\u652f\u6301 \u652f\u6301 USB-C\u4f9b\u7535 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 USB\u7535\u6e90/\u6570\u636e\u5206\u79bb\u5668 \u6709 \u6709(\u989d\u5916\u6a21\u5757) \u6709 \u6709 \u4e32\u53e3\u7ec8\u7aef \u4e0d\u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 ATX\u5f00\u5173\u673a\u63a7\u5236 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 BIOS\u63a7\u5236 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u7cfb\u7edf\u5f00\u6e90 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u91cd\u88c5\u88ab\u63a7\u7535\u8111\u7cfb\u7edf \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u98ce\u6247 \u6709(\u4e0d\u652f\u6301\u8c03\u901f) \u6709 \u6709 \u53ef\u914d(\u9ed8\u8ba4\u914d\u6563\u70ed\u7247) \u5c4f\u5e55\u79cd\u7c7b OLED 128x64 \u767d\u8272 OLED 128x64 \u767d\u8272 OLED 128x32 \u767d\u8272 LCD 240x240 \u5f69\u8272 RTC\u65f6\u949f \u6709(DS1307) \u6709(PCF8563) \u6709(PCF8563) \u6709(PCF8563) \u5916\u58f3 \u91d1\u5c5e\u9ed1 \u65e0 \u91d1\u5c5e\u9ed1\u84dd\u6a58\u767d(1U\u673a\u67b6\u517c\u5bb9) \u91d1\u5c5e\u9ed1(1U\u673a\u67b6\u517c\u5bb9) \u8702\u9e23\u5668 \u65e0 \u65e0 \u65e0 \u6709 \u81ea\u5b9a\u4e49\u6309\u94ae \u65e0 \u65e0 \u65e0 \u6709 \u8f6f\u4ef6\u5347\u7ea7 \u652f\u6301 \u652f\u6301 \u652f\u6301 \u652f\u6301 32GB SD\u5361 \u6709(\u542bOS) \u6709(\u542bOS) \u6709(\u542bOS) \u6709(\u542bOS) \u89e3\u51b3HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898 \u672a\u89e3\u51b3 \u5df2\u89e3\u51b3 \u5df2\u89e3\u51b3 \u5df2\u89e3\u51b3 \u4e13\u4e1a\u6280\u672f\u652f\u6301 \u6709 \u6709 \u6709 \u6709","title":"BLIKVM Overview"},{"location":"#_1","text":"HDMI\u89c6\u9891\u91c7\u96c6 (\u6700\u9ad8\u652f\u63011080P 60Hz) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 ATX\u5f00\u5173\u673a PWM\u98ce\u6247\u63a7\u5236 \u5168\u5c4f\u6a21\u5f0f \u4ece\u526a\u8d34\u677f\u7c98\u8d34\u6587\u672c VPN\u7ec4\u7f51\u652f\u6301 \u5927\u5bb9\u91cf\u5b58\u50a8\u9a71\u52a8\u5668 (\u6a21\u62dfCD-ROM\u6216\u95ea\u5b58\u9a71\u52a8\u5668) \u8fdc\u7a0b\u63a7\u5236\u591a\u53f0\u4e3b\u673a\uff08\u901a\u8fc7\u642d\u914dKVM\u5207\u6362\u5668\uff09 OLED\u5c4f\u5e55\u663e\u793a\u7cfb\u7edf\u4fe1\u606f\uff08\u6e29\u5ea6\u3001IP\u5730\u5740\uff0c\u8fd0\u884c\u65f6\u95f4\u7b49\uff09 \u8d26\u53f7\u5bc6\u7801\u8ba4\u8bc1","title":"\u529f\u80fd"},{"location":"#guide","text":"1.BliKVM v1 CM4 \u7248\u672c 2.BliKVM v2 PCIe \u7248\u672c 3.BliKVM v3 HAT \u7248\u672c 4.BliKVM v4 Allwinner \u7248\u672c","title":"Guide"},{"location":"BLIHAT-Installation/","text":"BLIHAT \u5b89\u88c5\u8bf4\u660e 1.\u62c6\u5f00\u5305\u88c5\uff0c\u6253\u5f00\u888b\u5b50\uff0c\u62ff\u51fa\u8bbe\u5907 2.\u5b89\u88c5\u4e3b\u4f53\u8bbe\u5907 \u5378\u4e0b\u5916\u58f3\u80cc\u9762\u7684\u5982\u56fe\u4e2d\u6240\u793a\u7684\u87ba\u4e1d \u6253\u5f00\u5916\u58f3 \u5378\u4e0b\u80cc\u9762\u5269\u4e0b\u7684\u87ba\u4e1d \u6253\u5f00\u914d\u4ef6\u5305\uff0c\u62ff\u51fa\u56fe\u7247\u4e2d\u7684\u8bbe\u5907 \u5b89\u88c5SD\u5361 \u5b89\u88c5FFC\u7ebf\u7f06 \u5b89\u88c5Hat\u5230\u6811\u8393\u6d3e4B\u4e0a \u5b89\u88c54\u9897\u94dc\u67f1 \u5b89\u88c5C790\u6a21\u5757\u5230Hat\u4e0a\uff0c\u4f7f\u7528\u4f60\u5378\u4e0b\u6765\u7684\u957f\u87ba\u4e1d \u5b89\u88c5\u97f3\u9891\u7ebf\u7f06 \u6495\u53bb\u7845\u80f6\u7247\u4e0a\u7684\u4fdd\u62a4\u819c\uff0c\u5c06\u5176\u8d34\u5230\u6811\u8393\u6d3e\u5982\u56fe\u6240\u793a\u7684\u4f4d\u7f6e Install the HAT into the case Pay attention to the alignment of the holes Flip to back and install 4 screws Install five case screws Install the mounting ear as needed The main device installation is complete","title":"v3 HAT\u5b89\u88c5\u8bf4\u660e"},{"location":"BLIHAT-Installation/#blihat","text":"1.\u62c6\u5f00\u5305\u88c5\uff0c\u6253\u5f00\u888b\u5b50\uff0c\u62ff\u51fa\u8bbe\u5907 2.\u5b89\u88c5\u4e3b\u4f53\u8bbe\u5907 \u5378\u4e0b\u5916\u58f3\u80cc\u9762\u7684\u5982\u56fe\u4e2d\u6240\u793a\u7684\u87ba\u4e1d \u6253\u5f00\u5916\u58f3 \u5378\u4e0b\u80cc\u9762\u5269\u4e0b\u7684\u87ba\u4e1d \u6253\u5f00\u914d\u4ef6\u5305\uff0c\u62ff\u51fa\u56fe\u7247\u4e2d\u7684\u8bbe\u5907 \u5b89\u88c5SD\u5361 \u5b89\u88c5FFC\u7ebf\u7f06 \u5b89\u88c5Hat\u5230\u6811\u8393\u6d3e4B\u4e0a \u5b89\u88c54\u9897\u94dc\u67f1 \u5b89\u88c5C790\u6a21\u5757\u5230Hat\u4e0a\uff0c\u4f7f\u7528\u4f60\u5378\u4e0b\u6765\u7684\u957f\u87ba\u4e1d \u5b89\u88c5\u97f3\u9891\u7ebf\u7f06 \u6495\u53bb\u7845\u80f6\u7247\u4e0a\u7684\u4fdd\u62a4\u819c\uff0c\u5c06\u5176\u8d34\u5230\u6811\u8393\u6d3e\u5982\u56fe\u6240\u793a\u7684\u4f4d\u7f6e Install the HAT into the case Pay attention to the alignment of the holes Flip to back and install 4 screws Install five case screws Install the mounting ear as needed The main device installation is complete","title":"BLIHAT \u5b89\u88c5\u8bf4\u660e"},{"location":"BLIKVM-CM4-guide/","text":"BLIKVM v1 CM4\u4f7f\u7528\u8bf4\u660e BLIKVM CM4 v1\u8bc4\u6d4b\u89c6\u9891 BliKVM v1\u662f\u4e00\u6b3e\u751f\u4ea7\u5c31\u7eea\u3001\u5373\u63d2\u5373\u7528\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86\u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406\u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e\u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5\u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1\uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 BliKVM v1 Datasheet \u529f\u80fd\u7279\u70b9 \u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@60Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 WiFi \uff08\u53ef\u9009\uff09 OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) \u5b89\u88c5\u8981\u6c42 \u5982\u679c\u4f60\u8d2d\u4e70\u7684\u662f\u9700\u81ea\u5df1\u7ec4\u88c5\u7684\u7248\u672c\uff08\u4e0d\u662fplug-n-play\u7248\u672c\uff09\uff0c\u4f60\u9700\u8981\u81ea\u5df1\u51c6\u5907\u4ee5\u4e0b\u8bbe\u5907 \u6811\u8393\u6d3eCM4\uff0c\u6700\u5c0f1Gb RAM. USB-C\u8f6cUSB-A\u7ebf\u7f06. HDMI\u7ebf\u7f06. \u7f51\u7ebf. \u7535\u6e90\u9002\u914d\u5668(5.1V 3A USB-C). \u7535\u6e90\u9002\u914d\u5668 \u5728BLIKVM CM4 V2.2\u7248\u672c\u4e2d\uff0c\u4f60\u5fc5\u987b\u4f7f\u7528USB-C\u8f6cUSB-A\u7ebf\u7f06\u8fdb\u884c\u4f9b\u7535\uff0c\u5982\u679c\u4f7f\u7528USB-C\u8f6cUSB-C\u7ebf\u7f06\u53ef\u80fd\u65e0\u6cd5\u4f9b\u7535\u3002\u8fd9\u662f\u8fd9\u4e2a\u7248\u672c\u786c\u4ef6\u8bbe\u8ba1\u7684bug\uff0c\u5728\u5b83\u540e\u9762\u7684\u7248\u672c \u4e2d\u6b64\u95ee\u9898\u5c06\u4f1a\u88ab\u4fee\u590d\u3002 \u57fa\u7840\u914d\u7f6e 1. \u51fa\u5382\u9ed8\u8ba4\u914d\u7684SD\u5361\u5df2\u70e7\u5f55\u955c\u50cf\uff0c\u65e0\u9700\u70e7\u5f55\u3002\u82e5\u60a8\u9700\u8981\u91cd\u5237\u7cfb\u7edf\u6216\u8005DIY\uff0c\u53ef\u53c2\u8003 \u70e7\u5f55\u955c\u50cf\u5230SD\u5361\u6216\u8005eMMC 2. \u5982\u679c\u60a8\u4e0d\u662fplug\u7248\u672c,\u53c2\u8003\u4e0b\u9762\u7684\u89c6\u9891\u548c\u8bf4\u660e\u8fdb\u884c\u8bbe\u5907\u5b89\u88c5: 1. \u7528\u5305\u88f9\u914d\u7684\u87ba\u4e1d\u5200\u6253\u5f00\u91d1\u5c5e\u5916\u58f3\uff0c\u62c6\u4e0bPCB\u4e3b\u677f\uff1b 2. \u5c06CM4\u5b89\u88c5\u5728PCB\u4e3b\u677f\u4e0a\uff0c\u6ce8\u610f\u5b89\u88c5CM4\u65f6\u4e24\u6392\u5361\u69fd\u8981\u5bf9\u9f50\uff0c\u7136\u540e\u5c06\u7845\u80f6\u5bfc\u70ed\u7247\u8d34\u5728CM4\u4e3b\u82af\u7247\u4e0a\uff0c\u4ece\u800c\u53ef\u4ee5\u4f7fCM4\u5229\u7528\u91d1\u5c5e\u5916\u58f3\u6563\u70ed\uff1b 3. \u98ce\u6247\u9ed8\u8ba4\u4e0d\u63a5\uff0c\u5916\u58f3\u6563\u70ed\u8db3\u591f\uff0c\u6839\u636e\u60a8\u7684CM4\u7248\u672c\u9009\u62e9\u6027\u5b89\u88c5Wi-Fi\u5929\u7ebf; 4. \u91cd\u65b0\u5b89\u88c5\u597dPCB\u4e3b\u677f\u548c\u91d1\u5c5e\u5916\u58f3\uff0c\u5373\u5b89\u88c5\u5b8c\u6210. \u5b8c\u6574\u62c6\u7bb1\u548c\u5b89\u88c5\u89c6\u9891 Ortimo\u4f7f\u7528BLIKVM CM4 eMMC\u7248\u672c\u6307\u5bfc 3. \u6839\u636e\u4e0b\u56fe\u63a5\u53e3\u5b9a\u4e49\u6240\u793a\uff0c\u8fde\u63a5\u88ab\u63a7\u7535\u8111\u5230BLIKVM\u4e0a: HDMI IN\u548cotg\u63a5\u53e3\u5fc5\u987b\u548c\u88ab\u63a7\u7535\u8111\u8fde\u63a5\uff0cATX\u662f\u53ef\u9009\u9879\u3002\u5efa\u8bae\u5728BLIKVM\u548c\u88ab\u63a7\u7535\u8111\u4e4b\u95f4\u6700\u597d\u4e0d\u8981\u6709USB\u6269\u5c55\u575e\uff0c\u56e0\u4e3a\u5728UEFI\u6216BIOS\u9636\u6bb5\uff0c\u53ef\u80fd\u68c0\u6d4b\u4e0d\u5230\u6269\u5c55\u575e\u3002 BLIKVM CM4\u7248\u672c\u6700\u9ad8\u652f\u63011080P60Hz\u7684\u8f93\u5165\u3002 \u901a\u8fc7Ethernet\u5c06BLIKVM\u8fde\u63a5\u5230\u7f51\u7edc\uff0c\u901a\u8fc7PWR IN\u7aef\u53e3\u5de5\u4f9b\u7535\u3002 4. ATX\u7535\u6e90\u63a7\u5236\u8fde\u63a5 \u4e3a\u4e86\u7ba1\u7406\u88ab\u63a7\u8ba1\u7b97\u673a\u7684\u7535\u6e90\uff0c\u4f60\u9700\u8981\u5c06CN-ATX\u7aef\u53e3\u548c\u88ab\u63a7\u7535\u8111\u8fde\u63a5\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u63d0\u4f9b\u7684ATX\u7ebf\u7f06(60\u5398\u7c73)\u6216\u8005\u675c\u90a6\u7ebf\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111\u7684\u4e3b\u677f\u4e0a\u3002 \u4e3a\u4e86\u517c\u5bb9\u7f51\u53e3\u5f62\u5f0f\u7684ATX\u63a7\u5236\u677f\uff0cv1\u6709\u4e13\u95e8\u7684ATX\u6269\u5c55\u5305\uff0c\u65b9\u4fbf\u5ba2\u6237\u76f4\u63a5\u901a\u8fc7\u7f51\u7ebf\u548c\u5b89\u88c5\u5230\u673a\u7bb1\u6321\u677f\u7684ATX\u677f\u8fde\u63a5\u3002 5. \u5728\u6240\u6709\u8fde\u63a5\u7ebf\u8fde\u63a5\u597d\u540e,\u5bf9BliKVM\u8fdb\u884c\u4e0a\u7535\uff0c\u76f4\u5230\u663e\u793a\u5c4f\u51fa\u73b0\u753b\u9762\uff0c\u5373\u8bbe\u5907\u6b63\u5e38\u542f\u52a8\u3002 6. \u4ed4\u7ec6\u9605\u8bfb \u201c\u7b2c\u4e00\u6b65\u201d \u6307\u5357-\u5982\u4f55\u5728\u7f51\u7edc\u4e0a\u67e5\u627e\u8bbe\u5907\u3001\u5982\u4f55\u767b\u5f55\u3001\u66f4\u6539\u5bc6\u7801\u7b49\u7b49\u3002\u6309\u7167\u4e0a\u9762\u63cf\u8ff0\u7684\u6b65\u9aa4\u64cd\u4f5c\uff0c\u7136\u540e\u8fd4\u56de\u672c\u9875\u3002 \u7531\u4e8eBliKVM v1\u4e5f\u652f\u6301PiKVM OS\uff0c\u82e5\u4f60\u624b\u4e0a\u7684v1\u51fa\u5382OS\u4e3aPiKVM\uff0c\u5173\u4e8eweb\u4f7f\u7528\u8bf4\u660e\u8bf7 \u53c2\u8003\u6587\u6863 \u3002 7. \u5c1d\u8bd5\u4f7f\u7528 Web \u754c\u9762\u7ba1\u7406\u8ba1\u7b97\u673a\u7684 BliKVM\u3002 \u786e\u4fdd\u60a8\u53ef\u4ee5\u770b\u5230\u56fe\u50cf\u5e76\u4e14\u952e\u76d8\u548c\u9f20\u6807\u90fd\u6b63\u5e38\u5de5\u4f5c\u3002\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u67e5\u770b\u6211\u4eec\u7684 \u5e38\u89c1\u95ee\u9898 \uff08\u5b83\u975e\u5e38\u6709\u7528\uff09\u3002\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u8bf7\u5728\u6211\u4eec\u7684 Discord\u804a\u5929\u5ba4 \u5bfb\u6c42\u652f\u6301\u3002 8. \u60a8\u53ef\u4ee5\u67e5\u770bwiki\u5176\u4ed6\u7684\u9875\u9762\uff0c\u63a2\u7d22BliKVM\u7684\u66f4\u591a\u529f\u80fd\uff0c\u795d\u60a8\u73a9\u7684\u5f00\u5fc3\uff01 Wi-Fi\u5929\u7ebf\u8fde\u63a5 \u5982\u4f60\u7684CM4\u6709Wi-Fi\u529f\u80fd\uff0c\u62c6\u5f00v1\u7684\u91d1\u5c5e\u76d2\u5b50\uff0c\u8bf7\u5c06\u5305\u88f9\u4e2d\u7684Wi-Fi\u5929\u7ebf\uff0c\u5b89\u88c5\u5230CM4\u7684IPX\u63a5\u53e3\uff0c\u5373\u4e0b\u56fe\u4e2d\u7ea2\u6846\u7684\u63a5\u53e3\uff1b\u5176\u4e2d\u5916\u58f3\u5b89\u88c5\u5929\u7ebf\u4f4d\u7f6e\u4e3a\u63a5\u53e3\u5b9a\u4e49\u56fe\u4e2d\u768411\u5904\u3002 \u652f\u6301 1080p60hz HDMI\u8f93\u5165 \u5728V2.2\u7248\u672c\u4e2d\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2aCSI\u901a\u9053\u5207\u6362\u5668\u3002\u786e\u8ba4\u5207\u6362\u5668\u57284\u901a\u9053\u4e00\u4fa7\u3002\u518d\u5176\u5b83\u7248\u672c\u4e2d\uff0c\u79fb\u9664\u4e86\u6b64\u5207\u6362\u5668\uff0c\u9ed8\u8ba44\u901a\u9053\u5168\u90e8\u4f7f\u80fd\u3002 \u53d1\u8d27\u6e05\u5355 BLIKVM v1 \u4e0d\u542b CM4 \u5916\u58f3 1 PCB\u4e3b\u677f 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 OLED\u5c4f\u5e55 1 BLIKVM v1\u542b CM4102000 \u5916\u58f3 1 PCB\u4e3b\u677f 1 CM4102000 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 OLED\u5c4f\u5e55 1 WiFi\u5929\u7ebf 1 BLIKVM v1 \u542b CM4002000 \u5916\u58f3 1 PCB\u4e3b\u677f 1 CM4002000 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 WiFi\u5929\u7ebf 1 \u8d2d\u4e70\u94fe\u63a5 v1\u6dd8\u5b9d\u5730\u5740","title":"BliKVM v1 CM4\u5bfc\u89c8"},{"location":"BLIKVM-CM4-guide/#blikvm-v1-cm4","text":"BLIKVM CM4 v1\u8bc4\u6d4b\u89c6\u9891 BliKVM v1\u662f\u4e00\u6b3e\u751f\u4ea7\u5c31\u7eea\u3001\u5373\u63d2\u5373\u7528\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86\u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406\u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e\u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5\u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1\uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 BliKVM v1 Datasheet","title":"BLIKVM v1 CM4\u4f7f\u7528\u8bf4\u660e"},{"location":"BLIKVM-CM4-guide/#_1","text":"\u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@60Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 WiFi \uff08\u53ef\u9009\uff09 OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC)","title":"\u529f\u80fd\u7279\u70b9"},{"location":"BLIKVM-CM4-guide/#_2","text":"\u5982\u679c\u4f60\u8d2d\u4e70\u7684\u662f\u9700\u81ea\u5df1\u7ec4\u88c5\u7684\u7248\u672c\uff08\u4e0d\u662fplug-n-play\u7248\u672c\uff09\uff0c\u4f60\u9700\u8981\u81ea\u5df1\u51c6\u5907\u4ee5\u4e0b\u8bbe\u5907 \u6811\u8393\u6d3eCM4\uff0c\u6700\u5c0f1Gb RAM. USB-C\u8f6cUSB-A\u7ebf\u7f06. HDMI\u7ebf\u7f06. \u7f51\u7ebf. \u7535\u6e90\u9002\u914d\u5668(5.1V 3A USB-C). \u7535\u6e90\u9002\u914d\u5668 \u5728BLIKVM CM4 V2.2\u7248\u672c\u4e2d\uff0c\u4f60\u5fc5\u987b\u4f7f\u7528USB-C\u8f6cUSB-A\u7ebf\u7f06\u8fdb\u884c\u4f9b\u7535\uff0c\u5982\u679c\u4f7f\u7528USB-C\u8f6cUSB-C\u7ebf\u7f06\u53ef\u80fd\u65e0\u6cd5\u4f9b\u7535\u3002\u8fd9\u662f\u8fd9\u4e2a\u7248\u672c\u786c\u4ef6\u8bbe\u8ba1\u7684bug\uff0c\u5728\u5b83\u540e\u9762\u7684\u7248\u672c \u4e2d\u6b64\u95ee\u9898\u5c06\u4f1a\u88ab\u4fee\u590d\u3002","title":"\u5b89\u88c5\u8981\u6c42"},{"location":"BLIKVM-CM4-guide/#_3","text":"1. \u51fa\u5382\u9ed8\u8ba4\u914d\u7684SD\u5361\u5df2\u70e7\u5f55\u955c\u50cf\uff0c\u65e0\u9700\u70e7\u5f55\u3002\u82e5\u60a8\u9700\u8981\u91cd\u5237\u7cfb\u7edf\u6216\u8005DIY\uff0c\u53ef\u53c2\u8003 \u70e7\u5f55\u955c\u50cf\u5230SD\u5361\u6216\u8005eMMC 2. \u5982\u679c\u60a8\u4e0d\u662fplug\u7248\u672c,\u53c2\u8003\u4e0b\u9762\u7684\u89c6\u9891\u548c\u8bf4\u660e\u8fdb\u884c\u8bbe\u5907\u5b89\u88c5: 1. \u7528\u5305\u88f9\u914d\u7684\u87ba\u4e1d\u5200\u6253\u5f00\u91d1\u5c5e\u5916\u58f3\uff0c\u62c6\u4e0bPCB\u4e3b\u677f\uff1b 2. \u5c06CM4\u5b89\u88c5\u5728PCB\u4e3b\u677f\u4e0a\uff0c\u6ce8\u610f\u5b89\u88c5CM4\u65f6\u4e24\u6392\u5361\u69fd\u8981\u5bf9\u9f50\uff0c\u7136\u540e\u5c06\u7845\u80f6\u5bfc\u70ed\u7247\u8d34\u5728CM4\u4e3b\u82af\u7247\u4e0a\uff0c\u4ece\u800c\u53ef\u4ee5\u4f7fCM4\u5229\u7528\u91d1\u5c5e\u5916\u58f3\u6563\u70ed\uff1b 3. \u98ce\u6247\u9ed8\u8ba4\u4e0d\u63a5\uff0c\u5916\u58f3\u6563\u70ed\u8db3\u591f\uff0c\u6839\u636e\u60a8\u7684CM4\u7248\u672c\u9009\u62e9\u6027\u5b89\u88c5Wi-Fi\u5929\u7ebf; 4. \u91cd\u65b0\u5b89\u88c5\u597dPCB\u4e3b\u677f\u548c\u91d1\u5c5e\u5916\u58f3\uff0c\u5373\u5b89\u88c5\u5b8c\u6210. \u5b8c\u6574\u62c6\u7bb1\u548c\u5b89\u88c5\u89c6\u9891 Ortimo\u4f7f\u7528BLIKVM CM4 eMMC\u7248\u672c\u6307\u5bfc 3. \u6839\u636e\u4e0b\u56fe\u63a5\u53e3\u5b9a\u4e49\u6240\u793a\uff0c\u8fde\u63a5\u88ab\u63a7\u7535\u8111\u5230BLIKVM\u4e0a: HDMI IN\u548cotg\u63a5\u53e3\u5fc5\u987b\u548c\u88ab\u63a7\u7535\u8111\u8fde\u63a5\uff0cATX\u662f\u53ef\u9009\u9879\u3002\u5efa\u8bae\u5728BLIKVM\u548c\u88ab\u63a7\u7535\u8111\u4e4b\u95f4\u6700\u597d\u4e0d\u8981\u6709USB\u6269\u5c55\u575e\uff0c\u56e0\u4e3a\u5728UEFI\u6216BIOS\u9636\u6bb5\uff0c\u53ef\u80fd\u68c0\u6d4b\u4e0d\u5230\u6269\u5c55\u575e\u3002 BLIKVM CM4\u7248\u672c\u6700\u9ad8\u652f\u63011080P60Hz\u7684\u8f93\u5165\u3002 \u901a\u8fc7Ethernet\u5c06BLIKVM\u8fde\u63a5\u5230\u7f51\u7edc\uff0c\u901a\u8fc7PWR IN\u7aef\u53e3\u5de5\u4f9b\u7535\u3002 4. ATX\u7535\u6e90\u63a7\u5236\u8fde\u63a5 \u4e3a\u4e86\u7ba1\u7406\u88ab\u63a7\u8ba1\u7b97\u673a\u7684\u7535\u6e90\uff0c\u4f60\u9700\u8981\u5c06CN-ATX\u7aef\u53e3\u548c\u88ab\u63a7\u7535\u8111\u8fde\u63a5\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u63d0\u4f9b\u7684ATX\u7ebf\u7f06(60\u5398\u7c73)\u6216\u8005\u675c\u90a6\u7ebf\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111\u7684\u4e3b\u677f\u4e0a\u3002 \u4e3a\u4e86\u517c\u5bb9\u7f51\u53e3\u5f62\u5f0f\u7684ATX\u63a7\u5236\u677f\uff0cv1\u6709\u4e13\u95e8\u7684ATX\u6269\u5c55\u5305\uff0c\u65b9\u4fbf\u5ba2\u6237\u76f4\u63a5\u901a\u8fc7\u7f51\u7ebf\u548c\u5b89\u88c5\u5230\u673a\u7bb1\u6321\u677f\u7684ATX\u677f\u8fde\u63a5\u3002 5. \u5728\u6240\u6709\u8fde\u63a5\u7ebf\u8fde\u63a5\u597d\u540e,\u5bf9BliKVM\u8fdb\u884c\u4e0a\u7535\uff0c\u76f4\u5230\u663e\u793a\u5c4f\u51fa\u73b0\u753b\u9762\uff0c\u5373\u8bbe\u5907\u6b63\u5e38\u542f\u52a8\u3002 6. \u4ed4\u7ec6\u9605\u8bfb \u201c\u7b2c\u4e00\u6b65\u201d \u6307\u5357-\u5982\u4f55\u5728\u7f51\u7edc\u4e0a\u67e5\u627e\u8bbe\u5907\u3001\u5982\u4f55\u767b\u5f55\u3001\u66f4\u6539\u5bc6\u7801\u7b49\u7b49\u3002\u6309\u7167\u4e0a\u9762\u63cf\u8ff0\u7684\u6b65\u9aa4\u64cd\u4f5c\uff0c\u7136\u540e\u8fd4\u56de\u672c\u9875\u3002 \u7531\u4e8eBliKVM v1\u4e5f\u652f\u6301PiKVM OS\uff0c\u82e5\u4f60\u624b\u4e0a\u7684v1\u51fa\u5382OS\u4e3aPiKVM\uff0c\u5173\u4e8eweb\u4f7f\u7528\u8bf4\u660e\u8bf7 \u53c2\u8003\u6587\u6863 \u3002 7. \u5c1d\u8bd5\u4f7f\u7528 Web \u754c\u9762\u7ba1\u7406\u8ba1\u7b97\u673a\u7684 BliKVM\u3002 \u786e\u4fdd\u60a8\u53ef\u4ee5\u770b\u5230\u56fe\u50cf\u5e76\u4e14\u952e\u76d8\u548c\u9f20\u6807\u90fd\u6b63\u5e38\u5de5\u4f5c\u3002\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u67e5\u770b\u6211\u4eec\u7684 \u5e38\u89c1\u95ee\u9898 \uff08\u5b83\u975e\u5e38\u6709\u7528\uff09\u3002\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u8bf7\u5728\u6211\u4eec\u7684 Discord\u804a\u5929\u5ba4 \u5bfb\u6c42\u652f\u6301\u3002 8. \u60a8\u53ef\u4ee5\u67e5\u770bwiki\u5176\u4ed6\u7684\u9875\u9762\uff0c\u63a2\u7d22BliKVM\u7684\u66f4\u591a\u529f\u80fd\uff0c\u795d\u60a8\u73a9\u7684\u5f00\u5fc3\uff01","title":"\u57fa\u7840\u914d\u7f6e"},{"location":"BLIKVM-CM4-guide/#wi-fi","text":"\u5982\u4f60\u7684CM4\u6709Wi-Fi\u529f\u80fd\uff0c\u62c6\u5f00v1\u7684\u91d1\u5c5e\u76d2\u5b50\uff0c\u8bf7\u5c06\u5305\u88f9\u4e2d\u7684Wi-Fi\u5929\u7ebf\uff0c\u5b89\u88c5\u5230CM4\u7684IPX\u63a5\u53e3\uff0c\u5373\u4e0b\u56fe\u4e2d\u7ea2\u6846\u7684\u63a5\u53e3\uff1b\u5176\u4e2d\u5916\u58f3\u5b89\u88c5\u5929\u7ebf\u4f4d\u7f6e\u4e3a\u63a5\u53e3\u5b9a\u4e49\u56fe\u4e2d\u768411\u5904\u3002","title":"Wi-Fi\u5929\u7ebf\u8fde\u63a5"},{"location":"BLIKVM-CM4-guide/#1080p60hz-hdmi","text":"\u5728V2.2\u7248\u672c\u4e2d\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2aCSI\u901a\u9053\u5207\u6362\u5668\u3002\u786e\u8ba4\u5207\u6362\u5668\u57284\u901a\u9053\u4e00\u4fa7\u3002\u518d\u5176\u5b83\u7248\u672c\u4e2d\uff0c\u79fb\u9664\u4e86\u6b64\u5207\u6362\u5668\uff0c\u9ed8\u8ba44\u901a\u9053\u5168\u90e8\u4f7f\u80fd\u3002","title":"\u652f\u6301 1080p60hz HDMI\u8f93\u5165"},{"location":"BLIKVM-CM4-guide/#_4","text":"BLIKVM v1 \u4e0d\u542b CM4 \u5916\u58f3 1 PCB\u4e3b\u677f 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 OLED\u5c4f\u5e55 1 BLIKVM v1\u542b CM4102000 \u5916\u58f3 1 PCB\u4e3b\u677f 1 CM4102000 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 OLED\u5c4f\u5e55 1 WiFi\u5929\u7ebf 1 BLIKVM v1 \u542b CM4002000 \u5916\u58f3 1 PCB\u4e3b\u677f 1 CM4002000 1 \u98ce\u6247 1 SD\u5361 32G 1 ATX\u675c\u90a6\u7ebf\u7f06 1 WiFi\u5929\u7ebf 1","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"BLIKVM-CM4-guide/#_5","text":"v1\u6dd8\u5b9d\u5730\u5740","title":"\u8d2d\u4e70\u94fe\u63a5"},{"location":"BLIKVM-HAT-guide/","text":"BliKVM Hat \u4f7f\u7528\u8bf4\u660e \u4ecb\u7ecd BliKVM Hat 360\u5ea6 \u89c6\u9891 BliKVM Hat\u7248\u672c\u662f\u57fa\u4e8e\u6811\u8393\u6d3e4B\u5236\u4f5c\u7684\u4e00\u6b3e\u786c\u4ef6\uff0c\u7528\u4e8eKVM Over IP\u3002Hat\u5173\u952e\u529f\u80fd\u5305\u62ecHDMI\u89c6\u9891\u6355\u83b7\u3001ATX\u63a7\u5236\u3001PoE\u4f9b\u7535\u3001OLED\u5c4f\u5e55\u663e\u793a\u3001RTC\u65f6\u949f\u3002 Hat\u914d\u6709\u91d1\u5c5e\u5916\u58f3\uff0c\u7528\u4e8e\u4fdd\u62a4\u548c\u6563\u70ed\u3002Hat\u53ef\u4ee5\u88ab\u5b89\u88c5\u52301U\u7684\u673a\u67b6\u3002\u540c\u65f6\u652f\u6301blikvm\u955c\u50cf\u548cpikvm\u955c\u50cf\u3002 \u5b89\u88c5\u8981\u6c42 \u5982\u679c\u4f60\u8d2d\u4e70\u7684\u53ea\u662f\u4e00\u4e2aHat\uff0c\u4f60\u8fd8\u9700\u8981\u4e0b\u9762\u8bbe\u5907 \u6811\u8393\u6d3e4B\uff0c1GB RAM\u6216\u8005\u66f4\u591a MicroSD card (\u63a8\u8350\u6700\u5c1116Gb, class 10). HDMI \u7ebf\u7f06. \u7f51\u7ebf (\u7528\u4e8eHat\u548cATX\u7684\u8fde\u63a5). \u7535\u6e90\u9002\u914d\u5668\u548c\u7ebf\u7f06(5.1V 3A USB-C). \u529f\u80fd \u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@50Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE \u4f9b\u7535 \u652f\u6301\u4e32\u53e3\u7ec8\u7aef OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) PWM\u98ce\u6247 \u57fa\u7840\u8bbe\u7f6e 1. \u70e7\u5f55\u955c\u50cf 2.\u7ec4\u88c5Hat \u53c2\u8003\u4e0b\u9762\u7684\u89c6\u9891\u8bf4\u660e\u6216\u8005\u53c2\u8003 \u56fe\u6587\u8bf4\u660e : Hat \u89c6\u9891\u5b89\u88c5\u5bfc\u89c8: \u624b\u628a\u624b\u6559\u4f60\u5982\u4f55\u7ec4\u88c5Hat\u5230\u6811\u8393\u6d3e\u4e0a 3. \u5b89\u88c5 ATX \u6a21\u5757 ATX\u6a21\u5757\u914d\u6709\u4e00\u4e2a\u5168\u9ad8\u6216\u8005\u534a\u9ad8\u7684PCIe\u6321\u677f\uff0c\u4f60\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u9009\u62e9\u5b89\u88c5 \u4f7f\u7528\u675c\u90a6\u7ebf\u8fde\u63a5ATX\u6a21\u5757\u548c\u673a\u7bb1\u91cc\u7684\u4e3b\u677f\uff0cATX\u6a21\u5757\u4e0a\u90fd\u6709\u6e05\u6670\u7684\u5f15\u811a\u5b9a\u4e49\u65b9\u4fbf\u4f60\u8fde\u63a5 \u5c06ATX\u6a21\u5757\u5b89\u88c5\u5230\u673a\u7bb1\u5916\u58f3\u4e0a \u4f7f\u7528RJ45\u7684\u7f51\u7ebf\u8fde\u63a5ATX\u548cHat 4. \u8fde\u63a5HDMI\u7ebf\u7f06 \u4f7f\u7528HDMI\u7ebf\u7f06\uff0c\u5c06\u88ab\u63a7\u7535\u8111\u7684HDMI\u548cHat\u7684HDMI IN\u7aef\u53e3\u8fde\u63a5\u3002HDMI\u6a21\u62df\u5668\u4e0d\u662f\u5fc5\u987b\u4f7f\u7528\u7684\uff0c\u5f53\u4f60\u7684\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8f93\u51fa\u753b\u9762\u65f6\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528HDMI\u6a21\u62df\u5668\u6765\u6821\u6b63\u7535\u8111\u7684HDMI\u8f93\u51fa 5. \u5b89\u88c5USB\u7ebf\u7f06 \u8bf7\u6ce8\u610f\u8fd9\u91cc\u4f7f\u7528USB\u5206\u7535\u677f\u4e0d\u662f\u5fc5\u987b\u7684\uff0c\u5982\u679c\u4f60\u4f7f\u7528PoE\u4f9b\u7535\u4e0d\u9700\u8981\u4f7f\u7528\u6b64\u6a21\u5757\uff0c\u5982\u679c\u4f60\u9700\u8981\u4f7f\u7528USB\u4f9b\u7535\u5219\u9700\u8981\u3002\u901a\u8fc7USB-C\u7ebf\u8fde\u63a5\u6811\u8393\u6d3e4B\u7684TYPE-C\u53e3\u5230\u5206\u7535\u677f\u7684RPI4\u7aef\u53e3 \u8fde\u63a5\u5206\u7535\u677f\u4e0a\u7684USB\u7aef\u53e3\u5230\u88ab\u63a7\u7535\u8111 \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u8bf7\u6ce8\u610f\u4e0d\u9700\u8981\u5728\u4f7f\u7528USB\u4f9b\u7535\u8bbe\u5907\u3002\u5f53\u4e0d\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u63a8\u8350\u4f7f\u75285V/3A\u7684\u7535\u6e90\u9002\u914d\u5668\u5230\u5206\u7535\u677f\u7684PWR\u7aef\u53e3 6. \u6d4b\u8bd5 \u56fe\u4e2d\u901a\u8fc7PoE\u4f9b\u7535\uff0cHat\u901a\u8fc7\u7f51\u7ebf\u8fde\u63a5\u5230\u7f51\u7edc\u4e2d OLED\u5c4f\u5e55\u5c06\u4f1a\u6b63\u5e38\u663e\u793a\u8bbe\u5907\u7684\u5de5\u4f5c\u72b6\u6001\uff0c\u5305\u62ec\u8bbe\u5907\u7684IP\u5730\u5740 \u6253\u5f00\u6d4f\u89c8\u5668\uff0c\u8f93\u5165\u8bbe\u5907\u7684IP\u5730\u5740\uff0c\u5373\u53ef\u6253\u5f00\u63a7\u5236\u7684WEB\u754c\u9762\uff0c\u73b0\u5728\u53bb\u4f7f\u7528\u5b83\u5427\uff01 \u6027\u80fd\u53c2\u6570 HDMI \u8f93\u5165 \u4f7f\u7528Toshiba TC358743\u4e3aHDMI\u8f6c\u6362\u7684\u4e3b\u82af\u7247\uff0c\u540c\u65f6\u652f\u6301\u89c6\u9891\u548c\u58f0\u97f3\u7684\u91c7\u96c6\uff0c\u652f\u6301\u89c6\u9891\u6700\u9ad8\u8f93\u5165\u4e3a1080P50Hz.\u89e3\u51b3\u4e86HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898\u3002 CN-ATX CN-ATX\u63a5\u53e3\u901a\u8fc7\u7f51\u7ebf\u8fde\u63a5ATX\u6a21\u5757\uff0c\u7528\u6765\u63a7\u5236\u88ab\u63a7\u7535\u8111\u7684\u5f00\u673a\u3001\u5173\u673a\u3001\u548c\u91cd\u542f\u64cd\u4f5c\u3002 \u663e\u793a\u5c4f \u914d\u6709\u767d\u8272\u7684\u663e\u793a\u5c4f\uff0c\u5206\u8fa8\u7387\u4e3a128x32\uff0c\u4f7f\u7528\u82af\u7247\u4e3aSSD1306\u3002\u663e\u793a\u5c4f\u4f1a\u663e\u793a\u5982\u6e29\u5ea6\u3001IP\u5730\u5740\u7b49\u6811\u8393\u6d3e\u7684\u4fe1\u606f\u3002 PoE \u6807\u51c6: IEEE 802.3af PoE \u8f93\u5165\u7535\u538b: 37-57 V DC \u8f93\u51fa\u7535\u538b: 5 V DC/2.4 A \u4f7f\u7528PoE\u6a21\u5757\u4f9b\u7535\uff0c\u9700\u8981\u5c06Hat\u4e0a\u7684PoE\u7684\u5f15\u811a\u4f7f\u7528\u8df3\u7ebf\u5e3d\u77ed\u63a5\u3002 \u98ce\u6247 \u98ce\u6247\u9ed8\u8ba4\u4f7f\u7528\u6811\u8393\u6d3e\u4e0a\u7684GPIO12\u63a7\u5236\u3002 RTC\u65f6\u949f RTC\u65f6\u949f\u4e3b\u82af\u7247\u4e3aPCF8563\uff0c\u901a\u8fc7I2C\u548c\u6811\u8393\u6d3e\u8fde\u63a5\u3002\u542f\u7528RTC\u65f6\u949f\u5de5\u4f5c\u7684\u7ebd\u6263\u7535\u6c60\u5b89\u88c5\u4f4d\u7f6e\u5728HDMI-IN\u6a21\u5757\u7684\u4e0b\u9762\u3002 \u914d\u4ef6 ATX\u6a21\u5757 ATX\u6a21\u5757\u901a\u8fc7\u675c\u90a6\u7ebf\u548c\u7535\u8111\u7684\u4e3b\u677f\u8fde\u63a5\u3002ATX\u6a21\u5757\u914d\u6709\u5168\u9ad8\u548c\u534a\u9ad8\u7684PCIe\u6321\u677f\u3002 USB/PWR \u5206\u7535\u677f RPI4\u7aef\u53e3\u7528\u4e8e\u8fde\u63a5\u5230\u6811\u8393\u6d3e4B. USB\u7aef\u53e3\u7528\u4e8e\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111. \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u4e0d\u9700\u8981\u4f7f\u7528\u5206\u7535\u677f. HDMI\u6a21\u62df\u5668 \u5982\u679c\u88ab\u63a7\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8f93\u51fa\u753b\u9762\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u6b64\u6a21\u5757\u6765\u89e3\u51b3\u3002\u5c06\u6b64\u6a21\u5757\u8fde\u63a5\u5230Hat\u4e0a\u540e\uff0c\u518d\u901a\u8fc7HDMI\u7ebf\u7f06\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111\u3002 \u91d1\u5c5e\u5916\u58f3 \u91d1\u5c5e\u5916\u58f3\u53ef\u4ee5\u4fdd\u62a4Hat\u548c\u7528\u4e8e\u6563\u70ed.\u5916\u58f3\u4e0a\u6bcf\u4e2a\u7aef\u53e3\u6709\u6e05\u6670\u7684\u4e1d\u5370\u6765\u8868\u793a\u6b64\u7aef\u53e3\u7528\u9014\u3002\u6b64\u5916\u58f3\u53ef\u4ee5\u65b9\u4fbf\u7684\u5b89\u88c5\u57281U\u7684\u673a\u67b6\u4e0a\u3002 List Product List BliKVM Hat \u6a21\u5757 1 ATX \u6a21\u5757 1 USB/PWR \u5206\u7535\u677f 1 HDMI\u6a21\u62df\u5668 1 \u91d1\u5c5e\u5916\u58f3 1 32G TF \u5361 1 USB Type-C \u8f6c USB Type-C \u7ebf\u7f06 30cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 \u5341\u5b57\u6273\u624b\u5957\u7b52 1 \u7528\u6237\u9700\u8981\u51c6\u5907\u8bbe\u5907\u7684\u6e05\u5355 \u6811\u8393\u6d3e4B 1 RJ45 \u7f51\u7ebf 2 USB Type-A \u8f6c USB Type-C \u7ebf\u7f06 2 HDMI \u7ebf\u7f06 1 PoE\u4f9b\u7535\u8bbe\u5907 or 5V/3A USB \u7535\u6e90\u9002\u914d\u5668 1 CR1220\u7ebd\u6263\u7535\u6c60 1 \u8d2d\u4e70\u94fe\u63a5 v3\u6dd8\u5b9d\u5730\u5740","title":"BliKVM v3 HAT\u5bfc\u89c8"},{"location":"BLIKVM-HAT-guide/#blikvm-hat","text":"","title":"BliKVM Hat \u4f7f\u7528\u8bf4\u660e"},{"location":"BLIKVM-HAT-guide/#_1","text":"BliKVM Hat 360\u5ea6 \u89c6\u9891 BliKVM Hat\u7248\u672c\u662f\u57fa\u4e8e\u6811\u8393\u6d3e4B\u5236\u4f5c\u7684\u4e00\u6b3e\u786c\u4ef6\uff0c\u7528\u4e8eKVM Over IP\u3002Hat\u5173\u952e\u529f\u80fd\u5305\u62ecHDMI\u89c6\u9891\u6355\u83b7\u3001ATX\u63a7\u5236\u3001PoE\u4f9b\u7535\u3001OLED\u5c4f\u5e55\u663e\u793a\u3001RTC\u65f6\u949f\u3002 Hat\u914d\u6709\u91d1\u5c5e\u5916\u58f3\uff0c\u7528\u4e8e\u4fdd\u62a4\u548c\u6563\u70ed\u3002Hat\u53ef\u4ee5\u88ab\u5b89\u88c5\u52301U\u7684\u673a\u67b6\u3002\u540c\u65f6\u652f\u6301blikvm\u955c\u50cf\u548cpikvm\u955c\u50cf\u3002","title":"\u4ecb\u7ecd"},{"location":"BLIKVM-HAT-guide/#_2","text":"\u5982\u679c\u4f60\u8d2d\u4e70\u7684\u53ea\u662f\u4e00\u4e2aHat\uff0c\u4f60\u8fd8\u9700\u8981\u4e0b\u9762\u8bbe\u5907 \u6811\u8393\u6d3e4B\uff0c1GB RAM\u6216\u8005\u66f4\u591a MicroSD card (\u63a8\u8350\u6700\u5c1116Gb, class 10). HDMI \u7ebf\u7f06. \u7f51\u7ebf (\u7528\u4e8eHat\u548cATX\u7684\u8fde\u63a5). \u7535\u6e90\u9002\u914d\u5668\u548c\u7ebf\u7f06(5.1V 3A USB-C).","title":"\u5b89\u88c5\u8981\u6c42"},{"location":"BLIKVM-HAT-guide/#_3","text":"\u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@50Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE \u4f9b\u7535 \u652f\u6301\u4e32\u53e3\u7ec8\u7aef OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) PWM\u98ce\u6247","title":"\u529f\u80fd"},{"location":"BLIKVM-HAT-guide/#_4","text":"1. \u70e7\u5f55\u955c\u50cf 2.\u7ec4\u88c5Hat \u53c2\u8003\u4e0b\u9762\u7684\u89c6\u9891\u8bf4\u660e\u6216\u8005\u53c2\u8003 \u56fe\u6587\u8bf4\u660e : Hat \u89c6\u9891\u5b89\u88c5\u5bfc\u89c8: \u624b\u628a\u624b\u6559\u4f60\u5982\u4f55\u7ec4\u88c5Hat\u5230\u6811\u8393\u6d3e\u4e0a 3. \u5b89\u88c5 ATX \u6a21\u5757 ATX\u6a21\u5757\u914d\u6709\u4e00\u4e2a\u5168\u9ad8\u6216\u8005\u534a\u9ad8\u7684PCIe\u6321\u677f\uff0c\u4f60\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u9009\u62e9\u5b89\u88c5 \u4f7f\u7528\u675c\u90a6\u7ebf\u8fde\u63a5ATX\u6a21\u5757\u548c\u673a\u7bb1\u91cc\u7684\u4e3b\u677f\uff0cATX\u6a21\u5757\u4e0a\u90fd\u6709\u6e05\u6670\u7684\u5f15\u811a\u5b9a\u4e49\u65b9\u4fbf\u4f60\u8fde\u63a5 \u5c06ATX\u6a21\u5757\u5b89\u88c5\u5230\u673a\u7bb1\u5916\u58f3\u4e0a \u4f7f\u7528RJ45\u7684\u7f51\u7ebf\u8fde\u63a5ATX\u548cHat 4. \u8fde\u63a5HDMI\u7ebf\u7f06 \u4f7f\u7528HDMI\u7ebf\u7f06\uff0c\u5c06\u88ab\u63a7\u7535\u8111\u7684HDMI\u548cHat\u7684HDMI IN\u7aef\u53e3\u8fde\u63a5\u3002HDMI\u6a21\u62df\u5668\u4e0d\u662f\u5fc5\u987b\u4f7f\u7528\u7684\uff0c\u5f53\u4f60\u7684\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8f93\u51fa\u753b\u9762\u65f6\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528HDMI\u6a21\u62df\u5668\u6765\u6821\u6b63\u7535\u8111\u7684HDMI\u8f93\u51fa 5. \u5b89\u88c5USB\u7ebf\u7f06 \u8bf7\u6ce8\u610f\u8fd9\u91cc\u4f7f\u7528USB\u5206\u7535\u677f\u4e0d\u662f\u5fc5\u987b\u7684\uff0c\u5982\u679c\u4f60\u4f7f\u7528PoE\u4f9b\u7535\u4e0d\u9700\u8981\u4f7f\u7528\u6b64\u6a21\u5757\uff0c\u5982\u679c\u4f60\u9700\u8981\u4f7f\u7528USB\u4f9b\u7535\u5219\u9700\u8981\u3002\u901a\u8fc7USB-C\u7ebf\u8fde\u63a5\u6811\u8393\u6d3e4B\u7684TYPE-C\u53e3\u5230\u5206\u7535\u677f\u7684RPI4\u7aef\u53e3 \u8fde\u63a5\u5206\u7535\u677f\u4e0a\u7684USB\u7aef\u53e3\u5230\u88ab\u63a7\u7535\u8111 \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u8bf7\u6ce8\u610f\u4e0d\u9700\u8981\u5728\u4f7f\u7528USB\u4f9b\u7535\u8bbe\u5907\u3002\u5f53\u4e0d\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u63a8\u8350\u4f7f\u75285V/3A\u7684\u7535\u6e90\u9002\u914d\u5668\u5230\u5206\u7535\u677f\u7684PWR\u7aef\u53e3 6. \u6d4b\u8bd5 \u56fe\u4e2d\u901a\u8fc7PoE\u4f9b\u7535\uff0cHat\u901a\u8fc7\u7f51\u7ebf\u8fde\u63a5\u5230\u7f51\u7edc\u4e2d OLED\u5c4f\u5e55\u5c06\u4f1a\u6b63\u5e38\u663e\u793a\u8bbe\u5907\u7684\u5de5\u4f5c\u72b6\u6001\uff0c\u5305\u62ec\u8bbe\u5907\u7684IP\u5730\u5740 \u6253\u5f00\u6d4f\u89c8\u5668\uff0c\u8f93\u5165\u8bbe\u5907\u7684IP\u5730\u5740\uff0c\u5373\u53ef\u6253\u5f00\u63a7\u5236\u7684WEB\u754c\u9762\uff0c\u73b0\u5728\u53bb\u4f7f\u7528\u5b83\u5427\uff01","title":"\u57fa\u7840\u8bbe\u7f6e"},{"location":"BLIKVM-HAT-guide/#_5","text":"HDMI \u8f93\u5165 \u4f7f\u7528Toshiba TC358743\u4e3aHDMI\u8f6c\u6362\u7684\u4e3b\u82af\u7247\uff0c\u540c\u65f6\u652f\u6301\u89c6\u9891\u548c\u58f0\u97f3\u7684\u91c7\u96c6\uff0c\u652f\u6301\u89c6\u9891\u6700\u9ad8\u8f93\u5165\u4e3a1080P50Hz.\u89e3\u51b3\u4e86HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898\u3002 CN-ATX CN-ATX\u63a5\u53e3\u901a\u8fc7\u7f51\u7ebf\u8fde\u63a5ATX\u6a21\u5757\uff0c\u7528\u6765\u63a7\u5236\u88ab\u63a7\u7535\u8111\u7684\u5f00\u673a\u3001\u5173\u673a\u3001\u548c\u91cd\u542f\u64cd\u4f5c\u3002 \u663e\u793a\u5c4f \u914d\u6709\u767d\u8272\u7684\u663e\u793a\u5c4f\uff0c\u5206\u8fa8\u7387\u4e3a128x32\uff0c\u4f7f\u7528\u82af\u7247\u4e3aSSD1306\u3002\u663e\u793a\u5c4f\u4f1a\u663e\u793a\u5982\u6e29\u5ea6\u3001IP\u5730\u5740\u7b49\u6811\u8393\u6d3e\u7684\u4fe1\u606f\u3002 PoE \u6807\u51c6: IEEE 802.3af PoE \u8f93\u5165\u7535\u538b: 37-57 V DC \u8f93\u51fa\u7535\u538b: 5 V DC/2.4 A \u4f7f\u7528PoE\u6a21\u5757\u4f9b\u7535\uff0c\u9700\u8981\u5c06Hat\u4e0a\u7684PoE\u7684\u5f15\u811a\u4f7f\u7528\u8df3\u7ebf\u5e3d\u77ed\u63a5\u3002 \u98ce\u6247 \u98ce\u6247\u9ed8\u8ba4\u4f7f\u7528\u6811\u8393\u6d3e\u4e0a\u7684GPIO12\u63a7\u5236\u3002 RTC\u65f6\u949f RTC\u65f6\u949f\u4e3b\u82af\u7247\u4e3aPCF8563\uff0c\u901a\u8fc7I2C\u548c\u6811\u8393\u6d3e\u8fde\u63a5\u3002\u542f\u7528RTC\u65f6\u949f\u5de5\u4f5c\u7684\u7ebd\u6263\u7535\u6c60\u5b89\u88c5\u4f4d\u7f6e\u5728HDMI-IN\u6a21\u5757\u7684\u4e0b\u9762\u3002","title":"\u6027\u80fd\u53c2\u6570"},{"location":"BLIKVM-HAT-guide/#_6","text":"","title":"\u914d\u4ef6"},{"location":"BLIKVM-HAT-guide/#atx","text":"ATX\u6a21\u5757\u901a\u8fc7\u675c\u90a6\u7ebf\u548c\u7535\u8111\u7684\u4e3b\u677f\u8fde\u63a5\u3002ATX\u6a21\u5757\u914d\u6709\u5168\u9ad8\u548c\u534a\u9ad8\u7684PCIe\u6321\u677f\u3002","title":"ATX\u6a21\u5757"},{"location":"BLIKVM-HAT-guide/#usbpwr","text":"RPI4\u7aef\u53e3\u7528\u4e8e\u8fde\u63a5\u5230\u6811\u8393\u6d3e4B. USB\u7aef\u53e3\u7528\u4e8e\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111. \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u4e0d\u9700\u8981\u4f7f\u7528\u5206\u7535\u677f.","title":"USB/PWR \u5206\u7535\u677f"},{"location":"BLIKVM-HAT-guide/#hdmi","text":"\u5982\u679c\u88ab\u63a7\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8f93\u51fa\u753b\u9762\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u6b64\u6a21\u5757\u6765\u89e3\u51b3\u3002\u5c06\u6b64\u6a21\u5757\u8fde\u63a5\u5230Hat\u4e0a\u540e\uff0c\u518d\u901a\u8fc7HDMI\u7ebf\u7f06\u8fde\u63a5\u5230\u88ab\u63a7\u7535\u8111\u3002","title":"HDMI\u6a21\u62df\u5668"},{"location":"BLIKVM-HAT-guide/#_7","text":"\u91d1\u5c5e\u5916\u58f3\u53ef\u4ee5\u4fdd\u62a4Hat\u548c\u7528\u4e8e\u6563\u70ed.\u5916\u58f3\u4e0a\u6bcf\u4e2a\u7aef\u53e3\u6709\u6e05\u6670\u7684\u4e1d\u5370\u6765\u8868\u793a\u6b64\u7aef\u53e3\u7528\u9014\u3002\u6b64\u5916\u58f3\u53ef\u4ee5\u65b9\u4fbf\u7684\u5b89\u88c5\u57281U\u7684\u673a\u67b6\u4e0a\u3002","title":"\u91d1\u5c5e\u5916\u58f3"},{"location":"BLIKVM-HAT-guide/#list","text":"","title":"List"},{"location":"BLIKVM-HAT-guide/#product-list","text":"BliKVM Hat \u6a21\u5757 1 ATX \u6a21\u5757 1 USB/PWR \u5206\u7535\u677f 1 HDMI\u6a21\u62df\u5668 1 \u91d1\u5c5e\u5916\u58f3 1 32G TF \u5361 1 USB Type-C \u8f6c USB Type-C \u7ebf\u7f06 30cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 \u5341\u5b57\u6273\u624b\u5957\u7b52 1","title":"Product List"},{"location":"BLIKVM-HAT-guide/#_8","text":"\u6811\u8393\u6d3e4B 1 RJ45 \u7f51\u7ebf 2 USB Type-A \u8f6c USB Type-C \u7ebf\u7f06 2 HDMI \u7ebf\u7f06 1 PoE\u4f9b\u7535\u8bbe\u5907 or 5V/3A USB \u7535\u6e90\u9002\u914d\u5668 1 CR1220\u7ebd\u6263\u7535\u6c60 1","title":"\u7528\u6237\u9700\u8981\u51c6\u5907\u8bbe\u5907\u7684\u6e05\u5355"},{"location":"BLIKVM-HAT-guide/#_9","text":"v3\u6dd8\u5b9d\u5730\u5740","title":"\u8d2d\u4e70\u94fe\u63a5"},{"location":"BLIKVM-PCIE-guide-zh/","text":"BLIKVM PCIe \u4ecb\u7ecd BLIKVM PCIe\u662f\u4e00\u6b3e\u57fa\u4e8e\u6811\u8393\u6d3eCM4\u7684IPKVM\u6269\u5c55\u5361\uff0c\u53ef\u4ee5\u5b89\u88c5\u5230PC\u6216\u8005\u670d\u52a1\u5668\u7684PCIe\u63d2\u69fd\uff0c\u5b8c\u7f8e\u8fd0\u884cPiKVM\u9879\u76ee\u3002\u4e3b\u8981\u529f\u80fd\u6709\uff1aHDMI\u89c6\u9891\u91c7\u96c6\uff0c\u952e\u76d8\u9f20\u6807\u63a7\u5236\uff0cATX\u5f00\u5173\u673a\u63a7\u5236\uff0cPoE\u4f9b\u7535\uff0cOLED\u5c4f\u5e55\u663e\u793a\uff0c \u4e32\u53e3\u7ec8\u7aef\u8c03\u8bd5\u548cRTC\u65f6\u949f\u529f\u80fd\u3002\u6b64PCIe\u5361\u914d\u6709\u5168\u9ad8\u548c\u534a\u9ad8\u7684\u6321\u677f\u3002 BLIKVM PCIe\u7248\u672c\u652f\u6301blikvm\u548cpikvm\u7684\u7cfb\u7edf\u955c\u50cf\u3002 \u5b89\u88c5\u8981\u6c42 \u4f60\u9700\u8981\u4e0b\u9762\u7684\u8bbe\u5907 \u6811\u8393\u6d3eCM4(\u5982\u679c\u4f60\u53ea\u8ba2\u8d2d\u4e86PCIe\u5361). PoE\u4f9b\u7535\u8bbe\u5907\u62165V/3A USB\u4f9b\u7535\u8bbe\u5907. CR1220 \u7ebd\u6263\u7535\u6c60. \u529f\u80fd \u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@60Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE \u4f9b\u7535 \u652f\u6301\u4e32\u53e3\u7ec8\u7aef \u652f\u6301 WiFi \uff08\u53ef\u9009\uff09 OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) PWM\u98ce\u6247 \u5feb\u901f\u5b89\u88c5\u8bf4\u660e 1. \u5982\u679c\u4f60\u8d2d\u4e70\u7684\u662f\u9700\u8981\u81ea\u5df1\u7ec4\u88c5\u7684\u7248\u672c\uff0c\u70e7\u5f55\u7cfb\u7edf\u955c\u50cf\u53c2\u8003\u8bf7\u70b9\u51fb\u6b64\u5904 2.\u7ec4\u88c5 BLIKVM \u53c2\u8003\u7684 \u8bf4\u660e\u6587\u6863 Geerling\u7684\u6d4b\u8bd5\u89c6\u9891 Craft Computing: Never Pay For IPMI Again - BliKVM Review \u4ea7\u54c1\u7279\u6027 \u786c\u4ef6\u63a5\u53e3\u6e05\u5355 1 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 2 USB-PC \u7aef\u53e3 1 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 2 USB-PC \u7aef\u53e3 3 \u4f9b\u7535\u53e3 5V 3A 4 RJ45 100M \u7f51\u53e3 & PoE 5 ATX\u63a7\u5236\u7aef\u53e3 6 OLED \u663e\u793a\u5c4f\u63a5\u53e3 7 PWM \u98ce\u6247 8 BOOT 9 RTC\u65f6\u949f 10 \u4e32\u884c\u7ec8\u7aef\u7aef\u53e3 11 USB-PC\u7aef\u53e3 HDMI IN \u4f7f\u7528\u4e1c\u829d\u7684TC358743\u4f5c\u4e3aHDMI\u7684\u6865\u63a5\u82af\u7247\uff0c\u540c\u65f6\u652f\u6301\u89c6\u9891\u548c\u97f3\u9891\u91c7\u96c6\uff0c\u652f\u6301\u89c6\u9891\u8f93\u5165\u6700\u9ad8\u5206\u8fa8\u7387\u4e3a1080P60Hz\u3002 USB-PC BLIKVM PCIe\u5361\u63d0\u4f9b\u4e24\u4e2ausb\u63a5\u53e3\uff0c\u4e00\u4e2a\u662fPC-IN\uff08type c\u63a5\u53e3\uff09\uff0c\u53e6\u4e00\u4e2a\u662fUSB-PC2\uff08\u6392\u9488\u63a5\u53e3\uff09\u3002\u8fd9\u4e24\u4e2a\u63a5\u53e3\u7684\u4f5c\u7528\u90fd\u662f\u4e3a\u4e86\u8fde\u63a5\u88ab\u63a7\u7535\u8111\u7684usb\uff0c\u7528\u4e8e\u63a7\u5236\u9f20\u6807\u548c\u952e\u76d8\u3002\u540c\u65f6\u4e24\u4e2a\u63a5\u53e3\u53ea\u80fd\u4f7f\u7528\u4e00\u4e2a\uff0c\u8bbe\u8ba1\u4e24\u4e2a\u63a5\u53e3\u7684\u76ee\u7684\u662f\uff0c\u5f53\u7528\u6237pc\u4e3b\u673a\u5185\u6709\u6392\u9488\u7684usb\u63a5\u53e3\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528usb-pc2\uff0c\u8fd9\u6837\u63a5\u7ebf\u4f1a\u66f4\u52a0\u7b80\u6d01\u3002 POWER-IN \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u6539\u63a5\u53e3\u4e0d\u9700\u8981\u88ab\u4f7f\u7528\u3002\u5f53\u4e0d\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u8fde\u63a5\u8be5\u63a5\u53e3\u7684\u7535\u6e90\u9002\u914d\u5668\uff0c\u63a8\u8350\u4e3a5V/3A\u3002 \u4ee5\u592a\u7f51\u53e3-PoE Gigabit Ethernet port \u6807\u51c6: IEEE 802.3af PoE \u8f93\u5165\u7535\u538b: 37-57 V DC \u8f93\u51fa\u7535\u538b: 5 V DC/2.4 A ATX\u63a5\u53e3 \u6539\u63a5\u53e3\u901a\u8fc7\u675c\u90a6\u7ebf\u94fe\u63a5\u88ab\u63a7\u8ba1\u7b97\u673a\u4e3b\u677f\u7684\u7535\u6e90\u63a7\u5236\u63a5\u53e3\u3002ATX\u529f\u80fd\u53ef\u4ee5\u5f00\u542f\u6216\u8005\u91cd\u542f\u88ab\u63a7\u8ba1\u7b97\u673a\u3002 PCIe\u677f\u5b50\u4e0a\u7684BTN\u4e1d\u5370\u4e3abutton\u7684\u7f29\u5199\u3002 \u6839\u636e\u7535\u8111\u4e3b\u677f\u8bf4\u660e\uff0c\u9996\u5148\u627e\u5230\u4e3b\u677f\u4e0aATX\u529f\u80fd\u76f8\u5173\u5f15\u811a\u4f4d\u7f6e\uff0c\u62d4\u4e0b\u4e3b\u677f\u5df2\u7ecf\u63a5\u597d\u7684ATX\u7ebf\uff0c\u62d4\u4e0b\u540e\u7535\u8111\u7684\u7535\u6e90\u6309\u94ae\u5c06\u5931\u53bb\u4f5c\u7528\u3002PCIe\u4e3b\u677f\u5171\u6709\u4e24\u63928PIN\u5f15\u811a\uff0c\u4e24\u6392\u5f15\u811a\u529f\u80fd\u5b8c\u5168\u76f8\u540c\u4f7f\u7528\u65f6\u65e0\u9700\u533a\u5206\u3002\u5176\u4e2d\u4e00\u6392\u5f15\u811a\u7528\u4e8eKVM\u63a7\u5236ATX\u76f8\u5173\u529f\u80fd\uff0c\u53e6\u4e00\u6392\u5f15\u811a\u63a5\u4e3b\u677f\u4e0a\u62d4\u4e0b\u6765\u7684ATX\u675c\u90a6\u5934\uff0c\u4fdd\u6301\u539f\u6709\u673a\u7bb1\u7535\u6e90\u6309\u94ae\u529f\u80fd\u3002\u6839\u636e\u4e3b\u677f\u548cPCIe\u4e0a\u7684\u5177\u4f53\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u6bcf\u6839\u7ebf\u7684\u8fde\u63a5\uff0c\u8fde\u63a5\u5173\u7cfb\u53ef\u4ee5\u53c2\u8003\u4e0b\u56fe\uff1a OLED\u663e\u793a\u5c4f \u663e\u793a\u5c4f\u5206\u8fa8\u7387\u4e3a128x64\uff0c\u4e3b\u82af\u7247\u4e3aSSD1306\u3002\u901a\u8fc7\u6539\u5c4f\u5e55\u53ef\u4ee5\u5c55\u793aBLIKVM\u7684CPU\u7684\u6e29\u5ea6\u3001IP\u5730\u5740\u3001\u542f\u52a8\u65f6\u95f4\u7b49\u4fe1\u606f\u3002 \u98ce\u6247 \u98ce\u6247\u9ed8\u8ba4\u8bbe\u7f6e\u5de5\u4f5c\u6e29\u5ea6\u4e3a60\u6444\u6c0f\u5ea6\uff0c\u4e0e\u6811\u8393\u6d3eCM4\u7684\u901a\u8fc7GPIO12\u94fe\u63a5\u3002 BOOT Fit jumper to disable eMMC Boot \u901a\u8fc7\u8be5\u77ed\u63a5\u53e3\u53ef\u4ee5\u4f7f\u7528PCIe\u5361\u5bf9eMMC\u7248\u672c\u7684CM4\u8fdb\u884c\u955c\u50cf\u70e7\u5f55\u3002 \u5b9e\u65f6\u65f6\u949f (RTC) \u65f6\u949f\u82af\u7247\u4e3aPCF8563\uff0c\u4e0e\u6811\u8393\u6d3eCM4\u7684\u901a\u4fe1\u65b9\u5f0f\u4e3aI2C\u3002RTC\u5de5\u4f5c\u9700\u8981\u518d\u5b89\u88c5CR1220\u7535\u6c60\u540e\u3002 \u4e32\u53e3 \u53ef\u4ee5\u901a\u8fc7\u6539\u4e32\u53e3\u767b\u9646\u8bbe\u5907\u8fdb\u884c\u8c03\u8bd5\uff0c\u4e00\u822c\u5728\u5728\u7f51\u7edc\u94fe\u63a5\u6545\u969c\u7b49\u60c5\u51b5\u4e0b\u4f7f\u7528\u3002 \u6811\u8393\u6d3eCM4\u7684\u4e32\u53e3. G for GND, T(GPIO 14) for TXD, R(GPIO 15) for RXD. \u5c06USB\u8f6cTTL\u6a21\u5757\u7684\u675c\u90a6\u5934\u8fde\u63a5\u5230PCIe\u7684 GTR \u53e3\uff0cUSB\u8f6cttl\u6a21\u5757\u4e0e GTR \u63a5\u7ebf\u5173\u7cfb\u4e3a\uff08\u9ed1\u8272\u7ebf-G, \u767d\u8272\u7ebf-T, \u7eff\u8272\u7ebf-R\uff09;\u5177\u4f53\u65b9\u6cd5\u53ef\u53c2\u8003 \u6b64\u6587\u6863 \u914d\u4ef6 HDMI EDID\u6a21\u62df\u5668 \u5982\u679c\u88ab\u63a7\u8ba1\u7b97\u673a\u4e0d\u80fd\u6b63\u786e\u7684\u8f93\u51faHDMI\u56fe\u50cf\uff0c\u53ef\u4ee5\u4f7f\u7528\u6b64\u8bbe\u5907\u8fdb\u884c\u6d4b\u8bd5\u3002\u5b89\u88c5\u5728\u88ab\u63a7\u8bbe\u5907\u7684HDMI\u8f93\u51fa\u63a5\u53e3\u4e0a\uff0c\u7136\u540e\u518d\u901a\u8fc7HDMI\u7ebf\u8fde\u63a5\u5230BLIKVM\u3002 VGA\u8f6cHDMI\u6a21\u5757 \u5f53\u88ab\u63a7\u8ba1\u7b97\u673a\u4e0d\u662fHDMI\u8f93\u51fa\u63a5\u53e3\uff0c\u800c\u662fVGA\u8f93\u51fa\u63a5\u53e3\uff0c\u8bf7\u4f7f\u7528\u8be5\u6a21\u5757\u5b8c\u6210VGA\u8f6cHDMI\u4fe1\u53f7\u8f6c\u6362\u3002 USB\u8f6cTTL\u6a21\u5757 \u901a\u8fc7\u6539\u6a21\u5757\uff0c\u53ef\u4ee5\u8fde\u63a5BLIKVM PCIe\u5361\u7684\u4e32\u53e3\uff0c\u7136\u540e\u4f7f\u7528\u4e32\u53e3\u8fdb\u5165\u8bbe\u5907\u8fdb\u884c\u8c03\u8bd5\u3002 \u98ce\u6247 Use a cooling fan to cool the Raspberry Pi CM4, but installing a fan will make the product thicker than a standard PCIe add-in card. \u4f7f\u7528\u98ce\u6247\u5bf9\u6811\u8393\u6d3eCM4\u8fdb\u884c\u964d\u6e29\uff0c\u4f46\u5b89\u88c5\u98ce\u6247\u540e\u4f1a\u4f7fBLIKVM PCIe\u5361\u7684\u539a\u5ea6\u539a\u4e8e\u6807\u51c6\u7684PCIe\u5361\u539a\u5ea6\u3002 \u5c3a\u5bf8 \u6d4b\u8bd5\u89c6\u9891 BLIKVM PCIe\u7248\u672c\u5b9e\u6d4b\u89c6\u9891\uff0c\u8f6f\u4ef6\u4f7f\u7528PiKVM \u53d1\u8d27\u6e05\u5355 BLIKVM only PCIe\u5361\u7248\u672c 1 BLIKVM PCIe\u5361 1 \u98ce\u6247 1 OLED\u663e\u793a\u5c4f 1 USB\u8f6cTTL\u6a21\u5757 1 HDMI EDID\u6a21\u62df\u5668 1 VGA\u8f6cHDMI\u6a21\u5757 1 32G Micro SD card 1 HDMI\u7ebf 0.5m 1 HDMI \u76f4\u901a\u5934 1 \u5343\u5146\u7f51\u7ebf 1m 1 USB-A\u8f6cUSB-C\u7ebf 1m 2 USB\u675c\u90a6\u7ebf 0.4m 1 WiFi\u5929\u7ebf 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u91d1\u5c5e\u6563\u70ed\u7247 1 \u5341\u5b57\u5957\u7b52 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 BLIKVM PCIe \u5230\u624b\u5373\u7528\u7248\u672c 1 BLIKVM PCIe\u5361 1 CM4 102000 1 \u98ce\u6247 1 OLED\u663e\u793a\u5c4f 1 USB\u8f6cTTL\u6a21\u5757 1 HDMI EDID\u6a21\u62df\u5668 1 VGA\u8f6cHDMI\u6a21\u5757 1 32G Micro SD card 1 HDMI\u7ebf 0.5m 1 HDMI \u76f4\u901a\u5934 1 \u5343\u5146\u7f51\u7ebf 1m 1 USB-A\u8f6cUSB-C\u7ebf 1m 2 USB\u675c\u90a6\u7ebf 0.4m 1 WiFi\u5929\u7ebf 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u91d1\u5c5e\u6563\u70ed\u7247 1 \u5341\u5b57\u5957\u7b52 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 \u5907\u6ce8\uff1a\u7531\u4e8e\u6811\u8393\u6d3eCM4\u4e00\u76f4\u7d27\u7f3a\uff0c\u5230\u624b\u5373\u7528\u7248\u672c\u4e2dCM4\u7248\u672c\u53ef\u80fd\u4f1a\u66f4\u6362\u4e3aeMMC\u7248\u672c\uff0c\u6b64\u4e2d\u60c5\u51b5\u4e0b\u5c06\u4e0d\u5e26SD\u5361\u3002 \u8d2d\u4e70\u94fe\u63a5 v2\u6dd8\u5b9d\u5730\u5740 3D\u5916\u58f3 \u4e00\u4e2a\u7b80\u5355\u7684PCIe\u5916\u58f3 Download file","title":"BliKVM v2 PCIe\u5bfc\u89c8"},{"location":"BLIKVM-PCIE-guide-zh/#blikvm-pcie","text":"","title":"BLIKVM PCIe"},{"location":"BLIKVM-PCIE-guide-zh/#_1","text":"BLIKVM PCIe\u662f\u4e00\u6b3e\u57fa\u4e8e\u6811\u8393\u6d3eCM4\u7684IPKVM\u6269\u5c55\u5361\uff0c\u53ef\u4ee5\u5b89\u88c5\u5230PC\u6216\u8005\u670d\u52a1\u5668\u7684PCIe\u63d2\u69fd\uff0c\u5b8c\u7f8e\u8fd0\u884cPiKVM\u9879\u76ee\u3002\u4e3b\u8981\u529f\u80fd\u6709\uff1aHDMI\u89c6\u9891\u91c7\u96c6\uff0c\u952e\u76d8\u9f20\u6807\u63a7\u5236\uff0cATX\u5f00\u5173\u673a\u63a7\u5236\uff0cPoE\u4f9b\u7535\uff0cOLED\u5c4f\u5e55\u663e\u793a\uff0c \u4e32\u53e3\u7ec8\u7aef\u8c03\u8bd5\u548cRTC\u65f6\u949f\u529f\u80fd\u3002\u6b64PCIe\u5361\u914d\u6709\u5168\u9ad8\u548c\u534a\u9ad8\u7684\u6321\u677f\u3002 BLIKVM PCIe\u7248\u672c\u652f\u6301blikvm\u548cpikvm\u7684\u7cfb\u7edf\u955c\u50cf\u3002","title":"\u4ecb\u7ecd"},{"location":"BLIKVM-PCIE-guide-zh/#_2","text":"\u4f60\u9700\u8981\u4e0b\u9762\u7684\u8bbe\u5907 \u6811\u8393\u6d3eCM4(\u5982\u679c\u4f60\u53ea\u8ba2\u8d2d\u4e86PCIe\u5361). PoE\u4f9b\u7535\u8bbe\u5907\u62165V/3A USB\u4f9b\u7535\u8bbe\u5907. CR1220 \u7ebd\u6263\u7535\u6c60.","title":"\u5b89\u88c5\u8981\u6c42"},{"location":"BLIKVM-PCIE-guide-zh/#_3","text":"\u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63011080P@60Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE \u4f9b\u7535 \u652f\u6301\u4e32\u53e3\u7ec8\u7aef \u652f\u6301 WiFi \uff08\u53ef\u9009\uff09 OLED \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) PWM\u98ce\u6247","title":"\u529f\u80fd"},{"location":"BLIKVM-PCIE-guide-zh/#_4","text":"1. \u5982\u679c\u4f60\u8d2d\u4e70\u7684\u662f\u9700\u8981\u81ea\u5df1\u7ec4\u88c5\u7684\u7248\u672c\uff0c\u70e7\u5f55\u7cfb\u7edf\u955c\u50cf\u53c2\u8003\u8bf7\u70b9\u51fb\u6b64\u5904 2.\u7ec4\u88c5 BLIKVM \u53c2\u8003\u7684 \u8bf4\u660e\u6587\u6863 Geerling\u7684\u6d4b\u8bd5\u89c6\u9891 Craft Computing: Never Pay For IPMI Again - BliKVM Review","title":"\u5feb\u901f\u5b89\u88c5\u8bf4\u660e"},{"location":"BLIKVM-PCIE-guide-zh/#_5","text":"\u786c\u4ef6\u63a5\u53e3\u6e05\u5355 1 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 2 USB-PC \u7aef\u53e3 1 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 2 USB-PC \u7aef\u53e3 3 \u4f9b\u7535\u53e3 5V 3A 4 RJ45 100M \u7f51\u53e3 & PoE 5 ATX\u63a7\u5236\u7aef\u53e3 6 OLED \u663e\u793a\u5c4f\u63a5\u53e3 7 PWM \u98ce\u6247 8 BOOT 9 RTC\u65f6\u949f 10 \u4e32\u884c\u7ec8\u7aef\u7aef\u53e3 11 USB-PC\u7aef\u53e3 HDMI IN \u4f7f\u7528\u4e1c\u829d\u7684TC358743\u4f5c\u4e3aHDMI\u7684\u6865\u63a5\u82af\u7247\uff0c\u540c\u65f6\u652f\u6301\u89c6\u9891\u548c\u97f3\u9891\u91c7\u96c6\uff0c\u652f\u6301\u89c6\u9891\u8f93\u5165\u6700\u9ad8\u5206\u8fa8\u7387\u4e3a1080P60Hz\u3002 USB-PC BLIKVM PCIe\u5361\u63d0\u4f9b\u4e24\u4e2ausb\u63a5\u53e3\uff0c\u4e00\u4e2a\u662fPC-IN\uff08type c\u63a5\u53e3\uff09\uff0c\u53e6\u4e00\u4e2a\u662fUSB-PC2\uff08\u6392\u9488\u63a5\u53e3\uff09\u3002\u8fd9\u4e24\u4e2a\u63a5\u53e3\u7684\u4f5c\u7528\u90fd\u662f\u4e3a\u4e86\u8fde\u63a5\u88ab\u63a7\u7535\u8111\u7684usb\uff0c\u7528\u4e8e\u63a7\u5236\u9f20\u6807\u548c\u952e\u76d8\u3002\u540c\u65f6\u4e24\u4e2a\u63a5\u53e3\u53ea\u80fd\u4f7f\u7528\u4e00\u4e2a\uff0c\u8bbe\u8ba1\u4e24\u4e2a\u63a5\u53e3\u7684\u76ee\u7684\u662f\uff0c\u5f53\u7528\u6237pc\u4e3b\u673a\u5185\u6709\u6392\u9488\u7684usb\u63a5\u53e3\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528usb-pc2\uff0c\u8fd9\u6837\u63a5\u7ebf\u4f1a\u66f4\u52a0\u7b80\u6d01\u3002 POWER-IN \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u6539\u63a5\u53e3\u4e0d\u9700\u8981\u88ab\u4f7f\u7528\u3002\u5f53\u4e0d\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u8fde\u63a5\u8be5\u63a5\u53e3\u7684\u7535\u6e90\u9002\u914d\u5668\uff0c\u63a8\u8350\u4e3a5V/3A\u3002 \u4ee5\u592a\u7f51\u53e3-PoE Gigabit Ethernet port \u6807\u51c6: IEEE 802.3af PoE \u8f93\u5165\u7535\u538b: 37-57 V DC \u8f93\u51fa\u7535\u538b: 5 V DC/2.4 A ATX\u63a5\u53e3 \u6539\u63a5\u53e3\u901a\u8fc7\u675c\u90a6\u7ebf\u94fe\u63a5\u88ab\u63a7\u8ba1\u7b97\u673a\u4e3b\u677f\u7684\u7535\u6e90\u63a7\u5236\u63a5\u53e3\u3002ATX\u529f\u80fd\u53ef\u4ee5\u5f00\u542f\u6216\u8005\u91cd\u542f\u88ab\u63a7\u8ba1\u7b97\u673a\u3002 PCIe\u677f\u5b50\u4e0a\u7684BTN\u4e1d\u5370\u4e3abutton\u7684\u7f29\u5199\u3002 \u6839\u636e\u7535\u8111\u4e3b\u677f\u8bf4\u660e\uff0c\u9996\u5148\u627e\u5230\u4e3b\u677f\u4e0aATX\u529f\u80fd\u76f8\u5173\u5f15\u811a\u4f4d\u7f6e\uff0c\u62d4\u4e0b\u4e3b\u677f\u5df2\u7ecf\u63a5\u597d\u7684ATX\u7ebf\uff0c\u62d4\u4e0b\u540e\u7535\u8111\u7684\u7535\u6e90\u6309\u94ae\u5c06\u5931\u53bb\u4f5c\u7528\u3002PCIe\u4e3b\u677f\u5171\u6709\u4e24\u63928PIN\u5f15\u811a\uff0c\u4e24\u6392\u5f15\u811a\u529f\u80fd\u5b8c\u5168\u76f8\u540c\u4f7f\u7528\u65f6\u65e0\u9700\u533a\u5206\u3002\u5176\u4e2d\u4e00\u6392\u5f15\u811a\u7528\u4e8eKVM\u63a7\u5236ATX\u76f8\u5173\u529f\u80fd\uff0c\u53e6\u4e00\u6392\u5f15\u811a\u63a5\u4e3b\u677f\u4e0a\u62d4\u4e0b\u6765\u7684ATX\u675c\u90a6\u5934\uff0c\u4fdd\u6301\u539f\u6709\u673a\u7bb1\u7535\u6e90\u6309\u94ae\u529f\u80fd\u3002\u6839\u636e\u4e3b\u677f\u548cPCIe\u4e0a\u7684\u5177\u4f53\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u6bcf\u6839\u7ebf\u7684\u8fde\u63a5\uff0c\u8fde\u63a5\u5173\u7cfb\u53ef\u4ee5\u53c2\u8003\u4e0b\u56fe\uff1a OLED\u663e\u793a\u5c4f \u663e\u793a\u5c4f\u5206\u8fa8\u7387\u4e3a128x64\uff0c\u4e3b\u82af\u7247\u4e3aSSD1306\u3002\u901a\u8fc7\u6539\u5c4f\u5e55\u53ef\u4ee5\u5c55\u793aBLIKVM\u7684CPU\u7684\u6e29\u5ea6\u3001IP\u5730\u5740\u3001\u542f\u52a8\u65f6\u95f4\u7b49\u4fe1\u606f\u3002 \u98ce\u6247 \u98ce\u6247\u9ed8\u8ba4\u8bbe\u7f6e\u5de5\u4f5c\u6e29\u5ea6\u4e3a60\u6444\u6c0f\u5ea6\uff0c\u4e0e\u6811\u8393\u6d3eCM4\u7684\u901a\u8fc7GPIO12\u94fe\u63a5\u3002 BOOT Fit jumper to disable eMMC Boot \u901a\u8fc7\u8be5\u77ed\u63a5\u53e3\u53ef\u4ee5\u4f7f\u7528PCIe\u5361\u5bf9eMMC\u7248\u672c\u7684CM4\u8fdb\u884c\u955c\u50cf\u70e7\u5f55\u3002 \u5b9e\u65f6\u65f6\u949f (RTC) \u65f6\u949f\u82af\u7247\u4e3aPCF8563\uff0c\u4e0e\u6811\u8393\u6d3eCM4\u7684\u901a\u4fe1\u65b9\u5f0f\u4e3aI2C\u3002RTC\u5de5\u4f5c\u9700\u8981\u518d\u5b89\u88c5CR1220\u7535\u6c60\u540e\u3002 \u4e32\u53e3 \u53ef\u4ee5\u901a\u8fc7\u6539\u4e32\u53e3\u767b\u9646\u8bbe\u5907\u8fdb\u884c\u8c03\u8bd5\uff0c\u4e00\u822c\u5728\u5728\u7f51\u7edc\u94fe\u63a5\u6545\u969c\u7b49\u60c5\u51b5\u4e0b\u4f7f\u7528\u3002 \u6811\u8393\u6d3eCM4\u7684\u4e32\u53e3. G for GND, T(GPIO 14) for TXD, R(GPIO 15) for RXD. \u5c06USB\u8f6cTTL\u6a21\u5757\u7684\u675c\u90a6\u5934\u8fde\u63a5\u5230PCIe\u7684 GTR \u53e3\uff0cUSB\u8f6cttl\u6a21\u5757\u4e0e GTR \u63a5\u7ebf\u5173\u7cfb\u4e3a\uff08\u9ed1\u8272\u7ebf-G, \u767d\u8272\u7ebf-T, \u7eff\u8272\u7ebf-R\uff09;\u5177\u4f53\u65b9\u6cd5\u53ef\u53c2\u8003 \u6b64\u6587\u6863","title":"\u4ea7\u54c1\u7279\u6027"},{"location":"BLIKVM-PCIE-guide-zh/#_6","text":"HDMI EDID\u6a21\u62df\u5668 \u5982\u679c\u88ab\u63a7\u8ba1\u7b97\u673a\u4e0d\u80fd\u6b63\u786e\u7684\u8f93\u51faHDMI\u56fe\u50cf\uff0c\u53ef\u4ee5\u4f7f\u7528\u6b64\u8bbe\u5907\u8fdb\u884c\u6d4b\u8bd5\u3002\u5b89\u88c5\u5728\u88ab\u63a7\u8bbe\u5907\u7684HDMI\u8f93\u51fa\u63a5\u53e3\u4e0a\uff0c\u7136\u540e\u518d\u901a\u8fc7HDMI\u7ebf\u8fde\u63a5\u5230BLIKVM\u3002 VGA\u8f6cHDMI\u6a21\u5757 \u5f53\u88ab\u63a7\u8ba1\u7b97\u673a\u4e0d\u662fHDMI\u8f93\u51fa\u63a5\u53e3\uff0c\u800c\u662fVGA\u8f93\u51fa\u63a5\u53e3\uff0c\u8bf7\u4f7f\u7528\u8be5\u6a21\u5757\u5b8c\u6210VGA\u8f6cHDMI\u4fe1\u53f7\u8f6c\u6362\u3002 USB\u8f6cTTL\u6a21\u5757 \u901a\u8fc7\u6539\u6a21\u5757\uff0c\u53ef\u4ee5\u8fde\u63a5BLIKVM PCIe\u5361\u7684\u4e32\u53e3\uff0c\u7136\u540e\u4f7f\u7528\u4e32\u53e3\u8fdb\u5165\u8bbe\u5907\u8fdb\u884c\u8c03\u8bd5\u3002 \u98ce\u6247 Use a cooling fan to cool the Raspberry Pi CM4, but installing a fan will make the product thicker than a standard PCIe add-in card. \u4f7f\u7528\u98ce\u6247\u5bf9\u6811\u8393\u6d3eCM4\u8fdb\u884c\u964d\u6e29\uff0c\u4f46\u5b89\u88c5\u98ce\u6247\u540e\u4f1a\u4f7fBLIKVM PCIe\u5361\u7684\u539a\u5ea6\u539a\u4e8e\u6807\u51c6\u7684PCIe\u5361\u539a\u5ea6\u3002","title":"\u914d\u4ef6"},{"location":"BLIKVM-PCIE-guide-zh/#_7","text":"","title":"\u5c3a\u5bf8"},{"location":"BLIKVM-PCIE-guide-zh/#_8","text":"BLIKVM PCIe\u7248\u672c\u5b9e\u6d4b\u89c6\u9891\uff0c\u8f6f\u4ef6\u4f7f\u7528PiKVM","title":"\u6d4b\u8bd5\u89c6\u9891"},{"location":"BLIKVM-PCIE-guide-zh/#_9","text":"BLIKVM only PCIe\u5361\u7248\u672c 1 BLIKVM PCIe\u5361 1 \u98ce\u6247 1 OLED\u663e\u793a\u5c4f 1 USB\u8f6cTTL\u6a21\u5757 1 HDMI EDID\u6a21\u62df\u5668 1 VGA\u8f6cHDMI\u6a21\u5757 1 32G Micro SD card 1 HDMI\u7ebf 0.5m 1 HDMI \u76f4\u901a\u5934 1 \u5343\u5146\u7f51\u7ebf 1m 1 USB-A\u8f6cUSB-C\u7ebf 1m 2 USB\u675c\u90a6\u7ebf 0.4m 1 WiFi\u5929\u7ebf 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u91d1\u5c5e\u6563\u70ed\u7247 1 \u5341\u5b57\u5957\u7b52 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 BLIKVM PCIe \u5230\u624b\u5373\u7528\u7248\u672c 1 BLIKVM PCIe\u5361 1 CM4 102000 1 \u98ce\u6247 1 OLED\u663e\u793a\u5c4f 1 USB\u8f6cTTL\u6a21\u5757 1 HDMI EDID\u6a21\u62df\u5668 1 VGA\u8f6cHDMI\u6a21\u5757 1 32G Micro SD card 1 HDMI\u7ebf 0.5m 1 HDMI \u76f4\u901a\u5934 1 \u5343\u5146\u7f51\u7ebf 1m 1 USB-A\u8f6cUSB-C\u7ebf 1m 2 USB\u675c\u90a6\u7ebf 0.4m 1 WiFi\u5929\u7ebf 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u6bcd 40cm 1 \u675c\u90a6\u7ebf 8pin \u6bcd\u5bf9\u516c 40cm 1 \u91d1\u5c5e\u6563\u70ed\u7247 1 \u5341\u5b57\u5957\u7b52 1 \u5341\u5b57\u87ba\u4e1d\u5200 1 \u5907\u6ce8\uff1a\u7531\u4e8e\u6811\u8393\u6d3eCM4\u4e00\u76f4\u7d27\u7f3a\uff0c\u5230\u624b\u5373\u7528\u7248\u672c\u4e2dCM4\u7248\u672c\u53ef\u80fd\u4f1a\u66f4\u6362\u4e3aeMMC\u7248\u672c\uff0c\u6b64\u4e2d\u60c5\u51b5\u4e0b\u5c06\u4e0d\u5e26SD\u5361\u3002","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"BLIKVM-PCIE-guide-zh/#_10","text":"v2\u6dd8\u5b9d\u5730\u5740","title":"\u8d2d\u4e70\u94fe\u63a5"},{"location":"BLIKVM-PCIE-guide-zh/#3d","text":"\u4e00\u4e2a\u7b80\u5355\u7684PCIe\u5916\u58f3 Download file","title":"3D\u5916\u58f3"},{"location":"BLIKVM-PCIe-installation-zh/","text":"BLIKVM PCIe \u5b89\u88c5\u8bf4\u660e 1.\u62c6\u5f00\u5305\u88c5\uff0c\u62ff\u51fa\u8bbe\u5907 \u4ea7\u54c1\u6e05\u5355 2.\u5b89\u88c5\u4e3b\u4f53\u8bbe\u5907 \u5b89\u88c5CM4\u548c4\u4e2a\u516d\u89d2\u87ba\u67f1(\u6b64\u6587\u7ae0\u4f7f\u7528\u7684\u662fCM4 lite\u4f5c\u4e3a\u5217\u5b50\uff0c\u955c\u50cf\u5728\u51fa\u5382\u7684SD\u5361\u91cc\u5df2\u7ecf\u88ab\u9884\u88c5\u8f7d\uff0c\u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002\u82e5\u4f60\u7684CM4\u662fEMMc\u7248\u672c\uff0c\u5219\u4f60\u9700\u8981\u81ea\u5df1\u70e7\u5f55\u955c\u50cf \uff0c\u65e0\u6cd5\u76f4\u63a5\u4f7f\u7528SD\u5361\u542f\u52a8)\u3002\u7136\u540e\u5c06\u5bfc\u70ed\u7247\u6495\u4e0b\u4fdd\u62a4\u819c\uff0c\u7c98\u8d34\u5728CM4\u9876\u90e8\u3002 \u5b89\u88c5\u91d1\u5c5e\u6563\u70ed\u7247\u3002 \u4e3b\u4f53\u8bbe\u5907\u5df2\u5b89\u88c5\u5b8c\u6210 3.\u8fde\u63a5USB\u63a5\u53e3\u548cATX\u63a5\u53e3 \u6b64\u6587\u4e2d\u7684\u4e3b\u677f\u4f7f\u7528\u7684\u662fAsus H520M-E\uff0c\u4e0d\u540c\u7684\u4e3b\u677f\u63a5\u53e3\u5b9a\u4e49\u4e0d\u4e00\u5b9a\u76f8\u540c\uff0c\u8bf7\u53c2\u8003\u60a8\u7684\u4e3b\u677f\u76f8\u5173\u624b\u518c\u3002 4.\u94fe\u63a5OLED\u663e\u793a\u5c4f \u60a8\u6536\u5230\u7684OLED\u662f\u672a\u5b89\u88c5\u652f\u67b6\u7684\uff0c\u8bf7\u53c2\u8003\u56fe\u7247\u8fdb\u884c\u5b89\u88c5\u3002\u53e6\u5916OLED\u652f\u67b6\u4e3a\u4e9a\u514b\u529b\u6750\u6599\uff0c\u9700\u8981\u6495\u53bb\u8868\u9762\u7684\u4fdd\u62a4\u819c\u540e\u4f7f\u7528\u3002 \u4e0a\u9762\u7684\u5c31\u662f\u5b89\u88c5\u6b65\u9aa4\uff0c\u672a\u6495\u819c\u7684\u6548\u679c\uff0c\u5b9e\u9645\u4f7f\u7528\u8bf7\u6495\u53bb\u4fdd\u62a4\u819c\uff0c\u6548\u679c\u5982\u4e0b\uff1a 5.\u8fde\u63a5HDMI\u7ebf \u5c06\u60a8\u7535\u8111\u7684HDMI\u8f93\u51fa\u53e3\u901a\u8fc7HDMI\u7ebf\u76f4\u63a5\u8fde\u63a5\u5230BLIKVM PCIe\u5361\u7684HDMI IN\u63a5\u53e3\u3002HDMI EDID\u6a21\u62df\u5668\u4e0d\u662f\u5fc5\u987b\u8981\u662f\u7528\u7684\uff0c\u5f53\u60a8\u7684\u8ba1\u7b97\u673a\u4e0d\u80fd\u6b63\u786e\u8f93\u51faHDMI\u753b\u9762\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7\u5c1d\u8bd5\u4f7f\u7528\u6b64\u6a21\u5757\u63a5\u5728\u4f60\u7684\u8ba1\u7b97\u673a\u7684HDMI\u63a5\u53e3\u4e0a\uff0c\u4ece\u800c\u8ba9\u60a8\u7684\u8ba1\u7b97\u673a\u53ef\u4ee5\u8f93\u51fa\u4e00\u4e2a\u6b63\u786e\u627dHDMI\u753b\u9762 6.\u8fde\u63a5\u7f51\u7ebf \u6807\u51c6: IEEE 802.3af PoE\u8f93\u5165\u7535\u538b:37v-57v. \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u4e0d\u9700\u8981\u4f7f\u7528PWR-IN\u7aef\u53e3\u518d\u4f9b\u7535 7.\u8fde\u63a5USB\u4f9b\u7535\u63a5\u53e3 \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6, \u901a\u8fc7\u4f7f\u7528PWR-IN\u7aef\u53e3\u8fdb\u884c\u4f9b\u7535\u7684USB\u7535\u6e90\u9002\u914d\u5668\u9700\u89815V/3A\u3002 8.\u6d4b\u8bd5 OLED\u663e\u793a\u5c4f\u73b0\u5b9e\u8bbe\u5907IP\u5730\u5740\u548c\u5176\u5b83\u4fe1\u606f \u4f7f\u7528\u8be5IP\u5730\u5740\u5728\u6d4f\u89c8\u5668\u4e0a\u76f4\u63a5\u8f93\u5165\uff0c\u5373\u53ef\u6253\u5f00web\u63a7\u5236\u754c\u9762\u3002\u5982\u679c\u89c6\u9891\u9f20\u6807\u952e\u76d8\u4ee5\u53ca\u5176\u5b83\u4f60\u5173\u5fc3\u7684\u529f\u80fd\u6d4b\u8bd5\u4e00\u5207\u6b63\u5728\uff0c\u5c31\u53ef\u4ee5\u5c06BLIKVM PCIe\u5361\u5b89\u88c5\u5230\u4f60\u7684\u673a\u7bb1\u4e2d\u3002 9.\u5b89\u88c5BLIKVM PCIe\u5361\u5230\u673a\u7bb1\u4e2d \u65ad\u5f00\u7535\u6e90\u548c\u8fde\u63a5\u7ebf\uff0c\u5148\u5c06PCIe\u5361\u5b89\u88c5\u5230\u4e3b\u677f\u4e0a\uff0c\u7136\u540e\u91cd\u65b0\u5c06\u7ebf\u7f06\u8fde\u63a5\u597d\u3002\u4e0d\u540c\u6279\u6b21\u6536\u5230\u7684ATX\u7ebf\u989c\u8272\u53ef\u80fd\u4e0d\u4e00\u6837\uff0c\u8bf7\u76f4\u63a5\u53c2\u8003\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u8fde\u63a5\u3002 \u5230\u8fd9\u91cc\u4f60\u5c31\u53ef\u4ee5\u4eab\u53d7BLIKVM PCIe\u5361\u6765\u7ba1\u7406\u4f60\u7684\u8ba1\u7b97\u673a\u5566! \u9644\u5f55 1.\u5b89\u88c5\u534a\u9ad8\u7684PCIe\u6321\u677f Note \u9644\u5f55 2.\u5b89\u88c5\u6563\u70ed\u98ce\u6247 \u901a\u5e38\u4f7f\u7528\u91d1\u5c5e\u6563\u70ed\u7247\u5df2\u7ecf\u8db3\u591f\uff0c\u5b89\u88c5\u6563\u70ed\u98ce\u6247\u4e0d\u662f\u5fc5\u987b\u7684 \u98ce\u6247\u88ab\u6811\u8393\u6d3e\u7684GPIO12\u53e3\u63a7\u5236 \u9644\u5f55 3.\u5b89\u88c5wifi\u5929\u7ebf Note","title":"v2 PCIe\u5b89\u88c5\u8bf4\u660e"},{"location":"BLIKVM-PCIe-installation-zh/#blikvm-pcie","text":"","title":"BLIKVM PCIe \u5b89\u88c5\u8bf4\u660e"},{"location":"BLIKVM-PCIe-installation-zh/#1","text":"\u4ea7\u54c1\u6e05\u5355","title":"1.\u62c6\u5f00\u5305\u88c5\uff0c\u62ff\u51fa\u8bbe\u5907"},{"location":"BLIKVM-PCIe-installation-zh/#2","text":"\u5b89\u88c5CM4\u548c4\u4e2a\u516d\u89d2\u87ba\u67f1(\u6b64\u6587\u7ae0\u4f7f\u7528\u7684\u662fCM4 lite\u4f5c\u4e3a\u5217\u5b50\uff0c\u955c\u50cf\u5728\u51fa\u5382\u7684SD\u5361\u91cc\u5df2\u7ecf\u88ab\u9884\u88c5\u8f7d\uff0c\u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002\u82e5\u4f60\u7684CM4\u662fEMMc\u7248\u672c\uff0c\u5219\u4f60\u9700\u8981\u81ea\u5df1\u70e7\u5f55\u955c\u50cf \uff0c\u65e0\u6cd5\u76f4\u63a5\u4f7f\u7528SD\u5361\u542f\u52a8)\u3002\u7136\u540e\u5c06\u5bfc\u70ed\u7247\u6495\u4e0b\u4fdd\u62a4\u819c\uff0c\u7c98\u8d34\u5728CM4\u9876\u90e8\u3002 \u5b89\u88c5\u91d1\u5c5e\u6563\u70ed\u7247\u3002 \u4e3b\u4f53\u8bbe\u5907\u5df2\u5b89\u88c5\u5b8c\u6210","title":"2.\u5b89\u88c5\u4e3b\u4f53\u8bbe\u5907"},{"location":"BLIKVM-PCIe-installation-zh/#3usbatx","text":"\u6b64\u6587\u4e2d\u7684\u4e3b\u677f\u4f7f\u7528\u7684\u662fAsus H520M-E\uff0c\u4e0d\u540c\u7684\u4e3b\u677f\u63a5\u53e3\u5b9a\u4e49\u4e0d\u4e00\u5b9a\u76f8\u540c\uff0c\u8bf7\u53c2\u8003\u60a8\u7684\u4e3b\u677f\u76f8\u5173\u624b\u518c\u3002","title":"3.\u8fde\u63a5USB\u63a5\u53e3\u548cATX\u63a5\u53e3"},{"location":"BLIKVM-PCIe-installation-zh/#4oled","text":"\u60a8\u6536\u5230\u7684OLED\u662f\u672a\u5b89\u88c5\u652f\u67b6\u7684\uff0c\u8bf7\u53c2\u8003\u56fe\u7247\u8fdb\u884c\u5b89\u88c5\u3002\u53e6\u5916OLED\u652f\u67b6\u4e3a\u4e9a\u514b\u529b\u6750\u6599\uff0c\u9700\u8981\u6495\u53bb\u8868\u9762\u7684\u4fdd\u62a4\u819c\u540e\u4f7f\u7528\u3002 \u4e0a\u9762\u7684\u5c31\u662f\u5b89\u88c5\u6b65\u9aa4\uff0c\u672a\u6495\u819c\u7684\u6548\u679c\uff0c\u5b9e\u9645\u4f7f\u7528\u8bf7\u6495\u53bb\u4fdd\u62a4\u819c\uff0c\u6548\u679c\u5982\u4e0b\uff1a","title":"4.\u94fe\u63a5OLED\u663e\u793a\u5c4f"},{"location":"BLIKVM-PCIe-installation-zh/#5hdmi","text":"\u5c06\u60a8\u7535\u8111\u7684HDMI\u8f93\u51fa\u53e3\u901a\u8fc7HDMI\u7ebf\u76f4\u63a5\u8fde\u63a5\u5230BLIKVM PCIe\u5361\u7684HDMI IN\u63a5\u53e3\u3002HDMI EDID\u6a21\u62df\u5668\u4e0d\u662f\u5fc5\u987b\u8981\u662f\u7528\u7684\uff0c\u5f53\u60a8\u7684\u8ba1\u7b97\u673a\u4e0d\u80fd\u6b63\u786e\u8f93\u51faHDMI\u753b\u9762\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7\u5c1d\u8bd5\u4f7f\u7528\u6b64\u6a21\u5757\u63a5\u5728\u4f60\u7684\u8ba1\u7b97\u673a\u7684HDMI\u63a5\u53e3\u4e0a\uff0c\u4ece\u800c\u8ba9\u60a8\u7684\u8ba1\u7b97\u673a\u53ef\u4ee5\u8f93\u51fa\u4e00\u4e2a\u6b63\u786e\u627dHDMI\u753b\u9762","title":"5.\u8fde\u63a5HDMI\u7ebf"},{"location":"BLIKVM-PCIe-installation-zh/#6","text":"\u6807\u51c6: IEEE 802.3af PoE\u8f93\u5165\u7535\u538b:37v-57v. \u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6\uff0c\u4e0d\u9700\u8981\u4f7f\u7528PWR-IN\u7aef\u53e3\u518d\u4f9b\u7535","title":"6.\u8fde\u63a5\u7f51\u7ebf"},{"location":"BLIKVM-PCIe-installation-zh/#7usb","text":"\u5f53\u4f7f\u7528PoE\u4f9b\u7535\u65f6, \u901a\u8fc7\u4f7f\u7528PWR-IN\u7aef\u53e3\u8fdb\u884c\u4f9b\u7535\u7684USB\u7535\u6e90\u9002\u914d\u5668\u9700\u89815V/3A\u3002","title":"7.\u8fde\u63a5USB\u4f9b\u7535\u63a5\u53e3"},{"location":"BLIKVM-PCIe-installation-zh/#8","text":"OLED\u663e\u793a\u5c4f\u73b0\u5b9e\u8bbe\u5907IP\u5730\u5740\u548c\u5176\u5b83\u4fe1\u606f \u4f7f\u7528\u8be5IP\u5730\u5740\u5728\u6d4f\u89c8\u5668\u4e0a\u76f4\u63a5\u8f93\u5165\uff0c\u5373\u53ef\u6253\u5f00web\u63a7\u5236\u754c\u9762\u3002\u5982\u679c\u89c6\u9891\u9f20\u6807\u952e\u76d8\u4ee5\u53ca\u5176\u5b83\u4f60\u5173\u5fc3\u7684\u529f\u80fd\u6d4b\u8bd5\u4e00\u5207\u6b63\u5728\uff0c\u5c31\u53ef\u4ee5\u5c06BLIKVM PCIe\u5361\u5b89\u88c5\u5230\u4f60\u7684\u673a\u7bb1\u4e2d\u3002","title":"8.\u6d4b\u8bd5"},{"location":"BLIKVM-PCIe-installation-zh/#9blikvm-pcie","text":"\u65ad\u5f00\u7535\u6e90\u548c\u8fde\u63a5\u7ebf\uff0c\u5148\u5c06PCIe\u5361\u5b89\u88c5\u5230\u4e3b\u677f\u4e0a\uff0c\u7136\u540e\u91cd\u65b0\u5c06\u7ebf\u7f06\u8fde\u63a5\u597d\u3002\u4e0d\u540c\u6279\u6b21\u6536\u5230\u7684ATX\u7ebf\u989c\u8272\u53ef\u80fd\u4e0d\u4e00\u6837\uff0c\u8bf7\u76f4\u63a5\u53c2\u8003\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u8fde\u63a5\u3002 \u5230\u8fd9\u91cc\u4f60\u5c31\u53ef\u4ee5\u4eab\u53d7BLIKVM PCIe\u5361\u6765\u7ba1\u7406\u4f60\u7684\u8ba1\u7b97\u673a\u5566!","title":"9.\u5b89\u88c5BLIKVM PCIe\u5361\u5230\u673a\u7bb1\u4e2d"},{"location":"BLIKVM-PCIe-installation-zh/#1pcie","text":"Note","title":"\u9644\u5f55 1.\u5b89\u88c5\u534a\u9ad8\u7684PCIe\u6321\u677f"},{"location":"BLIKVM-PCIe-installation-zh/#2_1","text":"\u901a\u5e38\u4f7f\u7528\u91d1\u5c5e\u6563\u70ed\u7247\u5df2\u7ecf\u8db3\u591f\uff0c\u5b89\u88c5\u6563\u70ed\u98ce\u6247\u4e0d\u662f\u5fc5\u987b\u7684 \u98ce\u6247\u88ab\u6811\u8393\u6d3e\u7684GPIO12\u53e3\u63a7\u5236","title":"\u9644\u5f55 2.\u5b89\u88c5\u6563\u70ed\u98ce\u6247"},{"location":"BLIKVM-PCIe-installation-zh/#3wifi","text":"Note","title":"\u9644\u5f55 3.\u5b89\u88c5wifi\u5929\u7ebf"},{"location":"BliKVM-v4-guide/","text":"BliKVM v4 Allwinner BliKVM v4\u662f\u4e00\u6b3e\u751f\u4ea7\u5c31\u7eea\u3001\u5373\u63d2\u5373\u7528\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86 \u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406 \u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e \u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5 \u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1 \uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 BliKVM V4 Datasheet Craft Computing: Goodbye IPMI - Blicube BliKVM V4 \u6d4b\u8bc4 Lawrence Systems: Blicube BliKVM V4: Is This the Best Linux IP KVM Yet? RainCat: BliKVM V4 Allwinnner\u5b89\u88c5PiKVM\u6559\u7a0b \u529f\u80fd\u7279\u70b9 \u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63014K@30Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) HDMI\u89c6\u9891\u73af\u51fa ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE & DC \u652f\u6301 WiFi \u4e32\u53e3 \u63a7\u5236\u53f0\u7aef\u53e3 1.33\u82f1\u5bf8 \u5f69\u8272 \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) HDMI\u652f\u6301\u7684\u5206\u8fa8\u7387\u7c7b\u578b \u5b89\u88c5\u8981\u6c42 \u9664v4\u5957\u4ef6\u5916\uff0c\u60a8\u8fd8\u9700\u81ea\u5907\u4ee5\u4e0b\u8bbe\u5907 \u7535\u6e90\u9002\u914d\u5668\uff085V 3A, USB-C\u7aef\u53e3\u621612V 2ADC\u7aef\u53e3\uff09,\u82e5\u4f60\u8ba1\u5212\u4f7f\u7528PoE\u4f9b\u7535\uff0c\u6216\u8005\u6240\u7684\u88ab\u63a7\u8ba1\u7b97\u673aUSB\u53e3\u6709\u5145\u8db3\u7684\u4f9b\u7535\u80fd\u529b\uff0c\u5219\u4e5f\u4e0d\u9700\u8981\u5355\u72ec\u7684\u7535\u6e90\u9002\u914d\u5668\uff1b HDMI \u7ebf\u7f06(\u81f3\u5c11\u4e00\u6839)\uff0c\u82e5\u60a8\u540c\u65f6\u9700\u8981\u4f7f\u7528HDMI\u73af\u51fa\u63a5\u53e3\uff0c\u5219\u9700\u89812\u6839\uff1b \u7f51\u7ebf\uff08\u7ed3\u5408\u60a8\u9700\u6c42\u81ea\u5907\uff09,\u4f7f\u7528ATX\u5f00\u5173\u673a\u529f\u80fd\u9700\u4e00\u6839\uff0c\u4f7f\u7528\u7f51\u7ebf\u4e0a\u7f51\u529f\u80fd\u9700\u4e00\u6839\uff1b USB-C\u8f6cUSB-A\u7ebf\u7f06\u4e00\u6839\uff08\u7528\u4e8e\u9f20\u6807\u548c\u952e\u76d8\u6570\u636e\u4f20\u8f93\uff09. \u7ec8\u7aef\u5347\u7ea7\u6ce8\u610f\uff01 \u5728\u5347\u7ea7\u524d\uff0c\u9700\u6267\u884c\u4e0b\u9762\u547d\u4ee4\uff0c\u5426\u5219apt-get update \u548c apt-get upgrade\u540e\u955c\u50cf\u4f1a\u65e0\u6cd5\u542f\u52a8 apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64 BliKVM v4 \u62c6\u7bb1\uff0c\u8fde\u63a5\uff0c\u4f7f\u7528\u53c2\u8003\u89c6\u9891 \u5b89\u88c5\u6b65\u9aa4 1. \u6253\u5f00v4\u5957\u4ef6\u5305\u88c5\uff0c\u6839\u636e\u4e0b\u9762\u6240\u793a\u7684\u8fde\u63a5\u793a\u610f\u56fe\uff0c\u5c06BliKVM\u548c\u88ab\u63a7\u8ba1\u7b97\u673a\u8fde\u63a5\u8d77\u6765\uff1b ATX\u8fde\u63a5 \u8bf7\u53c2\u8003 ATX\u8fde\u63a5\u6307\u5357 \u3002 2. \u5728\u6240\u6709\u8fde\u63a5\u7ebf\u8fde\u63a5\u597d\u540e,\u5bf9BliKVM\u8fdb\u884c\u4e0a\u7535\uff0c\u76f4\u5230\u663e\u793a\u5c4f\u51fa\u73b0\u753b\u9762\uff0c\u5373\u8bbe\u5907\u6b63\u5e38\u542f\u52a8\u3002 3. \u4ed4\u7ec6\u9605\u8bfb \u201c\u7b2c\u4e00\u6b65\u201d \u6307\u5357-\u5982\u4f55\u5728\u7f51\u7edc\u4e0a\u67e5\u627e\u8bbe\u5907\u3001\u5982\u4f55\u767b\u5f55\u3001\u66f4\u6539\u5bc6\u7801\u7b49\u7b49\u3002\u6309\u7167\u4e0a\u9762\u63cf\u8ff0\u7684\u6b65\u9aa4\u64cd\u4f5c\uff0c\u7136\u540e\u8fd4\u56de\u672c\u9875\u3002 4. \u5c1d\u8bd5\u4f7f\u7528 Web \u754c\u9762\u7ba1\u7406\u8ba1\u7b97\u673a\u7684 BliKVM\u3002 \u786e\u4fdd\u60a8\u53ef\u4ee5\u770b\u5230\u56fe\u50cf\u5e76\u4e14\u952e\u76d8\u548c\u9f20\u6807\u90fd\u6b63\u5e38\u5de5\u4f5c\u3002\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u67e5\u770b\u6211\u4eec\u7684 \u5e38\u89c1\u95ee\u9898 \uff08\u5b83\u975e\u5e38\u6709\u7528\uff09\u3002\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u8bf7\u5728\u6211\u4eec\u7684 Discord\u804a\u5929\u5ba4 \u5bfb\u6c42\u652f\u6301\u3002 5. \u60a8\u53ef\u4ee5\u67e5\u770bwiki\u5176\u4ed6\u7684\u9875\u9762\uff0c\u63a2\u7d22BliKVM\u7684\u66f4\u591a\u529f\u80fd\uff0c\u795d\u60a8\u73a9\u7684\u5f00\u5fc3\uff01 \u89c6\u9891\u6a21\u5f0f v4\u6700\u9ad8\u652f\u63014K30Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u4f20\u8f93\u5206\u8fa8\u7387\u9ed8\u8ba4\u4e3a1920x1080\u3002 \u53d1\u8d27\u6e05\u5355 BLIKVM v4 Allwinner\u7248\u672c 1 BLIKVM v4 1 WiFi\u5929\u7ebf 1 ATX\u9002\u914d\u677f 1 ATX\u675c\u90a6\u7ebf\u7f06 8pin \u6bcd\u5bf9\u6bcd 60cm 1 ATX\u675c\u90a6\u7ebf\u7f06 8pin \u6bcd\u5bf9\u516c 60cm 1 1U\u5b89\u88c5\u6302\u8033 2 M2.5x5\u87ba\u4e1d 8 \u7845\u80f6\u9632\u649e\u7c92 1 \u901a\u8fc75V\u7aef\u53e3\u8bbf\u95ee\u4e32\u884c\u63a7\u5236\u53f0 5V\u7aef\u53e3\u53ef\u4ee5\u540c\u65f6\u7528\u4e8e\u4f9b\u7535\u548c\u4e32\u884c\u63a7\u5236\u53f0\u8bbf\u95ee\uff0c\u9ed8\u8ba4\u6ce2\u7279\u7387\u4e3a115200\u3002BliKVM v4\u5185\u90e8\u6709\u4e00\u4e2a\u57fa\u4e8eCH341\u7684USB\u5230UART\u8f6c\u6362\u5668\uff0c\u5b83\u8fde\u63a5\u5230 mCore-H616 SoC \u7684UART0\uff0c\u6240\u4ee5\u4f60\u53ef\u4ee5\u5c06PC\u7684USB\u7aef\u53e3\u8fde\u63a5\u52305V\u7aef\u53e3\uff0c\u65e0\u9700\u5916\u90e8UART\u548cUSB-C\u5230\u675c\u90a6\u9002\u914d\u5668\u3002 PC USB\u7aef\u53e3\u7535\u6d41\u8f93\u51fa \u5c1d\u8bd5\u4f7f\u75285V\u7aef\u53e3\u65f6\u8981\u5c0f\u5fc3\uff0c\u56e0\u4e3a\u5355\u72ec\u7684PC USB\u7aef\u53e3\u53ef\u80fd\u65e0\u6cd5\u63d0\u4f9b3A\uff085V\uff09\uff0c\u8fd9\u662f\u677f\u5361\u5de5\u4f5c\u7684\u8981\u6c42\u3002\u53ef\u4ee5\u540c\u65f6\u4f7f\u752812V 2A DC\u7aef\u53e3\u4f9b\u7535\u548c5V\u7aef\u53e3\u8fdb\u884c\u4e32\u884c\u901a\u4fe1\uff0c\u65e0\u9700 USB\u5206\u7ebf\u5668\u677f \u3002\u6216\u8005\u4f7f\u7528\u5206\u7ebf\u5668\u677f\u5206\u79bb\u51faVCC\u5f15\u811a\uff0c\u5e76\u4f7f\u7528\u5355\u72ec\u76845V 3A\u7535\u6e90\u4e3a5V\u7aef\u53e3\u7684VCC\u5f15\u811a\u4f9b\u7535\u3002\u540c\u6837\uff0c\u5f53BliKVM\u901a\u7535\u65f6\u4ece12V 2A DC\u7aef\u53e3\u65ad\u5f00\u7535\u7f06\u65f6\uff0c\u8981\u786e\u4fdd\u5148\u4ece5V\u7aef\u53e3\u65ad\u5f00\u7535\u7f06\uff08\u56e0\u4e3a\u572812V 2A\u7535\u6e90\u65ad\u5f00\u540e\uff0c\u9664\u975e\u4f7f\u7528\u4e86\u5206\u7ebf\u5668\uff0c\u5426\u52195V\u7aef\u53e3\u5c06\u6210\u4e3aBliKVM v4\u7684\u7535\u6e90\uff09\u3002 \u5f53\u4f60\u5c06USB\u7535\u7f06\u8fde\u63a5\u5230BliKVM v4\u76845V\u7aef\u53e3\u65f6\uff0c\u4f60\u5e94\u8be5\u5728\u4e3b\u673a\u5185\u6838\u65e5\u5fd7\u4e2d\u770b\u5230\u7c7b\u4f3c\u8fd9\u6837\u7684\u5185\u5bb9\uff08\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662f\u57fa\u4e8eLinux\u7684\u64cd\u4f5c\u7cfb\u7edf\uff09: usb 1-1.2: new full-speed USB device number 12 using xhci_hcd usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.34 usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1.2: Product: USB Serial ch341 1-1.2:1.0: ch341-uart converter detected usb 1-1.2: ch341-uart converter now attached to ttyUSB0 \u7136\u540e\uff0c\u53ef\u4ee5\u4f7f\u7528 GNU screen \u6216 TIO \u8bbf\u95ee\u6b64\u7aef\u53e3: tio /dev/ttyUSB0 mangopimcore login: blikvm # ... \u5982\u679c\u4f60\u9700\u8981\u68c0\u67e5\u901a\u8fc7UART0\u63a5\u6536\u4e86\u591a\u5c11\u6570\u636e\uff0c\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b\u901a\u8fc7proc\u516c\u5f00\u7684\u8ba1\u6570\u5668\u6765\u5b9e\u73b0\uff08\u5f53\u4ece\u5916\u90e8\u4e3b\u673a\u53d1\u9001\u6570\u636e\u65f6\uff0c\u5982\u679c\u5185\u7f6e\u7684USB\u5230UART\u8f6c\u6362\u5668\u5de5\u4f5c\u6b63\u5e38\uff0crx\u8ba1\u6570\u5668\u5e94\u8be5\u4f1a\u589e\u52a0\uff09\uff1a root@mangopimcore:~# grep '0: uart' /proc/tty/driver/serial 0: uart:16550A mmio:0x05000000 irq:284 tx:20306 rx:40 pe:1 RTS|DTR \u8d2d\u4e70\u94fe\u63a5 v4\u6dd8\u5b9d\u5730\u5740","title":"BliKVM v4 Allwinner\u5bfc\u89c8"},{"location":"BliKVM-v4-guide/#blikvm-v4-allwinner","text":"BliKVM v4\u662f\u4e00\u6b3e\u751f\u4ea7\u5c31\u7eea\u3001\u5373\u63d2\u5373\u7528\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86 \u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406 \u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e \u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5 \u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1 \uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 BliKVM V4 Datasheet Craft Computing: Goodbye IPMI - Blicube BliKVM V4 \u6d4b\u8bc4 Lawrence Systems: Blicube BliKVM V4: Is This the Best Linux IP KVM Yet? RainCat: BliKVM V4 Allwinnner\u5b89\u88c5PiKVM\u6559\u7a0b","title":"BliKVM v4 Allwinner"},{"location":"BliKVM-v4-guide/#_1","text":"\u89c6\u9891\u6355\u83b7 (HDMI,\u6700\u9ad8\u652f\u63014K@30Hz\u8f93\u5165) \u952e\u76d8\u8f6c\u53d1 \u9f20\u6807\u8f6c\u53d1 \u865a\u62dfU\u76d8(\u91cd\u88c5\u7cfb\u7edf) HDMI\u89c6\u9891\u73af\u51fa ATX \u4f7f\u7528 ATX \u529f\u80fd\u63a7\u5236\u670d\u52a1\u5668\u7535\u6e90 \u5168\u5c4f\u6a21\u5f0f \u901a\u8fc7 Web UI \u8bbf\u95ee \u652f\u6301 \u591a\u8bed\u8a00 \u5207\u6362 \u652f\u6301 PoE & DC \u652f\u6301 WiFi \u4e32\u53e3 \u63a7\u5236\u53f0\u7aef\u53e3 1.33\u82f1\u5bf8 \u5f69\u8272 \u5c4f\u5e55 \u5b9e\u65f6\u65f6\u949f (RTC) HDMI\u652f\u6301\u7684\u5206\u8fa8\u7387\u7c7b\u578b","title":"\u529f\u80fd\u7279\u70b9"},{"location":"BliKVM-v4-guide/#_2","text":"\u9664v4\u5957\u4ef6\u5916\uff0c\u60a8\u8fd8\u9700\u81ea\u5907\u4ee5\u4e0b\u8bbe\u5907 \u7535\u6e90\u9002\u914d\u5668\uff085V 3A, USB-C\u7aef\u53e3\u621612V 2ADC\u7aef\u53e3\uff09,\u82e5\u4f60\u8ba1\u5212\u4f7f\u7528PoE\u4f9b\u7535\uff0c\u6216\u8005\u6240\u7684\u88ab\u63a7\u8ba1\u7b97\u673aUSB\u53e3\u6709\u5145\u8db3\u7684\u4f9b\u7535\u80fd\u529b\uff0c\u5219\u4e5f\u4e0d\u9700\u8981\u5355\u72ec\u7684\u7535\u6e90\u9002\u914d\u5668\uff1b HDMI \u7ebf\u7f06(\u81f3\u5c11\u4e00\u6839)\uff0c\u82e5\u60a8\u540c\u65f6\u9700\u8981\u4f7f\u7528HDMI\u73af\u51fa\u63a5\u53e3\uff0c\u5219\u9700\u89812\u6839\uff1b \u7f51\u7ebf\uff08\u7ed3\u5408\u60a8\u9700\u6c42\u81ea\u5907\uff09,\u4f7f\u7528ATX\u5f00\u5173\u673a\u529f\u80fd\u9700\u4e00\u6839\uff0c\u4f7f\u7528\u7f51\u7ebf\u4e0a\u7f51\u529f\u80fd\u9700\u4e00\u6839\uff1b USB-C\u8f6cUSB-A\u7ebf\u7f06\u4e00\u6839\uff08\u7528\u4e8e\u9f20\u6807\u548c\u952e\u76d8\u6570\u636e\u4f20\u8f93\uff09. \u7ec8\u7aef\u5347\u7ea7\u6ce8\u610f\uff01 \u5728\u5347\u7ea7\u524d\uff0c\u9700\u6267\u884c\u4e0b\u9762\u547d\u4ee4\uff0c\u5426\u5219apt-get update \u548c apt-get upgrade\u540e\u955c\u50cf\u4f1a\u65e0\u6cd5\u542f\u52a8 apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64 BliKVM v4 \u62c6\u7bb1\uff0c\u8fde\u63a5\uff0c\u4f7f\u7528\u53c2\u8003\u89c6\u9891","title":"\u5b89\u88c5\u8981\u6c42"},{"location":"BliKVM-v4-guide/#_3","text":"1. \u6253\u5f00v4\u5957\u4ef6\u5305\u88c5\uff0c\u6839\u636e\u4e0b\u9762\u6240\u793a\u7684\u8fde\u63a5\u793a\u610f\u56fe\uff0c\u5c06BliKVM\u548c\u88ab\u63a7\u8ba1\u7b97\u673a\u8fde\u63a5\u8d77\u6765\uff1b ATX\u8fde\u63a5 \u8bf7\u53c2\u8003 ATX\u8fde\u63a5\u6307\u5357 \u3002 2. \u5728\u6240\u6709\u8fde\u63a5\u7ebf\u8fde\u63a5\u597d\u540e,\u5bf9BliKVM\u8fdb\u884c\u4e0a\u7535\uff0c\u76f4\u5230\u663e\u793a\u5c4f\u51fa\u73b0\u753b\u9762\uff0c\u5373\u8bbe\u5907\u6b63\u5e38\u542f\u52a8\u3002 3. \u4ed4\u7ec6\u9605\u8bfb \u201c\u7b2c\u4e00\u6b65\u201d \u6307\u5357-\u5982\u4f55\u5728\u7f51\u7edc\u4e0a\u67e5\u627e\u8bbe\u5907\u3001\u5982\u4f55\u767b\u5f55\u3001\u66f4\u6539\u5bc6\u7801\u7b49\u7b49\u3002\u6309\u7167\u4e0a\u9762\u63cf\u8ff0\u7684\u6b65\u9aa4\u64cd\u4f5c\uff0c\u7136\u540e\u8fd4\u56de\u672c\u9875\u3002 4. \u5c1d\u8bd5\u4f7f\u7528 Web \u754c\u9762\u7ba1\u7406\u8ba1\u7b97\u673a\u7684 BliKVM\u3002 \u786e\u4fdd\u60a8\u53ef\u4ee5\u770b\u5230\u56fe\u50cf\u5e76\u4e14\u952e\u76d8\u548c\u9f20\u6807\u90fd\u6b63\u5e38\u5de5\u4f5c\u3002\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u67e5\u770b\u6211\u4eec\u7684 \u5e38\u89c1\u95ee\u9898 \uff08\u5b83\u975e\u5e38\u6709\u7528\uff09\u3002\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u5e2e\u52a9\uff0c\u8bf7\u5728\u6211\u4eec\u7684 Discord\u804a\u5929\u5ba4 \u5bfb\u6c42\u652f\u6301\u3002 5. \u60a8\u53ef\u4ee5\u67e5\u770bwiki\u5176\u4ed6\u7684\u9875\u9762\uff0c\u63a2\u7d22BliKVM\u7684\u66f4\u591a\u529f\u80fd\uff0c\u795d\u60a8\u73a9\u7684\u5f00\u5fc3\uff01","title":"\u5b89\u88c5\u6b65\u9aa4"},{"location":"BliKVM-v4-guide/#_4","text":"v4\u6700\u9ad8\u652f\u63014K30Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u4f20\u8f93\u5206\u8fa8\u7387\u9ed8\u8ba4\u4e3a1920x1080\u3002","title":"\u89c6\u9891\u6a21\u5f0f"},{"location":"BliKVM-v4-guide/#_5","text":"BLIKVM v4 Allwinner\u7248\u672c 1 BLIKVM v4 1 WiFi\u5929\u7ebf 1 ATX\u9002\u914d\u677f 1 ATX\u675c\u90a6\u7ebf\u7f06 8pin \u6bcd\u5bf9\u6bcd 60cm 1 ATX\u675c\u90a6\u7ebf\u7f06 8pin \u6bcd\u5bf9\u516c 60cm 1 1U\u5b89\u88c5\u6302\u8033 2 M2.5x5\u87ba\u4e1d 8 \u7845\u80f6\u9632\u649e\u7c92 1","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"BliKVM-v4-guide/#5v","text":"5V\u7aef\u53e3\u53ef\u4ee5\u540c\u65f6\u7528\u4e8e\u4f9b\u7535\u548c\u4e32\u884c\u63a7\u5236\u53f0\u8bbf\u95ee\uff0c\u9ed8\u8ba4\u6ce2\u7279\u7387\u4e3a115200\u3002BliKVM v4\u5185\u90e8\u6709\u4e00\u4e2a\u57fa\u4e8eCH341\u7684USB\u5230UART\u8f6c\u6362\u5668\uff0c\u5b83\u8fde\u63a5\u5230 mCore-H616 SoC \u7684UART0\uff0c\u6240\u4ee5\u4f60\u53ef\u4ee5\u5c06PC\u7684USB\u7aef\u53e3\u8fde\u63a5\u52305V\u7aef\u53e3\uff0c\u65e0\u9700\u5916\u90e8UART\u548cUSB-C\u5230\u675c\u90a6\u9002\u914d\u5668\u3002 PC USB\u7aef\u53e3\u7535\u6d41\u8f93\u51fa \u5c1d\u8bd5\u4f7f\u75285V\u7aef\u53e3\u65f6\u8981\u5c0f\u5fc3\uff0c\u56e0\u4e3a\u5355\u72ec\u7684PC USB\u7aef\u53e3\u53ef\u80fd\u65e0\u6cd5\u63d0\u4f9b3A\uff085V\uff09\uff0c\u8fd9\u662f\u677f\u5361\u5de5\u4f5c\u7684\u8981\u6c42\u3002\u53ef\u4ee5\u540c\u65f6\u4f7f\u752812V 2A DC\u7aef\u53e3\u4f9b\u7535\u548c5V\u7aef\u53e3\u8fdb\u884c\u4e32\u884c\u901a\u4fe1\uff0c\u65e0\u9700 USB\u5206\u7ebf\u5668\u677f \u3002\u6216\u8005\u4f7f\u7528\u5206\u7ebf\u5668\u677f\u5206\u79bb\u51faVCC\u5f15\u811a\uff0c\u5e76\u4f7f\u7528\u5355\u72ec\u76845V 3A\u7535\u6e90\u4e3a5V\u7aef\u53e3\u7684VCC\u5f15\u811a\u4f9b\u7535\u3002\u540c\u6837\uff0c\u5f53BliKVM\u901a\u7535\u65f6\u4ece12V 2A DC\u7aef\u53e3\u65ad\u5f00\u7535\u7f06\u65f6\uff0c\u8981\u786e\u4fdd\u5148\u4ece5V\u7aef\u53e3\u65ad\u5f00\u7535\u7f06\uff08\u56e0\u4e3a\u572812V 2A\u7535\u6e90\u65ad\u5f00\u540e\uff0c\u9664\u975e\u4f7f\u7528\u4e86\u5206\u7ebf\u5668\uff0c\u5426\u52195V\u7aef\u53e3\u5c06\u6210\u4e3aBliKVM v4\u7684\u7535\u6e90\uff09\u3002 \u5f53\u4f60\u5c06USB\u7535\u7f06\u8fde\u63a5\u5230BliKVM v4\u76845V\u7aef\u53e3\u65f6\uff0c\u4f60\u5e94\u8be5\u5728\u4e3b\u673a\u5185\u6838\u65e5\u5fd7\u4e2d\u770b\u5230\u7c7b\u4f3c\u8fd9\u6837\u7684\u5185\u5bb9\uff08\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662f\u57fa\u4e8eLinux\u7684\u64cd\u4f5c\u7cfb\u7edf\uff09: usb 1-1.2: new full-speed USB device number 12 using xhci_hcd usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.34 usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1.2: Product: USB Serial ch341 1-1.2:1.0: ch341-uart converter detected usb 1-1.2: ch341-uart converter now attached to ttyUSB0 \u7136\u540e\uff0c\u53ef\u4ee5\u4f7f\u7528 GNU screen \u6216 TIO \u8bbf\u95ee\u6b64\u7aef\u53e3: tio /dev/ttyUSB0 mangopimcore login: blikvm # ... \u5982\u679c\u4f60\u9700\u8981\u68c0\u67e5\u901a\u8fc7UART0\u63a5\u6536\u4e86\u591a\u5c11\u6570\u636e\uff0c\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b\u901a\u8fc7proc\u516c\u5f00\u7684\u8ba1\u6570\u5668\u6765\u5b9e\u73b0\uff08\u5f53\u4ece\u5916\u90e8\u4e3b\u673a\u53d1\u9001\u6570\u636e\u65f6\uff0c\u5982\u679c\u5185\u7f6e\u7684USB\u5230UART\u8f6c\u6362\u5668\u5de5\u4f5c\u6b63\u5e38\uff0crx\u8ba1\u6570\u5668\u5e94\u8be5\u4f1a\u589e\u52a0\uff09\uff1a root@mangopimcore:~# grep '0: uart' /proc/tty/driver/serial 0: uart:16550A mmio:0x05000000 irq:284 tx:20306 rx:40 pe:1 RTS|DTR","title":"\u901a\u8fc75V\u7aef\u53e3\u8bbf\u95ee\u4e32\u884c\u63a7\u5236\u53f0"},{"location":"BliKVM-v4-guide/#_6","text":"v4\u6dd8\u5b9d\u5730\u5740","title":"\u8d2d\u4e70\u94fe\u63a5"},{"location":"Datasheet-BliKVM-v4/","text":"BliKVM v4 \u786c\u4ef6\u624b\u518c \u63a5\u53e3\u5b9a\u4e49 1 USB 2.0 10 \u5929\u7ebf\u63a5\u53e3 2 \u4f9b\u7535\u53e3 5V 3A & UART 11 \u7f51\u53e3 100M & PoE 3 ATX \u63a7\u5236\u7aef\u53e3 12 1.33\u5bf8LCD\u5c4f\u5e55 4 HDMI \u89c6\u9891\u73af\u51fa\u7aef\u53e3 13 \u4f9b\u7535\u6307\u793a\u706f (\u7ea2\u8272) 5 USB-PC 14 \u7528\u6237\u81ea\u5b9a\u4e49\u6309\u94ae 6 \u4f9b\u7535\u53e3 12V 2A 5.5*2.1mm 15 \u72b6\u6001\u6307\u793a\u706f (\u7eff\u8272) 7 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 16 \u5c4f\u5e55\u663e\u793a\u6309\u94ae 8 HDMI \u8f93\u5165\u6307\u793a\u706f (\u7eff\u8272) 17 Micro SD \u5361\u69fd 9 HDMI \u8f93\u51fa\u6307\u793a\u706f (\u9ec4\u8272) \u53c2\u6570 \u53c2\u6570\u540d\u79f0 \u63cf\u8ff0 \u4f9b\u7535 5V 3A 5V \u7aef\u53e3, USB-PC \u7aef\u53e3 12V 2A 12V DC\u7aef\u53e3 PoE \u4ee5\u592a\u7f51\u4f9b\u7535 (IEEE802.3af\u534f\u8bae) 48V DC \u7aef\u53e3 HDMI-IN HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 HDMI-OUT HDMI \u89c6\u9891\u73af\u51fa\u7aef\u53e3 USB-PC \u6a21\u62df\u952e\u76d8\uff0c\u9f20\u6807\uff0c\u5927\u5bb9\u91cf\u5b58\u50a8\u5668\u6216\u5176\u4ed6USB\u8bbe\u5907 ATX \u5f00\u5173\u673a\u88ab\u63a7\u7535\u8111\uff0c\u8bfb\u53d6\u88ab\u63a7\u7535\u8111\u72b6\u6001\u6307\u793a\u706f WiFi&BT IEEE802.11 b/g/n + BLE4.2 Micro SD \u5361\u69fd \u5b89\u88c5\u955c\u50cf\u5185\u5b58\u5361 5V port 5V 3A \u7535\u6e90\u6216\u4e32\u884c\u63a7\u5236\u53f0\u7ba1\u7406\u7aef\u53e3 \u663e\u793a\u548c\u6307\u793a\u706f LED\u6307\u793a\u706f \u7535\u6e90\u6307\u793a\u706f\uff0c\u72b6\u6001\u6307\u793a\u706f\uff0cHDM\u8f93\u5165\u8f93\u51fa\u6307\u793a\u706f \u663e\u793a\u5c4f 1.33\u5bf8 TFT \u5f69\u8272\u5c4f\u5e55 \u7528\u6237\u81ea\u5b9a\u4e49\u6309\u94ae SW1 \u8702\u9e23\u5668 Find me \u89c6\u9891 \u5206\u8fa8\u7387 \u6700\u9ad8\u652f\u63014k@30Hz \u7f16\u7801\u683c\u5f0f MJPEG \u6838\u5fc3 \u82af\u7247 \u5168\u5fd7 H616/H313 RAM 1GB \u529f\u8017 \u6700\u9ad815W \u73af\u5883\u53c2\u6570 \u5de5\u4f5c\u6e29\u5ea6 0\u00b0C to 70\u00b0C \u5b58\u50a8\u6e29\u5ea6 -20\u00b0C to 60\u00b0C \u5c3a\u5bf8\u548c\u91cd\u91cf \u5c3a\u5bf8 100 (L) x 134 (W) x 44.4 (H) mm \u91cd\u91cf 0.45 kg BLIKVM CM4\u7248\u672c OLED\u663e\u793a\u5c4f \u8be5\u4ea7\u54c1\u6807\u914d\u4e00\u5757\u5206\u8fa8\u7387\u4e3a128x64\u7684\u5355\u8272OLED\u663e\u793a\u5c4f\uff0c\u82af\u7247\u578b\u53f7\u4e3aSSD1306\u3002 \u7528\u6237\u901a\u8fc7\u663e\u793a\u5c4f\u7684\u5e03\u7ebf\u5c06\u5176\u8fde\u63a5\u5230\u4ea7\u54c1\u3002 \u8be5\u6a21\u5757\u901a\u8fc7I^2^C\u63a5\u53e3\u8fde\u63a5\u5230CM4\u3002\u5e03\u7ebf\u5b9a\u4e49\u5982\u4e0b\u8868\u6240\u793a\u3002 \u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8e SSD1306\u9a71\u52a8 \u7684\u5355\u8272OLED\u5e93\u3002 Display(SSD1306) CM4 GND GND VCC 3.3V SCL GPIO3(SCL1,I^2^C) SDA GPIO2(SDA1,I^2^C) \u5916\u5f62\u5c3a\u5bf8","title":"BliKVM v4 \u786c\u4ef6\u624b\u518c"},{"location":"Datasheet-BliKVM-v4/#blikvm-v4","text":"","title":"BliKVM v4 \u786c\u4ef6\u624b\u518c"},{"location":"Datasheet-BliKVM-v4/#_1","text":"1 USB 2.0 10 \u5929\u7ebf\u63a5\u53e3 2 \u4f9b\u7535\u53e3 5V 3A & UART 11 \u7f51\u53e3 100M & PoE 3 ATX \u63a7\u5236\u7aef\u53e3 12 1.33\u5bf8LCD\u5c4f\u5e55 4 HDMI \u89c6\u9891\u73af\u51fa\u7aef\u53e3 13 \u4f9b\u7535\u6307\u793a\u706f (\u7ea2\u8272) 5 USB-PC 14 \u7528\u6237\u81ea\u5b9a\u4e49\u6309\u94ae 6 \u4f9b\u7535\u53e3 12V 2A 5.5*2.1mm 15 \u72b6\u6001\u6307\u793a\u706f (\u7eff\u8272) 7 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 16 \u5c4f\u5e55\u663e\u793a\u6309\u94ae 8 HDMI \u8f93\u5165\u6307\u793a\u706f (\u7eff\u8272) 17 Micro SD \u5361\u69fd 9 HDMI \u8f93\u51fa\u6307\u793a\u706f (\u9ec4\u8272)","title":"\u63a5\u53e3\u5b9a\u4e49"},{"location":"Datasheet-BliKVM-v4/#_2","text":"\u53c2\u6570\u540d\u79f0 \u63cf\u8ff0 \u4f9b\u7535 5V 3A 5V \u7aef\u53e3, USB-PC \u7aef\u53e3 12V 2A 12V DC\u7aef\u53e3 PoE \u4ee5\u592a\u7f51\u4f9b\u7535 (IEEE802.3af\u534f\u8bae) 48V DC \u7aef\u53e3 HDMI-IN HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 HDMI-OUT HDMI \u89c6\u9891\u73af\u51fa\u7aef\u53e3 USB-PC \u6a21\u62df\u952e\u76d8\uff0c\u9f20\u6807\uff0c\u5927\u5bb9\u91cf\u5b58\u50a8\u5668\u6216\u5176\u4ed6USB\u8bbe\u5907 ATX \u5f00\u5173\u673a\u88ab\u63a7\u7535\u8111\uff0c\u8bfb\u53d6\u88ab\u63a7\u7535\u8111\u72b6\u6001\u6307\u793a\u706f WiFi&BT IEEE802.11 b/g/n + BLE4.2 Micro SD \u5361\u69fd \u5b89\u88c5\u955c\u50cf\u5185\u5b58\u5361 5V port 5V 3A \u7535\u6e90\u6216\u4e32\u884c\u63a7\u5236\u53f0\u7ba1\u7406\u7aef\u53e3 \u663e\u793a\u548c\u6307\u793a\u706f LED\u6307\u793a\u706f \u7535\u6e90\u6307\u793a\u706f\uff0c\u72b6\u6001\u6307\u793a\u706f\uff0cHDM\u8f93\u5165\u8f93\u51fa\u6307\u793a\u706f \u663e\u793a\u5c4f 1.33\u5bf8 TFT \u5f69\u8272\u5c4f\u5e55 \u7528\u6237\u81ea\u5b9a\u4e49\u6309\u94ae SW1 \u8702\u9e23\u5668 Find me \u89c6\u9891 \u5206\u8fa8\u7387 \u6700\u9ad8\u652f\u63014k@30Hz \u7f16\u7801\u683c\u5f0f MJPEG \u6838\u5fc3 \u82af\u7247 \u5168\u5fd7 H616/H313 RAM 1GB \u529f\u8017 \u6700\u9ad815W \u73af\u5883\u53c2\u6570 \u5de5\u4f5c\u6e29\u5ea6 0\u00b0C to 70\u00b0C \u5b58\u50a8\u6e29\u5ea6 -20\u00b0C to 60\u00b0C \u5c3a\u5bf8\u548c\u91cd\u91cf \u5c3a\u5bf8 100 (L) x 134 (W) x 44.4 (H) mm \u91cd\u91cf 0.45 kg BLIKVM CM4\u7248\u672c OLED\u663e\u793a\u5c4f \u8be5\u4ea7\u54c1\u6807\u914d\u4e00\u5757\u5206\u8fa8\u7387\u4e3a128x64\u7684\u5355\u8272OLED\u663e\u793a\u5c4f\uff0c\u82af\u7247\u578b\u53f7\u4e3aSSD1306\u3002 \u7528\u6237\u901a\u8fc7\u663e\u793a\u5c4f\u7684\u5e03\u7ebf\u5c06\u5176\u8fde\u63a5\u5230\u4ea7\u54c1\u3002 \u8be5\u6a21\u5757\u901a\u8fc7I^2^C\u63a5\u53e3\u8fde\u63a5\u5230CM4\u3002\u5e03\u7ebf\u5b9a\u4e49\u5982\u4e0b\u8868\u6240\u793a\u3002 \u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8e SSD1306\u9a71\u52a8 \u7684\u5355\u8272OLED\u5e93\u3002 Display(SSD1306) CM4 GND GND VCC 3.3V SCL GPIO3(SCL1,I^2^C) SDA GPIO2(SDA1,I^2^C)","title":"\u53c2\u6570"},{"location":"Datasheet-BliKVM-v4/#_3","text":"","title":"\u5916\u5f62\u5c3a\u5bf8"},{"location":"Expand_Filesystem/","text":"\u6811\u8393\u6d3e\u6269\u5bb9 \u7b80\u4ecb \u7531\u4e8e\u5728\u5236\u4f5c\u955c\u50cf\u8fc7\u7a0b\u4e2d\uff0c\u5bf9\u955c\u50cf\u8fdb\u884c\u4e86\u538b\u7f29\uff0c\u5982\u679c\u4f60\u53d1\u73b0\u6811\u8393\u6d3eSD\u5361\u6216\u8005eMMC\u7684\u53ef\u7528\u7a7a\u95f4\u5c0f\u4e8e\u5b9e\u9645SD\u5361\u6216\u8005eMMc\u7684\u5bb9\u91cf\uff0c\u4f60\u53ef\u80fd\u9700\u8981\u8fdb\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff0c\u5bf9\u6811\u8393\u6d3e\u8fdb\u884c\u6269\u5bb9\u3002 \u5982\u679c\u4f60\u53d1\u73b0\u7cfb\u7edf\u5e76\u65e0raspi-config\u5de5\u5177\uff0c\u5219\u53ef\u4f7f\u7528\u65b9\u6cd5\u4e8c\uff08\u4f7f\u7528GParted\u5206\u533a\u5de5\u5177\uff09\u3002 \u65b9\u6cd5\u4e00 \u4f7f\u7528raspi-config\u5de5\u5177 \u5982\u679c\u4f60\u4f7f\u7528\u76842023\u5e746\u6708\u4efd\u540e\u7684\u955c\u50cf\uff0c\u56e0\u589e\u52a0\u4e86\u7b2c\u4e09\u4e2a\u53ef\u8bfb\u5199\u7684\u5206\u533a\uff0c\u6b64\u65b9\u6cd5\u5df2\u7ecf\u4e0d\u9002\u7528\uff0c\u8bf7\u53c2\u8003\u65b9\u6848\u4e8c\u548c\u65b9\u6848\u4e09\u3002 1. \u6253\u5f00raspi-config\u7cfb\u7edf\u914d\u7f6e\u5de5\u5177 sudo raspi-config 2. \u9009\u62e9Advancd Options\uff1a 3. \u9009\u62e9Expand Filesystem\uff1a 4. Ok: 5. \u7ec8\u7aef\u6267\u884c resize2fs /dev/mmcblk0p2 \u6b64\u547d\u4ee4\u5373\u53ef\u770b\u5230SD\u5361\u5df2\u7ecf\u6269\u5bb9\u6210\u529f\u3002 \u65b9\u6cd5\u4e8c \u4f7f\u7528GParted\u5206\u533a\u5de5\u5177 1. \u5c06\u70e7\u5f55\u597d\u955c\u50cf\u7684SD\u5361\u6216\u8005EMMc\u901a\u8fc7usb\u63a5\u5230\u7535\u8111\u4e0a\uff0c\u4ee5linux\u4e0bGParted\u5206\u533a\u5de5\u5177\u4e3a\u4f8b\uff0c\u5176\u5b83\u5e73\u53f0\u4e5f\u6709\u7c7b\u4f3c\u7684\u5206\u533a\u5de5\u5177\u3002\u6253\u5f00GParted\u8f6f\u4ef6\uff0c\u9009\u62e9SD\u5361\uff1a 2. \u89c2\u5bdf\u4e0a\u56feSD\u5361\u7684\u5206\u533a\u60c5\u51b5\uff0c\u53ef\u4ee5\u53d1\u73b0\u5728sdb3\u5206\u533a\u7684\u524d\u540e\u5404\u67092.01GB\u548c21.87GB\u7684\u7a7a\u95f4\u672a\u4f7f\u7528\uff0c\u8fd9\u90e8\u5206\u7a7a\u95f4\u5c31\u662f\u6211\u4eec\u8981\u6269\u5bb9\u7684\u7a7a\u95f4\u3002\u9009\u4e2dsdb3\u5206\u533a\uff0c\u70b9\u51fb\u8c03\u6574\u5927\u5c0f\u3002 3. \u53ef\u4ee5\u62d6\u52a8sdb3\u7684\u767d\u8272\u5206\u533a\u6269\u5927\u5230\u6700\u5de6\u548c\u6700\u53f3\uff0c\u6216\u8005\u586b\u5199\u201c\u4e4b\u524d\u7684\u53ef\u7528\u7a7a\u95f4\u201d\u4e3a\u201c0\u201d\uff0c\u201c\u65b0\u5927\u5c0f\u201d\u4e3a\u201c\u6700\u5927\u5927\u5c0f\u201d\u768425958\uff0c\u7136\u540e\u70b9\u51fb\u53f3\u4e0b\u89d2\u7684\u8c03\u6574\u5927\u5c0f\uff0c\u7136\u540e\u5f39\u51fa\u6765\u7684\u63d0\u9192\u70b9\u51fb\u786e\u8ba4\uff0c\u5373\u53ef\u770b\u5230sd\u7684\u6240\u6709\u672a\u4f7f\u7528\u7a7a\u95f4\u5168\u90e8\u7528\u4e0a\u4e86\u3002 4. \u5c06SD\u5361\u63d2\u5165\u8bbe\u5907\uff0c\u542f\u52a8\u5373\u53ef\u3002 \u65b9\u6cd5\u4e09: \u4f7f\u7528\u811a\u672c \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM\u955c\u50cf\uff0c\u53ef\u4ee5\u5728KVM\u4e0a\u8fd0\u884c\u4e0b\u9762\u7684\u811a\u672c\uff0c\u6765\u81ea\u52a8\u6269\u5927\u7a7a\u95f4\u3002 1. \u7ec8\u7aef\u767b\u5f55\u5230KVM\u4e0a\uff0c\u786e\u8ba4\u7cfb\u7edf\u6709\u53ef\u8bfb\u5199\u6743\u9650\uff0c\u5728\u4efb\u610f\u8def\u5f84\u8fd0\u884c vim expand.sh ,\u5c06\u4e0b\u9762\u5185\u5bb9\u5199\u5165\u5230expand.sh\u4e2d. \u5982\u679c\u4f60\u662fv1,v2,v3\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4e0b\u9762\u5185\u5bb9\uff1a #!/bin/bash set -x resize_mmcblk0p3() { echo \"Resizing mmcblk0p3 partition...\" parted /dev/mmcblk0 resizepart 3 100% resize2fs /dev/mmcblk0p3 echo \"mmcblk0p3 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p3 echo \"Partition resizing completed.\" \u5982\u679c\u4f60\u662fv4\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4e0b\u9762\u5185\u5bb9\uff1a #!/bin/bash set -x resize_mmcblk0p1() { echo \"Resizing mmcblk0p1 partition...\" parted /dev/mmcblk0 resizepart 1 100% resize2fs /dev/mmcblk0p1 echo \"mmcblk0p1 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p1 echo \"Partition resizing completed.\" 2. \u7ec8\u7aef\u6267\u884c bash expand.sh ,\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002 \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM\u7684\u955c\u50cf\uff0c\u53ef\u4ee5\u5728KVM\u4e0a\u8fd0\u884c\u4e0b\u9762\u7684\u811a\u672c\uff0c\u6765\u81ea\u52a8\u6269\u5927\u7a7a\u95f4\u3002 1. \u7ec8\u7aef\u767b\u5f55\u5230KVM\u4e0a\uff0c\u786e\u8ba4\u7cfb\u7edf\u6709\u53ef\u8bfb\u5199\u6743\u9650\uff0c\u5728\u4efb\u610f\u8def\u5f84\u8fd0\u884c vim expand.sh ,\u5c06\u4e0b\u9762\u5185\u5bb9\u5199\u5165\u5230expand.sh\u4e2d. #!/bin/bash set -x if grep -q 'X-kvmd\\.otgmsd' /etc/fstab; then part=$(grep 'X-kvmd\\.otgmsd' /etc/fstab | awk '{print $1}') # shellcheck disable=SC2206 splitted=(${part//=/ }) if [ \"${splitted[0]}\" == LABEL ]; then label=${splitted[1]} part=$(blkid -c /dev/null -L \"$label\") else label=PIMSD fi unset splitted disk=/dev/$(lsblk -no pkname \"$part\") npart=$(cat \"/sys/class/block/${part//\\/dev\\//}/partition\") umount \"$part\" parted \"$disk\" -a optimal -s resizepart \"$npart\" 100% yes | mkfs.ext4 -L \"$label\" -F -m 0 \"$part\" mount \"$part\" unset disk part npart label fi 2. \u7ec8\u7aef\u6267\u884c bash expand.sh ,\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002","title":"\u5b58\u50a8\u5361\u6269\u5bb9"},{"location":"Expand_Filesystem/#_1","text":"","title":"\u6811\u8393\u6d3e\u6269\u5bb9"},{"location":"Expand_Filesystem/#_2","text":"\u7531\u4e8e\u5728\u5236\u4f5c\u955c\u50cf\u8fc7\u7a0b\u4e2d\uff0c\u5bf9\u955c\u50cf\u8fdb\u884c\u4e86\u538b\u7f29\uff0c\u5982\u679c\u4f60\u53d1\u73b0\u6811\u8393\u6d3eSD\u5361\u6216\u8005eMMC\u7684\u53ef\u7528\u7a7a\u95f4\u5c0f\u4e8e\u5b9e\u9645SD\u5361\u6216\u8005eMMc\u7684\u5bb9\u91cf\uff0c\u4f60\u53ef\u80fd\u9700\u8981\u8fdb\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff0c\u5bf9\u6811\u8393\u6d3e\u8fdb\u884c\u6269\u5bb9\u3002 \u5982\u679c\u4f60\u53d1\u73b0\u7cfb\u7edf\u5e76\u65e0raspi-config\u5de5\u5177\uff0c\u5219\u53ef\u4f7f\u7528\u65b9\u6cd5\u4e8c\uff08\u4f7f\u7528GParted\u5206\u533a\u5de5\u5177\uff09\u3002","title":"\u7b80\u4ecb"},{"location":"Expand_Filesystem/#raspi-config","text":"\u5982\u679c\u4f60\u4f7f\u7528\u76842023\u5e746\u6708\u4efd\u540e\u7684\u955c\u50cf\uff0c\u56e0\u589e\u52a0\u4e86\u7b2c\u4e09\u4e2a\u53ef\u8bfb\u5199\u7684\u5206\u533a\uff0c\u6b64\u65b9\u6cd5\u5df2\u7ecf\u4e0d\u9002\u7528\uff0c\u8bf7\u53c2\u8003\u65b9\u6848\u4e8c\u548c\u65b9\u6848\u4e09\u3002 1. \u6253\u5f00raspi-config\u7cfb\u7edf\u914d\u7f6e\u5de5\u5177 sudo raspi-config 2. \u9009\u62e9Advancd Options\uff1a 3. \u9009\u62e9Expand Filesystem\uff1a 4. Ok: 5. \u7ec8\u7aef\u6267\u884c resize2fs /dev/mmcblk0p2 \u6b64\u547d\u4ee4\u5373\u53ef\u770b\u5230SD\u5361\u5df2\u7ecf\u6269\u5bb9\u6210\u529f\u3002","title":"\u65b9\u6cd5\u4e00 \u4f7f\u7528raspi-config\u5de5\u5177"},{"location":"Expand_Filesystem/#gparted","text":"1. \u5c06\u70e7\u5f55\u597d\u955c\u50cf\u7684SD\u5361\u6216\u8005EMMc\u901a\u8fc7usb\u63a5\u5230\u7535\u8111\u4e0a\uff0c\u4ee5linux\u4e0bGParted\u5206\u533a\u5de5\u5177\u4e3a\u4f8b\uff0c\u5176\u5b83\u5e73\u53f0\u4e5f\u6709\u7c7b\u4f3c\u7684\u5206\u533a\u5de5\u5177\u3002\u6253\u5f00GParted\u8f6f\u4ef6\uff0c\u9009\u62e9SD\u5361\uff1a 2. \u89c2\u5bdf\u4e0a\u56feSD\u5361\u7684\u5206\u533a\u60c5\u51b5\uff0c\u53ef\u4ee5\u53d1\u73b0\u5728sdb3\u5206\u533a\u7684\u524d\u540e\u5404\u67092.01GB\u548c21.87GB\u7684\u7a7a\u95f4\u672a\u4f7f\u7528\uff0c\u8fd9\u90e8\u5206\u7a7a\u95f4\u5c31\u662f\u6211\u4eec\u8981\u6269\u5bb9\u7684\u7a7a\u95f4\u3002\u9009\u4e2dsdb3\u5206\u533a\uff0c\u70b9\u51fb\u8c03\u6574\u5927\u5c0f\u3002 3. \u53ef\u4ee5\u62d6\u52a8sdb3\u7684\u767d\u8272\u5206\u533a\u6269\u5927\u5230\u6700\u5de6\u548c\u6700\u53f3\uff0c\u6216\u8005\u586b\u5199\u201c\u4e4b\u524d\u7684\u53ef\u7528\u7a7a\u95f4\u201d\u4e3a\u201c0\u201d\uff0c\u201c\u65b0\u5927\u5c0f\u201d\u4e3a\u201c\u6700\u5927\u5927\u5c0f\u201d\u768425958\uff0c\u7136\u540e\u70b9\u51fb\u53f3\u4e0b\u89d2\u7684\u8c03\u6574\u5927\u5c0f\uff0c\u7136\u540e\u5f39\u51fa\u6765\u7684\u63d0\u9192\u70b9\u51fb\u786e\u8ba4\uff0c\u5373\u53ef\u770b\u5230sd\u7684\u6240\u6709\u672a\u4f7f\u7528\u7a7a\u95f4\u5168\u90e8\u7528\u4e0a\u4e86\u3002 4. \u5c06SD\u5361\u63d2\u5165\u8bbe\u5907\uff0c\u542f\u52a8\u5373\u53ef\u3002","title":"\u65b9\u6cd5\u4e8c \u4f7f\u7528GParted\u5206\u533a\u5de5\u5177"},{"location":"Expand_Filesystem/#_3","text":"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM\u955c\u50cf\uff0c\u53ef\u4ee5\u5728KVM\u4e0a\u8fd0\u884c\u4e0b\u9762\u7684\u811a\u672c\uff0c\u6765\u81ea\u52a8\u6269\u5927\u7a7a\u95f4\u3002 1. \u7ec8\u7aef\u767b\u5f55\u5230KVM\u4e0a\uff0c\u786e\u8ba4\u7cfb\u7edf\u6709\u53ef\u8bfb\u5199\u6743\u9650\uff0c\u5728\u4efb\u610f\u8def\u5f84\u8fd0\u884c vim expand.sh ,\u5c06\u4e0b\u9762\u5185\u5bb9\u5199\u5165\u5230expand.sh\u4e2d. \u5982\u679c\u4f60\u662fv1,v2,v3\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4e0b\u9762\u5185\u5bb9\uff1a #!/bin/bash set -x resize_mmcblk0p3() { echo \"Resizing mmcblk0p3 partition...\" parted /dev/mmcblk0 resizepart 3 100% resize2fs /dev/mmcblk0p3 echo \"mmcblk0p3 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p3 echo \"Partition resizing completed.\" \u5982\u679c\u4f60\u662fv4\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4e0b\u9762\u5185\u5bb9\uff1a #!/bin/bash set -x resize_mmcblk0p1() { echo \"Resizing mmcblk0p1 partition...\" parted /dev/mmcblk0 resizepart 1 100% resize2fs /dev/mmcblk0p1 echo \"mmcblk0p1 partition resized successfully.\" } echo \"Starting partition resizing...\" resize_mmcblk0p1 echo \"Partition resizing completed.\" 2. \u7ec8\u7aef\u6267\u884c bash expand.sh ,\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002 \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM\u7684\u955c\u50cf\uff0c\u53ef\u4ee5\u5728KVM\u4e0a\u8fd0\u884c\u4e0b\u9762\u7684\u811a\u672c\uff0c\u6765\u81ea\u52a8\u6269\u5927\u7a7a\u95f4\u3002 1. \u7ec8\u7aef\u767b\u5f55\u5230KVM\u4e0a\uff0c\u786e\u8ba4\u7cfb\u7edf\u6709\u53ef\u8bfb\u5199\u6743\u9650\uff0c\u5728\u4efb\u610f\u8def\u5f84\u8fd0\u884c vim expand.sh ,\u5c06\u4e0b\u9762\u5185\u5bb9\u5199\u5165\u5230expand.sh\u4e2d. #!/bin/bash set -x if grep -q 'X-kvmd\\.otgmsd' /etc/fstab; then part=$(grep 'X-kvmd\\.otgmsd' /etc/fstab | awk '{print $1}') # shellcheck disable=SC2206 splitted=(${part//=/ }) if [ \"${splitted[0]}\" == LABEL ]; then label=${splitted[1]} part=$(blkid -c /dev/null -L \"$label\") else label=PIMSD fi unset splitted disk=/dev/$(lsblk -no pkname \"$part\") npart=$(cat \"/sys/class/block/${part//\\/dev\\//}/partition\") umount \"$part\" parted \"$disk\" -a optimal -s resizepart \"$npart\" 100% yes | mkfs.ext4 -L \"$label\" -F -m 0 \"$part\" mount \"$part\" unset disk part npart label fi 2. \u7ec8\u7aef\u6267\u884c bash expand.sh ,\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002","title":"\u65b9\u6cd5\u4e09: \u4f7f\u7528\u811a\u672c"},{"location":"OLED-display/","text":"OLED display \u7531\u4e8eOLED\u957f\u671f\u8fd0\u884c\uff0c\u4f1a\u51fa\u73b0\u70e7\u5c4f\u7b49\u95ee\u9898\uff0c\u6545OLED\u6709\u4ee5\u4e0b\u903b\u8f91\uff0c\u9996\u6b21\u542f\u52a8\u65f6\uff0coled_enable\u9ed8\u8ba4\u8bbe\u7f6e\u4e3a1\uff0c\u5373OLED\u5c4f\u5e55\u4f1a\u5e38\u4eae\u3002\u82e5oled_enable\u8bbe\u7f6e\u4e3a0\uff0c\u5219\u5728\u8bbe\u5907\u542f\u52a8300\u5206\u949f,\u7136\u540e\u95f4\u96945\u5206\u949f\u663e\u793a\u4e00\u6b21\uff0c\u4ece\u800c\u5927\u5927\u589e\u52a0\u5c4f\u5e55\u7684\u751f\u547d\u5468\u671f\u3002 \u4f60\u53ef\u4ee5\u5728/usr/bin/blikvm/package.json\u914d\u7f6e\u6587\u4ef6\u4e2d\uff0c\u627e\u5230\u4e0b\u9762\u914d\u7f6e\uff0c\u901a\u8fc7\u4fee\u6539restart_show_time\u548cinterval_display_time\u65f6\u95f4\uff0c\u8fbe\u5230\u4e0d\u540c\u7684\u63a7\u5236\u6548\u679c\uff0c\u5355\u4f4d\u4e3a\u5206\u949f\u3002 \"oled\":{ \"oled_enable\": 1, \"restart_show_time\": 300, \"interval_display_time\": 5 }","title":"OLED\u663e\u793a\u5668"},{"location":"OLED-display/#oled-display","text":"\u7531\u4e8eOLED\u957f\u671f\u8fd0\u884c\uff0c\u4f1a\u51fa\u73b0\u70e7\u5c4f\u7b49\u95ee\u9898\uff0c\u6545OLED\u6709\u4ee5\u4e0b\u903b\u8f91\uff0c\u9996\u6b21\u542f\u52a8\u65f6\uff0coled_enable\u9ed8\u8ba4\u8bbe\u7f6e\u4e3a1\uff0c\u5373OLED\u5c4f\u5e55\u4f1a\u5e38\u4eae\u3002\u82e5oled_enable\u8bbe\u7f6e\u4e3a0\uff0c\u5219\u5728\u8bbe\u5907\u542f\u52a8300\u5206\u949f,\u7136\u540e\u95f4\u96945\u5206\u949f\u663e\u793a\u4e00\u6b21\uff0c\u4ece\u800c\u5927\u5927\u589e\u52a0\u5c4f\u5e55\u7684\u751f\u547d\u5468\u671f\u3002 \u4f60\u53ef\u4ee5\u5728/usr/bin/blikvm/package.json\u914d\u7f6e\u6587\u4ef6\u4e2d\uff0c\u627e\u5230\u4e0b\u9762\u914d\u7f6e\uff0c\u901a\u8fc7\u4fee\u6539restart_show_time\u548cinterval_display_time\u65f6\u95f4\uff0c\u8fbe\u5230\u4e0d\u540c\u7684\u63a7\u5236\u6548\u679c\uff0c\u5355\u4f4d\u4e3a\u5206\u949f\u3002 \"oled\":{ \"oled_enable\": 1, \"restart_show_time\": 300, \"interval_display_time\": 5 }","title":"OLED display"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/","text":"BliKVM v1 (RPI CM4) BliKVM v1\u662f\u4e00\u6b3e\u57fa\u4e8e\u6811\u8393\u6d3eCM4\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86 \u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406 \u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e \u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5 \u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1 \uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01 \u63a5\u53e3\u5b9a\u4e49 1 OTG \u7aef\u53e3 7 Micro SD \u5361\u69fd 1 OTG \u7aef\u53e3 7 Micro SD \u5361\u69fd 2 USB3.0 x2 8 \u72b6\u6001\u6307\u793a\u706f (\u7eff\u8272) 3 ATX \u63a7\u5236\u7aef\u53e3 9 \u7f51\u53e3 1000M 4 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 10 OLED \u663e\u793a\u5c4f 128x64 5 Type-C\u4f9b\u7535\u7aef\u53e3 5V3A 11 \u5929\u7ebf\u5b89\u88c5\u5b54 6 \u7535\u6e90\u6307\u793a\u706f (\u7ea2\u8272) \u53c2\u6570 \u53c2\u6570\u540d\u79f0 \u63cf\u8ff0 \u4f9b\u7535 5V 3A PWR IN \u7aef\u53e3 \u7aef\u53e3 HDMI IN HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 OTG \u6a21\u62df\u952e\u76d8\uff0c\u9f20\u6807\uff0c\u5927\u5bb9\u91cf\u5b58\u50a8\u5668\u6216\u5176\u4ed6USB\u8bbe\u5907 CN-ATX \u5f00\u5173\u673a\u88ab\u63a7\u7535\u8111\uff0c\u8bfb\u53d6\u88ab\u63a7\u7535\u8111\u72b6\u6001\u6307\u793a\u706f Micro SD \u5361\u69fd \u5b89\u88c5\u955c\u50cf\u5185\u5b58\u5361 PWR IN \u7aef\u53e3 5V3A \u7535\u6e90 \u663e\u793a\u548c\u6307\u793a\u706f LED \u6307\u793a\u706f \u7535\u6e90\u6307\u793a\u706f\uff08\u7ea2\u8272\uff09\uff0c\u72b6\u6001\u6307\u793a\u706f\uff08\u7eff\u8272\uff09 OLED \u663e\u793a\u5c4f OLED 128x64 0.96\u5bf8 \u89c6\u9891 \u5206\u8fa8\u7387 \u6700\u9ad8\u652f\u6301 1920x1200@60Hz \u7f16\u7801\u683c\u5f0f H.264, MJPEG \u6838\u5fc3 \u6a21\u5757 \u6811\u8393\u6d3eCM4\uff08\u81ea\u5907\uff09 \u529f\u8017 Up to 15W \u73af\u5883\u53c2\u6570 \u5de5\u4f5c\u6e29\u5ea6 0\u00b0C to 70\u00b0C \u5b58\u50a8\u6e29\u5ea6 -20\u00b0C to 60\u00b0C \u5c3a\u5bf8\u548c\u91cd\u91cf \u5c3a\u5bf8 120(L) x 70W) x 37(H) mm \u91cd\u91cf 0.45 kg \u5916\u5f62\u5c3a\u5bf8","title":"BliKVM v1 (RPI CM4)"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/#blikvm-v1-rpi-cm4","text":"BliKVM v1\u662f\u4e00\u6b3e\u57fa\u4e8e\u6811\u8393\u6d3eCM4\u7684 KVM-over-IP \u8bbe\u5907\uff0c\u4e3a\u4e13\u4e1a\u7528\u6237\u63d0\u4f9b\u4e86 \u8fdc\u7a0b\u670d\u52a1\u5668\u6216\u5de5\u4f5c\u7ad9\u7ba1\u7406 \u7684\u4fbf\u6377\u89e3\u51b3\u65b9\u6848\u3002 \u5b83\u57fa\u4e8eLinux\u5e76\u4e14\u5b8c\u5168\u5f00\u6e90\u3002 \u501f\u52a9 BliKVM\uff0c\u60a8\u53ef\u4ee5\u8f7b\u677e \u6253\u5f00/\u5173\u95ed\u7535\u6e90\u3001\u91cd\u65b0\u542f\u52a8\u8ba1\u7b97\u673a\u3001\u914d\u7f6e UEFI/BIOS \u8bbe\u7f6e\u4ee5\u53ca\u4f7f\u7528\u6a21\u62df\u5927\u5bb9\u91cf\u5b58\u50a8\u8bbe\u5907\u6267\u884c\u64cd\u4f5c\u7cfb\u7edf\u91cd\u65b0\u5b89\u88c5 \u3002 BliKVM \u6a21\u62df\u952e\u76d8\u3001\u9f20\u6807\u548c\u663e\u793a\u5668\uff0c\u6240\u6709\u8fd9\u4e9b\u90fd\u53ef\u4ee5\u901a\u8fc7 Web \u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u786e\u4fdd\u65e0\u7f1d\u7684\u7528\u6237\u4f53\u9a8c\u3002 \u5176\u786c\u4ef6\u7ea7\u8bbf\u95ee\u4fdd\u8bc1\u72ec\u7acb\u4e8e\u7279\u5b9a\u7684\u8fdc\u7a0b\u7aef\u53e3\u3001\u534f\u8bae\u6216\u670d\u52a1 \uff0c\u4f7f\u5176\u6210\u4e3a\u4e13\u4e1a\u4eba\u58eb\u9ad8\u5ea6\u7075\u6d3b\u4e14\u53ef\u9760\u7684\u8fdc\u7a0b\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\uff01","title":"BliKVM v1 (RPI CM4)"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/#_1","text":"1 OTG \u7aef\u53e3 7 Micro SD \u5361\u69fd 1 OTG \u7aef\u53e3 7 Micro SD \u5361\u69fd 2 USB3.0 x2 8 \u72b6\u6001\u6307\u793a\u706f (\u7eff\u8272) 3 ATX \u63a7\u5236\u7aef\u53e3 9 \u7f51\u53e3 1000M 4 HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 10 OLED \u663e\u793a\u5c4f 128x64 5 Type-C\u4f9b\u7535\u7aef\u53e3 5V3A 11 \u5929\u7ebf\u5b89\u88c5\u5b54 6 \u7535\u6e90\u6307\u793a\u706f (\u7ea2\u8272)","title":"\u63a5\u53e3\u5b9a\u4e49"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/#_2","text":"\u53c2\u6570\u540d\u79f0 \u63cf\u8ff0 \u4f9b\u7535 5V 3A PWR IN \u7aef\u53e3 \u7aef\u53e3 HDMI IN HDMI \u89c6\u9891\u8f93\u5165\u7aef\u53e3 OTG \u6a21\u62df\u952e\u76d8\uff0c\u9f20\u6807\uff0c\u5927\u5bb9\u91cf\u5b58\u50a8\u5668\u6216\u5176\u4ed6USB\u8bbe\u5907 CN-ATX \u5f00\u5173\u673a\u88ab\u63a7\u7535\u8111\uff0c\u8bfb\u53d6\u88ab\u63a7\u7535\u8111\u72b6\u6001\u6307\u793a\u706f Micro SD \u5361\u69fd \u5b89\u88c5\u955c\u50cf\u5185\u5b58\u5361 PWR IN \u7aef\u53e3 5V3A \u7535\u6e90 \u663e\u793a\u548c\u6307\u793a\u706f LED \u6307\u793a\u706f \u7535\u6e90\u6307\u793a\u706f\uff08\u7ea2\u8272\uff09\uff0c\u72b6\u6001\u6307\u793a\u706f\uff08\u7eff\u8272\uff09 OLED \u663e\u793a\u5c4f OLED 128x64 0.96\u5bf8 \u89c6\u9891 \u5206\u8fa8\u7387 \u6700\u9ad8\u652f\u6301 1920x1200@60Hz \u7f16\u7801\u683c\u5f0f H.264, MJPEG \u6838\u5fc3 \u6a21\u5757 \u6811\u8393\u6d3eCM4\uff08\u81ea\u5907\uff09 \u529f\u8017 Up to 15W \u73af\u5883\u53c2\u6570 \u5de5\u4f5c\u6e29\u5ea6 0\u00b0C to 70\u00b0C \u5b58\u50a8\u6e29\u5ea6 -20\u00b0C to 60\u00b0C \u5c3a\u5bf8\u548c\u91cd\u91cf \u5c3a\u5bf8 120(L) x 70W) x 37(H) mm \u91cd\u91cf 0.45 kg","title":"\u53c2\u6570"},{"location":"Product-Datasheet-BliKVM-v1-RPI-CM4-ZH/#_3","text":"","title":"\u5916\u5f62\u5c3a\u5bf8"},{"location":"atx-guide/","text":"ATXA guide 1. Introduction ATXA is an ATX adapter borad to manage the power of your computer. The product includes two modules A-board and B-board. A-board is connected to the Raspberry Pi, B-board is connected to the computer's motherboard, and A-board is connected to B-board through a network cable.Join to the Discord Community Chat for news, questions and support! ATXA_A ATXA_B 2. A-board A-board is connected to the Raspberry Pi. The following table is a typical connection method in BLIKVM and PiKVM application. A-board RPI4 GND GND 3V3 3V3 LED PWR GPIO24 LED HDD GPIO22 SW PWR GPIO23 SW RST GPIO27 A-board is connected to B-board through a network cable. The following table is the corresponding relationship between the pin status of A-board and B-board. Pins on A-board Pins on B-board LED PWR is HIGH LED PWR+ is HIGH, LED PWR- is LOW LED PWR is LOW LED PWR+ is LOW, LED PWR- is LOW LED HDD is HIGH LED HDD+ is HIGH, LED HDD- is LOW LED HDD is LOW LED HDD+ is LOW, LED HDD- is LOW SW PWR is HIGH BTN PWR+ and BTN PWR- connected, the power button is pressed SW PWR is LOW BTN PWR+ and BTN PWR- disconnected, the power button is unpressed SW RST is HIGH BTN RST+ and BTN RST- connected, the reset button is pressed SW RST is LOW BTN RST+ and BTN RST- disconnected, the reset button is unpressed 3. B-board The b-board has an adapted full-height and half-height metal PCI mounting plate, which can be installed on the computer case. The user connects the pins on the B-board to the ATX control interface on the computer motherboard using the color DuPont cables provided with the product. ATXA-B\u4e0e\u7535\u8111\u4e3b\u677f\u8fde\u63a5\u8bf4\u660e \u6839\u636e\u7535\u8111\u4e3b\u677f\u8bf4\u660e\uff0c\u9996\u5148\u627e\u5230\u4e3b\u677f\u4e0aATX\u529f\u80fd\u76f8\u5173\u5f15\u811a\u4f4d\u7f6e\uff0c\u62d4\u4e0b\u4e3b\u677f\u5df2\u7ecf\u63a5\u597d\u7684ATX\u7ebf\uff0c\u62d4\u4e0b\u540e\u7535\u8111\u7684\u7535\u6e90\u6309\u94ae\u5c06\u5931\u53bb\u4f5c\u7528\u3002ATXA-B\u4e3b\u677f\u5171\u6709\u4e24\u63928PIN\u5f15\u811a\uff0c\u4e24\u6392\u5f15\u811a\u529f\u80fd\u5b8c\u5168\u76f8\u540c\u4f7f\u7528\u65f6\u65e0\u9700\u533a\u5206\u3002\u5176\u4e2d\u4e00\u6392\u5f15\u811a\u7528\u4e8eKVM\u63a7\u5236ATX\u76f8\u5173\u529f\u80fd\uff0c\u53e6\u4e00\u6392\u5f15\u811a\u63a5\u4e3b\u677f\u4e0a\u62d4\u4e0b\u6765\u7684ATX\u675c\u90a6\u5934\uff0c\u4fdd\u6301\u539f\u6709\u673a\u7bb1\u7535\u6e90\u6309\u94ae\u529f\u80fd\u3002\u6839\u636e\u4e3b\u677f\u548cATX-B\u4e0a\u7684\u5177\u4f53\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u6bcf\u6839\u7ebf\u7684\u8fde\u63a5\uff0c\u8fde\u63a5\u5173\u7cfb\u53ef\u4ee5\u53c2\u8003\u4e0b\u56fe\uff1a 4.Mechanical Diagram 5.Test video youtube\uff1a ATX 6.More link Purchase\uff1a ATX","title":"ATX\u7528\u6237\u624b\u518c"},{"location":"atx-guide/#atxa-guide","text":"","title":"ATXA guide"},{"location":"atx-guide/#1-introduction","text":"ATXA is an ATX adapter borad to manage the power of your computer. The product includes two modules A-board and B-board. A-board is connected to the Raspberry Pi, B-board is connected to the computer's motherboard, and A-board is connected to B-board through a network cable.Join to the Discord Community Chat for news, questions and support! ATXA_A ATXA_B","title":"1. Introduction"},{"location":"atx-guide/#2-a-board","text":"A-board is connected to the Raspberry Pi. The following table is a typical connection method in BLIKVM and PiKVM application. A-board RPI4 GND GND 3V3 3V3 LED PWR GPIO24 LED HDD GPIO22 SW PWR GPIO23 SW RST GPIO27 A-board is connected to B-board through a network cable. The following table is the corresponding relationship between the pin status of A-board and B-board. Pins on A-board Pins on B-board LED PWR is HIGH LED PWR+ is HIGH, LED PWR- is LOW LED PWR is LOW LED PWR+ is LOW, LED PWR- is LOW LED HDD is HIGH LED HDD+ is HIGH, LED HDD- is LOW LED HDD is LOW LED HDD+ is LOW, LED HDD- is LOW SW PWR is HIGH BTN PWR+ and BTN PWR- connected, the power button is pressed SW PWR is LOW BTN PWR+ and BTN PWR- disconnected, the power button is unpressed SW RST is HIGH BTN RST+ and BTN RST- connected, the reset button is pressed SW RST is LOW BTN RST+ and BTN RST- disconnected, the reset button is unpressed","title":"2. A-board"},{"location":"atx-guide/#3-b-board","text":"The b-board has an adapted full-height and half-height metal PCI mounting plate, which can be installed on the computer case. The user connects the pins on the B-board to the ATX control interface on the computer motherboard using the color DuPont cables provided with the product. ATXA-B\u4e0e\u7535\u8111\u4e3b\u677f\u8fde\u63a5\u8bf4\u660e \u6839\u636e\u7535\u8111\u4e3b\u677f\u8bf4\u660e\uff0c\u9996\u5148\u627e\u5230\u4e3b\u677f\u4e0aATX\u529f\u80fd\u76f8\u5173\u5f15\u811a\u4f4d\u7f6e\uff0c\u62d4\u4e0b\u4e3b\u677f\u5df2\u7ecf\u63a5\u597d\u7684ATX\u7ebf\uff0c\u62d4\u4e0b\u540e\u7535\u8111\u7684\u7535\u6e90\u6309\u94ae\u5c06\u5931\u53bb\u4f5c\u7528\u3002ATXA-B\u4e3b\u677f\u5171\u6709\u4e24\u63928PIN\u5f15\u811a\uff0c\u4e24\u6392\u5f15\u811a\u529f\u80fd\u5b8c\u5168\u76f8\u540c\u4f7f\u7528\u65f6\u65e0\u9700\u533a\u5206\u3002\u5176\u4e2d\u4e00\u6392\u5f15\u811a\u7528\u4e8eKVM\u63a7\u5236ATX\u76f8\u5173\u529f\u80fd\uff0c\u53e6\u4e00\u6392\u5f15\u811a\u63a5\u4e3b\u677f\u4e0a\u62d4\u4e0b\u6765\u7684ATX\u675c\u90a6\u5934\uff0c\u4fdd\u6301\u539f\u6709\u673a\u7bb1\u7535\u6e90\u6309\u94ae\u529f\u80fd\u3002\u6839\u636e\u4e3b\u677f\u548cATX-B\u4e0a\u7684\u5177\u4f53\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u6bcf\u6839\u7ebf\u7684\u8fde\u63a5\uff0c\u8fde\u63a5\u5173\u7cfb\u53ef\u4ee5\u53c2\u8003\u4e0b\u56fe\uff1a","title":"3. B-board"},{"location":"atx-guide/#4mechanical-diagram","text":"","title":"4.Mechanical Diagram"},{"location":"atx-guide/#5test-video","text":"youtube\uff1a ATX","title":"5.Test video"},{"location":"atx-guide/#6more-link","text":"Purchase\uff1a ATX","title":"6.More link"},{"location":"atx/","text":"ATX\u63a7\u5236\u677f \u4e3a\u4e86\u7ba1\u7406\u60a8\u7684\u8ba1\u7b97\u673a\u7684\u7535\u6e90\uff0c\u60a8\u9700\u8981\u5728\u673a\u7bb1\u5185\u5b89\u88c5\u4e00\u4e2aATX\u9002\u914d\u677f\uff0c\u5e76\u5c06\u5176\u8fde\u63a5\u5230\u4e3b\u677f\u4e0a\uff08\u4e3a\u4e86KVM\u76f4\u63a5\u901a\u8fc7ATX\u63a7\u5236\u5f00\u5173\u673a\uff09\u3002\u6709\u4e00\u6839\u4ece\u4e3b\u677f\u5230ATX\u9002\u914d\u677f\u7684\u6bcd\u5bf9\u6bcd\u7ebf\u7f06\uff0c\u4ee5\u53ca\u4e00\u4e2a\u4eceATX\u9002\u914d\u677f\u5230\u524d\u9762\u677f\u7684\u516c\u5bf9\u6bcd\u7ebf\u7f06\uff08\u4e3a\u4e86\u4f7f\u673a\u7bb1\u7684\u5f00\u5173\u673a\u6309\u94ae\u4ecd\u7136\u6709\u6548\uff09\u3002ATX\u9002\u914d\u677f\u4e0a\u6709\u4e2a\u63a5\u53e3(TO CASE, TO MB)\uff0c\u4e24\u4e2a\u63a5\u53e3\u529f\u80fd\u4e00\u6a21\u4e00\u6837\uff0c\u4f7f\u7528\u65f6\u53ef\u4ee5\u4e0d\u7528\u533a\u5206\u3002 \u7b14\u8bb0\u672c\u7535\u8111\u4e0d\u517c\u5bb9ATX\uff0c\u56e0\u4e3a\u5b83\u4eec\u7f3a\u5c11\u6240\u9700\u7684ATX\u5f15\u811a\uff0c\u6b64\u65b9\u6cd5\u4ec5\u9002\u7528\u4e8ePC\u670d\u52a1\u5668\u548c\u53f0\u5f0f\u673a\u3002 \u8be6\u7ec6\u8bf4\u660e 1. \u5c06\u4e24\u6839\u7ebf\u7f06\u8fde\u63a5\u5230ATX\u9002\u914d\u677f, \u4e3a\u4e86\u56fa\u5b9aATX\u9002\u914d\u677f\u5728\u673a\u7bb1\u4e2d\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u6321\u677f\u5c06ATX\u9002\u914d\u677f\u5b89\u88c5\u5728PCIe\u63d2\u69fd\u4e0a\u3002 Example 2. \u627e\u5230\u8d1f\u8d23\u8fde\u63a5\u673a\u7bb1\u524d\u9762\u677f\u6309\u94ae\u548cLED\u7684\u4e3b\u677f\u5f15\u811a\uff0c\u5e76\u5c06\u5176\u62d4\u51fa\u3002\u901a\u5e38\u4e3b\u677f\u4e0a\u7684\u7ebf\u7f06\u548c\u8fde\u63a5\u5668\u90fd\u6709\u6807\u8bc6\u3002\u5982\u679c\u60a8\u4e0d\u786e\u5b9a\uff0c\u53ef\u4ee5\u67e5\u9605\u60a8\u4e3b\u677f\u7684\u6587\u6863\u3002 Example 3. \u8fde\u63a5\u524d\u9762\u677f\u7684\u675c\u90a6\u6bcd\u5934\u548cATX\u7ebf\u7f06\u7684\u675c\u90a6\u516c\u5934\uff0c\u6309\u7167\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u8fde\u63a5\uff0c\u6ce8\u610f\u6807\u7b7e\u548c\u6781\u6027\uff08+\u6216-\uff09\u3002 Example 4. \u4f7f\u7528\u76f8\u540c\u7684\u65b9\u5f0f\uff0c\u5c06ATX\u677f\u7684\u6bcd\u5f15\u811a\u8fde\u63a5\u5230\u4e3b\u677f\u7684\u8fde\u63a5\u5668\u4e0a\u3002\u67e5\u9605\u60a8\u4e3b\u677f\u7684\u6587\u6863\u4ee5\u4e86\u89e3\u4e3b\u677f\u4e0a\u7684\u54ea\u4e2a\u5f15\u811a\u8fde\u63a5\u5230ATX\u9002\u914d\u677f\u7684\u54ea\u4e2a\u5f15\u811a\u3002\u6709\u65f6\u8fd9\u4e9b\u4fe1\u606f\u4f1a\u5370\u5728\u4e3b\u677f\u4e0a\u3002 Example 5. \u5c06ATX\u677f\u5b89\u88c5\u5230\u673a\u7bb1\u7684PCI\u63d2\u69fd\u4e2d\uff0c\u5e76\u7528\u87ba\u9489\u56fa\u5b9a\uff0c\u6216\u6839\u636e\u60a8\u7684\u559c\u597d\u4f7f\u7528\u5176\u4ed6\u5b89\u88c5\u65b9\u6cd5\u3002 Example 6. \u5c06\u7ebf\u7f06\u6574\u7406\u6210\u65b9\u4fbf\u7684\u65b9\u5f0f\uff0c\u5e76\u5728\u9700\u8981\u65f6\u56fa\u5b9a\u5b83\u4eec\u3002\u786e\u4fdd\u7ebf\u7f06\u4e0d\u4e0e\u673a\u7bb1\u5185\u7684\u4efb\u4f55\u98ce\u6247\u63a5\u89e6\u3002\u4f7f\u7528\u4ee5\u592a\u7f51\u7ebf\u5c06ATX\u677f\u4e0eBliKVM\u7684ATX\u63a5\u53e3\u8fde\u63a5\u8d77\u6765\u3002\u81f3\u6b64ATX\u9002\u914d\u677f\u786c\u4ef6\u90e8\u5206\u8fde\u63a5\u5df2\u5b8c\u6210\u3002","title":"ATX\u63a7\u5236\u677f"},{"location":"atx/#atx","text":"\u4e3a\u4e86\u7ba1\u7406\u60a8\u7684\u8ba1\u7b97\u673a\u7684\u7535\u6e90\uff0c\u60a8\u9700\u8981\u5728\u673a\u7bb1\u5185\u5b89\u88c5\u4e00\u4e2aATX\u9002\u914d\u677f\uff0c\u5e76\u5c06\u5176\u8fde\u63a5\u5230\u4e3b\u677f\u4e0a\uff08\u4e3a\u4e86KVM\u76f4\u63a5\u901a\u8fc7ATX\u63a7\u5236\u5f00\u5173\u673a\uff09\u3002\u6709\u4e00\u6839\u4ece\u4e3b\u677f\u5230ATX\u9002\u914d\u677f\u7684\u6bcd\u5bf9\u6bcd\u7ebf\u7f06\uff0c\u4ee5\u53ca\u4e00\u4e2a\u4eceATX\u9002\u914d\u677f\u5230\u524d\u9762\u677f\u7684\u516c\u5bf9\u6bcd\u7ebf\u7f06\uff08\u4e3a\u4e86\u4f7f\u673a\u7bb1\u7684\u5f00\u5173\u673a\u6309\u94ae\u4ecd\u7136\u6709\u6548\uff09\u3002ATX\u9002\u914d\u677f\u4e0a\u6709\u4e2a\u63a5\u53e3(TO CASE, TO MB)\uff0c\u4e24\u4e2a\u63a5\u53e3\u529f\u80fd\u4e00\u6a21\u4e00\u6837\uff0c\u4f7f\u7528\u65f6\u53ef\u4ee5\u4e0d\u7528\u533a\u5206\u3002 \u7b14\u8bb0\u672c\u7535\u8111\u4e0d\u517c\u5bb9ATX\uff0c\u56e0\u4e3a\u5b83\u4eec\u7f3a\u5c11\u6240\u9700\u7684ATX\u5f15\u811a\uff0c\u6b64\u65b9\u6cd5\u4ec5\u9002\u7528\u4e8ePC\u670d\u52a1\u5668\u548c\u53f0\u5f0f\u673a\u3002","title":"ATX\u63a7\u5236\u677f"},{"location":"atx/#_1","text":"1. \u5c06\u4e24\u6839\u7ebf\u7f06\u8fde\u63a5\u5230ATX\u9002\u914d\u677f, \u4e3a\u4e86\u56fa\u5b9aATX\u9002\u914d\u677f\u5728\u673a\u7bb1\u4e2d\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u6321\u677f\u5c06ATX\u9002\u914d\u677f\u5b89\u88c5\u5728PCIe\u63d2\u69fd\u4e0a\u3002 Example 2. \u627e\u5230\u8d1f\u8d23\u8fde\u63a5\u673a\u7bb1\u524d\u9762\u677f\u6309\u94ae\u548cLED\u7684\u4e3b\u677f\u5f15\u811a\uff0c\u5e76\u5c06\u5176\u62d4\u51fa\u3002\u901a\u5e38\u4e3b\u677f\u4e0a\u7684\u7ebf\u7f06\u548c\u8fde\u63a5\u5668\u90fd\u6709\u6807\u8bc6\u3002\u5982\u679c\u60a8\u4e0d\u786e\u5b9a\uff0c\u53ef\u4ee5\u67e5\u9605\u60a8\u4e3b\u677f\u7684\u6587\u6863\u3002 Example 3. \u8fde\u63a5\u524d\u9762\u677f\u7684\u675c\u90a6\u6bcd\u5934\u548cATX\u7ebf\u7f06\u7684\u675c\u90a6\u516c\u5934\uff0c\u6309\u7167\u5f15\u811a\u5b9a\u4e49\u8fdb\u884c\u8fde\u63a5\uff0c\u6ce8\u610f\u6807\u7b7e\u548c\u6781\u6027\uff08+\u6216-\uff09\u3002 Example 4. \u4f7f\u7528\u76f8\u540c\u7684\u65b9\u5f0f\uff0c\u5c06ATX\u677f\u7684\u6bcd\u5f15\u811a\u8fde\u63a5\u5230\u4e3b\u677f\u7684\u8fde\u63a5\u5668\u4e0a\u3002\u67e5\u9605\u60a8\u4e3b\u677f\u7684\u6587\u6863\u4ee5\u4e86\u89e3\u4e3b\u677f\u4e0a\u7684\u54ea\u4e2a\u5f15\u811a\u8fde\u63a5\u5230ATX\u9002\u914d\u677f\u7684\u54ea\u4e2a\u5f15\u811a\u3002\u6709\u65f6\u8fd9\u4e9b\u4fe1\u606f\u4f1a\u5370\u5728\u4e3b\u677f\u4e0a\u3002 Example 5. \u5c06ATX\u677f\u5b89\u88c5\u5230\u673a\u7bb1\u7684PCI\u63d2\u69fd\u4e2d\uff0c\u5e76\u7528\u87ba\u9489\u56fa\u5b9a\uff0c\u6216\u6839\u636e\u60a8\u7684\u559c\u597d\u4f7f\u7528\u5176\u4ed6\u5b89\u88c5\u65b9\u6cd5\u3002 Example 6. \u5c06\u7ebf\u7f06\u6574\u7406\u6210\u65b9\u4fbf\u7684\u65b9\u5f0f\uff0c\u5e76\u5728\u9700\u8981\u65f6\u56fa\u5b9a\u5b83\u4eec\u3002\u786e\u4fdd\u7ebf\u7f06\u4e0d\u4e0e\u673a\u7bb1\u5185\u7684\u4efb\u4f55\u98ce\u6247\u63a5\u89e6\u3002\u4f7f\u7528\u4ee5\u592a\u7f51\u7ebf\u5c06ATX\u677f\u4e0eBliKVM\u7684ATX\u63a5\u53e3\u8fde\u63a5\u8d77\u6765\u3002\u81f3\u6b64ATX\u9002\u914d\u677f\u786c\u4ef6\u90e8\u5206\u8fde\u63a5\u5df2\u5b8c\u6210\u3002","title":"\u8be6\u7ec6\u8bf4\u660e"},{"location":"dev-v4/","text":"\u9700\u6267\u884c\u4e0b\u9762\u547d\u4ee4\uff0c\u5426\u5219apt-get update \u548c apt-get upgrade\u540e\u955c\u50cf\u4f1a\u65e0\u6cd5\u542f\u52a8 apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64","title":"Dev v4"},{"location":"dev-v4/#apt-get-update-apt-get-upgrade","text":"apt-mark hold linux-dtb-edge-sunxi64 linux-image-edge-sunxi64","title":"\u9700\u6267\u884c\u4e0b\u9762\u547d\u4ee4\uff0c\u5426\u5219apt-get update \u548c apt-get upgrade\u540e\u955c\u50cf\u4f1a\u65e0\u6cd5\u542f\u52a8"},{"location":"dev_api/","text":"API \u7533\u660e: \u6b64API\u4e3a\u5b9e\u9a8c\u6027\u7684\uff0c\u4efb\u4f55\u65f6\u5019\u90fd\u6709\u53ef\u80fd\u88ab\u6539\u53d8!\u6b64\u6587\u6863\u53ea\u5728v1.4.0\u548c\u4e4b\u524d\u7248\u672c\u6709\u6548\uff0c\u5373\u5c06\u66f4\u65b0. \u6b64\u6587\u6863\u4e3aBLIKVM OS\u7684http API\u5f00\u53d1\u624b\u518c\uff0c\u82e5\u60a8\u6709\u65b0\u7684API\u9700\u6c42\u4e0d\u5728\u6b64\u6587\u6863\u4e2d\uff0c\u53ef\u4ee5\u5728github\u4e2d\u63d0pr\u83b7\u5f97\u652f\u6301\u3002\u8bf7\u6c42URL\u4e2d\u7684kvmip\u9700\u6839\u636e\u4f60kvm\u7684ip\u5b9e\u9645\u66ff\u6362\u3002 \u767b\u5f55\u8ba4\u8bc1 \u6b64API\u7528\u4e8e\u7528\u6237\u767b\u5f55\uff0c\u5e76\u8fd4\u56de\u8bbf\u95ee\u4ee4\u724c\u3002\u540e\u7eed\u6709\u7684api\u5747\u9700\u8981token\u4ee4\u724c\u3002 \u8bf7\u6c42URL: http://kvmip/login_api \u8bf7\u6c42\u65b9\u6cd5: GET \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f,\u5982: { \"username\": \"admin\", \"password\": \"admin\" } \u54cd\u5e94\u7ed3\u679c\u5982\u4e0b\uff0c\u82e5status\u4e0d\u4e3a1\uff0c\u5219\u8ba4\u8bc1\u5931\u8d25\u3002 { \"status\": 1, \"info\": \"login success\", \"data\": { \"token\": \"2sscdada6a97a774fcd4714c\" } } ATX\u5f00\u5173\u673a \u6b64API\u7528\u4e8e\u63a7\u5236\u76ee\u6807\u8bbe\u5907\u5f00\u5173\u673a\uff0c\u548c\u91cd\u542f\u3002 - \u8bf7\u6c42URL: http://kvmip/atx - \u8bf7\u6c42\u65b9\u6cd5: POST - \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f: 1. \u5176\u4e2dcmd\u4e3a128\u4e3a\u5f00\u5173\u673a(\u5373\u5f00\u673a\u7684\u60c5\u51b5\u4e0b\u6a21\u62df\u7684\u4e3a\u77ed\u6309\u5173\u673a\uff0c\u5173\u673a\u7684\u60c5\u51b5\u4e0b\u4e3a\u77ed\u6309\u5f00\u673a); 2. 192\u4e3a\u5f3a\u5236\u5173\u673a(\u6a21\u62df\u957f\u6309\u5f3a\u5236\u5173\u673a); 3. cmd\u4e3a8\u8868\u793a\u91cd\u542f\u3002\u5982: { \"cmd\": 128 } \u54cd\u5e94\u7ed3\u679c\u5982\u4e0b\uff0c\u82e5status\u4e0d\u4e3a1\uff0c\u5219\u5931\u8d25\u3002 { \"status\": 1, \"info\": \"success\", } mjepg\u56fe\u50cf \u6b64API\u7528\u4e8e\u5728\u56fe\u50cf\u6a21\u5f0f\u4e3amjepg\u7684\u6a21\u5f0f\u4e0b\uff0c\u62ff\u5230mjpeg\u7684\u89c6\u5c4f\u6d41\u3002 - \u8bf7\u6c42URL: http://kvmip:8008/stream \uff0c\u6b64API\u7528\u4e8e\u5728\u56fe\u50cf\u6a21\u5f0f\u4e3amjepg\u7684\u6a21\u5f0f\u4e0b\uff0c\u62ff\u5230mjpeg\u7684\u4e00\u5e27\u56fe\u7247\u3002 - \u8bf7\u6c42URL: http://kvmip:8008/snapshot - \u8bf7\u6c42\u65b9\u6cd5: GET \u952e\u76d8 \u952e\u76d8\u5177\u4f53\u7f16\u7801\u53ef\u53c2\u8003 \"KeyA\"=> 4, \"KeyB\"=> 5, \"KeyC\"=> 6, \"KeyD\"=> 7, \"KeyE\"=> 8, \"KeyF\"=> 9, \"KeyG\"=> 10, \"KeyH\"=> 11, \"KeyI\"=> 12, \"KeyJ\"=> 13, \"KeyK\"=> 14, \"KeyL\"=> 15, \"KeyM\"=> 16, \"KeyN\"=> 17, \"KeyO\"=> 18, \"KeyP\"=> 19, \"KeyQ\"=> 20, \"KeyR\"=> 21, \"KeyS\"=> 22, \"KeyT\"=> 23, \"KeyU\"=> 24, \"KeyV\"=> 25, \"KeyW\"=> 26, \"KeyX\"=> 27, \"KeyY\"=> 28, \"KeyZ\"=> 29, \"Digit1\"=> 30, \"Digit2\"=> 31, \"Digit3\"=> 32, \"Digit4\"=> 33, \"Digit5\"=> 34, \"Digit6\"=> 35, \"Digit7\"=> 36, \"Digit8\"=> 37, \"Digit9\"=> 38, \"Digit0\"=> 39, \"Enter\"=> 40, \"Escape\"=> 41, \"Backspace\"=> 42, \"Tab\"=> 43, \"Space\"=> 44, \"Minus\"=> 45, \"Equal\"=> 46, \"BracketLeft\"=> 47, \"BracketRight\"=> 48, \"Backslash\"=> 49, \"Semicolon\"=> 51, \"Quote\"=> 52, \"Backquote\"=> 53, \"Comma\"=> 54, \"Period\"=> 55, \"Slash\"=> 56, \"CapsLock\"=> 57, \"F1\"=> 58, \"F2\"=> 59, \"F3\"=> 60, \"F4\"=> 61, \"F5\"=> 62, \"F6\"=> 63, \"F7\"=> 64, \"F8\"=> 65, \"F9\"=> 66, \"F10\"=> 67, \"F11\"=> 68, \"F12\"=> 69, \"PrtSc\"=> 70, \"ScrollLock\"=> 71, \"Pause\"=> 72, \"Insert\"=> 73, \"Home\"=> 74, \"PageUp\"=> 75, \"Delete\"=> 76, \"End\"=> 77, \"PageDown\"=> 78, \"ArrowRight\"=> 79, \"ArrowLeft\"=> 80, \"ArrowDown\"=> 81, \"ArrowUp\"=> 82, \"NumLock\"=> 83, \"NumpadDivide\"=> 84, \"NumpadMultiply\"=> 85, \"NumpadSubtract\"=> 86, \"NumpadAdd\"=> 87, \"NumpadEnter\"=> 88, \"Numpad1\"=> 89, \"Numpad2\"=> 90, \"Numpad3\"=> 91, \"Numpad4\"=> 92, \"Numpad5\"=> 93, \"Numpad6\"=> 94, \"Numpad7\"=> 95, \"Numpad8\"=> 96, \"Numpad9\"=> 97, \"Numpad0\"=> 98, \"NumpadDecimal\"=> 99 \u8bf7\u6c42URL: http://kvmip/keyboard \u8bf7\u6c42\u65b9\u6cd5: GET \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f,keycodes\u4e3a\u5b57\u7b26\u4e32\u6570\u7ec4\uff0c\u652f\u6301\u4e00\u6b21\u8f93\u5165\u591a\u4e2a,\u5982: { \"keycodes\": [\"Digit1\"] } \u54cd\u5e94\u7ed3\u679c\u5982: { \"status\": 1, \"info\": \"key input success\", \"data\": [] }","title":"http API"},{"location":"dev_api/#api","text":"\u7533\u660e: \u6b64API\u4e3a\u5b9e\u9a8c\u6027\u7684\uff0c\u4efb\u4f55\u65f6\u5019\u90fd\u6709\u53ef\u80fd\u88ab\u6539\u53d8!\u6b64\u6587\u6863\u53ea\u5728v1.4.0\u548c\u4e4b\u524d\u7248\u672c\u6709\u6548\uff0c\u5373\u5c06\u66f4\u65b0. \u6b64\u6587\u6863\u4e3aBLIKVM OS\u7684http API\u5f00\u53d1\u624b\u518c\uff0c\u82e5\u60a8\u6709\u65b0\u7684API\u9700\u6c42\u4e0d\u5728\u6b64\u6587\u6863\u4e2d\uff0c\u53ef\u4ee5\u5728github\u4e2d\u63d0pr\u83b7\u5f97\u652f\u6301\u3002\u8bf7\u6c42URL\u4e2d\u7684kvmip\u9700\u6839\u636e\u4f60kvm\u7684ip\u5b9e\u9645\u66ff\u6362\u3002","title":"API"},{"location":"dev_api/#_1","text":"\u6b64API\u7528\u4e8e\u7528\u6237\u767b\u5f55\uff0c\u5e76\u8fd4\u56de\u8bbf\u95ee\u4ee4\u724c\u3002\u540e\u7eed\u6709\u7684api\u5747\u9700\u8981token\u4ee4\u724c\u3002 \u8bf7\u6c42URL: http://kvmip/login_api \u8bf7\u6c42\u65b9\u6cd5: GET \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f,\u5982: { \"username\": \"admin\", \"password\": \"admin\" } \u54cd\u5e94\u7ed3\u679c\u5982\u4e0b\uff0c\u82e5status\u4e0d\u4e3a1\uff0c\u5219\u8ba4\u8bc1\u5931\u8d25\u3002 { \"status\": 1, \"info\": \"login success\", \"data\": { \"token\": \"2sscdada6a97a774fcd4714c\" } }","title":"\u767b\u5f55\u8ba4\u8bc1"},{"location":"dev_api/#atx","text":"\u6b64API\u7528\u4e8e\u63a7\u5236\u76ee\u6807\u8bbe\u5907\u5f00\u5173\u673a\uff0c\u548c\u91cd\u542f\u3002 - \u8bf7\u6c42URL: http://kvmip/atx - \u8bf7\u6c42\u65b9\u6cd5: POST - \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f: 1. \u5176\u4e2dcmd\u4e3a128\u4e3a\u5f00\u5173\u673a(\u5373\u5f00\u673a\u7684\u60c5\u51b5\u4e0b\u6a21\u62df\u7684\u4e3a\u77ed\u6309\u5173\u673a\uff0c\u5173\u673a\u7684\u60c5\u51b5\u4e0b\u4e3a\u77ed\u6309\u5f00\u673a); 2. 192\u4e3a\u5f3a\u5236\u5173\u673a(\u6a21\u62df\u957f\u6309\u5f3a\u5236\u5173\u673a); 3. cmd\u4e3a8\u8868\u793a\u91cd\u542f\u3002\u5982: { \"cmd\": 128 } \u54cd\u5e94\u7ed3\u679c\u5982\u4e0b\uff0c\u82e5status\u4e0d\u4e3a1\uff0c\u5219\u5931\u8d25\u3002 { \"status\": 1, \"info\": \"success\", }","title":"ATX\u5f00\u5173\u673a"},{"location":"dev_api/#mjepg","text":"\u6b64API\u7528\u4e8e\u5728\u56fe\u50cf\u6a21\u5f0f\u4e3amjepg\u7684\u6a21\u5f0f\u4e0b\uff0c\u62ff\u5230mjpeg\u7684\u89c6\u5c4f\u6d41\u3002 - \u8bf7\u6c42URL: http://kvmip:8008/stream \uff0c\u6b64API\u7528\u4e8e\u5728\u56fe\u50cf\u6a21\u5f0f\u4e3amjepg\u7684\u6a21\u5f0f\u4e0b\uff0c\u62ff\u5230mjpeg\u7684\u4e00\u5e27\u56fe\u7247\u3002 - \u8bf7\u6c42URL: http://kvmip:8008/snapshot - \u8bf7\u6c42\u65b9\u6cd5: GET","title":"mjepg\u56fe\u50cf"},{"location":"dev_api/#_2","text":"\u952e\u76d8\u5177\u4f53\u7f16\u7801\u53ef\u53c2\u8003 \"KeyA\"=> 4, \"KeyB\"=> 5, \"KeyC\"=> 6, \"KeyD\"=> 7, \"KeyE\"=> 8, \"KeyF\"=> 9, \"KeyG\"=> 10, \"KeyH\"=> 11, \"KeyI\"=> 12, \"KeyJ\"=> 13, \"KeyK\"=> 14, \"KeyL\"=> 15, \"KeyM\"=> 16, \"KeyN\"=> 17, \"KeyO\"=> 18, \"KeyP\"=> 19, \"KeyQ\"=> 20, \"KeyR\"=> 21, \"KeyS\"=> 22, \"KeyT\"=> 23, \"KeyU\"=> 24, \"KeyV\"=> 25, \"KeyW\"=> 26, \"KeyX\"=> 27, \"KeyY\"=> 28, \"KeyZ\"=> 29, \"Digit1\"=> 30, \"Digit2\"=> 31, \"Digit3\"=> 32, \"Digit4\"=> 33, \"Digit5\"=> 34, \"Digit6\"=> 35, \"Digit7\"=> 36, \"Digit8\"=> 37, \"Digit9\"=> 38, \"Digit0\"=> 39, \"Enter\"=> 40, \"Escape\"=> 41, \"Backspace\"=> 42, \"Tab\"=> 43, \"Space\"=> 44, \"Minus\"=> 45, \"Equal\"=> 46, \"BracketLeft\"=> 47, \"BracketRight\"=> 48, \"Backslash\"=> 49, \"Semicolon\"=> 51, \"Quote\"=> 52, \"Backquote\"=> 53, \"Comma\"=> 54, \"Period\"=> 55, \"Slash\"=> 56, \"CapsLock\"=> 57, \"F1\"=> 58, \"F2\"=> 59, \"F3\"=> 60, \"F4\"=> 61, \"F5\"=> 62, \"F6\"=> 63, \"F7\"=> 64, \"F8\"=> 65, \"F9\"=> 66, \"F10\"=> 67, \"F11\"=> 68, \"F12\"=> 69, \"PrtSc\"=> 70, \"ScrollLock\"=> 71, \"Pause\"=> 72, \"Insert\"=> 73, \"Home\"=> 74, \"PageUp\"=> 75, \"Delete\"=> 76, \"End\"=> 77, \"PageDown\"=> 78, \"ArrowRight\"=> 79, \"ArrowLeft\"=> 80, \"ArrowDown\"=> 81, \"ArrowUp\"=> 82, \"NumLock\"=> 83, \"NumpadDivide\"=> 84, \"NumpadMultiply\"=> 85, \"NumpadSubtract\"=> 86, \"NumpadAdd\"=> 87, \"NumpadEnter\"=> 88, \"Numpad1\"=> 89, \"Numpad2\"=> 90, \"Numpad3\"=> 91, \"Numpad4\"=> 92, \"Numpad5\"=> 93, \"Numpad6\"=> 94, \"Numpad7\"=> 95, \"Numpad8\"=> 96, \"Numpad9\"=> 97, \"Numpad0\"=> 98, \"NumpadDecimal\"=> 99 \u8bf7\u6c42URL: http://kvmip/keyboard \u8bf7\u6c42\u65b9\u6cd5: GET \u8bf7\u6c42\u4f53: JSON \u683c\u5f0f,keycodes\u4e3a\u5b57\u7b26\u4e32\u6570\u7ec4\uff0c\u652f\u6301\u4e00\u6b21\u8f93\u5165\u591a\u4e2a,\u5982: { \"keycodes\": [\"Digit1\"] } \u54cd\u5e94\u7ed3\u679c\u5982: { \"status\": 1, \"info\": \"key input success\", \"data\": [] }","title":"\u952e\u76d8"},{"location":"edid/","text":"EDID EDID\u6587\u4ef6\u5728BliKVM\u4e2d\u7684\u4f5c\u7528\u662f\u544a\u8bc9\u88ab\u63a7\u8ba1\u7b97\u673a\u671f\u671b\u8f93\u51fa\u7684HDMI\u5206\u8fa8\u7387\uff0c\u5373\u5982\u4f55\u4f7f\u7528\u7684\u662f1080P60Hz\u7684EDID\uff0c\u82e5\u88ab\u63a7\u8ba1\u7b97\u673a\u652f\u6301\u8f93\u51fa\u6b64\u5206\u8fa8\u7387\uff0c\u88ab\u63a7\u8ba1\u7b97\u673a\u5c31\u4f1a\u63091080P60Hz\u8f93\u51fa\u3002\u53e6\u5916\u901a\u8fc7EDID\u8fd8\u53ef\u4ee5\u5c4f\u853d\u58f0\u97f3\uff0c\u4fee\u6539\u663e\u793a\u5668\u578b\u53f7\uff0c\u540d\u5b57\uff0c\u5382\u5546\u7b49\u4fe1\u606f\u3002\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u60a8\u4e0d\u9700\u8981\u66f4\u6539\u5b83\uff0c\u4f46\u6709\u65f6\uff0c\u4f8b\u5982\u5bf9\u4e8e\u5947\u602a\u7684 UEFI/BIOS\uff0c\u53ef\u80fd\u9700\u8981\u66f4\u6539\u5b83\u3002 Note BliKVM v1 v2 v3\u4f7f\u7528\u7684\u4e3aCSI\u89c6\u9891\u91c7\u96c6\u65b9\u6848\uff0c\u652f\u6301EDID\u8bbe\u7f6e\uff0cv4\u4f7f\u7528\u7684\u662fUSB\u89c6\u9891\u91c7\u96c6\u65b9\u6848\uff0c\u4e0d\u652f\u6301EDID\u8bbe\u7f6e\uff1b \u5176\u4e2dv3 HAT\u53d7\u6811\u8393\u6d3e4B\u53ea\u67092\u901a\u9053CSI\u9650\u5236\uff0c\u6700\u9ad8\u53ea\u80fd\u91c7\u96c61080P50Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u56e0\u6b64\u82e5\u5bf9v3\u8bbe\u7f6e1080P60Hz\u7684EDID\uff0cv3\u4f1a\u65e0\u6cd5\u6355\u83b7\u5230\u56fe\u50cf\uff1b \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM OS\uff0c\u53ef\u4ee5\u53c2\u7167 \u6b64\u94fe\u63a5 \u8fdb\u884c\u4fee\u6539; \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM OS\uff0cEDID\u6587\u4ef6\u5728 /usr/bin/blikvm/edid.txt ,\u6253\u5f00\u6b64\u6587\u4ef6\uff0c\u66ff\u6362\u4e0b\u9762\u4f60\u60f3\u8981\u5206\u8fa8\u7387\u7684EDID\u6587\u4ef6\u5373\u53ef\uff1b EDID \u4f8b\u5b50 1080P60Hz \u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u548cv2\u786c\u4ef6\u3002 1920x1080 60Hz, \u5e26\u97f3\u9891 00FFFFFFFFFFFF0031D8888800888888 1C150103800000780AEE91A3544C9926 0F50543FCD0001000101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0050 694B564D0A20202020202020000000FD 003B3D0F2E0F1E0A202020202020013C 02031E434F041303021211012021A23C 3D3E1F1066030C00300080E2007F8C0A D08A20E02D10103E9600C48E21000018 8C0AD08A20E02D10103E9600138E2100 00189729A0D051842230509816009A01 11000018000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000001C EDID \u4f8b\u5b50 1080P50Hz \u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u3001v2\u3001v3\u786c\u4ef6\uff0c\u5c24\u5176\u5f53\u5e0c\u671bv3 HAT\u6355\u83b71080P\u5206\u8fa8\u7387\u65f6\u53ef\u4ee5\u4f7f\u7528\u5b83\u3002 1920x1080 50Hz, \u5e26\u97f3\u9891 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a202020202020014f 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000028 EDID \u4f8b\u5b50 720P60Hz \u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u3001v2\u3001v3\u786c\u4ef6\u3002 1280x720 60Hz, \u5e26\u97f3\u9891 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 \u81ea\u5b9a\u4e49EDID \u6700\u597d\u4f7f\u7528\u7b2c\u4e09\u65b9\u5de5\u5177\u6765\u7f16\u8f91EDID\uff0c\u6bd4\u5982\u63a8\u8350\u7684\u9ad8\u7ea7 AW EDID Editor \uff08Windows\u73af\u5883\u4e0b\u8fd0\u884c\u826f\u597d\uff0c\u4e5f\u53ef\u5728wine\u4e2d\u4f7f\u7528\uff09\u6216\u8005 wxEDID \u3002\u8fd9\u4e24\u4e2a\u7f16\u8f91\u5668\u90fd\u53ef\u4ee5\u5904\u7406\u4e8c\u8fdb\u5236\u7684EDID\u683c\u5f0f\u3002 \u4f7f\u7528\u8fd9\u4e9b\u5de5\u5177\uff0c\u60a8\u53ef\u4ee5\u50cf\u7f16\u8f91\u6587\u4ef6\u4e00\u6837\u4fee\u6539EDID\u4fe1\u606f\uff0c\u7c7b\u4f3c\u4e8e\u66f4\u6539\u8eab\u4efd\u8bc1\u4fe1\u606f\u3002\u901a\u8fc7\u7f16\u8f91EDID\uff0c\u60a8\u53ef\u4ee5\u8c03\u6574\u663e\u793a\u5668\u7684\u53c2\u6570\u548c\u7279\u6027\uff0c\u4ee5\u9002\u5e94\u4e0d\u540c\u7684\u4f7f\u7528\u9700\u6c42\uff0c\u4ece\u800c\u83b7\u5f97\u66f4\u597d\u7684\u663e\u793a\u6548\u679c\u3002","title":"HDMI EDID\u8bbe\u7f6e"},{"location":"edid/#edid","text":"EDID\u6587\u4ef6\u5728BliKVM\u4e2d\u7684\u4f5c\u7528\u662f\u544a\u8bc9\u88ab\u63a7\u8ba1\u7b97\u673a\u671f\u671b\u8f93\u51fa\u7684HDMI\u5206\u8fa8\u7387\uff0c\u5373\u5982\u4f55\u4f7f\u7528\u7684\u662f1080P60Hz\u7684EDID\uff0c\u82e5\u88ab\u63a7\u8ba1\u7b97\u673a\u652f\u6301\u8f93\u51fa\u6b64\u5206\u8fa8\u7387\uff0c\u88ab\u63a7\u8ba1\u7b97\u673a\u5c31\u4f1a\u63091080P60Hz\u8f93\u51fa\u3002\u53e6\u5916\u901a\u8fc7EDID\u8fd8\u53ef\u4ee5\u5c4f\u853d\u58f0\u97f3\uff0c\u4fee\u6539\u663e\u793a\u5668\u578b\u53f7\uff0c\u540d\u5b57\uff0c\u5382\u5546\u7b49\u4fe1\u606f\u3002\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u60a8\u4e0d\u9700\u8981\u66f4\u6539\u5b83\uff0c\u4f46\u6709\u65f6\uff0c\u4f8b\u5982\u5bf9\u4e8e\u5947\u602a\u7684 UEFI/BIOS\uff0c\u53ef\u80fd\u9700\u8981\u66f4\u6539\u5b83\u3002 Note BliKVM v1 v2 v3\u4f7f\u7528\u7684\u4e3aCSI\u89c6\u9891\u91c7\u96c6\u65b9\u6848\uff0c\u652f\u6301EDID\u8bbe\u7f6e\uff0cv4\u4f7f\u7528\u7684\u662fUSB\u89c6\u9891\u91c7\u96c6\u65b9\u6848\uff0c\u4e0d\u652f\u6301EDID\u8bbe\u7f6e\uff1b \u5176\u4e2dv3 HAT\u53d7\u6811\u8393\u6d3e4B\u53ea\u67092\u901a\u9053CSI\u9650\u5236\uff0c\u6700\u9ad8\u53ea\u80fd\u91c7\u96c61080P50Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u56e0\u6b64\u82e5\u5bf9v3\u8bbe\u7f6e1080P60Hz\u7684EDID\uff0cv3\u4f1a\u65e0\u6cd5\u6355\u83b7\u5230\u56fe\u50cf\uff1b \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM OS\uff0c\u53ef\u4ee5\u53c2\u7167 \u6b64\u94fe\u63a5 \u8fdb\u884c\u4fee\u6539; \u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM OS\uff0cEDID\u6587\u4ef6\u5728 /usr/bin/blikvm/edid.txt ,\u6253\u5f00\u6b64\u6587\u4ef6\uff0c\u66ff\u6362\u4e0b\u9762\u4f60\u60f3\u8981\u5206\u8fa8\u7387\u7684EDID\u6587\u4ef6\u5373\u53ef\uff1b","title":"EDID"},{"location":"edid/#edid-1080p60hz","text":"\u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u548cv2\u786c\u4ef6\u3002 1920x1080 60Hz, \u5e26\u97f3\u9891 00FFFFFFFFFFFF0031D8888800888888 1C150103800000780AEE91A3544C9926 0F50543FCD0001000101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0050 694B564D0A20202020202020000000FD 003B3D0F2E0F1E0A202020202020013C 02031E434F041303021211012021A23C 3D3E1F1066030C00300080E2007F8C0A D08A20E02D10103E9600C48E21000018 8C0AD08A20E02D10103E9600138E2100 00189729A0D051842230509816009A01 11000018000000000000000000000000 00000000000000000000000000000000 0000000000000000000000000000001C","title":"EDID \u4f8b\u5b50 1080P60Hz"},{"location":"edid/#edid-1080p50hz","text":"\u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u3001v2\u3001v3\u786c\u4ef6\uff0c\u5c24\u5176\u5f53\u5e0c\u671bv3 HAT\u6355\u83b71080P\u5206\u8fa8\u7387\u65f6\u53ef\u4ee5\u4f7f\u7528\u5b83\u3002 1920x1080 50Hz, \u5e26\u97f3\u9891 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a202020202020014f 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000028","title":"EDID \u4f8b\u5b50 1080P50Hz"},{"location":"edid/#edid-720p60hz","text":"\u4e0b\u9762\u7684edid\u9002\u7528\u4e8ev1\u3001v2\u3001v3\u786c\u4ef6\u3002 1280x720 60Hz, \u5e26\u97f3\u9891 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000","title":"EDID \u4f8b\u5b50 720P60Hz"},{"location":"edid/#edid_1","text":"\u6700\u597d\u4f7f\u7528\u7b2c\u4e09\u65b9\u5de5\u5177\u6765\u7f16\u8f91EDID\uff0c\u6bd4\u5982\u63a8\u8350\u7684\u9ad8\u7ea7 AW EDID Editor \uff08Windows\u73af\u5883\u4e0b\u8fd0\u884c\u826f\u597d\uff0c\u4e5f\u53ef\u5728wine\u4e2d\u4f7f\u7528\uff09\u6216\u8005 wxEDID \u3002\u8fd9\u4e24\u4e2a\u7f16\u8f91\u5668\u90fd\u53ef\u4ee5\u5904\u7406\u4e8c\u8fdb\u5236\u7684EDID\u683c\u5f0f\u3002 \u4f7f\u7528\u8fd9\u4e9b\u5de5\u5177\uff0c\u60a8\u53ef\u4ee5\u50cf\u7f16\u8f91\u6587\u4ef6\u4e00\u6837\u4fee\u6539EDID\u4fe1\u606f\uff0c\u7c7b\u4f3c\u4e8e\u66f4\u6539\u8eab\u4efd\u8bc1\u4fe1\u606f\u3002\u901a\u8fc7\u7f16\u8f91EDID\uff0c\u60a8\u53ef\u4ee5\u8c03\u6574\u663e\u793a\u5668\u7684\u53c2\u6570\u548c\u7279\u6027\uff0c\u4ee5\u9002\u5e94\u4e0d\u540c\u7684\u4f7f\u7528\u9700\u6c42\uff0c\u4ece\u800c\u83b7\u5f97\u66f4\u597d\u7684\u663e\u793a\u6548\u679c\u3002","title":"\u81ea\u5b9a\u4e49EDID"},{"location":"faq/","text":"FAQ & \u6545\u969c\u6392\u9664 \u4f5c\u4e3a\u7b2c\u4e00\u6b65\uff0c\u6211\u4eec\u5efa\u8bae\u4ed4\u7ec6\u9605\u8bfb\u6211\u4eec\u7684\u6587\u6863\u3002\u5927\u90e8\u5206\u8bbe\u7f6eBLIKVM\u6240\u9700\u7684\u6b65\u9aa4\u5df2\u7ecf\u5728\u6587\u6863\u4e2d\u63cf\u8ff0\u4e86\u3002\u5982\u679c\u60a8\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u60a8\u53ef\u4ee5\u67e5\u770b\u672c\u9875\uff0c\u5176\u4e2d\u5217\u51fa\u4e86\u5e38\u89c1\u9519\u8bef\u3002\u5982\u679c\u4ecd\u7136\u65e0\u6cd5\u89e3\u51b3\u95ee\u9898\uff0c\u6b22\u8fce\u63d0\u4ea4 \u95ee\u9898\u53cd\u9988 \u6216 \u52a0\u5165\u6211\u4eec\u7684Discord \u5bfb\u6c42\u8fdb\u4e00\u6b65\u5e2e\u52a9\u3002 \u5e38\u89c1\u95ee\u9898 \u6211\u53ef\u4ee5\u5c06\u591a\u53f0\u670d\u52a1\u5668\u8fde\u63a5\u5230\u5355\u4e2aBLIKVM\u5417\uff1f \u53ef\u4ee5\uff0c\u4f46\u9700\u8981\u8fdb\u884c\u989d\u5916\u7684\u8bbe\u7f6e\u5de5\u4f5c\u3002\u8bf7\u53c2\u8003 \u6b64\u9875\u9762 \u3002 \u5982\u4f55\u5728\u672c\u5730\u7f51\u7edc\u4e0a\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95eeBliKVM\uff1f \u5982\u679c\u60a8\u7684\u8def\u7531\u5668\u5177\u6709\u5916\u90e8IP\u5730\u5740\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u7aef\u53e3\u8f6c\u53d1\u6765\u8f6c\u53d180\u7aef\u53e3(Web),8008\u7aef\u53e3(mjpeg)\uff0c8188\u7aef\u53e3\uff08webrtc\uff09\u3002\u5728\u5176\u4ed6\u60c5\u51b5\u4e0b\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u51fa\u8272\u7684\u514d\u8d39VPN\u670d\u52a1Tailscale\u3002 BLiKVM\u6709\u591a\u6b3e\u786c\u4ef6\uff0c\u5982BliKVM V1 CM4\u3001BliKVM V2 PCIe\u3001BliKVM V3 Hat\uff0c\u6211\u5e94\u8be5\u9009\u54ea\u6b3e\uff1f \u9996\u5148\u5404\u4e2a\u7248\u672c\u7684\u4e3b\u8981\u53c2\u6570\u5bf9\u6bd4\u8bf7\u53c2\u8003 \u6b64\u9875\u9762 \u3002 V1\u548cV3\u5c5e\u4e8e\u5916\u7f6e\u65b9\u6848\uff0cV2\u5c5e\u4e8e\u5185\u7f6e\u673a\u7bb1\u65b9\u6848\u3002\u5982\u679c\u60a8\u662f\u673a\u7bb1\u5f62\u5f0f\uff0c\u5e76\u4e14\u673a\u7bb1\u5185\u90e8\u6709\u7a7a\u95f4\uff0c\u90a3\u4e48\u6beb\u65e0\u7591\u95ee\u9009\u62e9V2 PCIe\u7248\u672c\u662f\u8f83\u597d\u7684\u9009\u62e9\u3002 \u90a3\u4e48V1\u548cV3\u4e24\u4e2a\u5916\u7f6e\u65b9\u6848\u5982\u4f55\u9009\u62e9\u5462\uff0cV1\u57fa\u4e8eCM4\u7684\u65b9\u6848\uff0c\u96c6\u6210\u5ea6\u66f4\u9ad8\uff0c\u6709\u5230\u624b\u53ef\u7528\u7248\u672c\u3002V3\u57fa\u4e8e\u6811\u8393\u6d3e4B\u65b9\u6848\uff0c\u6240\u6709IO\u53e3\u5747\u5f15\u51fa\uff0c\u53ef\u6269\u5c55\u6027\u66f4\u5f3a\u3002\u4e24\u8005\u7684\u53e6\u4e00\u4e2a\u6838\u5fc3\u533a\u522b\u5c31\u662fV1\u6700\u9ad8\u652f\u63011080P60Hz\u8f93\u5165\uff0cV3\u6700\u9ad8\u652f\u63011080P50Hz\u8f93\u5165\u3002\u5f53\u7136\u540c\u65f6\u9700\u8981\u8003\u8651\u60a8\u662f\u5df2\u5426\u6709CM4\u6216\u80054B\uff0c\u5982\u679c\u6709\u7684\u8bdd\u53ea\u4e70\u5bf9\u5e94\u7684\u5e95\u677f\uff0c\u6027\u4ef7\u6bd4\u66f4\u9ad8\u3002 \u6211\u53ef\u4ee5\u7528BLIKVM\u8fdb\u884c\u6e38\u620f\u5417\uff1f \u4e0d\u53ef\u4ee5\uff0c\u539f\u56e0\u5982\u4e0b\uff1a \u5bf9\u4e8eHDMI-CSI\u6865\u63a5\u5668\uff0c\u603b\u7ebf\u5e26\u5bbd\u4e0d\u8db3\u4ee5\u4f20\u8f93\u8d85\u8fc71080p60\u7684\u89c6\u9891\u3002 \u5bf9\u4e8eHDMI-USB\u8f6c\u6362\u5668\uff0c\u5ef6\u8fdf\u8f83\u9ad8\u4e14\u89c6\u9891\u8d28\u91cf\u8f83\u4f4e\u3002 \u4e00\u822c\u7684\u786c\u4ef6\u89c6\u9891\u6355\u83b7\u4e0e\u8f6f\u4ef6\u6d41\u5a92\u4f53\u6709\u6240\u4e0d\u540c\uff0c\u4f1a\u5f15\u5165\u989d\u5916\u7684\u5ef6\u8fdf\u3002 BLIKVM\u652f\u63014K\u89c6\u9891\u5417\uff1f \u5bf9\u4e8eHDMI-CSI\u6865\u63a5\u5668\uff0c\u4e0d\u652f\u6301\u3002CSI\u603b\u7ebf\u7684\u5e26\u5bbd\u4e0d\u8db3\u4ee5\u5904\u7406\u5982\u6b64\u5927\u91cf\u7684\u6570\u636e\u30021080p60\u662f\u5e26\u5bbd\u7684\u4e0a\u9650\u3002 \u5bf9\u4e8eUSB\u6355\u83b7\u8bbe\u5907\uff1a\u4ece\u6280\u672f\u4e0a\u8bb2\uff0c\u662f\u53ef\u4ee5\u7684\uff0c\u4f46\u5b83\u4eec\u4f1a\u964d\u4f4e\u5206\u8fa8\u7387\u4ee5\u9002\u5e94USB 2.0\u7684\u5e26\u5bbd\u9650\u5236\uff0c\u56e0\u6b64\u6d41\u5a92\u4f53\u7684\u5206\u8fa8\u7387\u4e0d\u4f1a\u662f4K\u3002 \u65e0\u8bba\u5982\u4f55\uff0c4K\u5b9e\u65f6\u89c6\u9891\u4e5f\u65e0\u6cd5\u901a\u8fc7\u7f51\u7edc\u4f20\u8f93\u3002 \u5149\u6807/\u89c6\u9891\u5ef6\u8fdf\u662f\u7531\u4ec0\u4e48\u5f15\u8d77\u7684\uff1f \u56fe\u50cf\u4f20\u8f93\u5230\u6d4f\u89c8\u5668\u6216VNC\u5ba2\u6237\u7aef\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a \u6355\u83b7\u8bbe\u5907 -> \u538b\u7f29 -> \u7f51\u7edc -> \u89e3\u538b\u7f29 -> \u6e32\u67d3 \u5728\u6b64\u8fc7\u7a0b\u4e2d\uff0c100-200ms\u7684\u5ef6\u8fdf\u5df2\u7ecf\u975e\u5e38\u5feb\u901f\u4e86\u3002\u4f46\u6211\u4eec\u6b63\u5728\u52aa\u529b\u8fdb\u4e00\u6b65\u63d0\u9ad8\u901f\u5ea6\u3002 BLIKVM\u652f\u6301\u97f3\u9891\u5417\uff1f BliKVM v1 CM4, v2 PCIe, v3 HAT\u7248\u672c\u652f\u6301\uff0c v4 Allwinner\u7248\u672c\u4e0d\u652f\u6301\u3002 \u6211\u53ef\u4ee5\u901a\u8fc7PoE\u7ed9Pi\u4f9b\u7535\u5417\uff1f \u53ef\u4ee5\uff01Hat\u7248\u672c\u548cPCIe\u7248\u672c\u90fd\u652f\u6301PoE\u3002 \u7b2c\u4e00\u6b65 \u9ed8\u8ba4\u5bc6\u7801\u662f\u4ec0\u4e48\uff1f\u5982\u4f55\u66f4\u6539\u5bc6\u7801\uff1f \u5982\u679c\u60a8\u4f7f\u7528PiKVM\uff0c\u6709\u4e24\u79cd\u7c7b\u578b\u7684\u5e10\u6237\uff1a\u64cd\u4f5c\u7cfb\u7edf\u5e10\u6237\u548cPiKVM\uff08Web\u754c\u9762\uff09\u5e10\u6237\u3002\u7cfb\u7edf\u5e10\u6237 root \u53ef\u7528\u4e8eSSH/UART\u8bbf\u95ee\uff0c\u5bc6\u7801\u4e3a root \u3002Web\u754c\u9762\u5e10\u6237\u79f0\u4e3a admin \uff0c\u5bc6\u7801\u4e3a admin \u3002PiKVM\u5e10\u6237\u4e0d\u80fd\u7528\u4e8eSSH\u8bbf\u95ee\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002 \u8981\u66f4\u6539\u5bc6\u7801\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff08\u5728root\u7528\u6237\u4e0b\uff09\uff1a su - # \u5982\u679c\u60a8\u5728Webterm\u4e2d rw # \u5207\u6362\u6587\u4ef6\u7cfb\u7edf\u4e3a\u8bfb\u5199\u6a21\u5f0f passwd root # \u66f4\u6539\u64cd\u4f5c\u7cfb\u7edfroot\u5bc6\u7801 kvmd-htpasswd set admin # \u66f4\u6539Web\u754c\u9762\u7ba1\u7406\u5458\u5bc6\u7801 ro # \u5207\u6362\u56de\u53ea\u8bfb\u6a21\u5f0f \u5982\u679c\u60a8\u4f7f\u7528\u7684\u662fBliKVM\uff0cWeb\u754c\u9762\u5e10\u6237\u79f0\u4e3a admin \uff0c\u5bc6\u7801\u4e3a admin ,\u7ec8\u7aef\u7528\u6237\u540d\u79f0\u4e3a blikvm \uff0c\u5bc6\u7801\u4e3a blikvm \u3002 \u5982\u4f55\u6dfb\u52a0\u53e6\u4e00\u4e2a\u7528\u6237\uff1f \u5982\u679c\u60a8\u4f7f\u7528PiKVM\u8f6f\u4ef6\uff0c\u5982\u4e0a\u6240\u8ff0\uff0c\u60a8\u9700\u8981\u521b\u5efa2\u4e2a\u5e10\u6237\uff0c\u4e00\u4e2a\u7528\u4e8eShell\uff0c\u53e6\u4e00\u4e2a\u7528\u4e8ePiKVM Web\u754c\u9762\u3002 \u5982\u679c\u60a8\u9700\u8981\u4e3aPiKVM Web\u754c\u9762\u6dfb\u52a0\u5176\u4ed6\u7528\u6237\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff1a # rw # su - # kvmd-htpasswd set # \u6dfb\u52a0\u65b0\u7528\u6237 # kvmd-htpasswd set # \u8bbe\u7f6e\u5bc6\u7801\uff08\u53ea\u8981\u7528\u6237\u5b58\u5728\uff09 # kvmd-htpasswd del # \u5220\u9664\u7528\u6237 \u8981\u6dfb\u52a0Shell/\u7ec8\u7aef\u5e10\u6237\uff1a # rw # su - # adduser # passwd \u8bf7\u6ce8\u610f\uff0c\u6dfb\u52a0\u7684\u7528\u6237\u8d8a\u591a\uff0c\u8bbf\u95ee\u6d41\u5a92\u4f53\u65f6\u5e27\u7387\u4f1a\u964d\u4f4e\u3002 \u89c6\u9891\u95ee\u9898 BLIKVM\u6839\u672c\u6ca1\u6709\u663e\u793a\u6765\u81ea\u8ba1\u7b97\u673a\u7684\u89c6\u9891 \u8bf7\u4ed4\u7ec6\u68c0\u67e5\u89c6\u9891\u6355\u83b7\u8bbe\u5907\u7684\u8fde\u63a5\u60c5\u51b5\u3002\u5bf9\u4e8eCSI\u6865\u63a5\u5668\uff0c\u5e94\u8fde\u63a5\u5230\u76f8\u673a\u7aef\u53e3\u3002 \u6709\u4e9b\u7b14\u8bb0\u672c\u7535\u8111\u5728\u60a8\u5207\u6362\u8f93\u51fa\u4e4b\u524d\uff08\u901a\u5e38\u901a\u8fc7\u952e\u76d8\u4e0a\u7684FN +\u548cF5\u952e\uff09\u4e0d\u4f1a\u8f93\u51fa\u4efb\u4f55\u4fe1\u53f7\u3002 \u60a8\u7684\u8ba1\u7b97\u673a\u53ef\u80fd\u5df2\u7ecf\u5c06\u663e\u793a\u5668\u8bbe\u7f6e\u4e3a\u7761\u7720\u6a21\u5f0f\u3002\u79fb\u52a8\u9f20\u6807\u4ee5\u5173\u95ed\u7761\u7720\u6a21\u5f0f\u3002 \u5bf9\u4e8eWindows\u7cfb\u7edf\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u68c0\u67e5\u6d3b\u52a8\u4fe1\u53f7\u5206\u8fa8\u7387\u3002\u8981\u66f4\u6539\u6d3b\u52a8\u4fe1\u53f7\u5206\u8fa8\u7387\uff0c\u8bf7\u8f6c\u5230\u201c\u8bbe\u7f6e\u201d>\u201c\u7cfb\u7edf\u201d>\u201c\u663e\u793a\u201d>\u201c\u9ad8\u7ea7\u663e\u793a\u8bbe\u7f6e\u201d>\u201c\u663e\u793a\u9002\u914d\u5668\u5c5e\u6027\u201d\uff0c\u7136\u540e\u70b9\u51fb\u201c\u5217\u51fa\u6240\u6709\u6a21\u5f0f\u201d\uff0c\u9009\u62e9\u6240\u9700\u7684\u6a21\u5f0f\u3002\u5c1d\u8bd5\u4e0d\u540c\u7684\u5237\u65b0\u7387\u8bbe\u7f6e\u3002 \u5728\u5df2\u542f\u52a8\u7684\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u53ef\u4ee5\u770b\u5230\u89c6\u9891\uff0c\u4f46\u5728BIOS/UEFI\u4e2d\u770b\u4e0d\u5230 \u5f53\u4f7f\u7528CSI\u6865\u63a5\u5668\u65f6\uff0cIntel NUC\u3001GA-H77-DS3H\u548c\u4e00\u4e9b\u5176\u4ed6\u8bbe\u5907\u4e0a\u4f1a\u51fa\u73b0\u6b64\u95ee\u9898\u3002\u60a8\u53ea\u9700\u8981\u66f4\u6539EDID\u6570\u636e\uff0c\u8fd9\u662fCSI\u6865\u63a5\u5668\u5411\u8ba1\u7b97\u673a\u62a5\u544a\u7684\u652f\u6301\u7684\u5206\u8fa8\u7387\u4fe1\u606f\u3002 BIOS/UEFI\u5206\u8fa8\u7387\u51fa\u73b0\u6545\u969c\u6216\u9519\u8bef \u5728\u67d0\u4e9b\u4e3b\u677f\u4e0a\uff0cBIOS\u53ef\u80fd\u4ee5\u8f83\u4f4e\u7684\u5206\u8fa8\u7387\u663e\u793a\uff0c\u6216\u51fa\u73b0\u4e00\u4e9b\u6e32\u67d3\u95ee\u9898/\u6545\u969c\uff0c\u7279\u522b\u662f\u5728\u8f83\u65b0\u7684ASUS\u4e3b\u677f\u4e0a\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u60a8\u53ef\u4ee5\u901a\u8fc7\u5728BIOS\u4e2d\u542f\u7528 \u517c\u5bb9\u6027\u652f\u6301\u6a21\u5757\uff08CSM\uff09 \u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u901a\u5e38\u4f4d\u4e8e \u5f15\u5bfc \u9009\u9879\u4e0b\u3002 \u5982\u679c\u60a8\u65e0\u6cd5\u6216\u4e0d\u60f3\u542f\u7528CSM\uff0c\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u8fde\u63a5\u4e00\u4e2aDisplayPort\uff08DP\uff09\u663e\u793a\u5668\u6216 \u865a\u62df\u63d2\u5934 \u3002\u5982\u679c\u62d4\u6389DP\u7535\u7f06/\u8f6c\u63a5\u5668\uff0c\u95ee\u9898\u5c06\u91cd\u65b0\u51fa\u73b0\u3002 \u5982\u679c\u4e0a\u8ff0\u65b9\u6cd5\u90fd\u4e0d\u8d77\u4f5c\u7528\uff0c\u8bf7\u5c1d\u8bd5\u5148\u8fde\u63a5DP\u7535\u7f06\uff0c\u7136\u540e\u542f\u52a8\u5230BIOS\uff0c\u7981\u7528CSM\u5e76\u5173\u673a\uff08\u4e0d\u8981\u91cd\u65b0\u542f\u52a8\uff09\u60a8\u7684\u8ba1\u7b97\u673a\u3002\u7136\u540e\uff0c\u5728\u518d\u6b21\u542f\u52a8\u5230BIOS\u5e76\u542f\u7528CSM\u4e4b\u524d\uff0c\u8fde\u63a5HDMI\u5e76\u518d\u6b21\u6253\u5f00\u8ba1\u7b97\u673a\u3002 GRUB2\u4e2d\u6ca1\u6709\u89c6\u9891\uff0c\u4f46\u4e4b\u524d\u548c\u4e4b\u540e\u90fd\u6709 \u6709\u65f6\u8fd9\u53ef\u80fd\u662f\u7531\u4e8eBIOS/UEFI\u7684\u7279\u5b9a\u95ee\u9898\u4ee5\u53caGRUB2\u4e0e\u89c6\u9891\u7684\u5de5\u4f5c\u65b9\u5f0f\u6240\u5bfc\u81f4\u7684\u3002 \u60a8\u53ef\u4ee5\u901a\u8fc7\u5728BIOS\u4e2d\u542f\u7528 \u517c\u5bb9\u6027\u652f\u6301\u6a21\u5757\uff08CSM\uff09 \u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u901a\u5e38\u4f4d\u4e8e \u5f15\u5bfc \u9009\u9879\u4e0b\u3002\u89c6\u9891\u6a21\u5f0f\u4e5f\u4f4d\u4e8e\u540c\u4e00\u90e8\u5206\u3002\u5c06 \u89c6\u9891 \u6a21\u5f0f\u4ece UEFI \u5207\u6362\u4e3a Legacy \u3002 Linux + Awesome WM\u6ca1\u6709\u8ba1\u7b97\u673a\u56fe\u50cf \u6709\u65f6\uff0c\u5728Linux\u4e0a\u4f7f\u7528Awesome WM\u53ef\u80fd\u65e0\u6cd5\u8bc6\u522b\u7535\u7f06\u7684\u89c6\u9891\u8f93\u51fa\u66f4\u6539\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u7535\u7f06\u5148\u63d2\u5165\u663e\u793a\u5668\uff0c\u7136\u540e\u518d\u8fde\u63a5\u5230BLIKVM\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u60a8\u770b\u4e0d\u5230\u56fe\u50cf\u3002\u8fd9\u4f3c\u4e4e\u662fAwesome WM\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u4f8b\u5982\u5728KDE\u4e2d\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u590d\u73b0\u3002\u5982\u679c\u60a8\u5728\u8fde\u63a5BLIKVM\u540e\u542f\u52a8\u5de5\u4f5c\u7ad9\uff0c\u4e00\u5207\u90fd\u5c06\u6b63\u5e38\u5de5\u4f5c\u3002 USB\u95ee\u9898\uff08\u952e\u76d8\u3001\u9f20\u6807\u3001U\u76d8\u7b49\uff09 USB OTG\u7aef\u53e3\u7684\u901f\u5ea6\u662f\u591a\u5c11\uff1f \u6839\u636e\u5b98\u65b9\u7684RPI\u6587\u6863\uff0c\u8fd9\u662fSoC\u7684\u9650\u5236\u3002OTG\u7aef\u53e3\u53ea\u652f\u6301USB 2.0\uff0c\u56e0\u6b64\u901f\u5ea6\u9650\u5236\u4e3a455 Mbit/s\u3002 \u4e3a\u4ec0\u4e48\u65e0\u6cd5\u6355\u83b7\u67d0\u4e9b\u5b9e\u4f53\u952e\u76d8\u7684\u952e\u76d8\u5feb\u6377\u952e\uff0c\u4f46\u53ef\u4ee5\u6355\u83b7\u865a\u62df\u952e\u76d8\u7684\u952e\u76d8\u5feb\u6377\u952e\uff1f\u4f8b\u5982\uff0c\u65e0\u6cd5\u6355\u83b7Mac\u7535\u8111\u7684F11\u6309\u952e \u8fd9\u662f\u56e0\u4e3a\u4e00\u4e9b\u5feb\u6377\u952e\u5df2\u7ecf\u88ab\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u4e86\uff0c\u4f8b\u5982\u5728 macOS \u4e2d\uff0cF11 \u88ab\u9ed8\u8ba4\u5206\u914d\u7ed9\u4e86\u201c\u663e\u793a\u684c\u9762\u201d\u7684\u529f\u80fd\u3002\u5f53\u60a8\u5728Web\u754c\u9762\u6309\u4e0bF11\u65f6\uff0c\u952e\u76d8\u4e8b\u4ef6\u9996\u5148\u88ab\u64cd\u4f5c\u7cfb\u7edf\u6355\u83b7\uff0c\u5982\u679c\u64cd\u4f5c\u7cfb\u7edf\u6ce8\u518c\u4e86\u56de\u8c03\u51fd\u6570\uff0c\u952e\u76d8\u4e8b\u4ef6\u5c06\u4e0d\u4f1a\u4f20\u9012\u7ed9\u5e94\u7528\u7a0b\u5e8f\u3002\u8981\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u60a8\u53ef\u4ee5\u5173\u95ed\u64cd\u4f5c\u7cfb\u7edf\u8bbe\u7f6e\u4e2d\u7684\u5feb\u6377\u952e\uff0c\u6216\u8005\u4f7f\u7528\u865a\u62df\u952e\u76d8\u3002 \u786c\u4ef6\u95ee\u9898\uff08Wi-Fi\u3001ATX\u7b49\uff09 \u5982\u679c\u4f7f\u7528PiKVM\u8f6f\u4ef6\uff0cWeb\u754c\u9762\u663e\u793a FAN \u9519\u8bef\uff01 \u7531\u4e8eBLIKVM\u786c\u4ef6\u4f7f\u7528\u7684\u98ce\u6247\u578b\u53f7\u4e0ePIKVM\u786c\u4ef6\u4e0d\u540c\uff0c\u56e0\u6b64\u5728pikvm\u7684\u6700\u65b0\u7cfb\u7edf\u4e2d\uff0c\u901a\u8fc7Web\u754c\u9762\u67e5\u770b\u98ce\u6247\u72b6\u6001\u53ef\u80fd\u4f1a\u5931\u8d25\u3002\u4f46\u8fd9\u4e0d\u4f1a\u5f71\u54cdBLIKVM\u98ce\u6247\u7684\u6b63\u5e38\u8fd0\u884c\u3002\u56e0\u6b64\uff0c\u5728\u4f7f\u7528PIKVM\u955c\u50cf\u65f6\uff0c\u53ea\u8981\u786e\u4fdd \u5b89\u88c5\u811a\u672c \u663e\u793aOK\uff0c\u5c31\u8868\u793akvmd\u98ce\u6247\u7a0b\u5e8f\u7684\u66f4\u65b0\u6210\u529f\u3002\u9ed8\u8ba4\u7a0b\u5e8f\u8bbe\u7f6e\u7684\u6e29\u5ea6\u9608\u503c\u4e3a\u6444\u6c0f60\u5ea6\u3002\u5f53\u68c0\u6d4b\u5230CPU\u6e29\u5ea6\u8d85\u8fc760\u6444\u6c0f\u5ea6\u65f6\uff0c\u98ce\u6247\u5c06\u4ee585%\u7684\u901f\u5ea6\u5f00\u59cb\u65cb\u8f6c\u3002\u5982\u679c\u8981\u4fee\u6539\u6e29\u5ea6\u9608\u503c\u548c\u901f\u5ea6\uff0c\u53ef\u4ee5\u4fee\u6539kvmd-fan.py\u811a\u672c\uff0c\u7136\u540e\u91cd\u65b0\u6267\u884cinstall.sh\u3002 \u6211\u6839\u672c\u65e0\u6cd5\u8fde\u63a5\u5230Wi-Fi\uff01 \u5982\u679c\u60a8\u7684\u8bbe\u5907\u65e0\u6cd5\u8fde\u63a5\u5230\u60a8\u8bbe\u7f6e\u7684Wi-Fi\u7f51\u7edc\uff0c\u8bf7\u68c0\u67e5\u60a8\u7684Wi-Fi\u63a5\u5165\u70b9\u4f7f\u7528\u76842.4GHz Wi-Fi\u4fe1\u9053\u3002\u5982\u679c\u4f7f\u7528\u4e8612\u523014\u4fe1\u9053\uff08\u67d0\u4e9b\u56fd\u5bb6\u7981\u6b62\u4f7f\u7528\u8fd9\u4e9b\u4fe1\u9053\uff09\uff0c\u8bf7\u5c1d\u8bd5\u4f7f\u75281\u523011\u4e4b\u95f4\u7684\u4fe1\u9053\u3002 BLIKVM\u663e\u793a\u4f4e\u7535\u538b\u8b66\u544a \u60a8\u662f\u5426\u4f7f\u7528\u4e86\u201c\u6b63\u786e\u201d\u7684\u7535\u6e90\u9002\u914d\u5668\uff1f\u800c\u4e0d\u662f\u81ea\u5df1\u62fc\u51d1\u7684\u9002\u914d\u5668\uff1f \u4e00\u4e9bUSB\u7535\u6e90\u9002\u914d\u5668\u5ba3\u4f20\u4e3a5V 2.1A\u6216\u66f4\u9ad8\uff0c\u4f46\u65e0\u6cd5\u63d0\u4f9b\u7a33\u5b9a\u76845V\u7535\u538b\u3002\u6700\u597d\u4f7f\u7528\u6811\u8393\u6d3e\u57fa\u91d1\u4f1a\u63a8\u8350\u7684\u7535\u6e90\u9002\u914d\u5668\u3002\u5176\u8f93\u51fa\u5e94\u4e3a5.1V\u548c3A\u76f4\u6d41\u7535\u538b\u3002 \u5f53\u6211\u4f7f\u7528PoE\u65f6\uff0c\u662f\u5426\u4ecd\u7136\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u6765\u9632\u6b62\u673a\u5668USB\u7684\u53cd\u5411\u4f9b\u7535\uff1f \u53ea\u6709HAT\u7248\u672c\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u6765\u9632\u6b62\u53cd\u5411\u4f9b\u7535\u3002\u901a\u5e38\uff0c\u5927\u591a\u6570\u4e3b\u673a\u8ba1\u7b97\u673a\u90fd\u6709\u53cd\u5411\u4f9b\u7535\u4fdd\u62a4\uff0c\u56e0\u6b64\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e0d\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u3002 BLIKVM-CM4-V2.2\u548cBLIKVM-PCIe\u7248\u672c\u4e0d\u9700\u8981\u3002 \u5728\u4e00\u4e9b\u50cfBLIKVM-PCIe\u6216BLIKVM-CM4-V2.2\u8fd9\u6837\u7684\u677f\u5b50\u4e0a\u6709\u5f15\u5bfc\u5f15\u811a\uff0c\u5982\u4f55\u8fde\u63a5\uff1f \u5982\u679c\u5c06\u5b83\u4eec\u8fde\u63a5\u77ed\u8def\uff0cCM4\u5c06\u65e0\u6cd5\u6b63\u5e38\u542f\u52a8\uff0c\u800c\u5c06\u8fdb\u5165\u70e7\u5f55\u6620\u50cf\u6a21\u5f0f\u3002\u5982\u679c\u60a8\u7684\u786c\u4ef6\u7248\u672c\u7684\u5f15\u5bfc\u5f15\u811a\u53ea\u6709\u4e24\u4e2a\u5f15\u811a\uff0c\u4f7f\u7528\u8df3\u7ebf\u5e3d\u5c06\u8fd9\u4e24\u4e2a\u5f15\u811a\u8fde\u63a5\u8d77\u6765\uff0c\u5f62\u6210\u77ed\u8def\u3002\u5982\u679c\u60a8\u4e0d\u4f7f\u7528\u8df3\u7ebf\u5e3d\u6216\u53ea\u5c06\u5176\u63d2\u5165\u4e00\u4e2a\u5f15\u811a\uff0cCM4\u5c06\u6b63\u5e38\u542f\u52a8\u3002\u5982\u679c\u60a8\u4f7f\u7528\u7684\u662f\u4e09\u4e2a\u5f15\u5bfc\u5f15\u811a\u7684\u786c\u4ef6\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u8df3\u7ebf\u5e3d\u5c06GND\u548c\u53e6\u4e00\u4e2a\u975eGND\u5f15\u811a\u8fde\u63a5\u8d77\u6765\u4ee5\u793a\u77ed\u8def\uff0c\u5e76\u5c06\u8df3\u7ebf\u5e3d\u63d2\u5728\u4e24\u4e2aGND\u5f15\u811a\u4e0a\u6216\u4e0d\u4f7f\u7528\u8df3\u7ebf\u5e3d\uff0cCM4\u5c06\u6b63\u5e38\u542f\u52a8\u3002 Web\u95ee\u9898 BliKVM OS\u5360\u7528\u7684\u7aef\u53e3\u6709\u54ea\u4e9b\uff0c\u5728\u7528\u516c\u7f51\u670d\u52a1\u5668\u8f6c\u53d1\u65f6\uff0c\u5e94\u8be5\u600e\u4e48\u505a\uff1f Web\u754c\u9762\u4e3ahttp\u534f\u8bae\uff0c\u5360\u7528\u7684\u662f80\u7aef\u53e3\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV1 V2 V3\uff0c\u4f7f\u7528\u7684\u662f\u662fweb-rtc\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8188\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV4\uff0c\u4f7f\u7528\u7684\u662fmjepg\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8008\uff1b \u6ce8\u610f\u7aef\u53e3\u4e0d\u652f\u6301\u88ab\u4fee\u6539\uff0c\u53ea\u80fd\u914d\u7f6e\u8f6c\u53d1\uff1b \u6811\u8393\u6d3e\u76f8\u5173\u95ee\u9898 \u6211\u662f\u5426\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u5e26eMMC\u7248\u672c\u7684CM4\u548cSD\u5361? \u4e0d\u53ef\u4ee5\uff0c\u56e0\u4e3a\u5728CM4\u786c\u4ef6\u8bbe\u8ba1\u4e0a\uff0c\u51e0\u4e2aSD\u5361\u7684\u5f15\u811a\u53ea\u5728lite\u7248\u672c\u4e2d\u662f\u53ef\u7528\u7684\uff0c\u4f60\u53ef\u4ee5\u5728\u6811\u8393\u6d3e\u5b98\u7f51\u627e\u5230\u8bf4\u660e\u3002","title":"\u5e38\u89c1\u95ee\u9898\u89e3\u7b54"},{"location":"faq/#faq","text":"\u4f5c\u4e3a\u7b2c\u4e00\u6b65\uff0c\u6211\u4eec\u5efa\u8bae\u4ed4\u7ec6\u9605\u8bfb\u6211\u4eec\u7684\u6587\u6863\u3002\u5927\u90e8\u5206\u8bbe\u7f6eBLIKVM\u6240\u9700\u7684\u6b65\u9aa4\u5df2\u7ecf\u5728\u6587\u6863\u4e2d\u63cf\u8ff0\u4e86\u3002\u5982\u679c\u60a8\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u60a8\u53ef\u4ee5\u67e5\u770b\u672c\u9875\uff0c\u5176\u4e2d\u5217\u51fa\u4e86\u5e38\u89c1\u9519\u8bef\u3002\u5982\u679c\u4ecd\u7136\u65e0\u6cd5\u89e3\u51b3\u95ee\u9898\uff0c\u6b22\u8fce\u63d0\u4ea4 \u95ee\u9898\u53cd\u9988 \u6216 \u52a0\u5165\u6211\u4eec\u7684Discord \u5bfb\u6c42\u8fdb\u4e00\u6b65\u5e2e\u52a9\u3002","title":"FAQ & \u6545\u969c\u6392\u9664"},{"location":"faq/#_1","text":"\u6211\u53ef\u4ee5\u5c06\u591a\u53f0\u670d\u52a1\u5668\u8fde\u63a5\u5230\u5355\u4e2aBLIKVM\u5417\uff1f \u53ef\u4ee5\uff0c\u4f46\u9700\u8981\u8fdb\u884c\u989d\u5916\u7684\u8bbe\u7f6e\u5de5\u4f5c\u3002\u8bf7\u53c2\u8003 \u6b64\u9875\u9762 \u3002 \u5982\u4f55\u5728\u672c\u5730\u7f51\u7edc\u4e0a\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95eeBliKVM\uff1f \u5982\u679c\u60a8\u7684\u8def\u7531\u5668\u5177\u6709\u5916\u90e8IP\u5730\u5740\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u7aef\u53e3\u8f6c\u53d1\u6765\u8f6c\u53d180\u7aef\u53e3(Web),8008\u7aef\u53e3(mjpeg)\uff0c8188\u7aef\u53e3\uff08webrtc\uff09\u3002\u5728\u5176\u4ed6\u60c5\u51b5\u4e0b\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u51fa\u8272\u7684\u514d\u8d39VPN\u670d\u52a1Tailscale\u3002 BLiKVM\u6709\u591a\u6b3e\u786c\u4ef6\uff0c\u5982BliKVM V1 CM4\u3001BliKVM V2 PCIe\u3001BliKVM V3 Hat\uff0c\u6211\u5e94\u8be5\u9009\u54ea\u6b3e\uff1f \u9996\u5148\u5404\u4e2a\u7248\u672c\u7684\u4e3b\u8981\u53c2\u6570\u5bf9\u6bd4\u8bf7\u53c2\u8003 \u6b64\u9875\u9762 \u3002 V1\u548cV3\u5c5e\u4e8e\u5916\u7f6e\u65b9\u6848\uff0cV2\u5c5e\u4e8e\u5185\u7f6e\u673a\u7bb1\u65b9\u6848\u3002\u5982\u679c\u60a8\u662f\u673a\u7bb1\u5f62\u5f0f\uff0c\u5e76\u4e14\u673a\u7bb1\u5185\u90e8\u6709\u7a7a\u95f4\uff0c\u90a3\u4e48\u6beb\u65e0\u7591\u95ee\u9009\u62e9V2 PCIe\u7248\u672c\u662f\u8f83\u597d\u7684\u9009\u62e9\u3002 \u90a3\u4e48V1\u548cV3\u4e24\u4e2a\u5916\u7f6e\u65b9\u6848\u5982\u4f55\u9009\u62e9\u5462\uff0cV1\u57fa\u4e8eCM4\u7684\u65b9\u6848\uff0c\u96c6\u6210\u5ea6\u66f4\u9ad8\uff0c\u6709\u5230\u624b\u53ef\u7528\u7248\u672c\u3002V3\u57fa\u4e8e\u6811\u8393\u6d3e4B\u65b9\u6848\uff0c\u6240\u6709IO\u53e3\u5747\u5f15\u51fa\uff0c\u53ef\u6269\u5c55\u6027\u66f4\u5f3a\u3002\u4e24\u8005\u7684\u53e6\u4e00\u4e2a\u6838\u5fc3\u533a\u522b\u5c31\u662fV1\u6700\u9ad8\u652f\u63011080P60Hz\u8f93\u5165\uff0cV3\u6700\u9ad8\u652f\u63011080P50Hz\u8f93\u5165\u3002\u5f53\u7136\u540c\u65f6\u9700\u8981\u8003\u8651\u60a8\u662f\u5df2\u5426\u6709CM4\u6216\u80054B\uff0c\u5982\u679c\u6709\u7684\u8bdd\u53ea\u4e70\u5bf9\u5e94\u7684\u5e95\u677f\uff0c\u6027\u4ef7\u6bd4\u66f4\u9ad8\u3002 \u6211\u53ef\u4ee5\u7528BLIKVM\u8fdb\u884c\u6e38\u620f\u5417\uff1f \u4e0d\u53ef\u4ee5\uff0c\u539f\u56e0\u5982\u4e0b\uff1a \u5bf9\u4e8eHDMI-CSI\u6865\u63a5\u5668\uff0c\u603b\u7ebf\u5e26\u5bbd\u4e0d\u8db3\u4ee5\u4f20\u8f93\u8d85\u8fc71080p60\u7684\u89c6\u9891\u3002 \u5bf9\u4e8eHDMI-USB\u8f6c\u6362\u5668\uff0c\u5ef6\u8fdf\u8f83\u9ad8\u4e14\u89c6\u9891\u8d28\u91cf\u8f83\u4f4e\u3002 \u4e00\u822c\u7684\u786c\u4ef6\u89c6\u9891\u6355\u83b7\u4e0e\u8f6f\u4ef6\u6d41\u5a92\u4f53\u6709\u6240\u4e0d\u540c\uff0c\u4f1a\u5f15\u5165\u989d\u5916\u7684\u5ef6\u8fdf\u3002 BLIKVM\u652f\u63014K\u89c6\u9891\u5417\uff1f \u5bf9\u4e8eHDMI-CSI\u6865\u63a5\u5668\uff0c\u4e0d\u652f\u6301\u3002CSI\u603b\u7ebf\u7684\u5e26\u5bbd\u4e0d\u8db3\u4ee5\u5904\u7406\u5982\u6b64\u5927\u91cf\u7684\u6570\u636e\u30021080p60\u662f\u5e26\u5bbd\u7684\u4e0a\u9650\u3002 \u5bf9\u4e8eUSB\u6355\u83b7\u8bbe\u5907\uff1a\u4ece\u6280\u672f\u4e0a\u8bb2\uff0c\u662f\u53ef\u4ee5\u7684\uff0c\u4f46\u5b83\u4eec\u4f1a\u964d\u4f4e\u5206\u8fa8\u7387\u4ee5\u9002\u5e94USB 2.0\u7684\u5e26\u5bbd\u9650\u5236\uff0c\u56e0\u6b64\u6d41\u5a92\u4f53\u7684\u5206\u8fa8\u7387\u4e0d\u4f1a\u662f4K\u3002 \u65e0\u8bba\u5982\u4f55\uff0c4K\u5b9e\u65f6\u89c6\u9891\u4e5f\u65e0\u6cd5\u901a\u8fc7\u7f51\u7edc\u4f20\u8f93\u3002 \u5149\u6807/\u89c6\u9891\u5ef6\u8fdf\u662f\u7531\u4ec0\u4e48\u5f15\u8d77\u7684\uff1f \u56fe\u50cf\u4f20\u8f93\u5230\u6d4f\u89c8\u5668\u6216VNC\u5ba2\u6237\u7aef\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a \u6355\u83b7\u8bbe\u5907 -> \u538b\u7f29 -> \u7f51\u7edc -> \u89e3\u538b\u7f29 -> \u6e32\u67d3 \u5728\u6b64\u8fc7\u7a0b\u4e2d\uff0c100-200ms\u7684\u5ef6\u8fdf\u5df2\u7ecf\u975e\u5e38\u5feb\u901f\u4e86\u3002\u4f46\u6211\u4eec\u6b63\u5728\u52aa\u529b\u8fdb\u4e00\u6b65\u63d0\u9ad8\u901f\u5ea6\u3002 BLIKVM\u652f\u6301\u97f3\u9891\u5417\uff1f BliKVM v1 CM4, v2 PCIe, v3 HAT\u7248\u672c\u652f\u6301\uff0c v4 Allwinner\u7248\u672c\u4e0d\u652f\u6301\u3002 \u6211\u53ef\u4ee5\u901a\u8fc7PoE\u7ed9Pi\u4f9b\u7535\u5417\uff1f \u53ef\u4ee5\uff01Hat\u7248\u672c\u548cPCIe\u7248\u672c\u90fd\u652f\u6301PoE\u3002","title":"\u5e38\u89c1\u95ee\u9898"},{"location":"faq/#_2","text":"\u9ed8\u8ba4\u5bc6\u7801\u662f\u4ec0\u4e48\uff1f\u5982\u4f55\u66f4\u6539\u5bc6\u7801\uff1f \u5982\u679c\u60a8\u4f7f\u7528PiKVM\uff0c\u6709\u4e24\u79cd\u7c7b\u578b\u7684\u5e10\u6237\uff1a\u64cd\u4f5c\u7cfb\u7edf\u5e10\u6237\u548cPiKVM\uff08Web\u754c\u9762\uff09\u5e10\u6237\u3002\u7cfb\u7edf\u5e10\u6237 root \u53ef\u7528\u4e8eSSH/UART\u8bbf\u95ee\uff0c\u5bc6\u7801\u4e3a root \u3002Web\u754c\u9762\u5e10\u6237\u79f0\u4e3a admin \uff0c\u5bc6\u7801\u4e3a admin \u3002PiKVM\u5e10\u6237\u4e0d\u80fd\u7528\u4e8eSSH\u8bbf\u95ee\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002 \u8981\u66f4\u6539\u5bc6\u7801\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff08\u5728root\u7528\u6237\u4e0b\uff09\uff1a su - # \u5982\u679c\u60a8\u5728Webterm\u4e2d rw # \u5207\u6362\u6587\u4ef6\u7cfb\u7edf\u4e3a\u8bfb\u5199\u6a21\u5f0f passwd root # \u66f4\u6539\u64cd\u4f5c\u7cfb\u7edfroot\u5bc6\u7801 kvmd-htpasswd set admin # \u66f4\u6539Web\u754c\u9762\u7ba1\u7406\u5458\u5bc6\u7801 ro # \u5207\u6362\u56de\u53ea\u8bfb\u6a21\u5f0f \u5982\u679c\u60a8\u4f7f\u7528\u7684\u662fBliKVM\uff0cWeb\u754c\u9762\u5e10\u6237\u79f0\u4e3a admin \uff0c\u5bc6\u7801\u4e3a admin ,\u7ec8\u7aef\u7528\u6237\u540d\u79f0\u4e3a blikvm \uff0c\u5bc6\u7801\u4e3a blikvm \u3002 \u5982\u4f55\u6dfb\u52a0\u53e6\u4e00\u4e2a\u7528\u6237\uff1f \u5982\u679c\u60a8\u4f7f\u7528PiKVM\u8f6f\u4ef6\uff0c\u5982\u4e0a\u6240\u8ff0\uff0c\u60a8\u9700\u8981\u521b\u5efa2\u4e2a\u5e10\u6237\uff0c\u4e00\u4e2a\u7528\u4e8eShell\uff0c\u53e6\u4e00\u4e2a\u7528\u4e8ePiKVM Web\u754c\u9762\u3002 \u5982\u679c\u60a8\u9700\u8981\u4e3aPiKVM Web\u754c\u9762\u6dfb\u52a0\u5176\u4ed6\u7528\u6237\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff1a # rw # su - # kvmd-htpasswd set # \u6dfb\u52a0\u65b0\u7528\u6237 # kvmd-htpasswd set # \u8bbe\u7f6e\u5bc6\u7801\uff08\u53ea\u8981\u7528\u6237\u5b58\u5728\uff09 # kvmd-htpasswd del # \u5220\u9664\u7528\u6237 \u8981\u6dfb\u52a0Shell/\u7ec8\u7aef\u5e10\u6237\uff1a # rw # su - # adduser # passwd \u8bf7\u6ce8\u610f\uff0c\u6dfb\u52a0\u7684\u7528\u6237\u8d8a\u591a\uff0c\u8bbf\u95ee\u6d41\u5a92\u4f53\u65f6\u5e27\u7387\u4f1a\u964d\u4f4e\u3002","title":"\u7b2c\u4e00\u6b65"},{"location":"faq/#_3","text":"BLIKVM\u6839\u672c\u6ca1\u6709\u663e\u793a\u6765\u81ea\u8ba1\u7b97\u673a\u7684\u89c6\u9891 \u8bf7\u4ed4\u7ec6\u68c0\u67e5\u89c6\u9891\u6355\u83b7\u8bbe\u5907\u7684\u8fde\u63a5\u60c5\u51b5\u3002\u5bf9\u4e8eCSI\u6865\u63a5\u5668\uff0c\u5e94\u8fde\u63a5\u5230\u76f8\u673a\u7aef\u53e3\u3002 \u6709\u4e9b\u7b14\u8bb0\u672c\u7535\u8111\u5728\u60a8\u5207\u6362\u8f93\u51fa\u4e4b\u524d\uff08\u901a\u5e38\u901a\u8fc7\u952e\u76d8\u4e0a\u7684FN +\u548cF5\u952e\uff09\u4e0d\u4f1a\u8f93\u51fa\u4efb\u4f55\u4fe1\u53f7\u3002 \u60a8\u7684\u8ba1\u7b97\u673a\u53ef\u80fd\u5df2\u7ecf\u5c06\u663e\u793a\u5668\u8bbe\u7f6e\u4e3a\u7761\u7720\u6a21\u5f0f\u3002\u79fb\u52a8\u9f20\u6807\u4ee5\u5173\u95ed\u7761\u7720\u6a21\u5f0f\u3002 \u5bf9\u4e8eWindows\u7cfb\u7edf\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u68c0\u67e5\u6d3b\u52a8\u4fe1\u53f7\u5206\u8fa8\u7387\u3002\u8981\u66f4\u6539\u6d3b\u52a8\u4fe1\u53f7\u5206\u8fa8\u7387\uff0c\u8bf7\u8f6c\u5230\u201c\u8bbe\u7f6e\u201d>\u201c\u7cfb\u7edf\u201d>\u201c\u663e\u793a\u201d>\u201c\u9ad8\u7ea7\u663e\u793a\u8bbe\u7f6e\u201d>\u201c\u663e\u793a\u9002\u914d\u5668\u5c5e\u6027\u201d\uff0c\u7136\u540e\u70b9\u51fb\u201c\u5217\u51fa\u6240\u6709\u6a21\u5f0f\u201d\uff0c\u9009\u62e9\u6240\u9700\u7684\u6a21\u5f0f\u3002\u5c1d\u8bd5\u4e0d\u540c\u7684\u5237\u65b0\u7387\u8bbe\u7f6e\u3002 \u5728\u5df2\u542f\u52a8\u7684\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u53ef\u4ee5\u770b\u5230\u89c6\u9891\uff0c\u4f46\u5728BIOS/UEFI\u4e2d\u770b\u4e0d\u5230 \u5f53\u4f7f\u7528CSI\u6865\u63a5\u5668\u65f6\uff0cIntel NUC\u3001GA-H77-DS3H\u548c\u4e00\u4e9b\u5176\u4ed6\u8bbe\u5907\u4e0a\u4f1a\u51fa\u73b0\u6b64\u95ee\u9898\u3002\u60a8\u53ea\u9700\u8981\u66f4\u6539EDID\u6570\u636e\uff0c\u8fd9\u662fCSI\u6865\u63a5\u5668\u5411\u8ba1\u7b97\u673a\u62a5\u544a\u7684\u652f\u6301\u7684\u5206\u8fa8\u7387\u4fe1\u606f\u3002 BIOS/UEFI\u5206\u8fa8\u7387\u51fa\u73b0\u6545\u969c\u6216\u9519\u8bef \u5728\u67d0\u4e9b\u4e3b\u677f\u4e0a\uff0cBIOS\u53ef\u80fd\u4ee5\u8f83\u4f4e\u7684\u5206\u8fa8\u7387\u663e\u793a\uff0c\u6216\u51fa\u73b0\u4e00\u4e9b\u6e32\u67d3\u95ee\u9898/\u6545\u969c\uff0c\u7279\u522b\u662f\u5728\u8f83\u65b0\u7684ASUS\u4e3b\u677f\u4e0a\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff1a \u60a8\u53ef\u4ee5\u901a\u8fc7\u5728BIOS\u4e2d\u542f\u7528 \u517c\u5bb9\u6027\u652f\u6301\u6a21\u5757\uff08CSM\uff09 \u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u901a\u5e38\u4f4d\u4e8e \u5f15\u5bfc \u9009\u9879\u4e0b\u3002 \u5982\u679c\u60a8\u65e0\u6cd5\u6216\u4e0d\u60f3\u542f\u7528CSM\uff0c\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u8fde\u63a5\u4e00\u4e2aDisplayPort\uff08DP\uff09\u663e\u793a\u5668\u6216 \u865a\u62df\u63d2\u5934 \u3002\u5982\u679c\u62d4\u6389DP\u7535\u7f06/\u8f6c\u63a5\u5668\uff0c\u95ee\u9898\u5c06\u91cd\u65b0\u51fa\u73b0\u3002 \u5982\u679c\u4e0a\u8ff0\u65b9\u6cd5\u90fd\u4e0d\u8d77\u4f5c\u7528\uff0c\u8bf7\u5c1d\u8bd5\u5148\u8fde\u63a5DP\u7535\u7f06\uff0c\u7136\u540e\u542f\u52a8\u5230BIOS\uff0c\u7981\u7528CSM\u5e76\u5173\u673a\uff08\u4e0d\u8981\u91cd\u65b0\u542f\u52a8\uff09\u60a8\u7684\u8ba1\u7b97\u673a\u3002\u7136\u540e\uff0c\u5728\u518d\u6b21\u542f\u52a8\u5230BIOS\u5e76\u542f\u7528CSM\u4e4b\u524d\uff0c\u8fde\u63a5HDMI\u5e76\u518d\u6b21\u6253\u5f00\u8ba1\u7b97\u673a\u3002 GRUB2\u4e2d\u6ca1\u6709\u89c6\u9891\uff0c\u4f46\u4e4b\u524d\u548c\u4e4b\u540e\u90fd\u6709 \u6709\u65f6\u8fd9\u53ef\u80fd\u662f\u7531\u4e8eBIOS/UEFI\u7684\u7279\u5b9a\u95ee\u9898\u4ee5\u53caGRUB2\u4e0e\u89c6\u9891\u7684\u5de5\u4f5c\u65b9\u5f0f\u6240\u5bfc\u81f4\u7684\u3002 \u60a8\u53ef\u4ee5\u901a\u8fc7\u5728BIOS\u4e2d\u542f\u7528 \u517c\u5bb9\u6027\u652f\u6301\u6a21\u5757\uff08CSM\uff09 \u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u901a\u5e38\u4f4d\u4e8e \u5f15\u5bfc \u9009\u9879\u4e0b\u3002\u89c6\u9891\u6a21\u5f0f\u4e5f\u4f4d\u4e8e\u540c\u4e00\u90e8\u5206\u3002\u5c06 \u89c6\u9891 \u6a21\u5f0f\u4ece UEFI \u5207\u6362\u4e3a Legacy \u3002 Linux + Awesome WM\u6ca1\u6709\u8ba1\u7b97\u673a\u56fe\u50cf \u6709\u65f6\uff0c\u5728Linux\u4e0a\u4f7f\u7528Awesome WM\u53ef\u80fd\u65e0\u6cd5\u8bc6\u522b\u7535\u7f06\u7684\u89c6\u9891\u8f93\u51fa\u66f4\u6539\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u7535\u7f06\u5148\u63d2\u5165\u663e\u793a\u5668\uff0c\u7136\u540e\u518d\u8fde\u63a5\u5230BLIKVM\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u60a8\u770b\u4e0d\u5230\u56fe\u50cf\u3002\u8fd9\u4f3c\u4e4e\u662fAwesome WM\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u4f8b\u5982\u5728KDE\u4e2d\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u590d\u73b0\u3002\u5982\u679c\u60a8\u5728\u8fde\u63a5BLIKVM\u540e\u542f\u52a8\u5de5\u4f5c\u7ad9\uff0c\u4e00\u5207\u90fd\u5c06\u6b63\u5e38\u5de5\u4f5c\u3002","title":"\u89c6\u9891\u95ee\u9898"},{"location":"faq/#usbu","text":"USB OTG\u7aef\u53e3\u7684\u901f\u5ea6\u662f\u591a\u5c11\uff1f \u6839\u636e\u5b98\u65b9\u7684RPI\u6587\u6863\uff0c\u8fd9\u662fSoC\u7684\u9650\u5236\u3002OTG\u7aef\u53e3\u53ea\u652f\u6301USB 2.0\uff0c\u56e0\u6b64\u901f\u5ea6\u9650\u5236\u4e3a455 Mbit/s\u3002 \u4e3a\u4ec0\u4e48\u65e0\u6cd5\u6355\u83b7\u67d0\u4e9b\u5b9e\u4f53\u952e\u76d8\u7684\u952e\u76d8\u5feb\u6377\u952e\uff0c\u4f46\u53ef\u4ee5\u6355\u83b7\u865a\u62df\u952e\u76d8\u7684\u952e\u76d8\u5feb\u6377\u952e\uff1f\u4f8b\u5982\uff0c\u65e0\u6cd5\u6355\u83b7Mac\u7535\u8111\u7684F11\u6309\u952e \u8fd9\u662f\u56e0\u4e3a\u4e00\u4e9b\u5feb\u6377\u952e\u5df2\u7ecf\u88ab\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u4e86\uff0c\u4f8b\u5982\u5728 macOS \u4e2d\uff0cF11 \u88ab\u9ed8\u8ba4\u5206\u914d\u7ed9\u4e86\u201c\u663e\u793a\u684c\u9762\u201d\u7684\u529f\u80fd\u3002\u5f53\u60a8\u5728Web\u754c\u9762\u6309\u4e0bF11\u65f6\uff0c\u952e\u76d8\u4e8b\u4ef6\u9996\u5148\u88ab\u64cd\u4f5c\u7cfb\u7edf\u6355\u83b7\uff0c\u5982\u679c\u64cd\u4f5c\u7cfb\u7edf\u6ce8\u518c\u4e86\u56de\u8c03\u51fd\u6570\uff0c\u952e\u76d8\u4e8b\u4ef6\u5c06\u4e0d\u4f1a\u4f20\u9012\u7ed9\u5e94\u7528\u7a0b\u5e8f\u3002\u8981\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u60a8\u53ef\u4ee5\u5173\u95ed\u64cd\u4f5c\u7cfb\u7edf\u8bbe\u7f6e\u4e2d\u7684\u5feb\u6377\u952e\uff0c\u6216\u8005\u4f7f\u7528\u865a\u62df\u952e\u76d8\u3002","title":"USB\u95ee\u9898\uff08\u952e\u76d8\u3001\u9f20\u6807\u3001U\u76d8\u7b49\uff09"},{"location":"faq/#wi-fiatx","text":"\u5982\u679c\u4f7f\u7528PiKVM\u8f6f\u4ef6\uff0cWeb\u754c\u9762\u663e\u793a FAN \u9519\u8bef\uff01 \u7531\u4e8eBLIKVM\u786c\u4ef6\u4f7f\u7528\u7684\u98ce\u6247\u578b\u53f7\u4e0ePIKVM\u786c\u4ef6\u4e0d\u540c\uff0c\u56e0\u6b64\u5728pikvm\u7684\u6700\u65b0\u7cfb\u7edf\u4e2d\uff0c\u901a\u8fc7Web\u754c\u9762\u67e5\u770b\u98ce\u6247\u72b6\u6001\u53ef\u80fd\u4f1a\u5931\u8d25\u3002\u4f46\u8fd9\u4e0d\u4f1a\u5f71\u54cdBLIKVM\u98ce\u6247\u7684\u6b63\u5e38\u8fd0\u884c\u3002\u56e0\u6b64\uff0c\u5728\u4f7f\u7528PIKVM\u955c\u50cf\u65f6\uff0c\u53ea\u8981\u786e\u4fdd \u5b89\u88c5\u811a\u672c \u663e\u793aOK\uff0c\u5c31\u8868\u793akvmd\u98ce\u6247\u7a0b\u5e8f\u7684\u66f4\u65b0\u6210\u529f\u3002\u9ed8\u8ba4\u7a0b\u5e8f\u8bbe\u7f6e\u7684\u6e29\u5ea6\u9608\u503c\u4e3a\u6444\u6c0f60\u5ea6\u3002\u5f53\u68c0\u6d4b\u5230CPU\u6e29\u5ea6\u8d85\u8fc760\u6444\u6c0f\u5ea6\u65f6\uff0c\u98ce\u6247\u5c06\u4ee585%\u7684\u901f\u5ea6\u5f00\u59cb\u65cb\u8f6c\u3002\u5982\u679c\u8981\u4fee\u6539\u6e29\u5ea6\u9608\u503c\u548c\u901f\u5ea6\uff0c\u53ef\u4ee5\u4fee\u6539kvmd-fan.py\u811a\u672c\uff0c\u7136\u540e\u91cd\u65b0\u6267\u884cinstall.sh\u3002 \u6211\u6839\u672c\u65e0\u6cd5\u8fde\u63a5\u5230Wi-Fi\uff01 \u5982\u679c\u60a8\u7684\u8bbe\u5907\u65e0\u6cd5\u8fde\u63a5\u5230\u60a8\u8bbe\u7f6e\u7684Wi-Fi\u7f51\u7edc\uff0c\u8bf7\u68c0\u67e5\u60a8\u7684Wi-Fi\u63a5\u5165\u70b9\u4f7f\u7528\u76842.4GHz Wi-Fi\u4fe1\u9053\u3002\u5982\u679c\u4f7f\u7528\u4e8612\u523014\u4fe1\u9053\uff08\u67d0\u4e9b\u56fd\u5bb6\u7981\u6b62\u4f7f\u7528\u8fd9\u4e9b\u4fe1\u9053\uff09\uff0c\u8bf7\u5c1d\u8bd5\u4f7f\u75281\u523011\u4e4b\u95f4\u7684\u4fe1\u9053\u3002 BLIKVM\u663e\u793a\u4f4e\u7535\u538b\u8b66\u544a \u60a8\u662f\u5426\u4f7f\u7528\u4e86\u201c\u6b63\u786e\u201d\u7684\u7535\u6e90\u9002\u914d\u5668\uff1f\u800c\u4e0d\u662f\u81ea\u5df1\u62fc\u51d1\u7684\u9002\u914d\u5668\uff1f \u4e00\u4e9bUSB\u7535\u6e90\u9002\u914d\u5668\u5ba3\u4f20\u4e3a5V 2.1A\u6216\u66f4\u9ad8\uff0c\u4f46\u65e0\u6cd5\u63d0\u4f9b\u7a33\u5b9a\u76845V\u7535\u538b\u3002\u6700\u597d\u4f7f\u7528\u6811\u8393\u6d3e\u57fa\u91d1\u4f1a\u63a8\u8350\u7684\u7535\u6e90\u9002\u914d\u5668\u3002\u5176\u8f93\u51fa\u5e94\u4e3a5.1V\u548c3A\u76f4\u6d41\u7535\u538b\u3002 \u5f53\u6211\u4f7f\u7528PoE\u65f6\uff0c\u662f\u5426\u4ecd\u7136\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u6765\u9632\u6b62\u673a\u5668USB\u7684\u53cd\u5411\u4f9b\u7535\uff1f \u53ea\u6709HAT\u7248\u672c\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u6765\u9632\u6b62\u53cd\u5411\u4f9b\u7535\u3002\u901a\u5e38\uff0c\u5927\u591a\u6570\u4e3b\u673a\u8ba1\u7b97\u673a\u90fd\u6709\u53cd\u5411\u4f9b\u7535\u4fdd\u62a4\uff0c\u56e0\u6b64\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e0d\u9700\u8981\u4f7f\u7528\u7535\u6e90OTG\u5206\u7ebf\u5668\u3002 BLIKVM-CM4-V2.2\u548cBLIKVM-PCIe\u7248\u672c\u4e0d\u9700\u8981\u3002 \u5728\u4e00\u4e9b\u50cfBLIKVM-PCIe\u6216BLIKVM-CM4-V2.2\u8fd9\u6837\u7684\u677f\u5b50\u4e0a\u6709\u5f15\u5bfc\u5f15\u811a\uff0c\u5982\u4f55\u8fde\u63a5\uff1f \u5982\u679c\u5c06\u5b83\u4eec\u8fde\u63a5\u77ed\u8def\uff0cCM4\u5c06\u65e0\u6cd5\u6b63\u5e38\u542f\u52a8\uff0c\u800c\u5c06\u8fdb\u5165\u70e7\u5f55\u6620\u50cf\u6a21\u5f0f\u3002\u5982\u679c\u60a8\u7684\u786c\u4ef6\u7248\u672c\u7684\u5f15\u5bfc\u5f15\u811a\u53ea\u6709\u4e24\u4e2a\u5f15\u811a\uff0c\u4f7f\u7528\u8df3\u7ebf\u5e3d\u5c06\u8fd9\u4e24\u4e2a\u5f15\u811a\u8fde\u63a5\u8d77\u6765\uff0c\u5f62\u6210\u77ed\u8def\u3002\u5982\u679c\u60a8\u4e0d\u4f7f\u7528\u8df3\u7ebf\u5e3d\u6216\u53ea\u5c06\u5176\u63d2\u5165\u4e00\u4e2a\u5f15\u811a\uff0cCM4\u5c06\u6b63\u5e38\u542f\u52a8\u3002\u5982\u679c\u60a8\u4f7f\u7528\u7684\u662f\u4e09\u4e2a\u5f15\u5bfc\u5f15\u811a\u7684\u786c\u4ef6\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u8df3\u7ebf\u5e3d\u5c06GND\u548c\u53e6\u4e00\u4e2a\u975eGND\u5f15\u811a\u8fde\u63a5\u8d77\u6765\u4ee5\u793a\u77ed\u8def\uff0c\u5e76\u5c06\u8df3\u7ebf\u5e3d\u63d2\u5728\u4e24\u4e2aGND\u5f15\u811a\u4e0a\u6216\u4e0d\u4f7f\u7528\u8df3\u7ebf\u5e3d\uff0cCM4\u5c06\u6b63\u5e38\u542f\u52a8\u3002","title":"\u786c\u4ef6\u95ee\u9898\uff08Wi-Fi\u3001ATX\u7b49\uff09"},{"location":"faq/#web","text":"BliKVM OS\u5360\u7528\u7684\u7aef\u53e3\u6709\u54ea\u4e9b\uff0c\u5728\u7528\u516c\u7f51\u670d\u52a1\u5668\u8f6c\u53d1\u65f6\uff0c\u5e94\u8be5\u600e\u4e48\u505a\uff1f Web\u754c\u9762\u4e3ahttp\u534f\u8bae\uff0c\u5360\u7528\u7684\u662f80\u7aef\u53e3\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV1 V2 V3\uff0c\u4f7f\u7528\u7684\u662f\u662fweb-rtc\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8188\uff1b \u5982\u679c\u60a8\u7684\u786c\u4ef6\u662fV4\uff0c\u4f7f\u7528\u7684\u662fmjepg\u4f20\u8f93\uff0c\u7aef\u53e3\u662f8008\uff1b \u6ce8\u610f\u7aef\u53e3\u4e0d\u652f\u6301\u88ab\u4fee\u6539\uff0c\u53ea\u80fd\u914d\u7f6e\u8f6c\u53d1\uff1b","title":"Web\u95ee\u9898"},{"location":"faq/#_4","text":"\u6211\u662f\u5426\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u5e26eMMC\u7248\u672c\u7684CM4\u548cSD\u5361? \u4e0d\u53ef\u4ee5\uff0c\u56e0\u4e3a\u5728CM4\u786c\u4ef6\u8bbe\u8ba1\u4e0a\uff0c\u51e0\u4e2aSD\u5361\u7684\u5f15\u811a\u53ea\u5728lite\u7248\u672c\u4e2d\u662f\u53ef\u7528\u7684\uff0c\u4f60\u53ef\u4ee5\u5728\u6811\u8393\u6d3e\u5b98\u7f51\u627e\u5230\u8bf4\u660e\u3002","title":"\u6811\u8393\u6d3e\u76f8\u5173\u95ee\u9898"},{"location":"first_steps/","text":"\u521d\u6b65\u64cd\u4f5c \u9996\u6b21\u4e0a\u7535 \u53ef\u9009\uff1a\u8bbe\u7f6eWi-Fi\u8fde\u63a5 \u8bf7\u9605\u8bfb\u4ee5\u4e0b\u6ce8\u610f\u4e8b\u9879 \u6709\u7ebf\u4ee5\u592a\u7f51\u8fde\u63a5\u662f\u6700\u53ef\u9760\u7684\u65b9\u5f0f\uff0c\u56e0\u6b64\u6700\u597d\u4f7f\u7528 \u6709\u7ebf\u7535\u7f06 \u3002\u4f46\u6211\u4eec\u4e0d\u80fd\u963b\u6b62\u60a8\u4f7f\u7528\u65e0\u7ebf\u8fde\u63a5... :) \u786e\u8ba4\u60a8\u4f7f\u7528\u7684\u7248\u672c\u542b\u6709Wi-Fi\u529f\u80fd\uff0c\u5e76\u4e14Wi-Fi\u5929\u7ebf\u5df2\u5b89\u88c5. \u8bf7\u53c2\u8003 Wi-Fi\u8fde\u63a5\u6307\u5357 \uff0c\u5bf9\u60a8\u7684\u8bbe\u5907\u8fdb\u884cWi-Fi\u8bbe\u7f6e\uff1b \u7ed9\u8bbe\u5907\u4f9b\u7535\u3002 \u5728\u8bbe\u5907\u5b8c\u5168\u542f\u52a8\u524d\uff0c\u8bf7\u52ff\u5173\u95ed\u7535\u6e90 \u8bbf\u95eeBliKVM \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cBliKVM\u901a\u8fc7DHCP\u63a5\u6536\u52a8\u6001IP\u5730\u5740\u3002\u4f1a\u5728BliKVM\u663e\u793a\u5668\u4e0a\u663e\u793aIP\u5730\u5740\u3002\u5982\u679c\u60a8\u662fDIY\u786c\u4ef6\u6ca1\u6709\u663e\u793a\u5668\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u63d0\u793a\uff1a \u5728\u7f51\u7edc\u4e2d\u67e5\u627eBliKVM \u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u65b9\u6cd5\u786e\u5b9aBliKVM\u7684IP\u5730\u5740\uff1a \u5e38\u7528\u65b9\u6cd5\uff1a \u6253\u5f00\u8def\u7531\u5668\u7684Web\u754c\u9762\uff0c\u5e76\u67e5\u627e\u5df2\u5206\u914d\u7684IP\u5730\u5740\u5217\u8868\u3002\u5177\u4f53\u65b9\u6cd5\u53d6\u51b3\u4e8e\u8def\u7531\u5668\u578b\u53f7\u3002 \u4ec5\u9650Linux\uff1a \u4f7f\u7528\u547d\u4ee4 arp-scan --localnet \u3002 Linux\u3001MacOS\u3001Windows\uff1a \u4e0b\u8f7d\u5e76\u8fd0\u884c Angry IP Scanner \u3002 Windows PowerShell\uff1a \u4f7f\u7528\u547d\u4ee4 arp -a \u3002 \u5728\u4e0b\u9762\u7684\u793a\u4f8b\u4e2d\uff0c\u8ba9\u6211\u4eec\u5047\u8bbe\u60a8\u7684BliKVM\u5df2\u83b7\u5f97\u5730\u5740 192.168.0.100 \uff0c\u60a8\u5df2\u7ecf\u6210\u529f\u4f7f\u7528\u4e0a\u8ff0\u6307\u793a\u627e\u5230\u4e86\u8be5\u5730\u5740\u3002 \u8bbf\u95eeBliKVM Web\u754c\u9762 \u5728 \u5927\u591a\u6570 \u7f51\u7edc\u4e2d\uff0c\u60a8\u53ef\u4ee5\u5728\u4efb\u4f55\u6d4f\u89c8\u5668\u4e2d\u4f7f\u7528\u4ee5\u4e0bURL\u8bbf\u95eeBliKVM\uff1a http://192.168.0.100/ \u3002Google Chrome\uff08Chromium\uff09\u3001Firefox\u548cSafari\u4e0e\u542f\u75280\u4e2a\u6269\u5c55\u7684\u60c5\u51b5\u4e0b\u6548\u679c\u6700\u4f73\uff0c\u5982\u679c\u5176\u4e2d\u4e00\u4e2a\u53ef\u4ee5\u6b63\u5e38\u5de5\u4f5c\u800c\u53e6\u4e00\u4e2a\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\uff0c\u5219\u53ef\u80fd\u662f\u6d4f\u89c8\u5668/\u6269\u5c55\u7684\u95ee\u9898\u3002\u5efa\u8bae\u60a8\u4f7f\u7528\u79c1\u5bc6\u6d4f\u89c8\u7a97\u53e3\u6216\u65e0\u75d5\u6a21\u5f0f\u3002\u4e0d\u652f\u6301Internet Explorer\u548c\u65e9\u671f\u7248\u672c\u7684Microsoft Edge\uff08\u975eChromium\u7248\u672c\uff09\u3002 \u9ed8\u8ba4\u7528\u6237\u540d\u4e3a admin \uff0c\u5bc6\u7801\u4e5f\u4e3a admin \u3002 \u767b\u5f55\u540e\uff0c\u60a8\u5c06\u83b7\u5f97\u8bbf\u95ee\u4e3b\u8981\u529f\u80fd\u83dc\u5355\u7684\u6743\u9650\u3002\u4f7f\u7528Web\u7684\u4fee\u6539\u8d26\u53f7\u5bc6\u7801\u529f\u80fd\uff0c\u60a8\u53ef\u4ee5\u66f4\u6539\u7cfb\u7edf\u8bbe\u7f6e\u548c\u5bc6\u7801\u3002 \u6ce8\u610f\u5f53\u524d\u8bbf\u95eeBliKVM web\u662fhttp\uff0c\u800c\u975ehttps \u901a\u8fc7SSH\u8bbf\u95eeBliKVM SSH\u662fLinux\u4e16\u754c\u4e2d\u6700\u5e38\u7528\u7684\u8fdc\u7a0b\u8bbf\u95ee\u65b9\u6cd5\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7SSH\u8bbf\u95eeBliKVM\u3002\u6b64\u65b9\u6cd5\u7528\u4e8e\u7ba1\u7406\u8bbe\u5907\uff1a Linux\u3001MacOS\uff1a \u6253\u5f00\u4efb\u4f55\u7ec8\u7aef\u5e94\u7528\u7a0b\u5e8f\uff0c\u7136\u540e\u8fd0\u884c\uff1a ssh blikvm@192.168.0.100 \u3002 Windows\uff1a \u4f7f\u7528 PuTTY \u8fdb\u884c\u64cd\u4f5c\u3002 \u9ed8\u8ba4\u7684 blikvm \u7528\u6237\u5bc6\u7801\u4e3a blikvm \u3002 \u60a8\u53ef\u4ee5\u4f7f\u7528 sudo -i \u83b7\u5f97root\u6743\u9650\u3002 \u53ef\u9009\uff1a\u66f4\u65b0BliKVM\u8f6f\u4ef6 \u8fd9\u90e8\u5206\u4e0d\u662f\u5fc5\u9700\u7684\uff0c\u4ec5\u5728\u60a8\u5728BliKVM\u65c1\u8fb9\u4ee5\u4fbf\u6062\u590d\u5b83\u65f6\u624d\u5e94\u6267\u884c\uff0c\u53ef\u4ee5\u53c2\u8003 \u66f4\u65b0\u8f6f\u4ef6\u6307\u5357 \u5b8c\u6210\uff1b BliKVM OS\u7ec8\u7aef\u4f7f\u7528\u6ce8\u610f\u4e8b\u9879 \u4e00\u4e9b\u914d\u7f6e\u66f4\u6539\u90fd\u5fc5\u987b\u5728 root \u7528\u6237\uff08\u5373\u7ba1\u7406\u5458\uff09\u4e0b\u8fdb\u884c\u3002 \u83b7\u53d6root\u6743\u9650 \u5982\u679c\u60a8\u901a\u8fc7SSH\u767b\u5f55\uff0c\u9700\u4f7f\u7528 sudo -i \u83b7\u5f97root\u6743\u9650\uff1b v1\u3001v2\u3001v3\u7248\u672c\u7684BliKVM\u5b58\u50a8\u5361\u4ee5\u53ea\u8bfb\u6a21\u5f0f\u6302\u8f7d\u3002\u8fd9\u6837\u53ef\u4ee5\u5728\u7a81\u7136\u505c\u7535\u65f6\u4fdd\u62a4\u6587\u4ef6\u7cfb\u7edf\u514d\u53d7\u635f\u574f\u3002\u8981\u7f16\u8f91\u4efb\u4f55\u6587\u4ef6\u5e76\u8fdb\u884c\u66f4\u6539\uff0c\u9700\u8981\u5c06\u6587\u4ef6\u7cfb\u7edf\u91cd\u65b0\u6302\u8f7d\u4e3a\u8bfb\u5199\u6a21\u5f0f\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u7ec8\u7aef\u662f\u6709\u6709ro\u6216rw\u5b57\u6837\u6765\u5224\u65ad\u5f53\u524d\u7cfb\u7edf\u6a21\u5f0f\u3002 \u542f\u7528\u5199\u5165\u6a21\u5f0f \u8981\u542f\u7528\u5199\u5165\u6a21\u5f0f\uff0c\u8bf7\u8fd0\u884c rw \u547d\u4ee4\u3002 \u8981\u7981\u7528\u5199\u5165\u6a21\u5f0f\uff0c\u8bf7\u8fd0\u884c ro \u547d\u4ee4\u3002 \u5982\u679c\u6536\u5230 \"Device is busy\"\uff08\u8bbe\u5907\u5fd9\uff09\u7684\u6d88\u606f\uff0c\u8bf7\u6267\u884c reboot \u547d\u4ee4\u3002 \u4e0b\u4e00\u6b65\u662f\u4ec0\u4e48\uff1f \u4f7f\u7528 \u7aef\u53e3\u8f6c\u53d1 \u6216 Tailscale VPN \u8bbe\u7f6e\u4e92\u8054\u7f51\u8bbf\u95ee\u3002 \u4f7f\u7528\u5de6\u4fa7\u7684\u76ee\u5f55\u5bfc\u822a\u63a2\u7d22BliKVM\u7684\u529f\u80fd\u3002 \u52a0\u5165\u6211\u4eec\u7684 Discord \u4e0e\u793e\u533a\u548c\u5f00\u53d1\u4eba\u5458\u4ea4\u6d41\u3002 \u67e5\u770b GitHub - BliKVM \u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u9879\u76ee\uff01 \u5e38\u89c1\u95ee\u9898\u548c\u6545\u969c\u6392\u9664 \u5982\u679c\u60a8\u6709\u4efb\u4f55\u95ee\u9898\u6216\u9047\u5230\u95ee\u9898\uff0c\u8bf7\u67e5\u770b \u5e38\u89c1\u95ee\u9898 \u3002 \u771f\u7684\uff0c\u5b83\u975e\u5e38\u6709\u7528\uff01\u6211\u4eec\u53ef\u80fd\u5df2\u7ecf\u4e3a\u60a8\u627e\u5230\u89e3\u51b3\u65b9\u6848\u4e86 :) \u5982\u679c\u9700\u8981\u4efb\u4f55\u5176\u4ed6\u5e2e\u52a9\u548c\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7 Discord\u804a\u5929 \u4e0e\u6211\u4eec\u8054\u7cfb\u3002","title":"\u7b2c\u4e00\u6b65"},{"location":"first_steps/#_1","text":"","title":"\u521d\u6b65\u64cd\u4f5c"},{"location":"first_steps/#_2","text":"\u53ef\u9009\uff1a\u8bbe\u7f6eWi-Fi\u8fde\u63a5 \u8bf7\u9605\u8bfb\u4ee5\u4e0b\u6ce8\u610f\u4e8b\u9879 \u6709\u7ebf\u4ee5\u592a\u7f51\u8fde\u63a5\u662f\u6700\u53ef\u9760\u7684\u65b9\u5f0f\uff0c\u56e0\u6b64\u6700\u597d\u4f7f\u7528 \u6709\u7ebf\u7535\u7f06 \u3002\u4f46\u6211\u4eec\u4e0d\u80fd\u963b\u6b62\u60a8\u4f7f\u7528\u65e0\u7ebf\u8fde\u63a5... :) \u786e\u8ba4\u60a8\u4f7f\u7528\u7684\u7248\u672c\u542b\u6709Wi-Fi\u529f\u80fd\uff0c\u5e76\u4e14Wi-Fi\u5929\u7ebf\u5df2\u5b89\u88c5. \u8bf7\u53c2\u8003 Wi-Fi\u8fde\u63a5\u6307\u5357 \uff0c\u5bf9\u60a8\u7684\u8bbe\u5907\u8fdb\u884cWi-Fi\u8bbe\u7f6e\uff1b \u7ed9\u8bbe\u5907\u4f9b\u7535\u3002 \u5728\u8bbe\u5907\u5b8c\u5168\u542f\u52a8\u524d\uff0c\u8bf7\u52ff\u5173\u95ed\u7535\u6e90","title":"\u9996\u6b21\u4e0a\u7535"},{"location":"first_steps/#blikvm","text":"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cBliKVM\u901a\u8fc7DHCP\u63a5\u6536\u52a8\u6001IP\u5730\u5740\u3002\u4f1a\u5728BliKVM\u663e\u793a\u5668\u4e0a\u663e\u793aIP\u5730\u5740\u3002\u5982\u679c\u60a8\u662fDIY\u786c\u4ef6\u6ca1\u6709\u663e\u793a\u5668\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u63d0\u793a\uff1a \u5728\u7f51\u7edc\u4e2d\u67e5\u627eBliKVM \u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u65b9\u6cd5\u786e\u5b9aBliKVM\u7684IP\u5730\u5740\uff1a \u5e38\u7528\u65b9\u6cd5\uff1a \u6253\u5f00\u8def\u7531\u5668\u7684Web\u754c\u9762\uff0c\u5e76\u67e5\u627e\u5df2\u5206\u914d\u7684IP\u5730\u5740\u5217\u8868\u3002\u5177\u4f53\u65b9\u6cd5\u53d6\u51b3\u4e8e\u8def\u7531\u5668\u578b\u53f7\u3002 \u4ec5\u9650Linux\uff1a \u4f7f\u7528\u547d\u4ee4 arp-scan --localnet \u3002 Linux\u3001MacOS\u3001Windows\uff1a \u4e0b\u8f7d\u5e76\u8fd0\u884c Angry IP Scanner \u3002 Windows PowerShell\uff1a \u4f7f\u7528\u547d\u4ee4 arp -a \u3002 \u5728\u4e0b\u9762\u7684\u793a\u4f8b\u4e2d\uff0c\u8ba9\u6211\u4eec\u5047\u8bbe\u60a8\u7684BliKVM\u5df2\u83b7\u5f97\u5730\u5740 192.168.0.100 \uff0c\u60a8\u5df2\u7ecf\u6210\u529f\u4f7f\u7528\u4e0a\u8ff0\u6307\u793a\u627e\u5230\u4e86\u8be5\u5730\u5740\u3002 \u8bbf\u95eeBliKVM Web\u754c\u9762 \u5728 \u5927\u591a\u6570 \u7f51\u7edc\u4e2d\uff0c\u60a8\u53ef\u4ee5\u5728\u4efb\u4f55\u6d4f\u89c8\u5668\u4e2d\u4f7f\u7528\u4ee5\u4e0bURL\u8bbf\u95eeBliKVM\uff1a http://192.168.0.100/ \u3002Google Chrome\uff08Chromium\uff09\u3001Firefox\u548cSafari\u4e0e\u542f\u75280\u4e2a\u6269\u5c55\u7684\u60c5\u51b5\u4e0b\u6548\u679c\u6700\u4f73\uff0c\u5982\u679c\u5176\u4e2d\u4e00\u4e2a\u53ef\u4ee5\u6b63\u5e38\u5de5\u4f5c\u800c\u53e6\u4e00\u4e2a\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\uff0c\u5219\u53ef\u80fd\u662f\u6d4f\u89c8\u5668/\u6269\u5c55\u7684\u95ee\u9898\u3002\u5efa\u8bae\u60a8\u4f7f\u7528\u79c1\u5bc6\u6d4f\u89c8\u7a97\u53e3\u6216\u65e0\u75d5\u6a21\u5f0f\u3002\u4e0d\u652f\u6301Internet Explorer\u548c\u65e9\u671f\u7248\u672c\u7684Microsoft Edge\uff08\u975eChromium\u7248\u672c\uff09\u3002 \u9ed8\u8ba4\u7528\u6237\u540d\u4e3a admin \uff0c\u5bc6\u7801\u4e5f\u4e3a admin \u3002 \u767b\u5f55\u540e\uff0c\u60a8\u5c06\u83b7\u5f97\u8bbf\u95ee\u4e3b\u8981\u529f\u80fd\u83dc\u5355\u7684\u6743\u9650\u3002\u4f7f\u7528Web\u7684\u4fee\u6539\u8d26\u53f7\u5bc6\u7801\u529f\u80fd\uff0c\u60a8\u53ef\u4ee5\u66f4\u6539\u7cfb\u7edf\u8bbe\u7f6e\u548c\u5bc6\u7801\u3002 \u6ce8\u610f\u5f53\u524d\u8bbf\u95eeBliKVM web\u662fhttp\uff0c\u800c\u975ehttps \u901a\u8fc7SSH\u8bbf\u95eeBliKVM SSH\u662fLinux\u4e16\u754c\u4e2d\u6700\u5e38\u7528\u7684\u8fdc\u7a0b\u8bbf\u95ee\u65b9\u6cd5\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7SSH\u8bbf\u95eeBliKVM\u3002\u6b64\u65b9\u6cd5\u7528\u4e8e\u7ba1\u7406\u8bbe\u5907\uff1a Linux\u3001MacOS\uff1a \u6253\u5f00\u4efb\u4f55\u7ec8\u7aef\u5e94\u7528\u7a0b\u5e8f\uff0c\u7136\u540e\u8fd0\u884c\uff1a ssh blikvm@192.168.0.100 \u3002 Windows\uff1a \u4f7f\u7528 PuTTY \u8fdb\u884c\u64cd\u4f5c\u3002 \u9ed8\u8ba4\u7684 blikvm \u7528\u6237\u5bc6\u7801\u4e3a blikvm \u3002 \u60a8\u53ef\u4ee5\u4f7f\u7528 sudo -i \u83b7\u5f97root\u6743\u9650\u3002 \u53ef\u9009\uff1a\u66f4\u65b0BliKVM\u8f6f\u4ef6 \u8fd9\u90e8\u5206\u4e0d\u662f\u5fc5\u9700\u7684\uff0c\u4ec5\u5728\u60a8\u5728BliKVM\u65c1\u8fb9\u4ee5\u4fbf\u6062\u590d\u5b83\u65f6\u624d\u5e94\u6267\u884c\uff0c\u53ef\u4ee5\u53c2\u8003 \u66f4\u65b0\u8f6f\u4ef6\u6307\u5357 \u5b8c\u6210\uff1b","title":"\u8bbf\u95eeBliKVM"},{"location":"first_steps/#blikvm-os","text":"\u4e00\u4e9b\u914d\u7f6e\u66f4\u6539\u90fd\u5fc5\u987b\u5728 root \u7528\u6237\uff08\u5373\u7ba1\u7406\u5458\uff09\u4e0b\u8fdb\u884c\u3002 \u83b7\u53d6root\u6743\u9650 \u5982\u679c\u60a8\u901a\u8fc7SSH\u767b\u5f55\uff0c\u9700\u4f7f\u7528 sudo -i \u83b7\u5f97root\u6743\u9650\uff1b v1\u3001v2\u3001v3\u7248\u672c\u7684BliKVM\u5b58\u50a8\u5361\u4ee5\u53ea\u8bfb\u6a21\u5f0f\u6302\u8f7d\u3002\u8fd9\u6837\u53ef\u4ee5\u5728\u7a81\u7136\u505c\u7535\u65f6\u4fdd\u62a4\u6587\u4ef6\u7cfb\u7edf\u514d\u53d7\u635f\u574f\u3002\u8981\u7f16\u8f91\u4efb\u4f55\u6587\u4ef6\u5e76\u8fdb\u884c\u66f4\u6539\uff0c\u9700\u8981\u5c06\u6587\u4ef6\u7cfb\u7edf\u91cd\u65b0\u6302\u8f7d\u4e3a\u8bfb\u5199\u6a21\u5f0f\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u7ec8\u7aef\u662f\u6709\u6709ro\u6216rw\u5b57\u6837\u6765\u5224\u65ad\u5f53\u524d\u7cfb\u7edf\u6a21\u5f0f\u3002 \u542f\u7528\u5199\u5165\u6a21\u5f0f \u8981\u542f\u7528\u5199\u5165\u6a21\u5f0f\uff0c\u8bf7\u8fd0\u884c rw \u547d\u4ee4\u3002 \u8981\u7981\u7528\u5199\u5165\u6a21\u5f0f\uff0c\u8bf7\u8fd0\u884c ro \u547d\u4ee4\u3002 \u5982\u679c\u6536\u5230 \"Device is busy\"\uff08\u8bbe\u5907\u5fd9\uff09\u7684\u6d88\u606f\uff0c\u8bf7\u6267\u884c reboot \u547d\u4ee4\u3002","title":"BliKVM OS\u7ec8\u7aef\u4f7f\u7528\u6ce8\u610f\u4e8b\u9879"},{"location":"first_steps/#_3","text":"\u4f7f\u7528 \u7aef\u53e3\u8f6c\u53d1 \u6216 Tailscale VPN \u8bbe\u7f6e\u4e92\u8054\u7f51\u8bbf\u95ee\u3002 \u4f7f\u7528\u5de6\u4fa7\u7684\u76ee\u5f55\u5bfc\u822a\u63a2\u7d22BliKVM\u7684\u529f\u80fd\u3002 \u52a0\u5165\u6211\u4eec\u7684 Discord \u4e0e\u793e\u533a\u548c\u5f00\u53d1\u4eba\u5458\u4ea4\u6d41\u3002 \u67e5\u770b GitHub - BliKVM \u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u9879\u76ee\uff01","title":"\u4e0b\u4e00\u6b65\u662f\u4ec0\u4e48\uff1f"},{"location":"first_steps/#_4","text":"\u5982\u679c\u60a8\u6709\u4efb\u4f55\u95ee\u9898\u6216\u9047\u5230\u95ee\u9898\uff0c\u8bf7\u67e5\u770b \u5e38\u89c1\u95ee\u9898 \u3002 \u771f\u7684\uff0c\u5b83\u975e\u5e38\u6709\u7528\uff01\u6211\u4eec\u53ef\u80fd\u5df2\u7ecf\u4e3a\u60a8\u627e\u5230\u89e3\u51b3\u65b9\u6848\u4e86 :) \u5982\u679c\u9700\u8981\u4efb\u4f55\u5176\u4ed6\u5e2e\u52a9\u548c\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7 Discord\u804a\u5929 \u4e0e\u6211\u4eec\u8054\u7cfb\u3002","title":"\u5e38\u89c1\u95ee\u9898\u548c\u6545\u969c\u6392\u9664"},{"location":"flashing_os/","text":"Flashing the OS image Micro-SD Card Requirements Minimum 16 Gb Class 10 is strongly recommended \u4e3a\u4ec0\u4e48\u8f6f\u4ef6\u6709BLIKVM\u548cPiKVM\u4e24\u4e2a\u7248\u672c\uff1f\u4e24\u4e2a\u7248\u672c\u6709\u4ec0\u4e48\u533a\u522b\uff1f\u6211\u5e94\u8be5\u9009\u62e9\u54ea\u4e2a\uff1f\u6211\u53ef\u4ee5\u7528PiKVM\u5b98\u65b9\u955c\u50cf\u5417\uff1f BLIKVM\u9879\u76ee\u8bde\u751f\u4e4b\u521d\u5148\u7814\u53d1\u4e86\u786c\u4ef6\uff0c\u8f6f\u4ef6\u76f4\u63a5\u4f7f\u7528\u4e86PiKVM\u3002\u968f\u7740\u9879\u76ee\u7684\u4e0d\u65ad\u8fdb\u884c\uff0cBLIKVM\u81ea\u7814\u4e86\u81ea\u5df1\u7684\u5168\u65b0\u67b6\u6784\u7684\u8f6f\u4ef6\u7248\u672c\uff0c\u4e5f\u540c\u65f6\u4e3a\u66f4\u6df1\u5ea6\u7684\u548c\u81ea\u5df1\u7684\u786c\u4ef6\u914d\u5408\u505a\u597d\u57fa\u7840\uff1b BLIKVM\u548cPiKVM\u6700\u6838\u5fc3\u7684\u529f\u80fd\u5bf9\u7528\u6237\u6765\u8bf4\u662f\u4e00\u81f4\u7684\uff0c\u4e00\u4e9b\u7ec6\u5206\u529f\u80fd\u4e0d\u592a\u4e00\u6837\uff0c\u5982BLIKVM\u652f\u6301\u591a\u8bed\u8a00\uff1b \u9700\u6839\u636e\u60a8\u81ea\u5df1\u4f7f\u7528\u611f\u53d7\u53bb\u9009\u62e9\uff1b \u53ef\u4ee5\u4f7f\u7528PiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u4f46\u9700\u8981\u60a8\u6839\u636e\u786c\u4ef6\u7684\u4e0d\u540c\u505a\u4e00\u4e9b\u9002\u914d\uff0c\u4e3b\u8981\u6d89\u53ca\u5230\u7684\u6709\u5c4f\u5e55\u3001\u98ce\u6247\u7b49\uff0c\u56e0PiKVM\u5b98\u7f51\u955c\u50cf\u4e00\u76f4\u518d\u66f4\u65b0\uff0c\u6240\u4ee5\u5177\u4f53\u9002\u914d\u60c5\u51b5\u9700\u6839\u636e\u5f53\u65f6\u60a8\u4f7f\u7528\u5177\u4f53\u9047\u5230\u7684\u60c5\u51b5\u518d\u770b\uff1b Download the image \u9700\u8981\u5728v4\u4e0a\u8fd0\u884c\u81ea\u884c\u5b89\u88c5PiKVM\u7684\u7528\u6237\u53ef\u4ee5\u53c2\u8003\u6b64 \u8bf4\u660e \u3002 BLIKVM software You\u53ef\u4ee5\u4ece\u4e0b\u9762\u7684\u94fe\u63a5\u4e2d\u4e0b\u8f7dBliKVM v1 CM4, v2 PCIe, v3 HAT, v4 Allwinner\u7684BliKVM\u955c\u50cf, v1 v2 v3\u4f7f\u7528\u540c\u4e00\u4e2a\u955c\u50cf\u3002 BLIKVM image Web UI\u98ce\u683c\u5982\u4e0b: Base on PiKVM software \u57fa\u4e8ePiIKVM\u7684\u955c\u50cf\uff0c\u6811\u8393\u6d3e4B\u548cCM4\u4e0d\u516c\u7528\u4e00\u4e2a\u955c\u50cf\uff0c\u8fdb\u5165\u94fe\u63a5\u540e\u53ef\u770b\u5230\u4ee5\u5404\u786c\u4ef6\u7248\u672c(HAT CM4 PCIe)\u547d\u540d\u7684\u955c\u50cf\u3002 PiKVM image Flash the image Tip Ignore request to format your sd card, this step is not nessessary. Choose the most suitable method for you. How to flash the eMMC on a Raspberry Pi Compute Module 4 Board Link \u5982\u679c\u4f60\u4f7f\u7528\u7684CM4\u662f\u542beMMC\u7684\u7248\u672c\uff0c\u5982CM4102016\u578b\u53f7\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528v1\u548cv2\u786c\u4ef6\u76f4\u63a5\u5bf9CM4\u7684eMMC\u8fdb\u884c\u70e7\u5f55\u3002\u5982\u679c\u4f60\u7684CM4\u4e0d\u5e26eMMC\uff0c\u800c\u662f\u4f7f\u7528SD\u5361\uff0c\u4f60\u5219\u4e0d\u9700\u8981\u770b\u6b64\u7ae0\u8282\u3002\u9996\u5148\u5728blikvm\u786c\u4ef6\u4e0a\u5bf9CM4\u7684eMMC\u8fdb\u884c\u70e7\u5f55\uff0c\u4f60\u9700\u8981\u5148\u77ed\u63a5boot\u5f15\u811a\u3002 If you use BLIKVM CM4 version Then connect the data cable to the USB OTG interface. Power on blikvm and observe the act light, the green light is always on. If you use BLIKVM PCIe version Then connect the data cable to the USB-PC interface. Power on blikvm and observe the ACT and PWR LED isn't light. After initialize EMMC through the usbboot/rpiboot, the ACT and PWR LED light is always on. EMMC knowledge If you use raspberry pi computing modules such as CM3 or CM4 EMMC\uff0cyou can initialize EMMC through the usbboot. Note that the EMMC version cannot directly use the SD card to start the image. From this video you can learn how to flash image quickly. How to flash the eMMC on a Raspberry Pi Compute Module 4 video Taking Ubuntu system as an example: Linux usbboot If you use an Micro-SD Card, you don't need to care about that. # sudo apt-get install libusb-1.0-0-dev # git clone --depth=1 https://github.com/raspberrypi/usbboot # cd usbboot # make # sudo ./rpiboot If the content shown in the figure below appears, it indicates that EMMC initialization is successful. Using RPi Imager (Linux, MacOS and Windows) Download and install the latest version of RPi Imager . Run RPi Imager: Press CHOOSE OS and select Use custom image at bottom of the list: After clicking on this item, select the image file ( .img.xz ), then click CHOOSE STORAGE : Insert the memory card into the card reader. Choose the card reader from this list. Be careful and choose the right device: After choosing the memory card, press the WRITE button. Confirm the operation when you are asked about it: Wait for the process to finish. Get yourself a coffee or do some stretching :) Tip The process may hang at 99% for a long time, this is okay, just wait for it to complete 8.Remove the memory card after successful completion: Tip If an error occurs during flashing or booting PiKVM, repeat the process.","title":"\u70e7\u5f55\u955c\u50cf"},{"location":"flashing_os/#flashing-the-os-image","text":"Micro-SD Card Requirements Minimum 16 Gb Class 10 is strongly recommended \u4e3a\u4ec0\u4e48\u8f6f\u4ef6\u6709BLIKVM\u548cPiKVM\u4e24\u4e2a\u7248\u672c\uff1f\u4e24\u4e2a\u7248\u672c\u6709\u4ec0\u4e48\u533a\u522b\uff1f\u6211\u5e94\u8be5\u9009\u62e9\u54ea\u4e2a\uff1f\u6211\u53ef\u4ee5\u7528PiKVM\u5b98\u65b9\u955c\u50cf\u5417\uff1f BLIKVM\u9879\u76ee\u8bde\u751f\u4e4b\u521d\u5148\u7814\u53d1\u4e86\u786c\u4ef6\uff0c\u8f6f\u4ef6\u76f4\u63a5\u4f7f\u7528\u4e86PiKVM\u3002\u968f\u7740\u9879\u76ee\u7684\u4e0d\u65ad\u8fdb\u884c\uff0cBLIKVM\u81ea\u7814\u4e86\u81ea\u5df1\u7684\u5168\u65b0\u67b6\u6784\u7684\u8f6f\u4ef6\u7248\u672c\uff0c\u4e5f\u540c\u65f6\u4e3a\u66f4\u6df1\u5ea6\u7684\u548c\u81ea\u5df1\u7684\u786c\u4ef6\u914d\u5408\u505a\u597d\u57fa\u7840\uff1b BLIKVM\u548cPiKVM\u6700\u6838\u5fc3\u7684\u529f\u80fd\u5bf9\u7528\u6237\u6765\u8bf4\u662f\u4e00\u81f4\u7684\uff0c\u4e00\u4e9b\u7ec6\u5206\u529f\u80fd\u4e0d\u592a\u4e00\u6837\uff0c\u5982BLIKVM\u652f\u6301\u591a\u8bed\u8a00\uff1b \u9700\u6839\u636e\u60a8\u81ea\u5df1\u4f7f\u7528\u611f\u53d7\u53bb\u9009\u62e9\uff1b \u53ef\u4ee5\u4f7f\u7528PiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u4f46\u9700\u8981\u60a8\u6839\u636e\u786c\u4ef6\u7684\u4e0d\u540c\u505a\u4e00\u4e9b\u9002\u914d\uff0c\u4e3b\u8981\u6d89\u53ca\u5230\u7684\u6709\u5c4f\u5e55\u3001\u98ce\u6247\u7b49\uff0c\u56e0PiKVM\u5b98\u7f51\u955c\u50cf\u4e00\u76f4\u518d\u66f4\u65b0\uff0c\u6240\u4ee5\u5177\u4f53\u9002\u914d\u60c5\u51b5\u9700\u6839\u636e\u5f53\u65f6\u60a8\u4f7f\u7528\u5177\u4f53\u9047\u5230\u7684\u60c5\u51b5\u518d\u770b\uff1b","title":"Flashing the OS image"},{"location":"flashing_os/#download-the-image","text":"\u9700\u8981\u5728v4\u4e0a\u8fd0\u884c\u81ea\u884c\u5b89\u88c5PiKVM\u7684\u7528\u6237\u53ef\u4ee5\u53c2\u8003\u6b64 \u8bf4\u660e \u3002","title":"Download the image"},{"location":"flashing_os/#blikvm-software","text":"You\u53ef\u4ee5\u4ece\u4e0b\u9762\u7684\u94fe\u63a5\u4e2d\u4e0b\u8f7dBliKVM v1 CM4, v2 PCIe, v3 HAT, v4 Allwinner\u7684BliKVM\u955c\u50cf, v1 v2 v3\u4f7f\u7528\u540c\u4e00\u4e2a\u955c\u50cf\u3002 BLIKVM image Web UI\u98ce\u683c\u5982\u4e0b:","title":"BLIKVM software"},{"location":"flashing_os/#base-on-pikvm-software","text":"\u57fa\u4e8ePiIKVM\u7684\u955c\u50cf\uff0c\u6811\u8393\u6d3e4B\u548cCM4\u4e0d\u516c\u7528\u4e00\u4e2a\u955c\u50cf\uff0c\u8fdb\u5165\u94fe\u63a5\u540e\u53ef\u770b\u5230\u4ee5\u5404\u786c\u4ef6\u7248\u672c(HAT CM4 PCIe)\u547d\u540d\u7684\u955c\u50cf\u3002 PiKVM image","title":"Base on PiKVM software"},{"location":"flashing_os/#flash-the-image","text":"Tip Ignore request to format your sd card, this step is not nessessary. Choose the most suitable method for you. How to flash the eMMC on a Raspberry Pi Compute Module 4","title":"Flash the image"},{"location":"flashing_os/#board-link","text":"\u5982\u679c\u4f60\u4f7f\u7528\u7684CM4\u662f\u542beMMC\u7684\u7248\u672c\uff0c\u5982CM4102016\u578b\u53f7\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528v1\u548cv2\u786c\u4ef6\u76f4\u63a5\u5bf9CM4\u7684eMMC\u8fdb\u884c\u70e7\u5f55\u3002\u5982\u679c\u4f60\u7684CM4\u4e0d\u5e26eMMC\uff0c\u800c\u662f\u4f7f\u7528SD\u5361\uff0c\u4f60\u5219\u4e0d\u9700\u8981\u770b\u6b64\u7ae0\u8282\u3002\u9996\u5148\u5728blikvm\u786c\u4ef6\u4e0a\u5bf9CM4\u7684eMMC\u8fdb\u884c\u70e7\u5f55\uff0c\u4f60\u9700\u8981\u5148\u77ed\u63a5boot\u5f15\u811a\u3002 If you use BLIKVM CM4 version Then connect the data cable to the USB OTG interface. Power on blikvm and observe the act light, the green light is always on. If you use BLIKVM PCIe version Then connect the data cable to the USB-PC interface. Power on blikvm and observe the ACT and PWR LED isn't light. After initialize EMMC through the usbboot/rpiboot, the ACT and PWR LED light is always on. EMMC knowledge If you use raspberry pi computing modules such as CM3 or CM4 EMMC\uff0cyou can initialize EMMC through the usbboot. Note that the EMMC version cannot directly use the SD card to start the image. From this video you can learn how to flash image quickly. How to flash the eMMC on a Raspberry Pi Compute Module 4 video Taking Ubuntu system as an example:","title":"Board Link"},{"location":"flashing_os/#linux-usbboot","text":"If you use an Micro-SD Card, you don't need to care about that. # sudo apt-get install libusb-1.0-0-dev # git clone --depth=1 https://github.com/raspberrypi/usbboot # cd usbboot # make # sudo ./rpiboot If the content shown in the figure below appears, it indicates that EMMC initialization is successful.","title":"Linux usbboot"},{"location":"flashing_os/#using-rpi-imager-linux-macos-and-windows","text":"Download and install the latest version of RPi Imager . Run RPi Imager: Press CHOOSE OS and select Use custom image at bottom of the list: After clicking on this item, select the image file ( .img.xz ), then click CHOOSE STORAGE : Insert the memory card into the card reader. Choose the card reader from this list. Be careful and choose the right device: After choosing the memory card, press the WRITE button. Confirm the operation when you are asked about it: Wait for the process to finish. Get yourself a coffee or do some stretching :) Tip The process may hang at 99% for a long time, this is okay, just wait for it to complete 8.Remove the memory card after successful completion: Tip If an error occurs during flashing or booting PiKVM, repeat the process.","title":"Using RPi Imager (Linux, MacOS and Windows)"},{"location":"hdmi-csi-i2s/","text":"HDMI\u8f6cCSI&I2S\u6a21\u5757\u624b\u518c \u5c06HDMI\u4fe1\u53f7\u8f6c\u6362\u6210CSI\u89c6\u9891\u4fe1\u53f7\u548cI2S\u97f3\u9891\u4fe1\u53f7, \u76ee\u524d\u5168\u5e73\u53f0\u652f\u6301(zero, Pi3B, Pi4B, CM4, Pi5B),\u5176\u4e2d\u6700\u9ad8\u91c7\u96c6\u5206\u8fa8\u7387\u4e0d\u4ec5\u4ec5\u53d6\u51b3\u4e8eHDMI\u8f6cCSI\u8f6c\u6362\u677f\uff0c\u540c\u65f6\u4e5f\u53d6\u51b3\u4e8e\u4f60\u4f7f\u7528\u7684\u6811\u8393\u6d3e\u786c\u4ef6\u7248\u672c\uff0c\u6811\u8393\u6d3e\u786c\u4ef6\u7248\u76ee\u524d\u4e3b\u8981\u5206\u4e24\u4e2a\u7cfb\u5217\uff0c\u6700\u9ad8\u652f\u63011080P60Hz\uff0c\u548c\u6700\u9ad8\u652f\u63011080P50Hz\u3002 \u6700\u9ad8\u652f\u63011080P60Hz\u7684Pi\u7248\u672c(CM3\uff0cCM4\uff0cPi5B) \u6700\u9ad8\u652f\u63011080P50Hz\u7684Pi\u7248\u672c(zero, zero2, Pi3B, Pi4B\u7b49) \u7b80\u4ecb \u6b64\u6a21\u5757\u5c06HDMI\u4fe1\u53f7\u8f6c\u6362\u6210CSI\u89c6\u9891\u4fe1\u53f7\u548cI2S\u97f3\u9891\u4fe1\u53f7\uff0c\u6700\u9ad8\u652f\u63011080P60Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u5728\u6811\u8393\u6d3e\u4e0a\u5de5\u4f5c\u7684\u5f88\u597d\uff0c\u76ee\u524d\u5171\u67093\u4e2a\u7248\u672c(C779\u3001C780\u3001C790). C790\u662f\u76ee\u524d\u6700\u65b0\u7684\u7248\u672c\uff0c\u89e3\u51b3\u4e86\u6240\u6709\u5df2\u77e5\u7684\u95ee\u9898\uff0c\u540c\u662f\u6709CSI 2\u901a\u9053\u548c4\u901a\u9053\u63a5\u53e3\uff0cI2S\u97f3\u9891\u63a5\u53e3\uff0c\u4fee\u590d\u4e86HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898\u3002 \u6027\u80fd\u53c2\u6570 C790 \u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u5728\u6811\u8393\u6d3e\u4e0a\u6b64\u6a21\u5757\u6700\u9ad8\u652f\u63011080P60Hz\u8f93\u5165\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG 4\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f CSI-2\u63a5\u53e31: 15 pin FPC, \u95f4\u8ddd1.0 mm, \u5728C790\u6a21\u5757\u7684\u6b63\u9762. CSI-2\u63a5\u53e32, 22 pin FPC, \u95f4\u8ddd0.5 mm, \u5728C790\u6a21\u5757\u7684\u80cc\u9762. \u5c3a\u5bf8: 30 x 45 mm \u5b89\u88c5\u5b54\u4f4d:4 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u6811\u8393\u6d3e4B\u53ea\u652f\u63011080P50Hz(\u56e0\u4e3a4B\u53ea\u6709\u4e24\u4e2aCSI-2\u901a\u9053) ,\u6811\u8393\u6d3eCM4\u53ea\u652f\u63011080P60Hz,\u6240\u4ee5\u5982\u679c\u4f60\u7684\u8f93\u5165\u8bbe\u5907\u4e00\u5b9a\u8981\u662f1080P60Hz\uff0c\u8bf7\u540c\u65f6\u4f7f\u7528CM4\u548cC790. \u63a5\u53e3 C790\u6709\u4e24\u4e2aCSI\u8f93\u51fa\u63a5\u53e3: \u63a5\u53e31\uff0c\u5728C790\u6b63\u9762\uff0c15 pin FPC, \u95f4\u8ddd1.0 mm; \u63a5\u53e31\uff0c\u5728C790\u80cc\u9762,22 pin FPC, \u95f4\u8ddd0.5 mm\u3002 \u5c3a\u5bf8 \u5b89\u88c5\u53c2\u8003 C780 C780A\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P50Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 2\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 15 pin FPC, \u95f4\u8ddd 1.0 mm\uff1b \u5c3a\u5bf8: 30 x 65 mm (\u6298\u65ad\u524d); 30 x 45 mm (\u6298\u65ad\u540e) \u5b89\u88c5\u5b54\u4f4d:6 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g C780B\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P60Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 4\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 22 pin FPC, \u95f4\u8ddd 0.5 mm\uff1b \u5c3a\u5bf8: 30 x 65 mm (\u6298\u65ad\u524d); 30 x 45 mm (\u6298\u65ad\u540e) \u5b89\u88c5\u5b54\u4f4d:6 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u63a5\u53e3 \u97f3\u9891\u5f15\u811a\u5b9a\u4e49\u5982\u4e0b\u56fe\u6240\u793a: \u5c3a\u5bf8 \u5c3a\u5bf8\u5982\u4e0b\u56fe\u6240\u793a. \u67096\u4e2a\u76f4\u5f84\u4e3a2\u300275mm\u7684\u5b54\u4f4d\u7528\u4e8e\u5b89\u88c5\uff0c\u5b89\u88c5\u87ba\u9489\u53ef\u4ee5\u9009\u62e9M2.5\u3002 \u5982\u4e0b\u56fe\u6240\u793a\uff0cC780\u88ab\u8bbe\u8ba1\u6210\u53ef\u6298\u65ad\u5f0f\u7684\uff0cC780\u6a21\u5757\u5728\u672a\u88ab\u6298\u65ad\u524d\u53ef\u4ee5\u5b8c\u7f8e\u7684\u5b89\u88c5\u5728zero\u4e0a\u3002 C779 \u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P50Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 2\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 15 pin FPC, \u95f4\u8ddd 1.0 mm\uff1b \u5c3a\u5bf8: 35 x 50 mm \u5b89\u88c5\u5b54\u4f4d:4 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u5c3a\u5bf8 \u5c3a\u5bf8\u5982\u4e0b\u56fe\u6240\u793a. \u67094\u4e2a\u76f4\u5f84\u4e3a2.75mm\u7684\u5b54\u4f4d\u7528\u4e8e\u5b89\u88c5\uff0c\u5b89\u88c5\u87ba\u9489\u53ef\u4ee5\u9009\u62e9M2.5\u3002 CSI\u63a5\u53e3\u5b9a\u4e49 \u5176\u4e2dC779\uff0cC780A\u53ea\u670915PIN\u5f15\u811a\uff0cC780B\u53ea\u670922PIN\u5f15\u811a\uff0cC790\u540c\u65f6\u670915\u548c22PIN\u5f15\u811a\u3002 \u8f6f\u4ef6\u4f7f\u7528demo \u4e0b\u6587\u4e2d\u7684\u8f6f\u4ef6\u4f7f\u7528\u65b9\u6cd5\u8ddf\u4f60\u4f7f\u7528\u7684\u6811\u8393\u6d3e\u955c\u50cf\u7248\u672c\u6709\u5173\uff0c\u53ef\u80fd\u5b58\u5728\u4e0d\u540c\u3002\u5982\u679c\u4f60\u6709\u4efb\u4f55\u7591\u95ee\uff0c\u8bf7\u52a0\u5165 BLIKVM Discord \u793e\u533a \u83b7\u5f97\u652f\u6301\u3001\u89e3\u7b54\u548c\u65b0\u95fb\u3002 \u4ee5\u4e0b\u8bf4\u660e\u9002\u7528\u4e8e\u5185\u6838\u4e3a5.4\u6216\u8005\u66f4\u9ad8\u7248\u672c\u3002\u5982\u679c\u4f60\u7684\u6811\u8393\u6d3e\u955c\u50cf\u4f4e\u4e8e\u6b64\u7248\u672c\uff0c\u8bf7\u5347\u7ea7\u3002\u7ec8\u7aef\u4f7f\u7528\u4f7f\u7528\u201cuname-a\u201d\u53ef\u4ee5\u67e5\u770b\u4f60\u7cfb\u7edf\u7684\u5185\u6838\u7248\u672c\u3002 pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux 1. \u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u8fdb\u884c\u5347\u7ea7 (\u4e0d\u662f\u5fc5\u987b\u7684\uff0c\u5728\u67d0\u4e9b\u56fd\u5bb6\u8fd9\u4e2a\u82b1\u8d39\u7684\u65f6\u95f4\u53ef\u80fd\u5f88\u957f) sudo apt-get update sudo apt-get upgrade 2. \u4f7f\u80fd\u76f8\u673a\u6a21\u5757(\u5728\u6811\u8393\u6d3eBullseys OS\u7cfb\u7edf\u4e2d\uff0c\u76f8\u673a\u5df2\u9ed8\u8ba4\u88ab\u4f7f\u80fd) sudo raspi-config sudo reboot \u79fb\u52a8\u5149\u6807\u5230\u2018Interfacing Options\u2019\uff0c\u7136\u540e\u6309Enter\u952e\u8fdb\u5165\u3002\u7136\u540e\u9009\u62e9\u2018Camera\u2019\u9009\u9879\uff0c\u6309Enter\u952e\u8fdb\u5165\u540e\uff0c\u4f7f\u80fd\u76f8\u673a\u3002\u7136\u540e\u9009\u62e9\u201cFinish\u201d\u540e\uff0c \u9009\u62e9\u201creboot\u201d\u3002 \u91cd\u542f\u975e\u5e38\u91cd\u8981!! \u7531\u4e8ePi5B\u53d6\u6d88\u4e86\u786c\u7f16\u7801\u5668\uff0c\u4e0b\u9762\u8f6f\u4ef6\u4f7f\u7528\u65b9\u6cd5\u5728Pi\u5e73\u53f0\u76ee\u524d\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0cPi5B\u914d\u7f6e\uff0c\u548c\u5176\u5b83Pi\u5e73\u53f0\u914d\u7f6e\u3002 \u5728zero, zero2,Pi3B,Pi4B\u7b49\u5e73\u53f0HDMI\u8f6cCSI\u6a21\u5757\u6d4b\u8bd5demo\u53c2\u8003 \u7f16\u8f91 /boot/config.txt (\u9700\u8981sudo\u6743\u9650) sudo nano /boot/config.txt \u6dfb\u52a0\u4e0b\u9762\u7684\u5185\u5bb9 dtoverlay=tc358743 \u5982\u679c\u4f60\u7684\u6a21\u5757(C780\u548cC790)\u652f\u6301\u58f0\u97f3\uff0c\u6dfb\u52a0\u4e0b\u9762\u5185\u5bb9\u652f\u6301\u58f0\u97f3 dtoverlay=tc358743-audio \u5982\u679c\u4f60\u662f\u7528\u6811\u8393\u6d3e\u8ba1\u7b97\u6a21\u7ec4(CM3\u3001CM4)\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5217\u914d\u7f6e\uff0c\u4f7f\u80fdCSI\u76844\u4e2a\u901a\u9053\u3002 dtoverlay=tc358743,4lane=1 \u4f7f\u7528\u201cdmesg | grep cma\u201d\u68c0\u67e5\u5206\u914d\u7ed9CMA\u5806\u7684\u5185\u5b58\u91cf\uff0c\u7ec8\u7aef\u51fa\u73b0\u7684\u7b2c\u4e00\u884c\u5185\u5bb9\u5e94\u8be5\u5982\u4e0b\u6240\u793a: pi@raspberrypi:~ $ dmesg | grep cma [0.000000] cma: Reserved 256 MiB at 0x000000001ec00000 \u5982\u679c\u663e\u793a\u5c11\u4e8e96MB\uff0c\u7f16\u8f91/boot/cmdline.txt\uff0c\u6dfb\u52a0\u4e0b\u9762\u4e00\u884c\u3002 cma=96M \u91cd\u542f\u6811\u8393\u6d3e\uff0c\u5982\u679c\u914d\u7f6e\u6210\u529f\uff0c\u4f60\u5c06\u4f1a\u770b\u5230/dev/video0\u8bbe\u5907\u63cf\u8ff0\u7b26\u51fa\u73b0\u3002\u53ef\u4ee5\u4f7f\u7528\u201cv4l2-ctl \u2013list-devices\u201d \u547d\u4ee4\u5217\u51fa\u6240\u6709\u7684video\u63cf\u8ff0\u7b26\u3002\u518d\u5c06\u6811\u8393\u6d3e\u4e0e\u6a21\u5757\u6b63\u786e\u8fde\u63a5\u540e\uff0c\u6811\u8393\u6d3e\u4e0a\u7535\uff0c\u4f60\u53ef\u4ee5\u770b\u5230C790\u6a21\u5757\u4e0a\u6709\u4e00\u4e2a\u7eff\u8272\u706f\u5e38\u4eae\uff0c\u7136\u540e\u53ef\u4ee5\u6309\u7167\u4e0b\u9762\u7684\u547d\u4ee4\uff0c\u68c0\u67e5\u662f\u5426\u5df2\u7ecf\u6b63\u5e38\u51fa\u73b0\u4e86video0\u3002 pi@raspberrypi:~ $ ls /dev/video0 /dev/video0 pi@raspberrypi:~ $ v4l2-ctl --list-devices bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/video18 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 unicam (platform:fe801000.csi): /dev/video0 /dev/video1 /dev/media2 \u9ed8\u8ba4\u6ca1\u6709\u52a0\u8f7dEDID,\u5982\u679c\u4f60\u6709EDID\u7f16\u8f91\u5668\uff0c\u4f60\u53ef\u4ee5\u81ea\u5df1\u7f16\u8f91\u4f60\u6240\u9700\u8981\u7684\u5206\u8fa8\u7387\uff0c\u6216\u8005\u4f7f\u7528\u4e0b\u9762\u63d0\u4f9b\u7684EDID\u5206\u8fa8\u7387\uff08720p60hz\uff09\u3002 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 cd ~ sudo nano edid.txt # \u62f7\u8d1d\u4e0a\u95e8\u7684\u5185\u5bb9\u5230edid.txt\u6587\u4ef6\u4e2d\uff0c\u7136\u540e\u4fdd\u5b58\u9000\u51fa\u3002\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u8bbe\u7f6e\u52a0\u8f7dedid\uff0c\u5982\u679c\u6b63\u786e\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u770b\u5230\u5982\u4e0b\u7684\u8f93\u51fa\u3002 pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums CTA-861 Header IT Formats Underscanned: yes Audio: yes YCbCr 4:4:4: no YCbCr 4:2:2: no HDMI Vendor-Specific Data Block Physical Address: 3.0.0.0 YCbCr 4:4:4 Deep Color: no 30-bit: no 36-bit: no 48-bit: no CTA-861 Video Capability Descriptor RGB Quantization Range: yes YCC Quantization Range: no PT: Supports both over- and underscan IT: Supports both over- and underscan CE: Supports both over- and underscan \u9a71\u52a8\u7a0b\u5e8f\u4e0d\u4f1a\u81ea\u52a8\u5207\u6362\u5230\u68c0\u6d4b\u5230\u7684\u5206\u8fa8\u7387\u3002\u662f\u7528\u4e0b\u5217\u547d\u4ee4\u68c0\u67e5\u76ee\u524dHDMI\u7684\u8f93\u5165 pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings Active width: 1280 Active height: 720 Total width: 1650 Total height: 750 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (60.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 370 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 30 Vertical backporch: 0 Standards: Flags: \u4f60\u5fc5\u987b\u4f7f\u7528\u201cv4l2-ctl \u2013set-dv-bt-timings\u201d\u547d\u4ee4\u8bbe\u7f6e\u9a71\u52a8\u7a0b\u5e8f\u4f7f\u7528\u76ee\u524d\u7684\u8f93\u5165\u5206\u8fa8\u7387 v4l2-ctl --set-dv-bt-timings query to select the currently detected timings. v4l2-ctl -V should now reflect the resolution detected. \u82af\u7247\u652f\u6301\u4e24\u79cd\u683c\u5f0f(BGR3\u548cUYVY)\uff0cBGR3\u50cf\u7d20\u6df1\u5ea6\u4e3a24bpp\uff0cUYVY\u4e3aYUV4:2:2 16bpp\u3002\u5982\u679c\u4f7f\u7528CSI 2\u901a\u9053\uff0cBGR3\u683c\u5f0f\u6700\u5927\u652f\u63011080P30Hz\u7684\u8f93\u5165\uff0c\u4f7f\u7528UYVY\u5219\u6700\u5927\u652f\u63011080P60Hz\u7684\u8f93\u5165\u3002\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8bbe\u7f6e\u4e3aUYVY\u683c\u5f0f\u3002 v4l2-ctl -v pixelformat=UYVY \u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff0c\u68c0\u67e5\u97f3\u9891\u786c\u4ef6\u548c\u9a71\u52a8\u662f\u5426\u6b63\u5e38\u3002 pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0 Note: card 1: tc358743\u610f\u5473\u7740\u97f3\u9891\u76f8\u5173\u786c\u4ef6\u5df2\u88ab\u6b63\u786e\u52a0\u8f7d\uff0c\u6ce8\u610f\u8fd9\u91cc\u76841\u53ef\u80fd\u4e0d\u540c\u3002 \u5b89\u88c5GStreamer\u5de5\u5177. sudo apt install gstreamer1.0-tools sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad sudo apt-get install gstreamer1.0-plugins-base \u68c0\u67e5gstreamer\u5de5\u5177\u7248\u672c: pi@raspberrypi:~ $ gst-launch-1.0 --version gst-launch-1.0 version 1.18.4 GStreamer 1.18.4 http://packages.qa.debian.org/gstreamer1.0 Note:\u4e0d\u540c\u7684\u7248\u672c\u8fd9\u91cc\u8f93\u51fa\u53ef\u80fd\u4e0d\u540c. \u4f7f\u7528gstreamer\u53bb\u5f55\u5236\u89c6\u9891\u6216\u8005\u58f0\u97f3 #GStreamer v1.14 command gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. \u4f60\u4f1a\u5f97\u5230\u4e00\u4e2afoo.mkv\u6587\u4ef6. \u5982\u679c\u4f60\u7684gstreamer\u662f1.8\u6216\u8005\u66f4\u9ad8\u7248\u672c\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u3002\u5176\u4e2ddevice=hw:1\u8868\u793a\u7684\u662fTC358743\u58f0\u5361\u3002 #The command to recode a video with audio. (GStreamer 1.18.4) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. #The sample command to recode a video without audio. (C779 doesn't support audio) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Press CTRL+C to end recording. PS: \u8fd9\u91cc\u6211\u4eec\u5efa\u8bae\u4f60\u4f7f\u7528\u5b9e\u9645\u7684\u8f93\u5165\u5e27\u7387\u53bb\u91c7\u96c6HDMI\u4fe1\u53f7\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528 \u2018v4l2-ctl \u2013query-dv-timings\u2019\u53bb\u68c0\u67e5\u5b9e\u9645\u8f93\u5165\u5e27\u7387\u3002 \u5982\u4e0a\u56fe\u4e2d\u7684HDMI\u8f93\u5165\u8bbe\u5907\uff0c\u5e27\u7387\u662f60Hz\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u53bb\u5f55\u5236\u89c6\u9891\uff1a gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv \u5f55\u5236\u89c6\u9891\u548c\u97f3\u9891: (\u5982\u679c\u4f60\u7684\u8bbe\u5907\u652f\u6301\u97f3\u9891\u7684\u8bdd) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. Note: alsasrc device=hw:1 \u2013 \u201c1\u201d means the audio card number, You must change to correct audio card number. (Query the car number via \u2018arecord \u2013l\u2019, refer to step 9) Pi5B\u7b49\u5e73\u53f0HDMI\u8f6cCSI\u6a21\u5757\u6d4b\u8bd5demo\u53c2\u8003 \u7f16\u8f91 /boot/config.txt (\u9700\u8981sudo\u6743\u9650) sudo nano /boot/config.txt \u6dfb\u52a0\u4e0b\u9762\u7684\u5185\u5bb9 dtoverlay=tc358743 \u5982\u679c\u4f60\u7684\u6a21\u5757(C780\u548cC790)\u652f\u6301\u58f0\u97f3\uff0c\u6dfb\u52a0\u4e0b\u9762\u5185\u5bb9\u652f\u6301\u58f0\u97f3 dtoverlay=tc358743-audio \u91cd\u542f\u6811\u8393\u6d3e,\u6267\u884c\u4e0b\u9762\u6307\u4ee4\uff0c\u627e\u5230csi\u5bf9\u5e94\u7684media\u8282\u70b9\u4e3amedia0,\u5373rp1-cfe (platform:1f00128000.csi)\u5b57\u6bb5\u4e0b\u7684media\u8bbe\u5907: blikvm@blikvm:~ $ v4l2-ctl --list-devices pispbe (platform:1000880000.pisp_be): /dev/video20 /dev/video21 /dev/video22 /dev/video23 /dev/video24 /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31 /dev/video32 /dev/video33 /dev/video34 /dev/video35 /dev/video36 /dev/video37 /dev/media1 /dev/media2 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/media0 rpivid (platform:rpivid): /dev/video19 /dev/media3 \u627e\u5230tc358743\u5bf9\u5e94\u8282\u70b9\u4e3av4l-subdev2\uff0crp1-cfe-csi2_ch0\u7684pad0\u4e3avideo0: blikvm@blikvm:~ $ media-ctl -d /dev/media0 -p Media controller API version 6.1.63 Media device information ------------------------ driver rp1-cfe model rp1-cfe serial bus info platform:1f00128000.csi hw revision 0x114666 driver version 6.1.63 Device topology - entity 1: csi2 (8 pads, 8 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev0 pad0: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"tc358743 4-000f\":0 [ENABLED,IMMUTABLE] pad1: Sink [fmt:unknown/8192x1 field:none] pad2: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad3: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad4: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch0\":0 [] -> \"pisp-fe\":0 [] pad5: Source [fmt:unknown/8192x1 field:none] -> \"rp1-cfe-embedded\":0 [] pad6: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch2\":0 [] -> \"pisp-fe\":0 [] pad7: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch3\":0 [] -> \"pisp-fe\":0 [] - entity 10: pisp-fe (5 pads, 7 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Sink [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"csi2\":4 [] <- \"csi2\":6 [] <- \"csi2\":7 [] pad1: Sink [fmt:FIXED/8192x1 field:none] <- \"rp1-cfe-fe_config\":0 [] pad2: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image0\":0 [] pad3: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image1\":0 [] pad4: Source [fmt:FIXED/8192x1 field:none] -> \"rp1-cfe-fe_stats\":0 [] - entity 16: tc358743 4-000f (1 pad, 1 link) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev2 pad0: Source [fmt:RGB888_1X24/640x480 field:none colorspace:srgb] [dv.caps:BT.656/1120 min:640x350@13000000 max:1920x1200@165000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom] [dv.detect:BT.656/1120 1920x1080p24 (2750x1125) stds: flags:] [dv.current:BT.656/1120 640x480p59 (800x525) stds:CEA-861,DMT flags:has-cea861-vic] -> \"csi2\":0 [ENABLED,IMMUTABLE] - entity 18: rp1-cfe-csi2_ch0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 pad0: Sink <- \"csi2\":4 [] - entity 22: rp1-cfe-embedded (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video1 pad0: Sink <- \"csi2\":5 [] - entity 26: rp1-cfe-csi2_ch2 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video2 pad0: Sink <- \"csi2\":6 [] - entity 30: rp1-cfe-csi2_ch3 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video3 pad0: Sink <- \"csi2\":7 [] - entity 34: rp1-cfe-fe_image0 (1 pad, 1 link) type Node subtype V4L flags 1 device node name /dev/video4 pad0: Sink <- \"pisp-fe\":2 [] - entity 38: rp1-cfe-fe_image1 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video5 pad0: Sink <- \"pisp-fe\":3 [] - entity 42: rp1-cfe-fe_stats (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video6 pad0: Sink <- \"pisp-fe\":4 [] - entity 46: rp1-cfe-fe_config (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video7 pad0: Source -> \"pisp-fe\":1 [] \u67e5\u8be2\u5f53\u524d\u8f93\u5165\u6e90\u4fe1\u606f,\u82e5\u5206\u8fa8\u7387\u663e\u793a0\u5219\u8868\u793a\u4e3a\u68c0\u67e5\u5230\u8f93\u5165\u6e90\u4fe1\u53f7\uff0c\u9700\u8981\u68c0\u67e5\u786c\u4ef6\u8fde\u63a5\u548c\u4e0a\u8ff0\u6b65\u9aa4\u6392\u67e5\u3002 blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings Active width: 1920 Active height: 1080 Total width: 2750 Total height: 1125 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (24.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 830 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 45 Vertical backporch: 0 Standards: Flags: \u786e\u8ba4\u5f53\u524d\u8f93\u5165\u6e90\u4fe1\u606f blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query BT timings set \u521d\u59cb\u5316media0 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -r \u628acsi2\u7684pad4\u8fde\u63a5\u5230rp1-cfe-csi2_ch0\u7684pad0 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -l ''\\''csi2'\\'':4 -> '\\''rp1-cfe-csi2_ch0'\\'':0 [1]' \u914d\u7f6emedia\u8282\u70b9 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' \u8bbe\u7f6e\u8f93\u51fa\u683c\u5f0f v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3 \u91c7\u96c6\u4e24\u5e27\u753b\u9762\u7528\u4e8e\u6d4b\u8bd5tc358743\u662f\u5426\u53ef\u4ee5\u5de5\u4f5c\uff0c\u5176\u5b83\u5982\u4f7f\u7528gstreamer\u7684\u65b9\u6cd5\u6682\u65f6\u672a v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='RGB3' --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll Pi\u5982\u679c\u5b89\u88c5\u7684\u662f\u5e26\u684c\u9762\u7684\u7cfb\u7edf\uff0c\u53ef\u4ee5\u4f7f\u7528ffplay\u76f4\u63a5\u64ad\u653eyuv\u6587\u4ef6\u3002 ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 hdmiin.yuv windows\u7535\u8111\u53ef\u4ee5\u4f7f\u75287yuv\u7b49\u8f6f\u4ef6\u67e5\u770b.yuv\u6587\u4ef6\uff0c\u6559\u7a0b\u8f93\u5165\u683c\u5f0f\u4e3a1920 1080\uff0c\u6240\u4ee5\u57287yuv\u53f3\u4e0a\u89d2\u683c\u5f0f\u9009\u62e9BGR888\uff0c\u5206\u8fa8\u7387\u8bbe\u7f6e1920 1080\uff0c\u5373\u53ef\u770b\u5230\u4e24\u5e27\u521a\u91c7\u96c6\u5230\u7684\u753b\u9762 \u82af\u7247\u8d44\u6599 tc358743\u82af\u7247\u8d44\u6599 \u53d1\u8d27\u6e05\u5355 C790 \u6d4b\u8bd5\u89c6\u9891 C780A \u6d4b\u8bd5:https://www.youtube.com/watch?v=ecqyINoiHNQ C780B \u6d4b\u8bd5:https://www.youtube.com/watch?v=nc-hwPT2Uak&t=15s \u91c7\u8d2d\u8fde\u63a5 \u4e2d\u56fd\u5ba2\u6237\u91c7\u8d2d\u94fe\u63a5\uff1a C790 & C780 \u5176\u5b83\u56fd\u5bb6\u5ba2\u6237\u91c7\u8d2d\u8fde\u63a5\uff1a C779","title":"HDMI\u8f6cCSI & Audio\u6a21\u5757\u7528\u6237\u624b\u518c"},{"location":"hdmi-csi-i2s/#hdmicsii2s","text":"\u5c06HDMI\u4fe1\u53f7\u8f6c\u6362\u6210CSI\u89c6\u9891\u4fe1\u53f7\u548cI2S\u97f3\u9891\u4fe1\u53f7, \u76ee\u524d\u5168\u5e73\u53f0\u652f\u6301(zero, Pi3B, Pi4B, CM4, Pi5B),\u5176\u4e2d\u6700\u9ad8\u91c7\u96c6\u5206\u8fa8\u7387\u4e0d\u4ec5\u4ec5\u53d6\u51b3\u4e8eHDMI\u8f6cCSI\u8f6c\u6362\u677f\uff0c\u540c\u65f6\u4e5f\u53d6\u51b3\u4e8e\u4f60\u4f7f\u7528\u7684\u6811\u8393\u6d3e\u786c\u4ef6\u7248\u672c\uff0c\u6811\u8393\u6d3e\u786c\u4ef6\u7248\u76ee\u524d\u4e3b\u8981\u5206\u4e24\u4e2a\u7cfb\u5217\uff0c\u6700\u9ad8\u652f\u63011080P60Hz\uff0c\u548c\u6700\u9ad8\u652f\u63011080P50Hz\u3002 \u6700\u9ad8\u652f\u63011080P60Hz\u7684Pi\u7248\u672c(CM3\uff0cCM4\uff0cPi5B) \u6700\u9ad8\u652f\u63011080P50Hz\u7684Pi\u7248\u672c(zero, zero2, Pi3B, Pi4B\u7b49)","title":"HDMI\u8f6cCSI&I2S\u6a21\u5757\u624b\u518c"},{"location":"hdmi-csi-i2s/#_1","text":"\u6b64\u6a21\u5757\u5c06HDMI\u4fe1\u53f7\u8f6c\u6362\u6210CSI\u89c6\u9891\u4fe1\u53f7\u548cI2S\u97f3\u9891\u4fe1\u53f7\uff0c\u6700\u9ad8\u652f\u63011080P60Hz\u7684\u89c6\u9891\u8f93\u5165\uff0c\u5728\u6811\u8393\u6d3e\u4e0a\u5de5\u4f5c\u7684\u5f88\u597d\uff0c\u76ee\u524d\u5171\u67093\u4e2a\u7248\u672c(C779\u3001C780\u3001C790). C790\u662f\u76ee\u524d\u6700\u65b0\u7684\u7248\u672c\uff0c\u89e3\u51b3\u4e86\u6240\u6709\u5df2\u77e5\u7684\u95ee\u9898\uff0c\u540c\u662f\u6709CSI 2\u901a\u9053\u548c4\u901a\u9053\u63a5\u53e3\uff0cI2S\u97f3\u9891\u63a5\u53e3\uff0c\u4fee\u590d\u4e86HDMI\u53cd\u5411\u4f9b\u7535\u95ee\u9898\u3002","title":"\u7b80\u4ecb"},{"location":"hdmi-csi-i2s/#_2","text":"","title":"\u6027\u80fd\u53c2\u6570"},{"location":"hdmi-csi-i2s/#c790","text":"\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u5728\u6811\u8393\u6d3e\u4e0a\u6b64\u6a21\u5757\u6700\u9ad8\u652f\u63011080P60Hz\u8f93\u5165\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG 4\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f CSI-2\u63a5\u53e31: 15 pin FPC, \u95f4\u8ddd1.0 mm, \u5728C790\u6a21\u5757\u7684\u6b63\u9762. CSI-2\u63a5\u53e32, 22 pin FPC, \u95f4\u8ddd0.5 mm, \u5728C790\u6a21\u5757\u7684\u80cc\u9762. \u5c3a\u5bf8: 30 x 45 mm \u5b89\u88c5\u5b54\u4f4d:4 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u6811\u8393\u6d3e4B\u53ea\u652f\u63011080P50Hz(\u56e0\u4e3a4B\u53ea\u6709\u4e24\u4e2aCSI-2\u901a\u9053) ,\u6811\u8393\u6d3eCM4\u53ea\u652f\u63011080P60Hz,\u6240\u4ee5\u5982\u679c\u4f60\u7684\u8f93\u5165\u8bbe\u5907\u4e00\u5b9a\u8981\u662f1080P60Hz\uff0c\u8bf7\u540c\u65f6\u4f7f\u7528CM4\u548cC790. \u63a5\u53e3 C790\u6709\u4e24\u4e2aCSI\u8f93\u51fa\u63a5\u53e3: \u63a5\u53e31\uff0c\u5728C790\u6b63\u9762\uff0c15 pin FPC, \u95f4\u8ddd1.0 mm; \u63a5\u53e31\uff0c\u5728C790\u80cc\u9762,22 pin FPC, \u95f4\u8ddd0.5 mm\u3002 \u5c3a\u5bf8 \u5b89\u88c5\u53c2\u8003","title":"C790"},{"location":"hdmi-csi-i2s/#c780","text":"C780A\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P50Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 2\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 15 pin FPC, \u95f4\u8ddd 1.0 mm\uff1b \u5c3a\u5bf8: 30 x 65 mm (\u6298\u65ad\u524d); 30 x 45 mm (\u6298\u65ad\u540e) \u5b89\u88c5\u5b54\u4f4d:6 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g C780B\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P60Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 4\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 22 pin FPC, \u95f4\u8ddd 0.5 mm\uff1b \u5c3a\u5bf8: 30 x 65 mm (\u6298\u65ad\u524d); 30 x 45 mm (\u6298\u65ad\u540e) \u5b89\u88c5\u5b54\u4f4d:6 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u63a5\u53e3 \u97f3\u9891\u5f15\u811a\u5b9a\u4e49\u5982\u4e0b\u56fe\u6240\u793a: \u5c3a\u5bf8 \u5c3a\u5bf8\u5982\u4e0b\u56fe\u6240\u793a. \u67096\u4e2a\u76f4\u5f84\u4e3a2\u300275mm\u7684\u5b54\u4f4d\u7528\u4e8e\u5b89\u88c5\uff0c\u5b89\u88c5\u87ba\u9489\u53ef\u4ee5\u9009\u62e9M2.5\u3002 \u5982\u4e0b\u56fe\u6240\u793a\uff0cC780\u88ab\u8bbe\u8ba1\u6210\u53ef\u6298\u65ad\u5f0f\u7684\uff0cC780\u6a21\u5757\u5728\u672a\u88ab\u6298\u65ad\u524d\u53ef\u4ee5\u5b8c\u7f8e\u7684\u5b89\u88c5\u5728zero\u4e0a\u3002","title":"C780"},{"location":"hdmi-csi-i2s/#c779","text":"\u786c\u4ef6\u53c2\u6570 HDMI\u8f93\u5165: \u6700\u9ad8\u652f\u6301080P50Hz\u5728\u6811\u8393\u6d3e\u4e0a\uff1b HDMI\u8f6cCSI-2\u6865\u63a5\u82af\u7247:Toshiba TC358743XBG\uff1b 2\u8defCSI-2\u901a\u9053\u548c\u65f6\u949f\uff1b CSI-2\u63a5\u53e3: 15 pin FPC, \u95f4\u8ddd 1.0 mm\uff1b \u5c3a\u5bf8: 35 x 50 mm \u5b89\u88c5\u5b54\u4f4d:4 x M2.5 \u4f9b\u7535\u7535\u538b:3.3V \u91cd\u91cf: 10g \u5c3a\u5bf8 \u5c3a\u5bf8\u5982\u4e0b\u56fe\u6240\u793a. \u67094\u4e2a\u76f4\u5f84\u4e3a2.75mm\u7684\u5b54\u4f4d\u7528\u4e8e\u5b89\u88c5\uff0c\u5b89\u88c5\u87ba\u9489\u53ef\u4ee5\u9009\u62e9M2.5\u3002","title":"C779"},{"location":"hdmi-csi-i2s/#csi","text":"\u5176\u4e2dC779\uff0cC780A\u53ea\u670915PIN\u5f15\u811a\uff0cC780B\u53ea\u670922PIN\u5f15\u811a\uff0cC790\u540c\u65f6\u670915\u548c22PIN\u5f15\u811a\u3002","title":"CSI\u63a5\u53e3\u5b9a\u4e49"},{"location":"hdmi-csi-i2s/#demo","text":"\u4e0b\u6587\u4e2d\u7684\u8f6f\u4ef6\u4f7f\u7528\u65b9\u6cd5\u8ddf\u4f60\u4f7f\u7528\u7684\u6811\u8393\u6d3e\u955c\u50cf\u7248\u672c\u6709\u5173\uff0c\u53ef\u80fd\u5b58\u5728\u4e0d\u540c\u3002\u5982\u679c\u4f60\u6709\u4efb\u4f55\u7591\u95ee\uff0c\u8bf7\u52a0\u5165 BLIKVM Discord \u793e\u533a \u83b7\u5f97\u652f\u6301\u3001\u89e3\u7b54\u548c\u65b0\u95fb\u3002 \u4ee5\u4e0b\u8bf4\u660e\u9002\u7528\u4e8e\u5185\u6838\u4e3a5.4\u6216\u8005\u66f4\u9ad8\u7248\u672c\u3002\u5982\u679c\u4f60\u7684\u6811\u8393\u6d3e\u955c\u50cf\u4f4e\u4e8e\u6b64\u7248\u672c\uff0c\u8bf7\u5347\u7ea7\u3002\u7ec8\u7aef\u4f7f\u7528\u4f7f\u7528\u201cuname-a\u201d\u53ef\u4ee5\u67e5\u770b\u4f60\u7cfb\u7edf\u7684\u5185\u6838\u7248\u672c\u3002 pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux 1. \u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u8fdb\u884c\u5347\u7ea7 (\u4e0d\u662f\u5fc5\u987b\u7684\uff0c\u5728\u67d0\u4e9b\u56fd\u5bb6\u8fd9\u4e2a\u82b1\u8d39\u7684\u65f6\u95f4\u53ef\u80fd\u5f88\u957f) sudo apt-get update sudo apt-get upgrade 2. \u4f7f\u80fd\u76f8\u673a\u6a21\u5757(\u5728\u6811\u8393\u6d3eBullseys OS\u7cfb\u7edf\u4e2d\uff0c\u76f8\u673a\u5df2\u9ed8\u8ba4\u88ab\u4f7f\u80fd) sudo raspi-config sudo reboot \u79fb\u52a8\u5149\u6807\u5230\u2018Interfacing Options\u2019\uff0c\u7136\u540e\u6309Enter\u952e\u8fdb\u5165\u3002\u7136\u540e\u9009\u62e9\u2018Camera\u2019\u9009\u9879\uff0c\u6309Enter\u952e\u8fdb\u5165\u540e\uff0c\u4f7f\u80fd\u76f8\u673a\u3002\u7136\u540e\u9009\u62e9\u201cFinish\u201d\u540e\uff0c \u9009\u62e9\u201creboot\u201d\u3002 \u91cd\u542f\u975e\u5e38\u91cd\u8981!! \u7531\u4e8ePi5B\u53d6\u6d88\u4e86\u786c\u7f16\u7801\u5668\uff0c\u4e0b\u9762\u8f6f\u4ef6\u4f7f\u7528\u65b9\u6cd5\u5728Pi\u5e73\u53f0\u76ee\u524d\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0cPi5B\u914d\u7f6e\uff0c\u548c\u5176\u5b83Pi\u5e73\u53f0\u914d\u7f6e\u3002 \u5728zero, zero2,Pi3B,Pi4B\u7b49\u5e73\u53f0HDMI\u8f6cCSI\u6a21\u5757\u6d4b\u8bd5demo\u53c2\u8003 \u7f16\u8f91 /boot/config.txt (\u9700\u8981sudo\u6743\u9650) sudo nano /boot/config.txt \u6dfb\u52a0\u4e0b\u9762\u7684\u5185\u5bb9 dtoverlay=tc358743 \u5982\u679c\u4f60\u7684\u6a21\u5757(C780\u548cC790)\u652f\u6301\u58f0\u97f3\uff0c\u6dfb\u52a0\u4e0b\u9762\u5185\u5bb9\u652f\u6301\u58f0\u97f3 dtoverlay=tc358743-audio \u5982\u679c\u4f60\u662f\u7528\u6811\u8393\u6d3e\u8ba1\u7b97\u6a21\u7ec4(CM3\u3001CM4)\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5217\u914d\u7f6e\uff0c\u4f7f\u80fdCSI\u76844\u4e2a\u901a\u9053\u3002 dtoverlay=tc358743,4lane=1 \u4f7f\u7528\u201cdmesg | grep cma\u201d\u68c0\u67e5\u5206\u914d\u7ed9CMA\u5806\u7684\u5185\u5b58\u91cf\uff0c\u7ec8\u7aef\u51fa\u73b0\u7684\u7b2c\u4e00\u884c\u5185\u5bb9\u5e94\u8be5\u5982\u4e0b\u6240\u793a: pi@raspberrypi:~ $ dmesg | grep cma [0.000000] cma: Reserved 256 MiB at 0x000000001ec00000 \u5982\u679c\u663e\u793a\u5c11\u4e8e96MB\uff0c\u7f16\u8f91/boot/cmdline.txt\uff0c\u6dfb\u52a0\u4e0b\u9762\u4e00\u884c\u3002 cma=96M \u91cd\u542f\u6811\u8393\u6d3e\uff0c\u5982\u679c\u914d\u7f6e\u6210\u529f\uff0c\u4f60\u5c06\u4f1a\u770b\u5230/dev/video0\u8bbe\u5907\u63cf\u8ff0\u7b26\u51fa\u73b0\u3002\u53ef\u4ee5\u4f7f\u7528\u201cv4l2-ctl \u2013list-devices\u201d \u547d\u4ee4\u5217\u51fa\u6240\u6709\u7684video\u63cf\u8ff0\u7b26\u3002\u518d\u5c06\u6811\u8393\u6d3e\u4e0e\u6a21\u5757\u6b63\u786e\u8fde\u63a5\u540e\uff0c\u6811\u8393\u6d3e\u4e0a\u7535\uff0c\u4f60\u53ef\u4ee5\u770b\u5230C790\u6a21\u5757\u4e0a\u6709\u4e00\u4e2a\u7eff\u8272\u706f\u5e38\u4eae\uff0c\u7136\u540e\u53ef\u4ee5\u6309\u7167\u4e0b\u9762\u7684\u547d\u4ee4\uff0c\u68c0\u67e5\u662f\u5426\u5df2\u7ecf\u6b63\u5e38\u51fa\u73b0\u4e86video0\u3002 pi@raspberrypi:~ $ ls /dev/video0 /dev/video0 pi@raspberrypi:~ $ v4l2-ctl --list-devices bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/video18 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 unicam (platform:fe801000.csi): /dev/video0 /dev/video1 /dev/media2 \u9ed8\u8ba4\u6ca1\u6709\u52a0\u8f7dEDID,\u5982\u679c\u4f60\u6709EDID\u7f16\u8f91\u5668\uff0c\u4f60\u53ef\u4ee5\u81ea\u5df1\u7f16\u8f91\u4f60\u6240\u9700\u8981\u7684\u5206\u8fa8\u7387\uff0c\u6216\u8005\u4f7f\u7528\u4e0b\u9762\u63d0\u4f9b\u7684EDID\u5206\u8fa8\u7387\uff08720p60hz\uff09\u3002 00ffffffffffff005262888800888888 1c150103800000780aEE91A3544C9926 0F505400000001010101010101010101 010101010101011d007251d01e206e28 5500c48e2100001e8c0ad08a20e02d10 103e9600138e2100001e000000fc0054 6f73686962612d4832430a20000000FD 003b3d0f2e0f1e0a2020202020200100 020321434e041303021211012021a23c 3d3e1f2309070766030c00300080E300 7F8c0ad08a20e02d10103e9600c48e21 0000188c0ad08a20e02d10103e960013 8e210000188c0aa01451f01600267c43 00138e21000098000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 cd ~ sudo nano edid.txt # \u62f7\u8d1d\u4e0a\u95e8\u7684\u5185\u5bb9\u5230edid.txt\u6587\u4ef6\u4e2d\uff0c\u7136\u540e\u4fdd\u5b58\u9000\u51fa\u3002\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u8bbe\u7f6e\u52a0\u8f7dedid\uff0c\u5982\u679c\u6b63\u786e\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u770b\u5230\u5982\u4e0b\u7684\u8f93\u51fa\u3002 pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums CTA-861 Header IT Formats Underscanned: yes Audio: yes YCbCr 4:4:4: no YCbCr 4:2:2: no HDMI Vendor-Specific Data Block Physical Address: 3.0.0.0 YCbCr 4:4:4 Deep Color: no 30-bit: no 36-bit: no 48-bit: no CTA-861 Video Capability Descriptor RGB Quantization Range: yes YCC Quantization Range: no PT: Supports both over- and underscan IT: Supports both over- and underscan CE: Supports both over- and underscan \u9a71\u52a8\u7a0b\u5e8f\u4e0d\u4f1a\u81ea\u52a8\u5207\u6362\u5230\u68c0\u6d4b\u5230\u7684\u5206\u8fa8\u7387\u3002\u662f\u7528\u4e0b\u5217\u547d\u4ee4\u68c0\u67e5\u76ee\u524dHDMI\u7684\u8f93\u5165 pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings Active width: 1280 Active height: 720 Total width: 1650 Total height: 750 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (60.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 370 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 30 Vertical backporch: 0 Standards: Flags: \u4f60\u5fc5\u987b\u4f7f\u7528\u201cv4l2-ctl \u2013set-dv-bt-timings\u201d\u547d\u4ee4\u8bbe\u7f6e\u9a71\u52a8\u7a0b\u5e8f\u4f7f\u7528\u76ee\u524d\u7684\u8f93\u5165\u5206\u8fa8\u7387 v4l2-ctl --set-dv-bt-timings query to select the currently detected timings. v4l2-ctl -V should now reflect the resolution detected. \u82af\u7247\u652f\u6301\u4e24\u79cd\u683c\u5f0f(BGR3\u548cUYVY)\uff0cBGR3\u50cf\u7d20\u6df1\u5ea6\u4e3a24bpp\uff0cUYVY\u4e3aYUV4:2:2 16bpp\u3002\u5982\u679c\u4f7f\u7528CSI 2\u901a\u9053\uff0cBGR3\u683c\u5f0f\u6700\u5927\u652f\u63011080P30Hz\u7684\u8f93\u5165\uff0c\u4f7f\u7528UYVY\u5219\u6700\u5927\u652f\u63011080P60Hz\u7684\u8f93\u5165\u3002\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8bbe\u7f6e\u4e3aUYVY\u683c\u5f0f\u3002 v4l2-ctl -v pixelformat=UYVY \u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff0c\u68c0\u67e5\u97f3\u9891\u786c\u4ef6\u548c\u9a71\u52a8\u662f\u5426\u6b63\u5e38\u3002 pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0 Note: card 1: tc358743\u610f\u5473\u7740\u97f3\u9891\u76f8\u5173\u786c\u4ef6\u5df2\u88ab\u6b63\u786e\u52a0\u8f7d\uff0c\u6ce8\u610f\u8fd9\u91cc\u76841\u53ef\u80fd\u4e0d\u540c\u3002 \u5b89\u88c5GStreamer\u5de5\u5177. sudo apt install gstreamer1.0-tools sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad sudo apt-get install gstreamer1.0-plugins-base \u68c0\u67e5gstreamer\u5de5\u5177\u7248\u672c: pi@raspberrypi:~ $ gst-launch-1.0 --version gst-launch-1.0 version 1.18.4 GStreamer 1.18.4 http://packages.qa.debian.org/gstreamer1.0 Note:\u4e0d\u540c\u7684\u7248\u672c\u8fd9\u91cc\u8f93\u51fa\u53ef\u80fd\u4e0d\u540c. \u4f7f\u7528gstreamer\u53bb\u5f55\u5236\u89c6\u9891\u6216\u8005\u58f0\u97f3 #GStreamer v1.14 command gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. \u4f60\u4f1a\u5f97\u5230\u4e00\u4e2afoo.mkv\u6587\u4ef6. \u5982\u679c\u4f60\u7684gstreamer\u662f1.8\u6216\u8005\u66f4\u9ad8\u7248\u672c\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\u3002\u5176\u4e2ddevice=hw:1\u8868\u793a\u7684\u662fTC358743\u58f0\u5361\u3002 #The command to recode a video with audio. (GStreamer 1.18.4) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. #The sample command to recode a video without audio. (C779 doesn't support audio) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=30/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv Press CTRL+C to end recording. PS: \u8fd9\u91cc\u6211\u4eec\u5efa\u8bae\u4f60\u4f7f\u7528\u5b9e\u9645\u7684\u8f93\u5165\u5e27\u7387\u53bb\u91c7\u96c6HDMI\u4fe1\u53f7\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528 \u2018v4l2-ctl \u2013query-dv-timings\u2019\u53bb\u68c0\u67e5\u5b9e\u9645\u8f93\u5165\u5e27\u7387\u3002 \u5982\u4e0a\u56fe\u4e2d\u7684HDMI\u8f93\u5165\u8bbe\u5907\uff0c\u5e27\u7387\u662f60Hz\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u53bb\u5f55\u5236\u89c6\u9891\uff1a gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv \u5f55\u5236\u89c6\u9891\u548c\u97f3\u9891: (\u5982\u679c\u4f60\u7684\u8bbe\u5907\u652f\u6301\u97f3\u9891\u7684\u8bdd) gst-launch-1.0 -vvv v4l2src ! \"video/x-raw,framerate=60/1,format=UYVY\" ! v4l2h264enc extra-controls=\"controls,h264_profile=4,h264_level=13,video_bitrate=256000;\" ! \"video/x-h264,profile=high, level=(string)4.2\" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux. Note: alsasrc device=hw:1 \u2013 \u201c1\u201d means the audio card number, You must change to correct audio card number. (Query the car number via \u2018arecord \u2013l\u2019, refer to step 9) Pi5B\u7b49\u5e73\u53f0HDMI\u8f6cCSI\u6a21\u5757\u6d4b\u8bd5demo\u53c2\u8003 \u7f16\u8f91 /boot/config.txt (\u9700\u8981sudo\u6743\u9650) sudo nano /boot/config.txt \u6dfb\u52a0\u4e0b\u9762\u7684\u5185\u5bb9 dtoverlay=tc358743 \u5982\u679c\u4f60\u7684\u6a21\u5757(C780\u548cC790)\u652f\u6301\u58f0\u97f3\uff0c\u6dfb\u52a0\u4e0b\u9762\u5185\u5bb9\u652f\u6301\u58f0\u97f3 dtoverlay=tc358743-audio \u91cd\u542f\u6811\u8393\u6d3e,\u6267\u884c\u4e0b\u9762\u6307\u4ee4\uff0c\u627e\u5230csi\u5bf9\u5e94\u7684media\u8282\u70b9\u4e3amedia0,\u5373rp1-cfe (platform:1f00128000.csi)\u5b57\u6bb5\u4e0b\u7684media\u8bbe\u5907: blikvm@blikvm:~ $ v4l2-ctl --list-devices pispbe (platform:1000880000.pisp_be): /dev/video20 /dev/video21 /dev/video22 /dev/video23 /dev/video24 /dev/video25 /dev/video26 /dev/video27 /dev/video28 /dev/video29 /dev/video30 /dev/video31 /dev/video32 /dev/video33 /dev/video34 /dev/video35 /dev/video36 /dev/video37 /dev/media1 /dev/media2 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/media0 rpivid (platform:rpivid): /dev/video19 /dev/media3 \u627e\u5230tc358743\u5bf9\u5e94\u8282\u70b9\u4e3av4l-subdev2\uff0crp1-cfe-csi2_ch0\u7684pad0\u4e3avideo0: blikvm@blikvm:~ $ media-ctl -d /dev/media0 -p Media controller API version 6.1.63 Media device information ------------------------ driver rp1-cfe model rp1-cfe serial bus info platform:1f00128000.csi hw revision 0x114666 driver version 6.1.63 Device topology - entity 1: csi2 (8 pads, 8 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev0 pad0: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"tc358743 4-000f\":0 [ENABLED,IMMUTABLE] pad1: Sink [fmt:unknown/8192x1 field:none] pad2: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad3: Sink [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] pad4: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch0\":0 [] -> \"pisp-fe\":0 [] pad5: Source [fmt:unknown/8192x1 field:none] -> \"rp1-cfe-embedded\":0 [] pad6: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch2\":0 [] -> \"pisp-fe\":0 [] pad7: Source [fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-csi2_ch3\":0 [] -> \"pisp-fe\":0 [] - entity 10: pisp-fe (5 pads, 7 links) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: Sink [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] <- \"csi2\":4 [] <- \"csi2\":6 [] <- \"csi2\":7 [] pad1: Sink [fmt:FIXED/8192x1 field:none] <- \"rp1-cfe-fe_config\":0 [] pad2: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image0\":0 [] pad3: Source [fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range] -> \"rp1-cfe-fe_image1\":0 [] pad4: Source [fmt:FIXED/8192x1 field:none] -> \"rp1-cfe-fe_stats\":0 [] - entity 16: tc358743 4-000f (1 pad, 1 link) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev2 pad0: Source [fmt:RGB888_1X24/640x480 field:none colorspace:srgb] [dv.caps:BT.656/1120 min:640x350@13000000 max:1920x1200@165000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom] [dv.detect:BT.656/1120 1920x1080p24 (2750x1125) stds: flags:] [dv.current:BT.656/1120 640x480p59 (800x525) stds:CEA-861,DMT flags:has-cea861-vic] -> \"csi2\":0 [ENABLED,IMMUTABLE] - entity 18: rp1-cfe-csi2_ch0 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video0 pad0: Sink <- \"csi2\":4 [] - entity 22: rp1-cfe-embedded (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video1 pad0: Sink <- \"csi2\":5 [] - entity 26: rp1-cfe-csi2_ch2 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video2 pad0: Sink <- \"csi2\":6 [] - entity 30: rp1-cfe-csi2_ch3 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video3 pad0: Sink <- \"csi2\":7 [] - entity 34: rp1-cfe-fe_image0 (1 pad, 1 link) type Node subtype V4L flags 1 device node name /dev/video4 pad0: Sink <- \"pisp-fe\":2 [] - entity 38: rp1-cfe-fe_image1 (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video5 pad0: Sink <- \"pisp-fe\":3 [] - entity 42: rp1-cfe-fe_stats (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video6 pad0: Sink <- \"pisp-fe\":4 [] - entity 46: rp1-cfe-fe_config (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video7 pad0: Source -> \"pisp-fe\":1 [] \u67e5\u8be2\u5f53\u524d\u8f93\u5165\u6e90\u4fe1\u606f,\u82e5\u5206\u8fa8\u7387\u663e\u793a0\u5219\u8868\u793a\u4e3a\u68c0\u67e5\u5230\u8f93\u5165\u6e90\u4fe1\u53f7\uff0c\u9700\u8981\u68c0\u67e5\u786c\u4ef6\u8fde\u63a5\u548c\u4e0a\u8ff0\u6b65\u9aa4\u6392\u67e5\u3002 blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings Active width: 1920 Active height: 1080 Total width: 2750 Total height: 1125 Frame format: progressive Polarities: -vsync -hsync Pixelclock: 74250000 Hz (24.00 frames per second) Horizontal frontporch: 0 Horizontal sync: 830 Horizontal backporch: 0 Vertical frontporch: 0 Vertical sync: 45 Vertical backporch: 0 Standards: Flags: \u786e\u8ba4\u5f53\u524d\u8f93\u5165\u6e90\u4fe1\u606f blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query BT timings set \u521d\u59cb\u5316media0 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -r \u628acsi2\u7684pad4\u8fde\u63a5\u5230rp1-cfe-csi2_ch0\u7684pad0 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -l ''\\''csi2'\\'':4 -> '\\''rp1-cfe-csi2_ch0'\\'':0 [1]' \u914d\u7f6emedia\u8282\u70b9 blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\\''csi2'\\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]' \u8bbe\u7f6e\u8f93\u51fa\u683c\u5f0f v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3 \u91c7\u96c6\u4e24\u5e27\u753b\u9762\u7528\u4e8e\u6d4b\u8bd5tc358743\u662f\u5426\u53ef\u4ee5\u5de5\u4f5c\uff0c\u5176\u5b83\u5982\u4f7f\u7528gstreamer\u7684\u65b9\u6cd5\u6682\u65f6\u672a v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='RGB3' --stream-mmap=4 --stream-skip=3 --stream-count=2 --stream-to=hdmiin.yuv --stream-poll Pi\u5982\u679c\u5b89\u88c5\u7684\u662f\u5e26\u684c\u9762\u7684\u7cfb\u7edf\uff0c\u53ef\u4ee5\u4f7f\u7528ffplay\u76f4\u63a5\u64ad\u653eyuv\u6587\u4ef6\u3002 ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 hdmiin.yuv windows\u7535\u8111\u53ef\u4ee5\u4f7f\u75287yuv\u7b49\u8f6f\u4ef6\u67e5\u770b.yuv\u6587\u4ef6\uff0c\u6559\u7a0b\u8f93\u5165\u683c\u5f0f\u4e3a1920 1080\uff0c\u6240\u4ee5\u57287yuv\u53f3\u4e0a\u89d2\u683c\u5f0f\u9009\u62e9BGR888\uff0c\u5206\u8fa8\u7387\u8bbe\u7f6e1920 1080\uff0c\u5373\u53ef\u770b\u5230\u4e24\u5e27\u521a\u91c7\u96c6\u5230\u7684\u753b\u9762","title":"\u8f6f\u4ef6\u4f7f\u7528demo"},{"location":"hdmi-csi-i2s/#_3","text":"tc358743\u82af\u7247\u8d44\u6599","title":"\u82af\u7247\u8d44\u6599"},{"location":"hdmi-csi-i2s/#_4","text":"C790","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"hdmi-csi-i2s/#_5","text":"C780A \u6d4b\u8bd5:https://www.youtube.com/watch?v=ecqyINoiHNQ C780B \u6d4b\u8bd5:https://www.youtube.com/watch?v=nc-hwPT2Uak&t=15s","title":"\u6d4b\u8bd5\u89c6\u9891"},{"location":"hdmi-csi-i2s/#_6","text":"\u4e2d\u56fd\u5ba2\u6237\u91c7\u8d2d\u94fe\u63a5\uff1a C790 & C780 \u5176\u5b83\u56fd\u5bb6\u5ba2\u6237\u91c7\u8d2d\u8fde\u63a5\uff1a C779","title":"\u91c7\u8d2d\u8fde\u63a5"},{"location":"hid/","text":"\u89c6\u9891 \u952e\u76d8 \u9f20\u6807 \u5feb\u6377\u952e \u5728v1.4.5\u7248\u672c\u540e\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u5feb\u6377\u952e,\u627e\u5230shortcuts\u914d\u7f6e\u9879\u76ee, \u5176\u4e2dkey\u4e3aweb ui\u4e0a\u7684\u6309\u94ae\u540d\u79f0\uff0cvalue\u4e3a\u5177\u4f53\u7684\u6309\u952e\u3002 sudo -s vim /mnt/exec/release/config/app.json ## \u9ed8\u8ba4\u914d\u7f6e\u5982\u4e0b\uff1a \"shortcuts\": { \"Ctrl+Alt+Del\": [\"ControlLeft\",\"AltLeft\",\"Delete\"], \"Alt+Tab\": [\"AltLeft\",\"Tab\"], \"Alt+F4\": [\"AltLeft\",\"F4\"], \"Alt+Enter\": [\"AltLeft\",\"Enter\"], \"Ctrl+W\": [\"ControlLeft\",\"KeyW\"] } \u5176\u4e2d\u6309\u952e\u540d\u79f0\u5177\u6709\u552f\u4e00\u6027\uff0c\u4e0b\u9762\u63d0\u4f9b\u5177\u4f53\u7684\u6309\u952e\u540d\u79f0 \"{backspace}\": \"Backspace\", \"{tab}\": \"Tab\", \"{enter}\": \"Enter\", \"{shiftleft}\": \"ShiftLeft\", \"{shiftright}\": \"ShiftRight\", \"{altleft}\": \"AltLeft\", \"{altright}\": \"AltRight\", \"{prtscr}\": \"PrtScr\", \"{pause}\": \"Pause\", \"{scrolllock}\": \"ScrollLock\", \"{controlleft}\": \"ControlLeft\", \"{controlright}\": \"ControlRight\", \"{metaleft}\": \"MetaLeft\", \"{metaright}\": \"MetaRight\", \"{capslock}\": \"CapsLock\", \"{escape}\": \"Escape\", \"{space}\": \"Space\", \"{pageup}\": \"PageUp\", \"{pagedown}\": \"PageDown\", \"{end}\": \"End\", \"{home}\": \"Home\", \"{arrowleft}\": \"ArrowLeft\", \"{arrowup}\": \"ArrowUp\", \"{arrowright}\": \"ArrowRight\", \"{arrowdown}\": \"ArrowDown\", \"{insert}\": \"Insert\", \"{delete}\": \"Delete\", // Digits keys 1: \"Digit1\", 2: \"Digit2\", 3: \"Digit3\", 4: \"Digit4\", 5: \"Digit5\", 6: \"Digit6\", 7: \"Digit7\", 8: \"Digit8\", 9: \"Digit9\", 0: \"Digit0\", // \"!\": \"Digit1\", // ! maps to the '1' key \"@\": \"Digit2\", // @ maps to the '2' key \"#\": \"Digit3\", // # maps to the '3' key $: \"Digit4\", // $ maps to the '4' key \"%\": \"Digit5\", // % maps to the '5' key \"^\": \"Digit6\", // ^ maps to the '6' key \"&\": \"Digit7\", // & maps to the '7' key \"*\": \"Digit8\", // * maps to the '8' key \"(\": \"Digit9\", // ( maps to the '9' key \")\": \"Digit0\", // ) maps to the '0' key a: \"KeyA\", b: \"KeyB\", c: \"KeyC\", d: \"KeyD\", e: \"KeyE\", f: \"KeyF\", g: \"KeyG\", h: \"KeyH\", i: \"KeyI\", j: \"KeyJ\", k: \"KeyK\", l: \"KeyL\", m: \"KeyM\", n: \"KeyN\", o: \"KeyO\", p: \"KeyP\", q: \"KeyQ\", r: \"KeyR\", s: \"KeyS\", t: \"KeyT\", u: \"KeyU\", v: \"KeyV\", w: \"KeyW\", x: \"KeyX\", y: \"KeyY\", z: \"KeyZ\", // A: \"KeyA\", B: \"KeyB\", C: \"KeyC\", D: \"KeyD\", E: \"KeyE\", F: \"KeyF\", G: \"KeyG\", H: \"KeyH\", I: \"KeyI\", J: \"KeyJ\", K: \"KeyK\", L: \"KeyL\", M: \"KeyM\", N: \"KeyN\", O: \"KeyO\", P: \"KeyP\", Q: \"KeyQ\", R: \"KeyR\", S: \"KeyS\", T: \"KeyT\", U: \"KeyU\", V: \"KeyV\", W: \"KeyW\", X: \"KeyX\", Y: \"KeyY\", Z: \"KeyZ\", \"-\": \"Minus\", _: \"Minus\", \"=\": \"Equal\", \"+\": \"Equal\", \"[\": \"BracketLeft\", \"{\": \"BracketLeft\", \"]\": \"BracketRight\", \"}\": \"BracketRight\", \"|\": \"Backslash\", \"\\\\\": \"Backslash\", \"`\": \"Backquote\", \"~\": \"Backquote\", \";\": \"Semicolon\", \":\": \"Semicolon\", \"'\": \"Quote\", '\"': \"Quote\", \",\": \"Comma\", \"<\": \"Comma\", \".\": \"Period\", \">\": \"Period\", \"/\": \"Slash\", \"?\": \"Slash\", // Numpad keys \"{numpad0}\": \"Numpad0\", \"{numpad1}\": \"Numpad1\", \"{numpad2}\": \"Numpad2\", \"{numpad3}\": \"Numpad3\", \"{numpad4}\": \"Numpad4\", \"{numpad5}\": \"Numpad5\", \"{numpad6}\": \"Numpad6\", \"{numpad7}\": \"Numpad7\", \"{numpad8}\": \"Numpad8\", \"{numpad9}\": \"Numpad9\", \"{numlock}\": \"numlock\", \"{numpadmultiply}\": \"NumpadMultiply\", \"{numpadadd}\": \"NumpadAdd\", \"{numpadsubtract}\": \"NumpadSubtract\", \"{numpaddecimal}\": \"NumpadDecimal\", \"{numpaddivide}\": \"NumpadDivide\", \"{numpadenter}\": \"NumpadEnter\", // Function keys \"{f1}\": \"F1\", \"{f2}\": \"F2\", \"{f3}\": \"F3\", \"{f4}\": \"F4\", \"{f5}\": \"F5\", \"{f6}\": \"F6\", \"{f7}\": \"F7\", \"{f8}\": \"F8\", \"{f9}\": \"F9\", \"{f10}\": \"F10\", \"{f11}\": \"F11\", \"{f12}\": \"F12\"","title":"\u89c6\u9891&\u952e\u9f20"},{"location":"hid/#_1","text":"","title":"\u89c6\u9891 \u952e\u76d8 \u9f20\u6807"},{"location":"hid/#_2","text":"\u5728v1.4.5\u7248\u672c\u540e\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u5feb\u6377\u952e,\u627e\u5230shortcuts\u914d\u7f6e\u9879\u76ee, \u5176\u4e2dkey\u4e3aweb ui\u4e0a\u7684\u6309\u94ae\u540d\u79f0\uff0cvalue\u4e3a\u5177\u4f53\u7684\u6309\u952e\u3002 sudo -s vim /mnt/exec/release/config/app.json ## \u9ed8\u8ba4\u914d\u7f6e\u5982\u4e0b\uff1a \"shortcuts\": { \"Ctrl+Alt+Del\": [\"ControlLeft\",\"AltLeft\",\"Delete\"], \"Alt+Tab\": [\"AltLeft\",\"Tab\"], \"Alt+F4\": [\"AltLeft\",\"F4\"], \"Alt+Enter\": [\"AltLeft\",\"Enter\"], \"Ctrl+W\": [\"ControlLeft\",\"KeyW\"] } \u5176\u4e2d\u6309\u952e\u540d\u79f0\u5177\u6709\u552f\u4e00\u6027\uff0c\u4e0b\u9762\u63d0\u4f9b\u5177\u4f53\u7684\u6309\u952e\u540d\u79f0 \"{backspace}\": \"Backspace\", \"{tab}\": \"Tab\", \"{enter}\": \"Enter\", \"{shiftleft}\": \"ShiftLeft\", \"{shiftright}\": \"ShiftRight\", \"{altleft}\": \"AltLeft\", \"{altright}\": \"AltRight\", \"{prtscr}\": \"PrtScr\", \"{pause}\": \"Pause\", \"{scrolllock}\": \"ScrollLock\", \"{controlleft}\": \"ControlLeft\", \"{controlright}\": \"ControlRight\", \"{metaleft}\": \"MetaLeft\", \"{metaright}\": \"MetaRight\", \"{capslock}\": \"CapsLock\", \"{escape}\": \"Escape\", \"{space}\": \"Space\", \"{pageup}\": \"PageUp\", \"{pagedown}\": \"PageDown\", \"{end}\": \"End\", \"{home}\": \"Home\", \"{arrowleft}\": \"ArrowLeft\", \"{arrowup}\": \"ArrowUp\", \"{arrowright}\": \"ArrowRight\", \"{arrowdown}\": \"ArrowDown\", \"{insert}\": \"Insert\", \"{delete}\": \"Delete\", // Digits keys 1: \"Digit1\", 2: \"Digit2\", 3: \"Digit3\", 4: \"Digit4\", 5: \"Digit5\", 6: \"Digit6\", 7: \"Digit7\", 8: \"Digit8\", 9: \"Digit9\", 0: \"Digit0\", // \"!\": \"Digit1\", // ! maps to the '1' key \"@\": \"Digit2\", // @ maps to the '2' key \"#\": \"Digit3\", // # maps to the '3' key $: \"Digit4\", // $ maps to the '4' key \"%\": \"Digit5\", // % maps to the '5' key \"^\": \"Digit6\", // ^ maps to the '6' key \"&\": \"Digit7\", // & maps to the '7' key \"*\": \"Digit8\", // * maps to the '8' key \"(\": \"Digit9\", // ( maps to the '9' key \")\": \"Digit0\", // ) maps to the '0' key a: \"KeyA\", b: \"KeyB\", c: \"KeyC\", d: \"KeyD\", e: \"KeyE\", f: \"KeyF\", g: \"KeyG\", h: \"KeyH\", i: \"KeyI\", j: \"KeyJ\", k: \"KeyK\", l: \"KeyL\", m: \"KeyM\", n: \"KeyN\", o: \"KeyO\", p: \"KeyP\", q: \"KeyQ\", r: \"KeyR\", s: \"KeyS\", t: \"KeyT\", u: \"KeyU\", v: \"KeyV\", w: \"KeyW\", x: \"KeyX\", y: \"KeyY\", z: \"KeyZ\", // A: \"KeyA\", B: \"KeyB\", C: \"KeyC\", D: \"KeyD\", E: \"KeyE\", F: \"KeyF\", G: \"KeyG\", H: \"KeyH\", I: \"KeyI\", J: \"KeyJ\", K: \"KeyK\", L: \"KeyL\", M: \"KeyM\", N: \"KeyN\", O: \"KeyO\", P: \"KeyP\", Q: \"KeyQ\", R: \"KeyR\", S: \"KeyS\", T: \"KeyT\", U: \"KeyU\", V: \"KeyV\", W: \"KeyW\", X: \"KeyX\", Y: \"KeyY\", Z: \"KeyZ\", \"-\": \"Minus\", _: \"Minus\", \"=\": \"Equal\", \"+\": \"Equal\", \"[\": \"BracketLeft\", \"{\": \"BracketLeft\", \"]\": \"BracketRight\", \"}\": \"BracketRight\", \"|\": \"Backslash\", \"\\\\\": \"Backslash\", \"`\": \"Backquote\", \"~\": \"Backquote\", \";\": \"Semicolon\", \":\": \"Semicolon\", \"'\": \"Quote\", '\"': \"Quote\", \",\": \"Comma\", \"<\": \"Comma\", \".\": \"Period\", \">\": \"Period\", \"/\": \"Slash\", \"?\": \"Slash\", // Numpad keys \"{numpad0}\": \"Numpad0\", \"{numpad1}\": \"Numpad1\", \"{numpad2}\": \"Numpad2\", \"{numpad3}\": \"Numpad3\", \"{numpad4}\": \"Numpad4\", \"{numpad5}\": \"Numpad5\", \"{numpad6}\": \"Numpad6\", \"{numpad7}\": \"Numpad7\", \"{numpad8}\": \"Numpad8\", \"{numpad9}\": \"Numpad9\", \"{numlock}\": \"numlock\", \"{numpadmultiply}\": \"NumpadMultiply\", \"{numpadadd}\": \"NumpadAdd\", \"{numpadsubtract}\": \"NumpadSubtract\", \"{numpaddecimal}\": \"NumpadDecimal\", \"{numpaddivide}\": \"NumpadDivide\", \"{numpadenter}\": \"NumpadEnter\", // Function keys \"{f1}\": \"F1\", \"{f2}\": \"F2\", \"{f3}\": \"F3\", \"{f4}\": \"F4\", \"{f5}\": \"F5\", \"{f6}\": \"F6\", \"{f7}\": \"F7\", \"{f8}\": \"F8\", \"{f9}\": \"F9\", \"{f10}\": \"F10\", \"{f11}\": \"F11\", \"{f12}\": \"F12\"","title":"\u5feb\u6377\u952e"},{"location":"https/","text":"\u52a0\u5bc6\u8bc1\u4e66 blikvm v1.4.4\u7248\u672c\u540e,\u5f00\u59cb\u652f\u6301http\u548chttps\u4e24\u79cd\u6a21\u5f0f, \u9ed8\u8ba4\u4ee5http\u5f62\u5f0f\u542f\u52a8\uff0c\u5982\u679c\u9700\u8981\u4ee5https\u542f\u52a8\uff0c\u9700\u8981\u4fee\u6539\u4ee5\u4e0b\u914d\u7f6e: sudo -s vim /mnt/exec/release/config/app.json \u627e\u5230\u4e0b\u9762\u914d\u7f6e\u5185\u5bb9\uff0c\u5c06protocol\u5b57\u6bb5\u5bf9\u5e94http\u6539\u4e3ahttps\uff0cport\u7aef\u53e3\u753180\u6539\u4e3a443\uff0c\u5176\u4e2dkey\u548ccert\u5728 /mnt/exec/release/lib/https/ \u6b64\u8def\u5f84\uff0c\u7528\u6237\u53ef\u4ee5\u81ea\u5df1\u8fdb\u884c\u66ff\u6362\u3002 \"server\": { \"protocol\": \"http\", \"port\":80, \"ssl\": { \"key\": \"./lib/https/key.pem\", \"cert\": \"./lib/https/cert.pem\" }","title":"\u52a0\u5bc6\u8bc1\u4e66"},{"location":"https/#_1","text":"blikvm v1.4.4\u7248\u672c\u540e,\u5f00\u59cb\u652f\u6301http\u548chttps\u4e24\u79cd\u6a21\u5f0f, \u9ed8\u8ba4\u4ee5http\u5f62\u5f0f\u542f\u52a8\uff0c\u5982\u679c\u9700\u8981\u4ee5https\u542f\u52a8\uff0c\u9700\u8981\u4fee\u6539\u4ee5\u4e0b\u914d\u7f6e: sudo -s vim /mnt/exec/release/config/app.json \u627e\u5230\u4e0b\u9762\u914d\u7f6e\u5185\u5bb9\uff0c\u5c06protocol\u5b57\u6bb5\u5bf9\u5e94http\u6539\u4e3ahttps\uff0cport\u7aef\u53e3\u753180\u6539\u4e3a443\uff0c\u5176\u4e2dkey\u548ccert\u5728 /mnt/exec/release/lib/https/ \u6b64\u8def\u5f84\uff0c\u7528\u6237\u53ef\u4ee5\u81ea\u5df1\u8fdb\u884c\u66ff\u6362\u3002 \"server\": { \"protocol\": \"http\", \"port\":80, \"ssl\": { \"key\": \"./lib/https/key.pem\", \"cert\": \"./lib/https/cert.pem\" }","title":"\u52a0\u5bc6\u8bc1\u4e66"},{"location":"jetson_nano_tc358743/","text":"\u5728jstson nano\u4e0a\u4f7f\u7528C790 C779 C780 C790\u5168\u90e8\u9002\u7528\u6b64\u6587\u6863\uff0c\u672c\u6587\u6d4b\u8bd5\u5e95\u677f\u4e3ajetson nano b01\uff0c\u82e5\u4f60\u5176\u5b83\u5e95\u677f\u6709\u4e00\u4e9b\u8bbe\u8ba1\u5230\u8ddf\u677f\u5b50\u578b\u53f7\u76f8\u5173\u7684\u6b65\u9aa4\uff0c\u9700\u8981\u5bf9\u5e94\u6539\u53d8\uff0c\u8bf7\u6ce8\u610f\u3002 \u73b0\u5728\u5185\u6838\u6e90\u7801 wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/sources/t210/public_sources.tbz2 tar -xf public_sources.tbz2 Linux_for_Tegra/source/public/kernel_src.tbz2 --strip-components=3 tar xf kernel_src.tbz2 \u6839\u636e\u4ed3\u5e93\u91cc\u7684\u76ee\u5f55\u7ed3\u6784\u8fdb\u884c\u6587\u4ef6\u66ff\u6362\uff0c\u8981\u5168\u90e8\u66ff\u6362 git clone https://github.com/ThomasVon2021/jetson_tc358743 cp ~/jetson_tc358743/* ./ -r . \u2514\u2500\u2500 jetson_tc358743-main \u251c\u2500\u2500 hardware \u2502 \u2514\u2500\u2500 nvidia \u2502 \u2514\u2500\u2500 platform \u2502 \u2514\u2500\u2500 t210 \u2502 \u251c\u2500\u2500 batuu \u2502 \u2502 \u2514\u2500\u2500 kernel-dts \u2502 \u2502 \u2514\u2500\u2500 tegra210-p3448-0003-p3542-0000.dts \u2502 \u2514\u2500\u2500 porg \u2502 \u2514\u2500\u2500 kernel-dts \u2502 \u251c\u2500\u2500 Makefile \u2502 \u251c\u2500\u2500 porg-platforms \u2502 \u2502 \u251c\u2500\u2500 tegra210-dual-tc358743.dtsi \u2502 \u2502 \u251c\u2500\u2500 tegra210-porg-dual-tc358743.dtsi \u2502 \u2502 \u251c\u2500\u2500 tegra210-porg-tc358743.dtsi \u2502 \u2502 \u2514\u2500\u2500 tegra210-tc358743.dtsi \u2502 \u251c\u2500\u2500 tegra210-p3448-0000-p3449-0000-b00.dts \u2502 \u251c\u2500\u2500 tegra210-p3448-all-p3449-0000-camera-tc358743-dual.dts \u2502 \u2514\u2500\u2500 tegra210-p3448-common-tc358743.dts \u251c\u2500\u2500 kernel \u2502 \u2514\u2500\u2500 kernel-4.9 \u2502 \u251c\u2500\u2500 drivers \u2502 \u2502 \u2514\u2500\u2500 media \u2502 \u2502 \u2514\u2500\u2500 i2c \u2502 \u2502 \u251c\u2500\u2500 tc358743.c \u2502 \u2502 \u2514\u2500\u2500 tc358743_regs.h \u2502 \u2514\u2500\u2500 include \u2502 \u2514\u2500\u2500 media \u2502 \u2514\u2500\u2500 i2c \u2502 \u2514\u2500\u2500 tc358743.h \u2514\u2500\u2500 README.md \u4ea4\u53c9\u7f16\u8bd1\u94fe\u4e0b\u8f7d,\u540e\u9762make\u65f6\uff0c\u4f60\u9700\u8981\u6307\u5b9a\u7f16\u8bd1\u94fe wget http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz \u8fdb\u5165\u5230kernel/kernel-4.9/\uff0c\u5148\u914d\u7f6e\u518d\u7f16\u8bd1\uff0c make ARCH=arm64 tegra_defconfig menuconfig Device Drivers > Multimedia Support > I2C Encoders, decoders, sensors and other helper chips Toshiba TC358743 decoder should be * (press y or space on the option) grep -i tc358743 .config #checking if its really enabled make ARCH=arm64 CROSS_COMPILE=/root/work/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- -j4 \u5c06\u7f16\u8bd1\u51fa\u6765\u7684Image\u548cdtb\u6587\u4ef6\u5206\u522b\u62f7\u8d1d\u5230nano\u7684\u7cfb\u7edf\u7684\u4e0b\u9762\u8def\u5f84\u4e0b,\u82e5\u4f60\u7684\u8f7d\u677f\u4e0d\u662fB01\uff0c\u9700\u8981\u66f4\u6362\u5bf9\u5e94\u7684dtb\u6587\u4ef6\uff0cdtb\u6587\u4ef6\u4e0e\u4f60\u7684\u677f\u5b50\u578b\u53f7\u5bf9\u5e94\u5173\u7cfb\uff0c\u53ef\u4ee5\u67e5\u627e wiki kernel/kernel-4.9/arch/arm64/boot/Image ==> /boot/Image kernel/kernel-4.9/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-b00.dtb ==> /boot/veyecam/ #\u5176\u4e2d\u4f60\u7684nano\u8def\u5f84\u5982\u679c\u4e0d\u5b58\u5728veyecam\u6587\u4ef6\u5939\uff0c\u5148\u521b\u5efa sudo mkdir /boot/veyecam/ sudo cp / /boot/veyecam/ -f \u5148\u5907\u4efd extlinux.conf \u6587\u4ef6\uff0c\u7136\u540e\u7f16\u8f91/boot/extlinux/extlinux.conf\u6587\u4ef6\uff0c\u5728\u8be5\u6587\u4ef6\u4e0b\u589e\u52a0\uff1a FDT /boot/veyecam/ \u6ce8\u610f \u4e3a\u4f60\u7248\u672c\u7f16\u8bd1\u51fa\u6765\u7684dtb\u5b9e\u9645\u6587\u4ef6\u540d\uff0c \u91cd\u542f\u540e\u751f\u6548","title":"\u5728jstson nano\u4e0a\u4f7f\u7528C790"},{"location":"jetson_nano_tc358743/#jstson-nanoc790","text":"C779 C780 C790\u5168\u90e8\u9002\u7528\u6b64\u6587\u6863\uff0c\u672c\u6587\u6d4b\u8bd5\u5e95\u677f\u4e3ajetson nano b01\uff0c\u82e5\u4f60\u5176\u5b83\u5e95\u677f\u6709\u4e00\u4e9b\u8bbe\u8ba1\u5230\u8ddf\u677f\u5b50\u578b\u53f7\u76f8\u5173\u7684\u6b65\u9aa4\uff0c\u9700\u8981\u5bf9\u5e94\u6539\u53d8\uff0c\u8bf7\u6ce8\u610f\u3002 \u73b0\u5728\u5185\u6838\u6e90\u7801 wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/sources/t210/public_sources.tbz2 tar -xf public_sources.tbz2 Linux_for_Tegra/source/public/kernel_src.tbz2 --strip-components=3 tar xf kernel_src.tbz2 \u6839\u636e\u4ed3\u5e93\u91cc\u7684\u76ee\u5f55\u7ed3\u6784\u8fdb\u884c\u6587\u4ef6\u66ff\u6362\uff0c\u8981\u5168\u90e8\u66ff\u6362 git clone https://github.com/ThomasVon2021/jetson_tc358743 cp ~/jetson_tc358743/* ./ -r . \u2514\u2500\u2500 jetson_tc358743-main \u251c\u2500\u2500 hardware \u2502 \u2514\u2500\u2500 nvidia \u2502 \u2514\u2500\u2500 platform \u2502 \u2514\u2500\u2500 t210 \u2502 \u251c\u2500\u2500 batuu \u2502 \u2502 \u2514\u2500\u2500 kernel-dts \u2502 \u2502 \u2514\u2500\u2500 tegra210-p3448-0003-p3542-0000.dts \u2502 \u2514\u2500\u2500 porg \u2502 \u2514\u2500\u2500 kernel-dts \u2502 \u251c\u2500\u2500 Makefile \u2502 \u251c\u2500\u2500 porg-platforms \u2502 \u2502 \u251c\u2500\u2500 tegra210-dual-tc358743.dtsi \u2502 \u2502 \u251c\u2500\u2500 tegra210-porg-dual-tc358743.dtsi \u2502 \u2502 \u251c\u2500\u2500 tegra210-porg-tc358743.dtsi \u2502 \u2502 \u2514\u2500\u2500 tegra210-tc358743.dtsi \u2502 \u251c\u2500\u2500 tegra210-p3448-0000-p3449-0000-b00.dts \u2502 \u251c\u2500\u2500 tegra210-p3448-all-p3449-0000-camera-tc358743-dual.dts \u2502 \u2514\u2500\u2500 tegra210-p3448-common-tc358743.dts \u251c\u2500\u2500 kernel \u2502 \u2514\u2500\u2500 kernel-4.9 \u2502 \u251c\u2500\u2500 drivers \u2502 \u2502 \u2514\u2500\u2500 media \u2502 \u2502 \u2514\u2500\u2500 i2c \u2502 \u2502 \u251c\u2500\u2500 tc358743.c \u2502 \u2502 \u2514\u2500\u2500 tc358743_regs.h \u2502 \u2514\u2500\u2500 include \u2502 \u2514\u2500\u2500 media \u2502 \u2514\u2500\u2500 i2c \u2502 \u2514\u2500\u2500 tc358743.h \u2514\u2500\u2500 README.md \u4ea4\u53c9\u7f16\u8bd1\u94fe\u4e0b\u8f7d,\u540e\u9762make\u65f6\uff0c\u4f60\u9700\u8981\u6307\u5b9a\u7f16\u8bd1\u94fe wget http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz \u8fdb\u5165\u5230kernel/kernel-4.9/\uff0c\u5148\u914d\u7f6e\u518d\u7f16\u8bd1\uff0c make ARCH=arm64 tegra_defconfig menuconfig Device Drivers > Multimedia Support > I2C Encoders, decoders, sensors and other helper chips Toshiba TC358743 decoder should be * (press y or space on the option) grep -i tc358743 .config #checking if its really enabled make ARCH=arm64 CROSS_COMPILE=/root/work/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- -j4 \u5c06\u7f16\u8bd1\u51fa\u6765\u7684Image\u548cdtb\u6587\u4ef6\u5206\u522b\u62f7\u8d1d\u5230nano\u7684\u7cfb\u7edf\u7684\u4e0b\u9762\u8def\u5f84\u4e0b,\u82e5\u4f60\u7684\u8f7d\u677f\u4e0d\u662fB01\uff0c\u9700\u8981\u66f4\u6362\u5bf9\u5e94\u7684dtb\u6587\u4ef6\uff0cdtb\u6587\u4ef6\u4e0e\u4f60\u7684\u677f\u5b50\u578b\u53f7\u5bf9\u5e94\u5173\u7cfb\uff0c\u53ef\u4ee5\u67e5\u627e wiki kernel/kernel-4.9/arch/arm64/boot/Image ==> /boot/Image kernel/kernel-4.9/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-b00.dtb ==> /boot/veyecam/ #\u5176\u4e2d\u4f60\u7684nano\u8def\u5f84\u5982\u679c\u4e0d\u5b58\u5728veyecam\u6587\u4ef6\u5939\uff0c\u5148\u521b\u5efa sudo mkdir /boot/veyecam/ sudo cp / /boot/veyecam/ -f \u5148\u5907\u4efd extlinux.conf \u6587\u4ef6\uff0c\u7136\u540e\u7f16\u8f91/boot/extlinux/extlinux.conf\u6587\u4ef6\uff0c\u5728\u8be5\u6587\u4ef6\u4e0b\u589e\u52a0\uff1a FDT /boot/veyecam/ \u6ce8\u610f \u4e3a\u4f60\u7248\u672c\u7f16\u8bd1\u51fa\u6765\u7684dtb\u5b9e\u9645\u6587\u4ef6\u540d\uff0c \u91cd\u542f\u540e\u751f\u6548","title":"\u5728jstson nano\u4e0a\u4f7f\u7528C790"},{"location":"make-image/","text":"Make your owner image \u5f53\u4f60\u5bf9\u955c\u50cf\u8fdb\u884c\u4e86\u4fee\u6539\uff0c\u60f3\u5236\u4f5c\u81ea\u5df1\u7684\u955c\u50cf\u65f6\uff0c\u53ef\u4ee5\u53c2\u8003\u4e0b\u9762\u5728linux\u4e0b\u7684\u65b9\u6cd5\uff0c\u5236\u4f5c\u4e00\u4e2a\u6700\u5c0f\u955c\u50cf\u3002 \u9996\u5148\u4f7f\u7528gparted\u8f6f\u4ef6\uff0c\u6253\u5f00\u6240\u8981\u5236\u4f5c\u7684\u955c\u50cf\u7684sd\u5361\u3002\u5c06\u672a\u4f7f\u7528\u7684\u7a7a\u95f4\u901a\u8fc7gparted\u8f6f\u4ef6\u5c06\u5176\u5206\u5272\u51fa\u6765\uff0c\u5e76\u5c06\u5176\u8bbe\u7f6e\u4e3a\u672a\u5206\u914d\u3002\u8fd9\u6837\u5236\u4f5c\u955c\u50cf\u65f6\uff0c\u8fd9\u90e8\u5206\u65e0\u4efb\u4f55\u6709\u6548\u5185\u5bb9\u7684\u7a7a\u95f4\u5c31\u4e0d\u4f1a\u88ab\u5236\u4f5c\u4e86\u3002 \u7136\u540e\u4f7f\u7528\u9996\u5148\u4f7f\u7528fdisk\u547d\u4ee4\u67e5\u770b\u6709\u6548\u7a7a\u95f4\u7684\u5927\u5c0f\uff0c\u5982\u4e0b\u56fe,\u537310151935\u3002 \u7136\u540e\u4f7f\u7528dd\u547d\u4ee4\u5f80\u4e00\u4e2a\u7a7a\u7684img\u6587\u4ef6\u91cc\u5199\u5165\u5373\u53ef,\u5176\u4e2dcount\u7684\u5927\u5c0f\u6bd4fdisk\u770b\u5230\u7684\u5377\u5c3e\u5927\u5c0f\u5927\u4e8e1\u5373\u53ef\u3002 touch blikvm-armbian-v4-20230623.img sudo dd if=/dev/sdb of=./blikvm-armbian-v4-20230623.img bs=512 count=10151936 \u7b49\u5f85dd\u547d\u4ee4\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002","title":"\u5236\u4f5c\u955c\u50cf"},{"location":"make-image/#make-your-owner-image","text":"\u5f53\u4f60\u5bf9\u955c\u50cf\u8fdb\u884c\u4e86\u4fee\u6539\uff0c\u60f3\u5236\u4f5c\u81ea\u5df1\u7684\u955c\u50cf\u65f6\uff0c\u53ef\u4ee5\u53c2\u8003\u4e0b\u9762\u5728linux\u4e0b\u7684\u65b9\u6cd5\uff0c\u5236\u4f5c\u4e00\u4e2a\u6700\u5c0f\u955c\u50cf\u3002 \u9996\u5148\u4f7f\u7528gparted\u8f6f\u4ef6\uff0c\u6253\u5f00\u6240\u8981\u5236\u4f5c\u7684\u955c\u50cf\u7684sd\u5361\u3002\u5c06\u672a\u4f7f\u7528\u7684\u7a7a\u95f4\u901a\u8fc7gparted\u8f6f\u4ef6\u5c06\u5176\u5206\u5272\u51fa\u6765\uff0c\u5e76\u5c06\u5176\u8bbe\u7f6e\u4e3a\u672a\u5206\u914d\u3002\u8fd9\u6837\u5236\u4f5c\u955c\u50cf\u65f6\uff0c\u8fd9\u90e8\u5206\u65e0\u4efb\u4f55\u6709\u6548\u5185\u5bb9\u7684\u7a7a\u95f4\u5c31\u4e0d\u4f1a\u88ab\u5236\u4f5c\u4e86\u3002 \u7136\u540e\u4f7f\u7528\u9996\u5148\u4f7f\u7528fdisk\u547d\u4ee4\u67e5\u770b\u6709\u6548\u7a7a\u95f4\u7684\u5927\u5c0f\uff0c\u5982\u4e0b\u56fe,\u537310151935\u3002 \u7136\u540e\u4f7f\u7528dd\u547d\u4ee4\u5f80\u4e00\u4e2a\u7a7a\u7684img\u6587\u4ef6\u91cc\u5199\u5165\u5373\u53ef,\u5176\u4e2dcount\u7684\u5927\u5c0f\u6bd4fdisk\u770b\u5230\u7684\u5377\u5c3e\u5927\u5c0f\u5927\u4e8e1\u5373\u53ef\u3002 touch blikvm-armbian-v4-20230623.img sudo dd if=/dev/sdb of=./blikvm-armbian-v4-20230623.img bs=512 count=10151936 \u7b49\u5f85dd\u547d\u4ee4\u6267\u884c\u5b8c\u6210\u5373\u53ef\u3002","title":"Make your owner image"},{"location":"modify_pikvm_image/","text":"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u9700\u8981\u505a\u4ee5\u4e0b\u4fee\u6539\u6765\u9002\u914dBLIKVM\u786c\u4ef6 \u56e0\u4e3ablikvm\u786c\u4ef6\u5b9e\u73b0\u65b9\u6848\u548cPiKVM\u786c\u4ef6\u5b9e\u73b0\u65b9\u6848\u5e76\u4e0d\u5b8c\u5168\u76f8\u540c\uff0c\u56e0\u6b64\u9488\u5bf9PiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u60a8\u9700\u8981\u901a\u8fc7\u4e0b\u5217\u914d\u7f6e\u4fee\u6539\u4e00\u4e9b\u9519\u8bef\u3002\u5f53\u7136\u60a8\u53ef\u4ee5\u4f7f\u7528\u6211\u4eec\u5df2\u7ecf\u505a\u597d\u914d\u7f6e\u7684 \u955c\u50cf \u98ce\u6247 \u56e0BLIKVM\u786c\u4ef6\u4e0ePiKVM\u4f7f\u7528\u98ce\u6247\u4e0d\u540c\uff0c\u9996\u5148\u9700\u66ff\u6362\u63a7\u5236\u98ce\u6247\u811a\u672c\uff0c\u4e0b\u5217\u9ed8\u8ba4\u5f00\u59cb\u98ce\u6247\u6e29\u5ea6\u4e3a40\u6444\u6c0f\u5ea6 su - rw git clone https://github.com/ThomasVon2021/blikvm.git cd blikvm/package/kvmd-fan bash install-kvmd-fan.sh ro \u7f16\u8f91/etc/kvmd/override.yaml\u6587\u4ef6\uff0c\u6dfb\u52a0\u4e0b\u5217\u5185\u5bb9\u5df2\u53bb\u9664Web UI\u5173\u4e8e\u98ce\u6247\u7684\u9519\u8bef\u8b66\u544a\u3002 kvmd: info: fan: unix: '' 2. EDID\u6587\u4ef6\u66f4\u6362 EDID\u6587\u4ef6\u4f5c\u7528\u4e3a\uff0c\u8bbe\u7f6e\u88ab\u63a7\u8ba1\u7b97\u673a\u6309\u7167\u671f\u671b\u7684\u5206\u8fa8\u7387\u8fdb\u884c\u8f93\u5165\uff0c\u7531\u4e8ePiKVM\u4e0d\u540c\u65f6\u671f\u7684\u955c\u50cfEDID\u6587\u4ef6\u4e0d\u4e00\u5b9a\u662f\u6ee1\u8db31080P60Hz, \u5f53\u4f60\u4f7f\u7528\u7684\u786c\u4ef6\u4e3aCM4\u7248\u672c\uff0c\u53d1\u73b0\u88ab\u63a7\u7535\u8111\u9ed8\u8ba4\u8f93\u51fa\u4e0d\u662f1080P60Hz\uff0c\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539/etc/kvmd/tc358743-edid.hex\u4e3a\u4e0b\u5217\u5185\u5bb9\uff1a 00FFFFFFFFFFFF005262888800888888 1C150103800000780AEE91A3544C9926 0F505400000001010101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0054 6F73686962612D4832430A20000000FD 003B3D0F2E0F1E0A202020202020014F 020323454F041303021211012021A23C 3D3E1F102309070766030C00300080E3 007F8C8C0AD08A20E02D10103E9600C4 8E210000188C0AD08A20E02D10103E96 00138E210000188C0AA01451F0160026 7C4300138E2100009800000000000000 00000000000000000000000000000000 00000000000000000000000000000087 \u786e\u8ba4 /boot/config.txt \u6dfb\u52a0\u4e86\u4e0b\u5217\u914d\u7f6e\uff0c\u4ece\u800c\u652f\u63011080p60hz\u89c6\u9891\u8f93\u5165\u548c\u58f0\u97f3\u8f93\u5165\uff0c\u76f8\u5173\u914d\u7f6e\u53c2\u8003\u5982\u4e0b\uff1a # Video and audio dtoverlay=tc358743,4lane=1 dtoverlay=tc358743-audio \u5982\u679c\u4f60\u4f7f\u7528webrtc\u6ca1\u6709\u58f0\u97f3\uff0c\u5c1d\u8bd5\u5728/etc/kvmd/janus/janus.plugin.ustreamer.jcfg\u6b64\u6587\u4ef6\u4e2d\u6dfb\u52a0\u4e0b\u5217\u5185\u5bb9 audio: { device = \"hw:0,0\" tc358743 = \"/dev/kvmd-video\" } 3. OLED\u542f\u7528 PiKVM\u955c\u50cf\uff0c\u6309\u7167\u4e0b\u9762\u7684\u65b9\u6cd5\u542f\u7528OLED\u3002 \u5982\u679c\u60a8\u4f7f\u7528PiKVM\u955c\u50cf\uff0c\u8bf7\u767b\u5f55\u5230PiKVM\u5e76\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a # rw # systemctl enable --now kvmd-oled //\u542f\u7528OLED # ro \u5982\u679cOLED\u4ecd\u7136\u65e0\u6cd5\u5de5\u4f5c\uff0c\u60a8\u9700\u8981\u68c0\u67e5\"/boot/config.txt\"\u6587\u4ef6\u4e2d\u662f\u5426\u6709\"dtparam=i2c_arm=on\"\uff0c\u4ee5\u53ca\"/etc/modules-load.d/i2c.conf\"\u6587\u4ef6\u4e2d\u662f\u5426\u6709\"i2c-dev\"\u3002\u5982\u679c\u6ca1\u6709\uff0c\u8bf7\u521b\u5efa\u5e76\u6dfb\u52a0\u5b83\u4eec\u3002 \u5982\u679c\u5728\u4e0a\u8ff0\u914d\u7f6e\u4e4b\u540e\u4ecd\u7136\u65e0\u6cd5\u5de5\u4f5c\uff0c\u8bf7\u523b\u5f55 blikvm\u63d0\u4f9b\u7684\u6d4b\u8bd5\u955c\u50cf \u6765\u68c0\u67e5OLED\u786c\u4ef6\u662f\u5426\u635f\u574f\u3002 4. \u5173\u4e8e v4mini \u955c\u50cf\u7684\u914d\u7f6e \u5982\u679c\u4f60\u60f3\u5728 blikvm v1 \u548c v2 \u4e0a\u4f7f\u7528 PiKVM v4mini \u955c\u50cf\uff0c\u7531\u4e8e v4mini \u955c\u50cf\u4f7f\u7528\u4e86\u4e0d\u540c\u7684 GPIO \u5f15\u811a\u6765\u63a7\u5236 ATX\uff0c\u56e0\u6b64\u4f60\u9700\u8981\u8fdb\u884c\u4ee5\u4e0b\u8986\u76d6\u914d\u7f6e\u3002\u5982\u679c\u4f60\u5e0c\u671b\u5728 blikvm v1 \u6216 v2 \u7248\u672c\u4e0a\u8fd0\u884c v4mini \u955c\u50cf\u5e76\u80fd\u591f\u4f7f\u7528 ATX \u63a7\u5236\uff0c\u4f60\u5fc5\u987b\u8fdb\u884c\u8fd9\u4e9b\u4fee\u6539\uff1b\u5982\u679c\u4e0d\u8fdb\u884c\u66f4\u6539\uff0cATX \u63a7\u5236\u5c06\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\uff08LED \u5f15\u811a\u4e0d\u540c\uff09\u3002 \u7f16\u8f91 /etc/kvmd/override.yaml \u6587\u4ef6\uff0c\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a kvmd: ### \u7981\u7528\u98ce\u6247\u63d2\u5ea7\u68c0\u67e5 ### info: fan: unix: '' atx: hdd_led_pin: 22 power_led_pin: 24 power_switch_pin: 23 reset_switch_pin: 27 type: gpio gpio: scheme: __v3_usb_breaker__: pin: 5 mode: output initial: false pulse: delay: 0","title":"\u914d\u7f6ePiKVM OS"},{"location":"modify_pikvm_image/#pikvmblikvm","text":"\u56e0\u4e3ablikvm\u786c\u4ef6\u5b9e\u73b0\u65b9\u6848\u548cPiKVM\u786c\u4ef6\u5b9e\u73b0\u65b9\u6848\u5e76\u4e0d\u5b8c\u5168\u76f8\u540c\uff0c\u56e0\u6b64\u9488\u5bf9PiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u60a8\u9700\u8981\u901a\u8fc7\u4e0b\u5217\u914d\u7f6e\u4fee\u6539\u4e00\u4e9b\u9519\u8bef\u3002\u5f53\u7136\u60a8\u53ef\u4ee5\u4f7f\u7528\u6211\u4eec\u5df2\u7ecf\u505a\u597d\u914d\u7f6e\u7684 \u955c\u50cf","title":"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fPiKVM\u5b98\u65b9\u955c\u50cf\uff0c\u9700\u8981\u505a\u4ee5\u4e0b\u4fee\u6539\u6765\u9002\u914dBLIKVM\u786c\u4ef6"},{"location":"modify_pikvm_image/#_1","text":"\u56e0BLIKVM\u786c\u4ef6\u4e0ePiKVM\u4f7f\u7528\u98ce\u6247\u4e0d\u540c\uff0c\u9996\u5148\u9700\u66ff\u6362\u63a7\u5236\u98ce\u6247\u811a\u672c\uff0c\u4e0b\u5217\u9ed8\u8ba4\u5f00\u59cb\u98ce\u6247\u6e29\u5ea6\u4e3a40\u6444\u6c0f\u5ea6 su - rw git clone https://github.com/ThomasVon2021/blikvm.git cd blikvm/package/kvmd-fan bash install-kvmd-fan.sh ro \u7f16\u8f91/etc/kvmd/override.yaml\u6587\u4ef6\uff0c\u6dfb\u52a0\u4e0b\u5217\u5185\u5bb9\u5df2\u53bb\u9664Web UI\u5173\u4e8e\u98ce\u6247\u7684\u9519\u8bef\u8b66\u544a\u3002 kvmd: info: fan: unix: ''","title":"\u98ce\u6247"},{"location":"modify_pikvm_image/#2-edid","text":"EDID\u6587\u4ef6\u4f5c\u7528\u4e3a\uff0c\u8bbe\u7f6e\u88ab\u63a7\u8ba1\u7b97\u673a\u6309\u7167\u671f\u671b\u7684\u5206\u8fa8\u7387\u8fdb\u884c\u8f93\u5165\uff0c\u7531\u4e8ePiKVM\u4e0d\u540c\u65f6\u671f\u7684\u955c\u50cfEDID\u6587\u4ef6\u4e0d\u4e00\u5b9a\u662f\u6ee1\u8db31080P60Hz, \u5f53\u4f60\u4f7f\u7528\u7684\u786c\u4ef6\u4e3aCM4\u7248\u672c\uff0c\u53d1\u73b0\u88ab\u63a7\u7535\u8111\u9ed8\u8ba4\u8f93\u51fa\u4e0d\u662f1080P60Hz\uff0c\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539/etc/kvmd/tc358743-edid.hex\u4e3a\u4e0b\u5217\u5185\u5bb9\uff1a 00FFFFFFFFFFFF005262888800888888 1C150103800000780AEE91A3544C9926 0F505400000001010101010101010101 010101010101011D007251D01E206E28 5500C48E2100001E8C0AD08A20E02D10 103E9600138E2100001E000000FC0054 6F73686962612D4832430A20000000FD 003B3D0F2E0F1E0A202020202020014F 020323454F041303021211012021A23C 3D3E1F102309070766030C00300080E3 007F8C8C0AD08A20E02D10103E9600C4 8E210000188C0AD08A20E02D10103E96 00138E210000188C0AA01451F0160026 7C4300138E2100009800000000000000 00000000000000000000000000000000 00000000000000000000000000000087 \u786e\u8ba4 /boot/config.txt \u6dfb\u52a0\u4e86\u4e0b\u5217\u914d\u7f6e\uff0c\u4ece\u800c\u652f\u63011080p60hz\u89c6\u9891\u8f93\u5165\u548c\u58f0\u97f3\u8f93\u5165\uff0c\u76f8\u5173\u914d\u7f6e\u53c2\u8003\u5982\u4e0b\uff1a # Video and audio dtoverlay=tc358743,4lane=1 dtoverlay=tc358743-audio \u5982\u679c\u4f60\u4f7f\u7528webrtc\u6ca1\u6709\u58f0\u97f3\uff0c\u5c1d\u8bd5\u5728/etc/kvmd/janus/janus.plugin.ustreamer.jcfg\u6b64\u6587\u4ef6\u4e2d\u6dfb\u52a0\u4e0b\u5217\u5185\u5bb9 audio: { device = \"hw:0,0\" tc358743 = \"/dev/kvmd-video\" }","title":"2. EDID\u6587\u4ef6\u66f4\u6362"},{"location":"modify_pikvm_image/#3-oled","text":"PiKVM\u955c\u50cf\uff0c\u6309\u7167\u4e0b\u9762\u7684\u65b9\u6cd5\u542f\u7528OLED\u3002 \u5982\u679c\u60a8\u4f7f\u7528PiKVM\u955c\u50cf\uff0c\u8bf7\u767b\u5f55\u5230PiKVM\u5e76\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a # rw # systemctl enable --now kvmd-oled //\u542f\u7528OLED # ro \u5982\u679cOLED\u4ecd\u7136\u65e0\u6cd5\u5de5\u4f5c\uff0c\u60a8\u9700\u8981\u68c0\u67e5\"/boot/config.txt\"\u6587\u4ef6\u4e2d\u662f\u5426\u6709\"dtparam=i2c_arm=on\"\uff0c\u4ee5\u53ca\"/etc/modules-load.d/i2c.conf\"\u6587\u4ef6\u4e2d\u662f\u5426\u6709\"i2c-dev\"\u3002\u5982\u679c\u6ca1\u6709\uff0c\u8bf7\u521b\u5efa\u5e76\u6dfb\u52a0\u5b83\u4eec\u3002 \u5982\u679c\u5728\u4e0a\u8ff0\u914d\u7f6e\u4e4b\u540e\u4ecd\u7136\u65e0\u6cd5\u5de5\u4f5c\uff0c\u8bf7\u523b\u5f55 blikvm\u63d0\u4f9b\u7684\u6d4b\u8bd5\u955c\u50cf \u6765\u68c0\u67e5OLED\u786c\u4ef6\u662f\u5426\u635f\u574f\u3002","title":"3. OLED\u542f\u7528"},{"location":"modify_pikvm_image/#4-v4mini","text":"\u5982\u679c\u4f60\u60f3\u5728 blikvm v1 \u548c v2 \u4e0a\u4f7f\u7528 PiKVM v4mini \u955c\u50cf\uff0c\u7531\u4e8e v4mini \u955c\u50cf\u4f7f\u7528\u4e86\u4e0d\u540c\u7684 GPIO \u5f15\u811a\u6765\u63a7\u5236 ATX\uff0c\u56e0\u6b64\u4f60\u9700\u8981\u8fdb\u884c\u4ee5\u4e0b\u8986\u76d6\u914d\u7f6e\u3002\u5982\u679c\u4f60\u5e0c\u671b\u5728 blikvm v1 \u6216 v2 \u7248\u672c\u4e0a\u8fd0\u884c v4mini \u955c\u50cf\u5e76\u80fd\u591f\u4f7f\u7528 ATX \u63a7\u5236\uff0c\u4f60\u5fc5\u987b\u8fdb\u884c\u8fd9\u4e9b\u4fee\u6539\uff1b\u5982\u679c\u4e0d\u8fdb\u884c\u66f4\u6539\uff0cATX \u63a7\u5236\u5c06\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\uff08LED \u5f15\u811a\u4e0d\u540c\uff09\u3002 \u7f16\u8f91 /etc/kvmd/override.yaml \u6587\u4ef6\uff0c\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a kvmd: ### \u7981\u7528\u98ce\u6247\u63d2\u5ea7\u68c0\u67e5 ### info: fan: unix: '' atx: hdd_led_pin: 22 power_led_pin: 24 power_switch_pin: 23 reset_switch_pin: 27 type: gpio gpio: scheme: __v3_usb_breaker__: pin: 5 mode: output initial: false pulse: delay: 0","title":"4.\u5173\u4e8e v4mini \u955c\u50cf\u7684\u914d\u7f6e"},{"location":"msd/","text":"U\u76d8\u8bbe\u5907\u6a21\u62df \u91cd\u88c5\u7cfb\u7edf\u89c6\u9891 BliKVM\u652f\u6301U\u76d8\u8bbe\u5907\u6a21\u62df\uff0c\u901a\u8fc7\u6b64\u529f\u80fd\u53ef\u4ee5\u8fdb\u884c\u8fdc\u7a0b\u6302\u8f7d\u955c\u50cf\uff0c\u8fdb\u884c\u91cd\u88c5\u7cfb\u7edf\u3002 Web UI msd\u865a\u62dfU\u76d8\u5165\u53e3\u4e3a: \u4f7f\u7528web\u4e0a\u4f20\u955c\u50cf\u548c\u5236\u4f5c\u542f\u52a8\u76d8\uff0c\u5747\u662f\u540c\u6b65\u7ebf\u7a0b\uff0c\u4e0a\u4f20\u955c\u50cf\u9000\u51faMSD\u7684UI\u754c\u9762\u540e\uff0c\u4e0b\u6b21\u518d\u9009\u62e9\u76f8\u540c\u955c\u50cf\u53ef\u65ad\u70b9\u7eed\u4f20\u3002\u5236\u4f5c\u542f\u52a8\u76d8\u63a8\u51fa\u540e\u4e0d\u53ef\u65ad\u70b9\u91cd\u505a\uff0c\u9700\u91cd\u65b0\u5f00\u59cb\u3002 \u4e0a\u4f20\u955c\u50cf\u9ed8\u8ba4\u8def\u5f84\u4e3a/mnt/upload,\u82e5\u51fa\u73b0\u4e0a\u4f20\u5931\u8d25\uff0c\u5220\u9664\u4e3a\u6210\u529f\u7684\u7f13\u5b58\u6587\u4ef6\uff0c\u53ef\u624b\u52a8\u5220\u9664\u6b64\u6587\u4ef6\u5939\uff1b \u56e0\u90e8\u5206\u955c\u50cf\u6587\u4ef6\u5927\u5c0f\u8f83\u5927\uff0c\u91c7\u53d6\u4e0a\u4f20\u955c\u50cf\u65b9\u6848\u4e3a\u5207\u7247\u4e0a\u4f20\u548c\u5408\u5e76\uff0c\u5408\u5e76\u8fc7\u7a0b\u4e0d\u80fd\u65ad\u70b9\u91cd\u6765\uff0c\u5207\u8bb0\u7b49\u5f85\u5408\u5e76\u5b8c\u6210\u540e(\u65f6\u95f4\u8f83\u957f)\uff0c\u518d\u8fdb\u5165\u4e0b\u4e00\u6b65\uff1b \u5236\u4f5c\u542f\u52a8\u76d8\u4e5f\u5f88\u4e3a\u4e24\u4e2a\u6b65\u9aa4\uff0c\u5236\u4f5c\u865a\u62dfU\u76d8\uff0c\u5c06\u9009\u62e9\u7684iso\u955c\u50cf\u62f7\u8d1d\u5230\u5236\u4f5c\u597d\u7684\u865a\u62dfU\u76d8\u91cc\uff0c\u4e24\u4e2a\u6b65\u9aa4\u5747\u6709\u8fdb\u5ea6\uff0c\u8bf7\u7b49\u4e24\u8005\u8fdb\u5ea6\u5747100%\u540e\u518d\u70b9\u51fb\u4e0b\u4e00\u6b65\u6309\u94ae\u3002 \u624b\u52a8 (\u4e0d\u4f7f\u7528Web UI) 1. \u786e\u8ba4\u7cfb\u7edf\u5b58\u5728\u4e0b\u97624\u4e2a\u8def\u5f84\u3002\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662f\u6700\u65b0\u7684BliKVM\u955c\u50cf\uff0c\u65e0\u9700\u8fdb\u884c\u68c0\u67e5\u3002\u5176\u4e2d/opt/bin/msd/user\u8def\u5f84\u7528\u4e8e\u5b58\u653e\u7cfb\u7edf\u955c\u50cf\u3002 /usr/bin/blikvm/ventoy-1.0.88 /usr/bin/blikvm/kvmd-msd.sh /mnt/msd/user /mnt/msd/ventoy 2. \u901a\u8fc7SSH\u767b\u9646\u5230BliKVM\u7ec8\u7aef\uff0c\u7528\u6237\u540d\u548c\u5bc6\u7801\u5747\u4e3ablikvm\uff0c\u901a\u8fc7rw\u547d\u4ee4\uff0c\u4f7f\u53ea\u8bfb\u7cfb\u7edf\u53d8\u4e3a\u53ef\u5199\u7cfb\u7edf\u3002 sudo rw 3. \u5728\u4f60\u63a7\u5236\u7aef\u7684\u7535\u8111\uff0c\u53ef\u4ee5\u5728\u7ec8\u7aef\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06iso\u955c\u50cf\u6587\u4ef6\u62f7\u8d1d\u5230BliKVM\u955c\u50cf\u7684\u6307\u5b9a\u8def\u5f84\u4e0b\u3002 scp ***.iso blikvm@xxx.xxx.xxx.xxx:/mnt/msd/user/ \u5f53\u7136\uff0c\u4f60\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5176\u4ed6\u4efb\u4f55\u4f60\u719f\u6089\u7684\u65b9\u5f0f\u5c06iso\u955c\u50cf\u6587\u4ef6\u62f7\u8d1d\u5230\u6307\u5b9a\u8def\u5f84\u4e0b\u3002 4. \u901a\u8fc7\u4f7f\u7528\u4e0b\u5217\u4e24\u79cd\u547d\u4ee4\u4e2d\u7684\u4e00\u4e2a\uff0c\u5c06\u955c\u50cf\u62f7\u8d1d\u5230\u6a21\u62df\u7684U\u76d8\u4e2d\u3002U\u76d8\u9ed8\u8ba4\u5927\u5c0f\u8bbe\u7f6e\u7684\u4e3a5GB\uff0c\u5982\u679c\u4f60\u9700\u8981\u66f4\u5927\u7684\u7a7a\u95f4\uff0c\u4f60\u9700\u8981\u4fee\u6539kvmd-msd.sh\u811a\u672c\u3002 \u5982\u679c /mnt/msd/user \u8def\u5f84\u4e0b\u53ea\u6709\u4e00\u4e2a\u955c\u50cf\u6587\u4ef6, \u4f60\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6b64\u547d\u4ee4. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make \u5982\u679c /mnt/msd/user \u8def\u5f84\u4e0b\u6709\u4e0d\u6b62\u4e00\u4e2a\u955c\u50cf\u6587\u4ef6, \u4f60\u53ef\u4ee5\u4f7f\u7528\u4e0b\u5217\u6587\u4ef6\u6307\u5b9a. xxx.iso \u8868\u793a\u955c\u50cf\u7684\u540d\u79f0.\u5176\u4e2d-s\u540e\u8ddf\u7684\u6570\u5b57\u5373\u662f\u5236\u4f5c\u7684U\u76d8\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u662fG\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u9700\u6c42\u4fee\u6539\u3002-n\u540e\u8ddf\u7684\u5b57\u7b26\u4e32\u662fu\u76d8\u540d\u79f0\u3002 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 5 -n ventoy -f xxx.iso cp\u8fc7\u7a0b\u975e\u5e38\u6162\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u3002 5. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06\u6a21\u62df\u7684U\u76d8\u8fde\u63a5\u5230\u5230\u4f60\u7684\u88ab\u63a7\u8bbe\u5907\u4e0a sudo bash /usr/bin/blikvm/kvmd-msd.sh -c conn 6. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06\u6a21\u62df\u7684U\u76d8\u4ece\u4f60\u7684\u88ab\u63a7\u8bbe\u5907\u4e0a\u5f39\u51fa sudo bash /usr/bin/blikvm/kvmd-msd.sh -c disconn 7. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u6e05\u9664\u6389\u6a21\u62df\u7684U\u76d8\uff0c\u5c06\u4f1a\u91ca\u653e\u6389\u5bf9\u5e94\u7684\u7a7a\u95f4 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c clean 8. \u4e00\u5207\u6b63\u786e\u7684\u8bdd\uff0c\u6b64\u65f6\u4f60\u53ef\u4ee5\u5728\u4e00\u4e2aPC\u7cfb\u7edf\u91cc\u770b\u5230\u4f60\u6a21\u62df\u51fa\u7684U\u76d8\u3002\u901a\u8fc7WEB\u91cd\u542f\u7684\u4f60\u7684PC\uff0c\u7136\u540e\u4f7f\u7528\u5feb\u6377\u952e\uff08\u5f88\u591a\u7535\u8111\u662f\u6309F2\uff09\u8fdb\u5165BIOS\uff0c\u4fee\u6539boot\u542f\u52a8\u4f18\u5148\u7ea7\uff0c\u5c06\u6a21\u62df\u51fa\u7684U\u76d8\u8bbe\u5907\u4f18\u5148\u7ea7\u8bbe\u7f6e\u5728\u6700\u524d\u9762\u3002 9. \u6839\u636ebios\u7cfb\u7edf\u63d0\u793a\uff0c\u4fdd\u5b58\u91cd\u542f\uff0c\u5373\u53ef\u8fdb\u884cventoy\u7684\u5f15\u5bfc\u754c\u9762\u8fdb\u884c\u91cd\u88c5\u7cfb\u7edf\u3002 \u901a\u7528U\u76d8 \u4f20\u9012\u901a\u7528\u6587\u4ef6\uff0c\u6ce8\u610f\u6587\u4ef6\u540d\u9700\u547d\u540d\u4e3a\u82f1\u6587\uff0c\u4e2d\u6587\u4f1a\u4e71\u7801\u3002 conn\uff0c disconn, clean\u547d\u4ee4\u9488\u5bf9\u901a\u7528U\u76d8\u4f9d\u65e7\u6709\u6548\u3002 \u5236\u4f5c\u901a\u7528U\u76d8 -s\u540e\u8ddf\u7684\u662f\u5236\u4f5c\u901a\u7528U\u76d8\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u4e3aGb\uff0c\u5bb9\u91cf\u8d8a\u5927\uff0c\u5236\u4f5c\u65f6\u95f4\u8d8a\u957f\uff0c\u8bf7\u7ed3\u5408\u5b9e\u9645\u60c5\u51b5\u8bbe\u7f6e\u3002 -t \u5fc5\u987b\u4e3aother sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 4 -t other \u6587\u4ef6\u4ece\u7528\u6237\u7535\u8111==\u300bKVM==\u300b\u88ab\u63a7\u7535\u8111 \u9996\u5148\u4f60\u9700\u8981\u5c06\u6587\u4ef6\u4ece\u7528\u6237\u63a7\u5236\u7535\u8111\u53d1\u9001\u5230kvm scp xxx blikvm@xxxx:/mnt/msd/user/ \u5c06\u6587\u4ef6\u540c\u6b65\u5230\u88ab\u63a7\u7535\u8111\uff0c\u5e76\u8fde\u63a5\u4e0a\u7535\u8111 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c forward \u540e\u9762\u6709\u9700\u8981\u65b0\u7684\u5185\u5bb9\u4ece\u7528\u6237\u7535\u8111\uff0c\u4f20\u9012\u5230\u88ab\u63a7\u7535\u8111\uff0c\u91cd\u590d\u7b2c1\u548c\u7b2c2\u6b65\u5373\u53ef \u6587\u4ef6\u4ece\u88ab\u63a7\u7535\u8111==\u300bKVM==\u7528\u6237\u7535\u8111 \u9996\u5148\u5728\u88ab\u63a7\u7535\u8111\u4e0a\u5c06\u6587\u4ef6\u62f7\u8d1d\u5230\u6a21\u62df\u7684\u865a\u62dfU\u76d8\u91cc\uff0c\u7136\u540e\u6267\u884c\u4e0b\u9762\u7684\u6307\u4ee4\uff0c\u5c06\u6587\u4ef6\u62f7\u8d1d\u5230kvm\u7684/mnt/msd/user/\u76ee\u5f55\u4e0b sudo bash /usr/bin/blikvm/kvmd-msd.sh -c rever \u5c06\u6587\u4ef6\u4ecekvm\u62f7\u8d1d\u5230\u7528\u6237\u7535\u8111 scp blikvm@xxxx:/mnt/msd/user/* .","title":"U\u76d8\u9a71\u52a8"},{"location":"msd/#u","text":"\u91cd\u88c5\u7cfb\u7edf\u89c6\u9891 BliKVM\u652f\u6301U\u76d8\u8bbe\u5907\u6a21\u62df\uff0c\u901a\u8fc7\u6b64\u529f\u80fd\u53ef\u4ee5\u8fdb\u884c\u8fdc\u7a0b\u6302\u8f7d\u955c\u50cf\uff0c\u8fdb\u884c\u91cd\u88c5\u7cfb\u7edf\u3002","title":"U\u76d8\u8bbe\u5907\u6a21\u62df"},{"location":"msd/#web-ui","text":"msd\u865a\u62dfU\u76d8\u5165\u53e3\u4e3a: \u4f7f\u7528web\u4e0a\u4f20\u955c\u50cf\u548c\u5236\u4f5c\u542f\u52a8\u76d8\uff0c\u5747\u662f\u540c\u6b65\u7ebf\u7a0b\uff0c\u4e0a\u4f20\u955c\u50cf\u9000\u51faMSD\u7684UI\u754c\u9762\u540e\uff0c\u4e0b\u6b21\u518d\u9009\u62e9\u76f8\u540c\u955c\u50cf\u53ef\u65ad\u70b9\u7eed\u4f20\u3002\u5236\u4f5c\u542f\u52a8\u76d8\u63a8\u51fa\u540e\u4e0d\u53ef\u65ad\u70b9\u91cd\u505a\uff0c\u9700\u91cd\u65b0\u5f00\u59cb\u3002 \u4e0a\u4f20\u955c\u50cf\u9ed8\u8ba4\u8def\u5f84\u4e3a/mnt/upload,\u82e5\u51fa\u73b0\u4e0a\u4f20\u5931\u8d25\uff0c\u5220\u9664\u4e3a\u6210\u529f\u7684\u7f13\u5b58\u6587\u4ef6\uff0c\u53ef\u624b\u52a8\u5220\u9664\u6b64\u6587\u4ef6\u5939\uff1b \u56e0\u90e8\u5206\u955c\u50cf\u6587\u4ef6\u5927\u5c0f\u8f83\u5927\uff0c\u91c7\u53d6\u4e0a\u4f20\u955c\u50cf\u65b9\u6848\u4e3a\u5207\u7247\u4e0a\u4f20\u548c\u5408\u5e76\uff0c\u5408\u5e76\u8fc7\u7a0b\u4e0d\u80fd\u65ad\u70b9\u91cd\u6765\uff0c\u5207\u8bb0\u7b49\u5f85\u5408\u5e76\u5b8c\u6210\u540e(\u65f6\u95f4\u8f83\u957f)\uff0c\u518d\u8fdb\u5165\u4e0b\u4e00\u6b65\uff1b \u5236\u4f5c\u542f\u52a8\u76d8\u4e5f\u5f88\u4e3a\u4e24\u4e2a\u6b65\u9aa4\uff0c\u5236\u4f5c\u865a\u62dfU\u76d8\uff0c\u5c06\u9009\u62e9\u7684iso\u955c\u50cf\u62f7\u8d1d\u5230\u5236\u4f5c\u597d\u7684\u865a\u62dfU\u76d8\u91cc\uff0c\u4e24\u4e2a\u6b65\u9aa4\u5747\u6709\u8fdb\u5ea6\uff0c\u8bf7\u7b49\u4e24\u8005\u8fdb\u5ea6\u5747100%\u540e\u518d\u70b9\u51fb\u4e0b\u4e00\u6b65\u6309\u94ae\u3002","title":"Web UI"},{"location":"msd/#web-ui_1","text":"1. \u786e\u8ba4\u7cfb\u7edf\u5b58\u5728\u4e0b\u97624\u4e2a\u8def\u5f84\u3002\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662f\u6700\u65b0\u7684BliKVM\u955c\u50cf\uff0c\u65e0\u9700\u8fdb\u884c\u68c0\u67e5\u3002\u5176\u4e2d/opt/bin/msd/user\u8def\u5f84\u7528\u4e8e\u5b58\u653e\u7cfb\u7edf\u955c\u50cf\u3002 /usr/bin/blikvm/ventoy-1.0.88 /usr/bin/blikvm/kvmd-msd.sh /mnt/msd/user /mnt/msd/ventoy 2. \u901a\u8fc7SSH\u767b\u9646\u5230BliKVM\u7ec8\u7aef\uff0c\u7528\u6237\u540d\u548c\u5bc6\u7801\u5747\u4e3ablikvm\uff0c\u901a\u8fc7rw\u547d\u4ee4\uff0c\u4f7f\u53ea\u8bfb\u7cfb\u7edf\u53d8\u4e3a\u53ef\u5199\u7cfb\u7edf\u3002 sudo rw 3. \u5728\u4f60\u63a7\u5236\u7aef\u7684\u7535\u8111\uff0c\u53ef\u4ee5\u5728\u7ec8\u7aef\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06iso\u955c\u50cf\u6587\u4ef6\u62f7\u8d1d\u5230BliKVM\u955c\u50cf\u7684\u6307\u5b9a\u8def\u5f84\u4e0b\u3002 scp ***.iso blikvm@xxx.xxx.xxx.xxx:/mnt/msd/user/ \u5f53\u7136\uff0c\u4f60\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5176\u4ed6\u4efb\u4f55\u4f60\u719f\u6089\u7684\u65b9\u5f0f\u5c06iso\u955c\u50cf\u6587\u4ef6\u62f7\u8d1d\u5230\u6307\u5b9a\u8def\u5f84\u4e0b\u3002 4. \u901a\u8fc7\u4f7f\u7528\u4e0b\u5217\u4e24\u79cd\u547d\u4ee4\u4e2d\u7684\u4e00\u4e2a\uff0c\u5c06\u955c\u50cf\u62f7\u8d1d\u5230\u6a21\u62df\u7684U\u76d8\u4e2d\u3002U\u76d8\u9ed8\u8ba4\u5927\u5c0f\u8bbe\u7f6e\u7684\u4e3a5GB\uff0c\u5982\u679c\u4f60\u9700\u8981\u66f4\u5927\u7684\u7a7a\u95f4\uff0c\u4f60\u9700\u8981\u4fee\u6539kvmd-msd.sh\u811a\u672c\u3002 \u5982\u679c /mnt/msd/user \u8def\u5f84\u4e0b\u53ea\u6709\u4e00\u4e2a\u955c\u50cf\u6587\u4ef6, \u4f60\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6b64\u547d\u4ee4. sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make \u5982\u679c /mnt/msd/user \u8def\u5f84\u4e0b\u6709\u4e0d\u6b62\u4e00\u4e2a\u955c\u50cf\u6587\u4ef6, \u4f60\u53ef\u4ee5\u4f7f\u7528\u4e0b\u5217\u6587\u4ef6\u6307\u5b9a. xxx.iso \u8868\u793a\u955c\u50cf\u7684\u540d\u79f0.\u5176\u4e2d-s\u540e\u8ddf\u7684\u6570\u5b57\u5373\u662f\u5236\u4f5c\u7684U\u76d8\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u662fG\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u9700\u6c42\u4fee\u6539\u3002-n\u540e\u8ddf\u7684\u5b57\u7b26\u4e32\u662fu\u76d8\u540d\u79f0\u3002 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 5 -n ventoy -f xxx.iso cp\u8fc7\u7a0b\u975e\u5e38\u6162\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\u6267\u884c\u5b8c\u6210\u3002 5. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06\u6a21\u62df\u7684U\u76d8\u8fde\u63a5\u5230\u5230\u4f60\u7684\u88ab\u63a7\u8bbe\u5907\u4e0a sudo bash /usr/bin/blikvm/kvmd-msd.sh -c conn 6. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u5c06\u6a21\u62df\u7684U\u76d8\u4ece\u4f60\u7684\u88ab\u63a7\u8bbe\u5907\u4e0a\u5f39\u51fa sudo bash /usr/bin/blikvm/kvmd-msd.sh -c disconn 7. \u8fd0\u884c\u4e0b\u5217\u547d\u4ee4\uff0c\u6e05\u9664\u6389\u6a21\u62df\u7684U\u76d8\uff0c\u5c06\u4f1a\u91ca\u653e\u6389\u5bf9\u5e94\u7684\u7a7a\u95f4 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c clean 8. \u4e00\u5207\u6b63\u786e\u7684\u8bdd\uff0c\u6b64\u65f6\u4f60\u53ef\u4ee5\u5728\u4e00\u4e2aPC\u7cfb\u7edf\u91cc\u770b\u5230\u4f60\u6a21\u62df\u51fa\u7684U\u76d8\u3002\u901a\u8fc7WEB\u91cd\u542f\u7684\u4f60\u7684PC\uff0c\u7136\u540e\u4f7f\u7528\u5feb\u6377\u952e\uff08\u5f88\u591a\u7535\u8111\u662f\u6309F2\uff09\u8fdb\u5165BIOS\uff0c\u4fee\u6539boot\u542f\u52a8\u4f18\u5148\u7ea7\uff0c\u5c06\u6a21\u62df\u51fa\u7684U\u76d8\u8bbe\u5907\u4f18\u5148\u7ea7\u8bbe\u7f6e\u5728\u6700\u524d\u9762\u3002 9. \u6839\u636ebios\u7cfb\u7edf\u63d0\u793a\uff0c\u4fdd\u5b58\u91cd\u542f\uff0c\u5373\u53ef\u8fdb\u884cventoy\u7684\u5f15\u5bfc\u754c\u9762\u8fdb\u884c\u91cd\u88c5\u7cfb\u7edf\u3002","title":"\u624b\u52a8 (\u4e0d\u4f7f\u7528Web UI)"},{"location":"msd/#u_1","text":"\u4f20\u9012\u901a\u7528\u6587\u4ef6\uff0c\u6ce8\u610f\u6587\u4ef6\u540d\u9700\u547d\u540d\u4e3a\u82f1\u6587\uff0c\u4e2d\u6587\u4f1a\u4e71\u7801\u3002 conn\uff0c disconn, clean\u547d\u4ee4\u9488\u5bf9\u901a\u7528U\u76d8\u4f9d\u65e7\u6709\u6548\u3002","title":"\u901a\u7528U\u76d8"},{"location":"msd/#u_2","text":"-s\u540e\u8ddf\u7684\u662f\u5236\u4f5c\u901a\u7528U\u76d8\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u4e3aGb\uff0c\u5bb9\u91cf\u8d8a\u5927\uff0c\u5236\u4f5c\u65f6\u95f4\u8d8a\u957f\uff0c\u8bf7\u7ed3\u5408\u5b9e\u9645\u60c5\u51b5\u8bbe\u7f6e\u3002 -t \u5fc5\u987b\u4e3aother sudo bash /usr/bin/blikvm/kvmd-msd.sh -c make -s 4 -t other","title":"\u5236\u4f5c\u901a\u7528U\u76d8"},{"location":"msd/#kvm","text":"\u9996\u5148\u4f60\u9700\u8981\u5c06\u6587\u4ef6\u4ece\u7528\u6237\u63a7\u5236\u7535\u8111\u53d1\u9001\u5230kvm scp xxx blikvm@xxxx:/mnt/msd/user/ \u5c06\u6587\u4ef6\u540c\u6b65\u5230\u88ab\u63a7\u7535\u8111\uff0c\u5e76\u8fde\u63a5\u4e0a\u7535\u8111 sudo bash /usr/bin/blikvm/kvmd-msd.sh -c forward \u540e\u9762\u6709\u9700\u8981\u65b0\u7684\u5185\u5bb9\u4ece\u7528\u6237\u7535\u8111\uff0c\u4f20\u9012\u5230\u88ab\u63a7\u7535\u8111\uff0c\u91cd\u590d\u7b2c1\u548c\u7b2c2\u6b65\u5373\u53ef","title":"\u6587\u4ef6\u4ece\u7528\u6237\u7535\u8111==\u300bKVM==\u300b\u88ab\u63a7\u7535\u8111"},{"location":"msd/#kvm_1","text":"\u9996\u5148\u5728\u88ab\u63a7\u7535\u8111\u4e0a\u5c06\u6587\u4ef6\u62f7\u8d1d\u5230\u6a21\u62df\u7684\u865a\u62dfU\u76d8\u91cc\uff0c\u7136\u540e\u6267\u884c\u4e0b\u9762\u7684\u6307\u4ee4\uff0c\u5c06\u6587\u4ef6\u62f7\u8d1d\u5230kvm\u7684/mnt/msd/user/\u76ee\u5f55\u4e0b sudo bash /usr/bin/blikvm/kvmd-msd.sh -c rever \u5c06\u6587\u4ef6\u4ecekvm\u62f7\u8d1d\u5230\u7528\u6237\u7535\u8111 scp blikvm@xxxx:/mnt/msd/user/* .","title":"\u6587\u4ef6\u4ece\u88ab\u63a7\u7535\u8111==\u300bKVM==\u7528\u6237\u7535\u8111"},{"location":"port-forwarding/","text":"\u7aef\u53e3\u8f6c\u53d1 \u5728v1.4.7\u7248\u672c\u540e,\u5982\u679c\u60a8\u7684ISP\u4e3a\u8def\u7531\u5668\u63d0\u4f9b\u4e86\u5916\u90e8IP\u5730\u5740\uff0c\u60a8\u53ef\u4ee5\u914d\u7f6e\u7aef\u53e3\u8f6c\u53d1\u4ee5\u8bbf\u95eeBliKVM\u3002 Web\u5982\u679c\u9009\u62e9\u4e3ahttp\u534f\u8bae\uff0c\u5360\u7528\u7684\u662f80\u7aef\u53e3\uff0c\u5982\u679c\u9009\u62e9\u7684\u4e3ahttps\u534f\u8bae\u5360\u7528\u7684\u662f443\uff1b \u5982\u679c\u60a8\u6ca1\u6709\u5916\u90e8IP\u5730\u5740\uff0c\u6211\u4eec\u5efa\u8bae\u5c1d\u8bd5\u4f7f\u7528 Tailscale VPN \u3002","title":"\u7aef\u53e3\u8f6c\u53d1"},{"location":"port-forwarding/#_1","text":"\u5728v1.4.7\u7248\u672c\u540e,\u5982\u679c\u60a8\u7684ISP\u4e3a\u8def\u7531\u5668\u63d0\u4f9b\u4e86\u5916\u90e8IP\u5730\u5740\uff0c\u60a8\u53ef\u4ee5\u914d\u7f6e\u7aef\u53e3\u8f6c\u53d1\u4ee5\u8bbf\u95eeBliKVM\u3002 Web\u5982\u679c\u9009\u62e9\u4e3ahttp\u534f\u8bae\uff0c\u5360\u7528\u7684\u662f80\u7aef\u53e3\uff0c\u5982\u679c\u9009\u62e9\u7684\u4e3ahttps\u534f\u8bae\u5360\u7528\u7684\u662f443\uff1b \u5982\u679c\u60a8\u6ca1\u6709\u5916\u90e8IP\u5730\u5740\uff0c\u6211\u4eec\u5efa\u8bae\u5c1d\u8bd5\u4f7f\u7528 Tailscale VPN \u3002","title":"\u7aef\u53e3\u8f6c\u53d1"},{"location":"rtc/","text":"RTC\u65f6\u949f RTC\uff08Real-Time Clock\uff0c\u5b9e\u65f6\u65f6\u949f\uff09\u7684\u4f5c\u7528\u662f\u63d0\u4f9b\u8bbe\u5907\u6216\u7cfb\u7edf\u7684\u5b9e\u65f6\u65f6\u95f4\u548c\u65e5\u671f\u4fe1\u606f\u3002\u5b83\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u65f6\u949f\u82af\u7247\u6216\u6a21\u5757\uff0c\u5177\u6709\u81ea\u5df1\u7684\u7535\u6e90\uff0c\u53ef\u4ee5\u5728\u8bbe\u5907\u5173\u95ed\u6216\u65ad\u7535\u65f6\u4ecd\u7136\u4fdd\u6301\u65f6\u95f4\u7684\u51c6\u786e\u6027\u3002\u56e0\u56fd\u9645\u5feb\u9012\u7535\u6c60\u4e0d\u65b9\u4fbf\u90ae\u5bc4\u95ee\u9898\uff0c\u51fa\u5382\u786c\u4ef6\u65e0\u7535\u6c60\uff0c\u9700\u7528\u6237\u81ea\u5df1\u8d2d\u4e70(\u7ebd\u6263\u7535\u6c60\u578b\u53f7CR1220)\u3002BliKVM\u4e0d\u540c\u786c\u4ef6\u7248\u672c\u4e0a\u4f7f\u7528\u7684RTC\u65f6\u949f\u578b\u53f7\u4e0d\u5b8c\u5168\u4e00\u6837\uff0c\u4f7f\u7528\u65b9\u6cd5\u4e5f\u7565\u6709\u4e0d\u540c\u3002 BliKVM V2 PCIe and BliKVM V3 Hat - pcf8563 1. \u68c0\u67e5i2c\u603b\u7ebf\u4e0a\u662f\u5426\u6b63\u5e38\u8bc6\u522b\u5230\u4e86pcf8563 RTC\u65f6\u949f\u786c\u4ef6\uff0cpcf8563\u7684i2c\u5730\u5740\u662fx51\uff0c\u672c\u8282\u6240\u6709\u547d\u4ee4\u5747\u9700\u5728root\u6743\u9650\u4e0b\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u80fd\u6b63\u786e\u67e5\u770b\u5230x51\u5373\u8bc1\u660ertc\u65f6\u949f\u5df2\u88abi2c\u603b\u7ebf\u6b63\u786e\u8bc6\u522b\u5230\u3002 root@mangopimcore:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. \u5411Linux \u7cfb\u7edf\u7684i2c\u5b50\u7cfb\u7edf\u6ce8\u518c\u4e00\u4e2a\u65b0\u7684i2c\u8bbe\u5907\uff0c\u8be5\u8bbe\u5907\u7684\u578b\u53f7\u662f pcf8563\uff0c\u8bbe\u5907\u7684i2c\u5730\u5740\u4e3a 0x51\u3002\u518d\u4f7f\u7528 ls /dev | grep rtc \u547d\u4ee4\u67e5\u770b\u662f\u5426\u6b63\u786e\u51fa\u73b0rtc1\u8bbe\u5907\uff0c\u51fa\u73b0\u5373\u6ce8\u518c\u6210\u529f\u3002 echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 3. \u5c06\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\u8bbe\u7f6e\u4e3artc\u65f6\u949f\u65f6\u95f4\u3002 hwclock -f /dev/rtc0 -w 4. \u4ecertc\u65f6\u949f\u8bfb\u53d6\u65f6\u95f4\uff0c\u5982\u679c\u80fd\u8bfb\u53d6\u5230\u65f6\u95f4\u5373\u8868\u660ertc\u6a21\u5757\u6b63\u5e38\u3002 root@mangopimcore:~# hwclock -f /dev/rtc0 -r 2023-05-28 05:04:08.679152-02:30 BliKVM V4 - pcf8563 1. \u68c0\u67e5i2c\u603b\u7ebf\u4e0a\u662f\u5426\u6b63\u5e38\u8bc6\u522b\u5230\u4e86pcf8563 RTC\u65f6\u949f\u786c\u4ef6\uff0cpcf8563\u7684i2c\u5730\u5740\u662fx51\uff0c\u672c\u8282\u6240\u6709\u547d\u4ee4\u5747\u9700\u5728root\u6743\u9650\u4e0b\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u80fd\u6b63\u786e\u67e5\u770b\u5230x51\u5373\u8bc1\u660ertc\u65f6\u949f\u5df2\u88abi2c\u603b\u7ebf\u6b63\u786e\u8bc6\u522b\u5230\u3002 root@mangopimcore:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. \u5411Linux \u7cfb\u7edf\u7684i2c\u5b50\u7cfb\u7edf\u6ce8\u518c\u4e00\u4e2a\u65b0\u7684i2c\u8bbe\u5907\uff0c\u8be5\u8bbe\u5907\u7684\u578b\u53f7\u662f pcf8563\uff0c\u8bbe\u5907\u7684i2c\u5730\u5740\u4e3a 0x51\u3002\u518d\u4f7f\u7528 ls /dev | grep rtc \u547d\u4ee4\u67e5\u770b\u662f\u5426\u6b63\u786e\u51fa\u73b0rtc1\u8bbe\u5907\uff0c\u51fa\u73b0\u5373\u6ce8\u518c\u6210\u529f\u3002 echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-0/new_device 3. \u5c06\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\u8bbe\u7f6e\u4e3artc\u65f6\u949f\u65f6\u95f4\u3002 hwclock -f /dev/rtc1 -w 4. \u4ecertc\u65f6\u949f\u8bfb\u53d6\u65f6\u95f4\uff0c\u5982\u679c\u80fd\u8bfb\u53d6\u5230\u65f6\u95f4\u5373\u8868\u660ertc\u6a21\u5757\u6b63\u5e38\u3002 root@mangopimcore:~# hwclock -f /dev/rtc1 -r 2023-05-28 05:04:08.679152-02:30","title":"RTC\u65f6\u949f"},{"location":"rtc/#rtc","text":"RTC\uff08Real-Time Clock\uff0c\u5b9e\u65f6\u65f6\u949f\uff09\u7684\u4f5c\u7528\u662f\u63d0\u4f9b\u8bbe\u5907\u6216\u7cfb\u7edf\u7684\u5b9e\u65f6\u65f6\u95f4\u548c\u65e5\u671f\u4fe1\u606f\u3002\u5b83\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u65f6\u949f\u82af\u7247\u6216\u6a21\u5757\uff0c\u5177\u6709\u81ea\u5df1\u7684\u7535\u6e90\uff0c\u53ef\u4ee5\u5728\u8bbe\u5907\u5173\u95ed\u6216\u65ad\u7535\u65f6\u4ecd\u7136\u4fdd\u6301\u65f6\u95f4\u7684\u51c6\u786e\u6027\u3002\u56e0\u56fd\u9645\u5feb\u9012\u7535\u6c60\u4e0d\u65b9\u4fbf\u90ae\u5bc4\u95ee\u9898\uff0c\u51fa\u5382\u786c\u4ef6\u65e0\u7535\u6c60\uff0c\u9700\u7528\u6237\u81ea\u5df1\u8d2d\u4e70(\u7ebd\u6263\u7535\u6c60\u578b\u53f7CR1220)\u3002BliKVM\u4e0d\u540c\u786c\u4ef6\u7248\u672c\u4e0a\u4f7f\u7528\u7684RTC\u65f6\u949f\u578b\u53f7\u4e0d\u5b8c\u5168\u4e00\u6837\uff0c\u4f7f\u7528\u65b9\u6cd5\u4e5f\u7565\u6709\u4e0d\u540c\u3002","title":"RTC\u65f6\u949f"},{"location":"rtc/#blikvm-v2-pcie-and-blikvm-v3-hat-pcf8563","text":"1. \u68c0\u67e5i2c\u603b\u7ebf\u4e0a\u662f\u5426\u6b63\u5e38\u8bc6\u522b\u5230\u4e86pcf8563 RTC\u65f6\u949f\u786c\u4ef6\uff0cpcf8563\u7684i2c\u5730\u5740\u662fx51\uff0c\u672c\u8282\u6240\u6709\u547d\u4ee4\u5747\u9700\u5728root\u6743\u9650\u4e0b\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u80fd\u6b63\u786e\u67e5\u770b\u5230x51\u5373\u8bc1\u660ertc\u65f6\u949f\u5df2\u88abi2c\u603b\u7ebf\u6b63\u786e\u8bc6\u522b\u5230\u3002 root@mangopimcore:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. \u5411Linux \u7cfb\u7edf\u7684i2c\u5b50\u7cfb\u7edf\u6ce8\u518c\u4e00\u4e2a\u65b0\u7684i2c\u8bbe\u5907\uff0c\u8be5\u8bbe\u5907\u7684\u578b\u53f7\u662f pcf8563\uff0c\u8bbe\u5907\u7684i2c\u5730\u5740\u4e3a 0x51\u3002\u518d\u4f7f\u7528 ls /dev | grep rtc \u547d\u4ee4\u67e5\u770b\u662f\u5426\u6b63\u786e\u51fa\u73b0rtc1\u8bbe\u5907\uff0c\u51fa\u73b0\u5373\u6ce8\u518c\u6210\u529f\u3002 echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device 3. \u5c06\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\u8bbe\u7f6e\u4e3artc\u65f6\u949f\u65f6\u95f4\u3002 hwclock -f /dev/rtc0 -w 4. \u4ecertc\u65f6\u949f\u8bfb\u53d6\u65f6\u95f4\uff0c\u5982\u679c\u80fd\u8bfb\u53d6\u5230\u65f6\u95f4\u5373\u8868\u660ertc\u6a21\u5757\u6b63\u5e38\u3002 root@mangopimcore:~# hwclock -f /dev/rtc0 -r 2023-05-28 05:04:08.679152-02:30","title":"BliKVM V2 PCIe and BliKVM V3 Hat - pcf8563"},{"location":"rtc/#blikvm-v4-pcf8563","text":"1. \u68c0\u67e5i2c\u603b\u7ebf\u4e0a\u662f\u5426\u6b63\u5e38\u8bc6\u522b\u5230\u4e86pcf8563 RTC\u65f6\u949f\u786c\u4ef6\uff0cpcf8563\u7684i2c\u5730\u5740\u662fx51\uff0c\u672c\u8282\u6240\u6709\u547d\u4ee4\u5747\u9700\u5728root\u6743\u9650\u4e0b\uff0c\u6267\u884c\u4e0b\u9762\u7684\u547d\u4ee4\u80fd\u6b63\u786e\u67e5\u770b\u5230x51\u5373\u8bc1\u660ertc\u65f6\u949f\u5df2\u88abi2c\u603b\u7ebf\u6b63\u786e\u8bc6\u522b\u5230\u3002 root@mangopimcore:~# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 2. \u5411Linux \u7cfb\u7edf\u7684i2c\u5b50\u7cfb\u7edf\u6ce8\u518c\u4e00\u4e2a\u65b0\u7684i2c\u8bbe\u5907\uff0c\u8be5\u8bbe\u5907\u7684\u578b\u53f7\u662f pcf8563\uff0c\u8bbe\u5907\u7684i2c\u5730\u5740\u4e3a 0x51\u3002\u518d\u4f7f\u7528 ls /dev | grep rtc \u547d\u4ee4\u67e5\u770b\u662f\u5426\u6b63\u786e\u51fa\u73b0rtc1\u8bbe\u5907\uff0c\u51fa\u73b0\u5373\u6ce8\u518c\u6210\u529f\u3002 echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-0/new_device 3. \u5c06\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\u8bbe\u7f6e\u4e3artc\u65f6\u949f\u65f6\u95f4\u3002 hwclock -f /dev/rtc1 -w 4. \u4ecertc\u65f6\u949f\u8bfb\u53d6\u65f6\u95f4\uff0c\u5982\u679c\u80fd\u8bfb\u53d6\u5230\u65f6\u95f4\u5373\u8868\u660ertc\u6a21\u5757\u6b63\u5e38\u3002 root@mangopimcore:~# hwclock -f /dev/rtc1 -r 2023-05-28 05:04:08.679152-02:30","title":"BliKVM V4 - pcf8563"},{"location":"serial_over_usb/","text":"\u4e32\u53e3\u7ec8\u7aef\u8fde\u63a5 \u53ef\u4ee5\u901a\u8fc7\u4e32\u53e3\u7ec8\u7aef\u5bf9BliKVM\u8bbe\u5907\u8fdb\u884c\u8bbf\u95ee\u3002 1.\u786c\u4ef6\u8fde\u63a5\uff0c\u60a8\u5e94\u8be5\u4f7f\u7528USB\u8f6cttl\u6a21\u5757\u5c06\u8ba1\u7b97\u673a\u7684USB\u8fde\u63a5\u5230BliKVM\u7684uart\u3002\u5176\u4e2d\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fHat\u7248\u672c\uff0c\u8bf7\u6ce8\u610f\u8fde\u63a5GPIO14\u548cGPIO15\u8fd9\u4e2a\u4e32\u53e3\uff0c\u82e5\u662fPCIe\u7248\u672c\uff0c\u8fde\u63a5\u4e1d\u5370\u6807\u6ce8\u7684 GRT \u5f15\u811a\u5373\u53ef 2.\u7535\u8111\u4e0a\u5b89\u88c5\u53ef\u7ec8\u7aef\u767b\u9646\u7684\u5de5\u5177\uff0c\u5982\u5728windows\u4e0a\u53ef\u4ee5\u5b89\u88c5putty\u5de5\u5177 3. putty\u4f7f\u7528\u8bf4\u660e,\u8f93\u5165\u6b63\u786e\u7684COM\u53e3\uff0c\u9ed8\u8ba4\u6ce2\u7279\u7387115200\uff0c\u9009\u62e9\u8fde\u63a5\u65b9\u5f0f\u4e3aserial,\u7136\u540e\u70b9\u51fbopen\u5373\u53ef\uff08\u4ee5\u4f7f\u7528PiKVM\u56fa\u4ef6\u4e3a\u4f8b\uff09 \u5982\u679c\u4f60\u7684\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8bc6\u522busb\u8f6cttl\u6a21\u5757\uff0c\u8bf7\u6309\u7167\u4e0b\u5217\u6b65\u9aa4\u5bf9\u7535\u8111\u5b89\u88c5\u9a71\u52a8 \u5c06usb-a\u5934\u8fde\u63a5\u5230\u60a8\u7684\u4e3b\u673a\uff08\u5728\u672c\u4f8b\u4e2d\uff0c\u5b83\u4f4d\u4e8ewindows\u4e3b\u673a\u4e0a\uff09\u3002\u56e0\u6b64\uff0c\u8bbe\u5907\u7ba1\u7406\u5668\u5c06\u5728\u5176\u4ed6\u8bbe\u5907\u4e2d\u663e\u793a\u4e00\u4e2a\u65b0\u7684USB\u4e32\u884c\u8bbe\u5907\u3002 \u4e0b\u8f7d\u5e76\u63d0\u53d6/\u8fd0\u884c\u9a71\u52a8\u7a0b\u5e8f\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6211\u4e0b\u8f7d\u5e76\u63d0\u53d6\u4e86ZIP\u6587\u4ef6\u3002 https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all \u66f4\u65b0\u65b0USB\u4e32\u884c\u8bbe\u5907\u7684\u9a71\u52a8\u7a0b\u5e8f\uff0c\u5c06\u5176\u6307\u5411\u63d0\u53d6\u6587\u4ef6\u7684\u4f4d\u7f6e\uff0c\u7136\u540e\u5355\u51fb\u4e0b\u4e00\u6b65\uff0c\u7136\u540e\u5355\u51fb\u5173\u95ed\u3002 \u5982\u679c\u4e00\u5207\u6b63\u786e\uff0c\u65b0\u7684USB\u4e32\u884c\u8bbe\u5907\u73b0\u5728\u5e94\u8be5\u663e\u793a\u5728\u7aef\u53e3\u4e0b\u7684USB-serial CH340\uff08COMX\uff09\u3002","title":"\u4e32\u53e3\u7ec8\u7aef"},{"location":"serial_over_usb/#_1","text":"\u53ef\u4ee5\u901a\u8fc7\u4e32\u53e3\u7ec8\u7aef\u5bf9BliKVM\u8bbe\u5907\u8fdb\u884c\u8bbf\u95ee\u3002 1.\u786c\u4ef6\u8fde\u63a5\uff0c\u60a8\u5e94\u8be5\u4f7f\u7528USB\u8f6cttl\u6a21\u5757\u5c06\u8ba1\u7b97\u673a\u7684USB\u8fde\u63a5\u5230BliKVM\u7684uart\u3002\u5176\u4e2d\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fHat\u7248\u672c\uff0c\u8bf7\u6ce8\u610f\u8fde\u63a5GPIO14\u548cGPIO15\u8fd9\u4e2a\u4e32\u53e3\uff0c\u82e5\u662fPCIe\u7248\u672c\uff0c\u8fde\u63a5\u4e1d\u5370\u6807\u6ce8\u7684 GRT \u5f15\u811a\u5373\u53ef 2.\u7535\u8111\u4e0a\u5b89\u88c5\u53ef\u7ec8\u7aef\u767b\u9646\u7684\u5de5\u5177\uff0c\u5982\u5728windows\u4e0a\u53ef\u4ee5\u5b89\u88c5putty\u5de5\u5177 3. putty\u4f7f\u7528\u8bf4\u660e,\u8f93\u5165\u6b63\u786e\u7684COM\u53e3\uff0c\u9ed8\u8ba4\u6ce2\u7279\u7387115200\uff0c\u9009\u62e9\u8fde\u63a5\u65b9\u5f0f\u4e3aserial,\u7136\u540e\u70b9\u51fbopen\u5373\u53ef\uff08\u4ee5\u4f7f\u7528PiKVM\u56fa\u4ef6\u4e3a\u4f8b\uff09 \u5982\u679c\u4f60\u7684\u7535\u8111\u4e0d\u80fd\u6b63\u786e\u8bc6\u522busb\u8f6cttl\u6a21\u5757\uff0c\u8bf7\u6309\u7167\u4e0b\u5217\u6b65\u9aa4\u5bf9\u7535\u8111\u5b89\u88c5\u9a71\u52a8 \u5c06usb-a\u5934\u8fde\u63a5\u5230\u60a8\u7684\u4e3b\u673a\uff08\u5728\u672c\u4f8b\u4e2d\uff0c\u5b83\u4f4d\u4e8ewindows\u4e3b\u673a\u4e0a\uff09\u3002\u56e0\u6b64\uff0c\u8bbe\u5907\u7ba1\u7406\u5668\u5c06\u5728\u5176\u4ed6\u8bbe\u5907\u4e2d\u663e\u793a\u4e00\u4e2a\u65b0\u7684USB\u4e32\u884c\u8bbe\u5907\u3002 \u4e0b\u8f7d\u5e76\u63d0\u53d6/\u8fd0\u884c\u9a71\u52a8\u7a0b\u5e8f\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6211\u4e0b\u8f7d\u5e76\u63d0\u53d6\u4e86ZIP\u6587\u4ef6\u3002 https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all \u66f4\u65b0\u65b0USB\u4e32\u884c\u8bbe\u5907\u7684\u9a71\u52a8\u7a0b\u5e8f\uff0c\u5c06\u5176\u6307\u5411\u63d0\u53d6\u6587\u4ef6\u7684\u4f4d\u7f6e\uff0c\u7136\u540e\u5355\u51fb\u4e0b\u4e00\u6b65\uff0c\u7136\u540e\u5355\u51fb\u5173\u95ed\u3002 \u5982\u679c\u4e00\u5207\u6b63\u786e\uff0c\u65b0\u7684USB\u4e32\u884c\u8bbe\u5907\u73b0\u5728\u5e94\u8be5\u663e\u793a\u5728\u7aef\u53e3\u4e0b\u7684USB-serial CH340\uff08COMX\uff09\u3002","title":"\u4e32\u53e3\u7ec8\u7aef\u8fde\u63a5"},{"location":"ssh/","text":"SSH\u914d\u7f6e \u57281.4.7\u7248\u672c\u53ca\u4ee5\u540e\uff0cweb\u652f\u6301\u76f4\u63a5\u8fdb\u5165blikvm\u7684ssh\u7ec8\u7aef\uff0c\u9ed8\u8ba4\u8fdb\u5165\u7ec8\u7aef\u7684\u8d26\u53f7\u5bc6\u7801\u4e3a blikvm/blikvm\uff0c \u5982\u679c\u4fee\u6539\u4e86\u6b64\u7528\u6237\u7684\u5bc6\u7801\u4fe1\u606f\uff0c\u9700\u8981\u5728app.json\u6587\u4ef6\u4e2d\u4fee\u6539\u5bf9\u5e94\u7684\u8d26\u53f7\u5bc6\u7801 sudo -s vim /mnt/exec/release/config/app.json // \u627e\u5230\u4e0b\u9762\u914d\u7f6e\uff0c\u4fee\u6539\u6210\u4f60\u4fee\u6539\u540e\u7684\u3002 \"sshUser\": \"blikvm\", \"sshPassword\": \"blikvm\"","title":"SSH\u7ec8\u7aef"},{"location":"ssh/#ssh","text":"\u57281.4.7\u7248\u672c\u53ca\u4ee5\u540e\uff0cweb\u652f\u6301\u76f4\u63a5\u8fdb\u5165blikvm\u7684ssh\u7ec8\u7aef\uff0c\u9ed8\u8ba4\u8fdb\u5165\u7ec8\u7aef\u7684\u8d26\u53f7\u5bc6\u7801\u4e3a blikvm/blikvm\uff0c \u5982\u679c\u4fee\u6539\u4e86\u6b64\u7528\u6237\u7684\u5bc6\u7801\u4fe1\u606f\uff0c\u9700\u8981\u5728app.json\u6587\u4ef6\u4e2d\u4fee\u6539\u5bf9\u5e94\u7684\u8d26\u53f7\u5bc6\u7801 sudo -s vim /mnt/exec/release/config/app.json // \u627e\u5230\u4e0b\u9762\u914d\u7f6e\uff0c\u4fee\u6539\u6210\u4f60\u4fee\u6539\u540e\u7684\u3002 \"sshUser\": \"blikvm\", \"sshPassword\": \"blikvm\"","title":"SSH\u914d\u7f6e"},{"location":"static_ip/","text":"BliKVM OS\u8bbe\u7f6e\u9759\u6001IP v1 v2 v3\u53c2\u8003 \u4f7f\u7528SSH\u8fde\u63a5\u5230BliKVM\u7684\u7ec8\u7aef,\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\u3002 \u6253\u5f00\u7f51\u7edc\u914d\u7f6e\u6587\u4ef6 /etc/dhcpcd.conf \u4ee5\u8fdb\u884c\u7f16\u8f91\uff1a sudo vim /etc/dhcpcd.conf \u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u66ff\u6362\u4e3a\u60a8\u60f3\u8981\u8bbe\u7f6e\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\uff1a interface eth0 static ip_address=192.168.0.100/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 \u6ce8\u610f\uff1a\u6839\u636e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\uff0c\u53ef\u80fd\u9700\u8981\u4fee\u6539\u4e0a\u8ff0\u793a\u4f8b\u4e2d\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u503c\u3002 \u4fdd\u5b58\u6587\u4ef6\u5e76\u9000\u51fa\u7f16\u8f91\u5668\u3002 \u91cd\u65b0\u542f\u52a8BliKVM\u4ee5\u4f7f\u9759\u6001IP\u8bbe\u7f6e\u751f\u6548\uff1a sudo reboot v4\u53c2\u8003 \u4f7f\u7528SSH\u8fde\u63a5\u5230BliKVM\u7684\u7ec8\u7aef,\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\u3002 \u6253\u5f00\u7f51\u7edc\u914d\u7f6e\u6587\u4ef6 /etc/network/interfaces \u4ee5\u8fdb\u884c\u7f16\u8f91\uff1a sudo vim /etc/network/interfaces \u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u66ff\u6362\u4e3a\u60a8\u60f3\u8981\u8bbe\u7f6e\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\uff1a source /etc/network/interfaces.d/* auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 \u6ce8\u610f\uff1a\u6839\u636e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\uff0c\u53ef\u80fd\u9700\u8981\u4fee\u6539\u4e0a\u8ff0\u793a\u4f8b\u4e2d\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u503c\u3002 \u4fdd\u5b58\u6587\u4ef6\u5e76\u9000\u51fa\u7f16\u8f91\u5668\u3002 \u91cd\u65b0\u542f\u52a8BliKVM\u4ee5\u4f7f\u9759\u6001IP\u8bbe\u7f6e\u751f\u6548\uff1a sudo reboot \u6839\u636e\u60a8\u7684\u7f51\u7edc\u73af\u5883\u548c\u9700\u6c42\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u4e0a\u8ff0\u6b65\u9aa4\u81ea\u5b9a\u4e49\u914d\u7f6e\u9759\u6001IP\u5730\u5740\u3002\u8bf7\u786e\u4fddIP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u8bbe\u7f6e\u4e0e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\u76f8\u5339\u914d\u3002","title":"\u8bbe\u7f6e\u9759\u6001IP"},{"location":"static_ip/#blikvm-osip","text":"","title":"BliKVM OS\u8bbe\u7f6e\u9759\u6001IP"},{"location":"static_ip/#v1-v2-v3","text":"\u4f7f\u7528SSH\u8fde\u63a5\u5230BliKVM\u7684\u7ec8\u7aef,\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\u3002 \u6253\u5f00\u7f51\u7edc\u914d\u7f6e\u6587\u4ef6 /etc/dhcpcd.conf \u4ee5\u8fdb\u884c\u7f16\u8f91\uff1a sudo vim /etc/dhcpcd.conf \u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u66ff\u6362\u4e3a\u60a8\u60f3\u8981\u8bbe\u7f6e\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\uff1a interface eth0 static ip_address=192.168.0.100/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 \u6ce8\u610f\uff1a\u6839\u636e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\uff0c\u53ef\u80fd\u9700\u8981\u4fee\u6539\u4e0a\u8ff0\u793a\u4f8b\u4e2d\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u503c\u3002 \u4fdd\u5b58\u6587\u4ef6\u5e76\u9000\u51fa\u7f16\u8f91\u5668\u3002 \u91cd\u65b0\u542f\u52a8BliKVM\u4ee5\u4f7f\u9759\u6001IP\u8bbe\u7f6e\u751f\u6548\uff1a sudo reboot","title":"v1 v2 v3\u53c2\u8003"},{"location":"static_ip/#v4","text":"\u4f7f\u7528SSH\u8fde\u63a5\u5230BliKVM\u7684\u7ec8\u7aef,\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\u3002 \u6253\u5f00\u7f51\u7edc\u914d\u7f6e\u6587\u4ef6 /etc/network/interfaces \u4ee5\u8fdb\u884c\u7f16\u8f91\uff1a sudo vim /etc/network/interfaces \u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u66ff\u6362\u4e3a\u60a8\u60f3\u8981\u8bbe\u7f6e\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\uff1a source /etc/network/interfaces.d/* auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 \u6ce8\u610f\uff1a\u6839\u636e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\uff0c\u53ef\u80fd\u9700\u8981\u4fee\u6539\u4e0a\u8ff0\u793a\u4f8b\u4e2d\u7684IP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u503c\u3002 \u4fdd\u5b58\u6587\u4ef6\u5e76\u9000\u51fa\u7f16\u8f91\u5668\u3002 \u91cd\u65b0\u542f\u52a8BliKVM\u4ee5\u4f7f\u9759\u6001IP\u8bbe\u7f6e\u751f\u6548\uff1a sudo reboot \u6839\u636e\u60a8\u7684\u7f51\u7edc\u73af\u5883\u548c\u9700\u6c42\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u4e0a\u8ff0\u6b65\u9aa4\u81ea\u5b9a\u4e49\u914d\u7f6e\u9759\u6001IP\u5730\u5740\u3002\u8bf7\u786e\u4fddIP\u5730\u5740\u3001\u7f51\u5173\u548cDNS\u670d\u52a1\u5668\u7684\u8bbe\u7f6e\u4e0e\u60a8\u7684\u7f51\u7edc\u8bbe\u7f6e\u76f8\u5339\u914d\u3002","title":"v4\u53c2\u8003"},{"location":"switch-guide/","text":"HDMI\u5207\u6362\u5668\u624b\u518c BliKVM-Switch-V1.0\u5b9e\u9645\u4f7f\u7528\u548c\u6d4b\u8bd5\u89c6\u9891\uff0c\u652f\u6301BliKVM\u548cPiKVM \u7b80\u4ecb BliKVM-Switch-V1.0\u4e3a\u56db\u901a\u9053HDMI+USB\u5207\u6362\u5668\uff0c\u652f\u6301\u673a\u5668\u6309\u952e\u5207\u6362\uff0c\u684c\u9762\u63a7\u5236\u5668\u5207\u6362\uff0cKVM\u8fdc\u7a0b\u5207\u6362\uff0c3\u79cd\u5207\u6362\u6a21\u5f0f\u3002\u5207\u6362\u5668\u672c\u8eab\u6700\u9ad8\u652f\u63014K@60HZ\u7684\u8f93\u5165\uff0c\u5373\u63d2\u5373\u7528\uff0c\u514d\u9a71\u52a8\u3002 BliKVM-Switch-V1.0\u4f7f\u7528\u548cXH-HK4401\u76f8\u540c\u7684\u786c\u4ef6\u65b9\u6848,AG7210 HDMI\u5207\u6362\u82af\u7247\u6700\u9ad8\u652f\u6301\u52304K@60Hz\uff0cCH444G USB\u5207\u6362\u82af\u7247\u652f\u6301USB2.0\u3002\u4e0d\u540c\u7684\u662fBliKVM-Switch-V1.0\u914d\u5907\u6709KVM USB cable,\u53ef\u4ee5\u901a\u8fc7KVM USB cable\u8fde\u63a5BliKVM-Switch-V1.0,\u5b9e\u73b0\u5bf9KVM\u7aef\u53e3\u7684\u9009\u62e9\u3002BliKVM-Switch-V1.0\u9002\u914dBliKVM\u548cPiKVM\u3002 \u6ce8\u610f\u4e8b\u9879 switch\u53ef\u4ee5\u76f4\u63a5\u4ece\u8f93\u5165\u7535\u8111\u7684USB\u53d6\u7535\uff0c\u5373\u4e00\u822c\u4e0d\u9700\u8981\u7ed9switch\u4f9b\u7535\uff0c\u5373\u53ef\u6b63\u5e38\u5de5\u4f5c\uff1b \u82e5\u88ab\u63a7\u7535\u8111\u7684USB\u4f9b\u7535\u65e0\u6cd5\u4f7fswitch\u5de5\u4f5c\uff0c\u53ef\u4ee5\u5bf9switch\u8fdb\u884c\u5355\u72ec\u4f9b\u7535\u4f7f\u7528\uff1b switch\u5957\u88c5\u53ea\u63d0\u4f9b\u4e86USB\u7535\u6e90\u7ebf\uff0c\u5e76\u6ca1\u6709\u63d0\u4f9b\u7535\u6e90\u9002\u914d\u5668\uff0c\u9700\u8981\u5ba2\u6237\u81ea\u884c\u914d\u7f6e\u7535\u6e90\u9002\u914d\u5668\uff085V\uff09\uff1b \u684c\u9762\u63a7\u5236\u5668 \u53ef\u4ee5\u901a\u8fc7USB\u7535\u7f06\u63a7\u5236\u5207\u6362\uff0c\u5bf9\u4e8e\u4e0d\u4f7f\u7528KVM\u7684\u5ba2\u6237\uff0c\u5f53\u60a8\u5728\u8bbe\u5907\u65c1\u8fb9\u65f6\uff0c\u8fd9\u662f\u9664\u4f7f\u7528switch\u8bbe\u5907\u4e0a\u6309\u94ae\u5207\u6362\u4e4b\u5916\u7684\u53e6\u4e00\u79cd\u5207\u6362\u65b9\u5f0f\uff1b HDMI\u8f93\u5165\u6700\u9ad8\u652f\u6301 4096x2160/60Hz \uff1b 4K 60Hz\u7684HDMI\u8f93\u5165, \u529f\u7387\u5927\u6982\u662f200mW; \u63a5\u53e3\u793a\u610f\u56fe \u8fd9\u91cc\u9700\u8981\u4e24\u6839USB\u7ebf\uff0c\u8fde\u63a5switch\u548ckvm\u786c\u4ef6\uff0c\u4e00\u6839\u7528\u4e8e\u4f20\u8f93\u63a7\u5236\u5207\u6362\u901a\u9053\u4fe1\u606f\uff0c\u4e00\u6839\u7528\u4e8e\u4f20\u8f93\u9f20\u6807\u952e\u76d8\u6570\u636e\uff0c\u5177\u4f53\u8fde\u63a5\u53ef\u4ee5\u53c2\u8003\u9762\u8bf4\u660e\u3002 \u6b63\u9762\u548c\u53cd\u9762\u63a5\u53e3\u793a\u610f\u56fe\uff0c\u53f3\u4fa7\u56fe\u4e2d\u7684control\u63a5\u53e3\u5373\u4e3a\u8fdc\u7a0b\u63a7\u5236\u63a5\u53e3, \u4e00\u5934\u4e3aUSB-A\uff0c\u53e6\u4e00\u5934\u4e3amicro usb\u5e76\u4e14\u6807\u7b7e\u5e26\u6709kvm\u5b57\u6837\u7684\u7ebf\uff0c\u4e3a\u63a7\u5236\u7ebf\uff0c\u5176\u4e2dmicro usb\u53e3\u4e0eswitch\u7684control\u63a5\u53e3\u8fde\u63a5\uff0cUSB-A\u63a5\u53e3\u4e0eKVM\u7684USB\u53e3\u8fde\u63a5\u3002 \u4fa7\u9762\u63a5\u53e3\u793a\u610f\u56fe \u8bbe\u5907\u8fde\u63a5\u793a\u610f\u56fe \u8f6f\u4ef6\u914d\u7f6e !!! info \"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM\u8f6f\u4ef6\uff0c\u5728BliKVM\u542f\u52a8\u524d\u5148\u628aswitch\u901a\u7535\u5e76\u63a5\u597d\u7ebf\uff0c\u901a\u8fc7\u7ec8\u7aef\u786e\u8ba4switch\u63d2\u5165BliKVM\u540e\uff0c\u8bc6\u522b\u5230\u7684\u8bbe\u5907\u63cf\u8ff0\u7b26\u540d\u79f0\uff0c\u5982 /dev/ttyUSB0 ,\u7136\u540e\u7f16\u8f91 /usr/bin/blikvm/package.json \u4e2d\u7684 switch_handle \u5b57\u6bb5\uff0c\u5c06switch_enable\u8d4b\u503c\u4e3a1, switch_path\u8d4b\u503c\u4e3a /dev/ttyUSB0 \uff0c\u7136\u540e\u91cd\u542fBliKVM\u5373\u53ef\u3002 \u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u5148\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u7cfb\u7edf\u53d8\u4e3a\u53ef\u8bfb\u5199\u7cfb\u7edf\u3002\u7f16\u8f91\u914d\u7f6e\u6587\u4ef6\u53ef\u4ee5\u53c2\u8003\u4e0b\u547d\u4ee4: sudo vim /usr/bin/blikvm/package.json \u70b9\u51fb\u5de6\u4e0b\u89d2\u7684MORE\uff0c\u627e\u5230BliKVM switch\u8fd9\u4e00\u680f\uff0c\u8fdb\u884c\u5207\u6362\u9009\u62e9\u5373\u53ef\u3002\u6ce8\u610f\u5bf9\u5e94\u901a\u9053\u84dd\u8272\u5c0f\u70b9\u95ea\u52a8\u8868\u793a\u8bc6\u522b\u5230\u4e86switch\u63d2\u5165\uff0c\u5e76\u4e14\u6b63\u5904\u4e8e\u5f53\u524d\u901a\u9053\uff0c\u82e5\u65e0\u84dd\u8272\u5c0f\u70b9\u5219\u8868\u793a\u672a\u8bc6\u522b\u5230switch\u63d2\u5165\u3002\" \u82e5\u60a8\u4f7f\u7528\u7684PiKVM\u8f6f\u4ef6\uff0c\u8bf7\u6309\u7167\u4e0b\u9762\u7684\u8bf4\u660e\u8fdb\u884c\u914d\u7f6e \u901a\u8fc7SSH\u767b\u9646PiKVM\uff0c\u7528\u6237\u540d\u548c\u5bc6\u7801\u5747\u4e3aroot; \u7ec8\u7aef\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u7cfb\u7edf\u6539\u4e3a\u53ef\u8bfb\u5199\u7cfb\u7edf; \u7f16\u8f91 /etc/kvmd/override.yaml \u6b64\u6587\u4ef6\uff0c\u4f7f\u6539\u6587\u4ef6\u5305\u542b\u4e0b\u9762\u7684\u5185\u5bb9\uff0c\u5373\u5728\u539f\u6709\u5185\u5bb9\u540e\u8ffd\u52a0. kvmd: gpio: drivers: hk: type: xh_hk4401 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk pin: 0 mode: input ch1_led: driver: hk pin: 1 mode: input ch2_led: driver: hk pin: 2 mode: input ch3_led: driver: hk pin: 3 mode: input ch0_button: driver: hk pin: 0 mode: output switch: false ch1_button: driver: hk pin: 1 mode: output switch: false ch2_button: driver: hk pin: 2 mode: output switch: false ch3_button: driver: hk pin: 3 mode: output switch: false view: table: - [\"#Input 1\", ch0_led, ch0_button] - [\"#Input 2\", ch1_led, ch1_button] - [\"#Input 3\", ch2_led, ch2_button] - [\"#Input 4\", ch3_led, ch3_button] !!! warning \"\u4e0a\u8ff0\u914d\u7f6e\u57fa\u4e8e2022 pikvm\u56fe\u50cf\u3002\u5982\u679c\u60a8\u4f7f\u7528\u7684\u662f\u6700\u65b0\u7684pikvm\u6620\u50cf\u6216\u6700\u65b0\u7684\u8f6f\u4ef6\u7248\u672c\uff0c\u8bf7\u7f16\u8f91\u6587\u4ef6/etc/kvmd/override.yaml\u5e76\u6dfb\u52a0\u884c\uff1aprotocol:2\uff0c\u4f8b\u5b50\u5982\u4e0b:\" kvmd: gpio: drivers: hk: type: xh_hk4401 protocol: 2 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk ... \u7ec8\u7aef\u4f7f\u7528 ro \u547d\u4ee4\u5c06\u7cfb\u7edf\u91cd\u65b0\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\u7cfb\u7edf\uff1b \u7ec8\u7aef\u4f7f\u7528 systemctl restart kvmd \u91cd\u542f\u670d\u52a1\u3002 \u8fdb\u5165PiKVM web\u754c\u9762\uff0c\u5e76\u5355\u51fb\u201cGPIO\u201d\u83dc\u5355\u3002\u60a8\u5e94\u8be5\u770b\u52304\u4e2a\u8f93\u5165\uff0c\u5176\u4e2d\u4e00\u4e2a\u8f93\u5165\u6709\u4e00\u4e2a\u7eff\u8272\u5706\u5708\uff0c\u8868\u793a\u5f53\u524d\u5df2\u9009\u4e2d\u3002\u5355\u51fb\u5176\u4ed6\u8f93\u5165\u4ee5\u66f4\u6539\u9009\u5b9a\u7684\u4e3b\u673a\u3002 \u63a7\u5236\u534f\u8bae \u82e5\u60a8\u5e0c\u671b\u5c06blicube\u7684switch\u7528\u5728\u5176\u5b83\u5e73\u53f0\u4e0a\uff0c\u8bf7\u53c2\u8003\u4e0b\u9762\u7684\u534f\u8bae \u901a\u4fe1\u6ce2\u7279\u7387\u4e3a19200 \u5207\u6362\u52301\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW1\\r\\nG01gA \u5207\u6362\u52302\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW2\\r\\nG02gA \u5207\u6362\u52303\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW3\\r\\nG03gA \u5207\u6362\u52304\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW4\\r\\nG04gA switch\u8fd4\u56de\u5f53\u524d\u6240\u5728\u901a\u9053\u6d88\u606f\u4e3a: G01gA , G02gA , G03gA , G04gA \u53d1\u8d27\u6e05\u5355 \u4ea7\u54c1 \u6570\u91cf \u5907\u6ce8\uff5c KVM Switch\u5207\u6362\u5668\uff084\u901a\u9053) 1 110mm * 60mm * 33mm USB\u684c\u9762\u63a7\u5236\u5668 1 USB\u6570\u636e\u7ebf 4 \u957f\u5ea6: 1.2m HDMI\uff08\u6807\u51c6\u63a5\u5934\uff09\u7ebf 4 \u957f\u5ea6: 1.5m USB\u7535\u6e90\u7ebf 1 \u957f\u5ea6: 0.8m KVM USB\u7ebf 1 \u957f\u5ea6: 1.5m USB\u684c\u9762\u63a7\u5236\u7ebf 1 \u957f\u5ea6: 1m","title":"switch\u5207\u6362\u5668\u624b\u518c"},{"location":"switch-guide/#hdmi","text":"BliKVM-Switch-V1.0\u5b9e\u9645\u4f7f\u7528\u548c\u6d4b\u8bd5\u89c6\u9891\uff0c\u652f\u6301BliKVM\u548cPiKVM","title":"HDMI\u5207\u6362\u5668\u624b\u518c"},{"location":"switch-guide/#_1","text":"BliKVM-Switch-V1.0\u4e3a\u56db\u901a\u9053HDMI+USB\u5207\u6362\u5668\uff0c\u652f\u6301\u673a\u5668\u6309\u952e\u5207\u6362\uff0c\u684c\u9762\u63a7\u5236\u5668\u5207\u6362\uff0cKVM\u8fdc\u7a0b\u5207\u6362\uff0c3\u79cd\u5207\u6362\u6a21\u5f0f\u3002\u5207\u6362\u5668\u672c\u8eab\u6700\u9ad8\u652f\u63014K@60HZ\u7684\u8f93\u5165\uff0c\u5373\u63d2\u5373\u7528\uff0c\u514d\u9a71\u52a8\u3002 BliKVM-Switch-V1.0\u4f7f\u7528\u548cXH-HK4401\u76f8\u540c\u7684\u786c\u4ef6\u65b9\u6848,AG7210 HDMI\u5207\u6362\u82af\u7247\u6700\u9ad8\u652f\u6301\u52304K@60Hz\uff0cCH444G USB\u5207\u6362\u82af\u7247\u652f\u6301USB2.0\u3002\u4e0d\u540c\u7684\u662fBliKVM-Switch-V1.0\u914d\u5907\u6709KVM USB cable,\u53ef\u4ee5\u901a\u8fc7KVM USB cable\u8fde\u63a5BliKVM-Switch-V1.0,\u5b9e\u73b0\u5bf9KVM\u7aef\u53e3\u7684\u9009\u62e9\u3002BliKVM-Switch-V1.0\u9002\u914dBliKVM\u548cPiKVM\u3002 \u6ce8\u610f\u4e8b\u9879 switch\u53ef\u4ee5\u76f4\u63a5\u4ece\u8f93\u5165\u7535\u8111\u7684USB\u53d6\u7535\uff0c\u5373\u4e00\u822c\u4e0d\u9700\u8981\u7ed9switch\u4f9b\u7535\uff0c\u5373\u53ef\u6b63\u5e38\u5de5\u4f5c\uff1b \u82e5\u88ab\u63a7\u7535\u8111\u7684USB\u4f9b\u7535\u65e0\u6cd5\u4f7fswitch\u5de5\u4f5c\uff0c\u53ef\u4ee5\u5bf9switch\u8fdb\u884c\u5355\u72ec\u4f9b\u7535\u4f7f\u7528\uff1b switch\u5957\u88c5\u53ea\u63d0\u4f9b\u4e86USB\u7535\u6e90\u7ebf\uff0c\u5e76\u6ca1\u6709\u63d0\u4f9b\u7535\u6e90\u9002\u914d\u5668\uff0c\u9700\u8981\u5ba2\u6237\u81ea\u884c\u914d\u7f6e\u7535\u6e90\u9002\u914d\u5668\uff085V\uff09\uff1b \u684c\u9762\u63a7\u5236\u5668 \u53ef\u4ee5\u901a\u8fc7USB\u7535\u7f06\u63a7\u5236\u5207\u6362\uff0c\u5bf9\u4e8e\u4e0d\u4f7f\u7528KVM\u7684\u5ba2\u6237\uff0c\u5f53\u60a8\u5728\u8bbe\u5907\u65c1\u8fb9\u65f6\uff0c\u8fd9\u662f\u9664\u4f7f\u7528switch\u8bbe\u5907\u4e0a\u6309\u94ae\u5207\u6362\u4e4b\u5916\u7684\u53e6\u4e00\u79cd\u5207\u6362\u65b9\u5f0f\uff1b HDMI\u8f93\u5165\u6700\u9ad8\u652f\u6301 4096x2160/60Hz \uff1b 4K 60Hz\u7684HDMI\u8f93\u5165, \u529f\u7387\u5927\u6982\u662f200mW;","title":"\u7b80\u4ecb"},{"location":"switch-guide/#_2","text":"\u8fd9\u91cc\u9700\u8981\u4e24\u6839USB\u7ebf\uff0c\u8fde\u63a5switch\u548ckvm\u786c\u4ef6\uff0c\u4e00\u6839\u7528\u4e8e\u4f20\u8f93\u63a7\u5236\u5207\u6362\u901a\u9053\u4fe1\u606f\uff0c\u4e00\u6839\u7528\u4e8e\u4f20\u8f93\u9f20\u6807\u952e\u76d8\u6570\u636e\uff0c\u5177\u4f53\u8fde\u63a5\u53ef\u4ee5\u53c2\u8003\u9762\u8bf4\u660e\u3002 \u6b63\u9762\u548c\u53cd\u9762\u63a5\u53e3\u793a\u610f\u56fe\uff0c\u53f3\u4fa7\u56fe\u4e2d\u7684control\u63a5\u53e3\u5373\u4e3a\u8fdc\u7a0b\u63a7\u5236\u63a5\u53e3, \u4e00\u5934\u4e3aUSB-A\uff0c\u53e6\u4e00\u5934\u4e3amicro usb\u5e76\u4e14\u6807\u7b7e\u5e26\u6709kvm\u5b57\u6837\u7684\u7ebf\uff0c\u4e3a\u63a7\u5236\u7ebf\uff0c\u5176\u4e2dmicro usb\u53e3\u4e0eswitch\u7684control\u63a5\u53e3\u8fde\u63a5\uff0cUSB-A\u63a5\u53e3\u4e0eKVM\u7684USB\u53e3\u8fde\u63a5\u3002 \u4fa7\u9762\u63a5\u53e3\u793a\u610f\u56fe \u8bbe\u5907\u8fde\u63a5\u793a\u610f\u56fe","title":"\u63a5\u53e3\u793a\u610f\u56fe"},{"location":"switch-guide/#_3","text":"!!! info \"\u5982\u679c\u4f60\u4f7f\u7528\u7684\u662fBliKVM\u8f6f\u4ef6\uff0c\u5728BliKVM\u542f\u52a8\u524d\u5148\u628aswitch\u901a\u7535\u5e76\u63a5\u597d\u7ebf\uff0c\u901a\u8fc7\u7ec8\u7aef\u786e\u8ba4switch\u63d2\u5165BliKVM\u540e\uff0c\u8bc6\u522b\u5230\u7684\u8bbe\u5907\u63cf\u8ff0\u7b26\u540d\u79f0\uff0c\u5982 /dev/ttyUSB0 ,\u7136\u540e\u7f16\u8f91 /usr/bin/blikvm/package.json \u4e2d\u7684 switch_handle \u5b57\u6bb5\uff0c\u5c06switch_enable\u8d4b\u503c\u4e3a1, switch_path\u8d4b\u503c\u4e3a /dev/ttyUSB0 \uff0c\u7136\u540e\u91cd\u542fBliKVM\u5373\u53ef\u3002 \u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u5148\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u7cfb\u7edf\u53d8\u4e3a\u53ef\u8bfb\u5199\u7cfb\u7edf\u3002\u7f16\u8f91\u914d\u7f6e\u6587\u4ef6\u53ef\u4ee5\u53c2\u8003\u4e0b\u547d\u4ee4: sudo vim /usr/bin/blikvm/package.json \u70b9\u51fb\u5de6\u4e0b\u89d2\u7684MORE\uff0c\u627e\u5230BliKVM switch\u8fd9\u4e00\u680f\uff0c\u8fdb\u884c\u5207\u6362\u9009\u62e9\u5373\u53ef\u3002\u6ce8\u610f\u5bf9\u5e94\u901a\u9053\u84dd\u8272\u5c0f\u70b9\u95ea\u52a8\u8868\u793a\u8bc6\u522b\u5230\u4e86switch\u63d2\u5165\uff0c\u5e76\u4e14\u6b63\u5904\u4e8e\u5f53\u524d\u901a\u9053\uff0c\u82e5\u65e0\u84dd\u8272\u5c0f\u70b9\u5219\u8868\u793a\u672a\u8bc6\u522b\u5230switch\u63d2\u5165\u3002\" \u82e5\u60a8\u4f7f\u7528\u7684PiKVM\u8f6f\u4ef6\uff0c\u8bf7\u6309\u7167\u4e0b\u9762\u7684\u8bf4\u660e\u8fdb\u884c\u914d\u7f6e \u901a\u8fc7SSH\u767b\u9646PiKVM\uff0c\u7528\u6237\u540d\u548c\u5bc6\u7801\u5747\u4e3aroot; \u7ec8\u7aef\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u7cfb\u7edf\u6539\u4e3a\u53ef\u8bfb\u5199\u7cfb\u7edf; \u7f16\u8f91 /etc/kvmd/override.yaml \u6b64\u6587\u4ef6\uff0c\u4f7f\u6539\u6587\u4ef6\u5305\u542b\u4e0b\u9762\u7684\u5185\u5bb9\uff0c\u5373\u5728\u539f\u6709\u5185\u5bb9\u540e\u8ffd\u52a0. kvmd: gpio: drivers: hk: type: xh_hk4401 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk pin: 0 mode: input ch1_led: driver: hk pin: 1 mode: input ch2_led: driver: hk pin: 2 mode: input ch3_led: driver: hk pin: 3 mode: input ch0_button: driver: hk pin: 0 mode: output switch: false ch1_button: driver: hk pin: 1 mode: output switch: false ch2_button: driver: hk pin: 2 mode: output switch: false ch3_button: driver: hk pin: 3 mode: output switch: false view: table: - [\"#Input 1\", ch0_led, ch0_button] - [\"#Input 2\", ch1_led, ch1_button] - [\"#Input 3\", ch2_led, ch2_button] - [\"#Input 4\", ch3_led, ch3_button] !!! warning \"\u4e0a\u8ff0\u914d\u7f6e\u57fa\u4e8e2022 pikvm\u56fe\u50cf\u3002\u5982\u679c\u60a8\u4f7f\u7528\u7684\u662f\u6700\u65b0\u7684pikvm\u6620\u50cf\u6216\u6700\u65b0\u7684\u8f6f\u4ef6\u7248\u672c\uff0c\u8bf7\u7f16\u8f91\u6587\u4ef6/etc/kvmd/override.yaml\u5e76\u6dfb\u52a0\u884c\uff1aprotocol:2\uff0c\u4f8b\u5b50\u5982\u4e0b:\" kvmd: gpio: drivers: hk: type: xh_hk4401 protocol: 2 device: /dev/ttyUSB0 scheme: ch0_led: driver: hk ... \u7ec8\u7aef\u4f7f\u7528 ro \u547d\u4ee4\u5c06\u7cfb\u7edf\u91cd\u65b0\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\u7cfb\u7edf\uff1b \u7ec8\u7aef\u4f7f\u7528 systemctl restart kvmd \u91cd\u542f\u670d\u52a1\u3002 \u8fdb\u5165PiKVM web\u754c\u9762\uff0c\u5e76\u5355\u51fb\u201cGPIO\u201d\u83dc\u5355\u3002\u60a8\u5e94\u8be5\u770b\u52304\u4e2a\u8f93\u5165\uff0c\u5176\u4e2d\u4e00\u4e2a\u8f93\u5165\u6709\u4e00\u4e2a\u7eff\u8272\u5706\u5708\uff0c\u8868\u793a\u5f53\u524d\u5df2\u9009\u4e2d\u3002\u5355\u51fb\u5176\u4ed6\u8f93\u5165\u4ee5\u66f4\u6539\u9009\u5b9a\u7684\u4e3b\u673a\u3002","title":"\u8f6f\u4ef6\u914d\u7f6e"},{"location":"switch-guide/#_4","text":"\u82e5\u60a8\u5e0c\u671b\u5c06blicube\u7684switch\u7528\u5728\u5176\u5b83\u5e73\u53f0\u4e0a\uff0c\u8bf7\u53c2\u8003\u4e0b\u9762\u7684\u534f\u8bae \u901a\u4fe1\u6ce2\u7279\u7387\u4e3a19200 \u5207\u6362\u52301\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW1\\r\\nG01gA \u5207\u6362\u52302\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW2\\r\\nG02gA \u5207\u6362\u52303\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW3\\r\\nG03gA \u5207\u6362\u52304\u901a\u9053\u53d1\u9001\u7ed9switch\u7684\u6d88\u606f\u4e3a SW4\\r\\nG04gA switch\u8fd4\u56de\u5f53\u524d\u6240\u5728\u901a\u9053\u6d88\u606f\u4e3a: G01gA , G02gA , G03gA , G04gA","title":"\u63a7\u5236\u534f\u8bae"},{"location":"switch-guide/#_5","text":"\u4ea7\u54c1 \u6570\u91cf \u5907\u6ce8\uff5c KVM Switch\u5207\u6362\u5668\uff084\u901a\u9053) 1 110mm * 60mm * 33mm USB\u684c\u9762\u63a7\u5236\u5668 1 USB\u6570\u636e\u7ebf 4 \u957f\u5ea6: 1.2m HDMI\uff08\u6807\u51c6\u63a5\u5934\uff09\u7ebf 4 \u957f\u5ea6: 1.5m USB\u7535\u6e90\u7ebf 1 \u957f\u5ea6: 0.8m KVM USB\u7ebf 1 \u957f\u5ea6: 1.5m USB\u684c\u9762\u63a7\u5236\u7ebf 1 \u957f\u5ea6: 1m","title":"\u53d1\u8d27\u6e05\u5355"},{"location":"tailscale/","text":"Tailscale VPN Tailscale \u53ef\u4ee5\u7528\u4e8e\u5c06\u60a8\u7684\u4e3b\u673a\u548cBliKVM\u5728\u516c\u7f51\u4e0b\u8fdb\u884c\u8bbf\u95ee\u3002\u8fd9\u662f\u4e00\u4e2a\u65b9\u4fbf\u4e14\u514d\u8d39\u7684\u7ec4\u7f51\u5de5\u5177\uff0c\u7528\u4e8e\u7ec4\u7ec7\u5c0f\u578bVPN\u7f51\u7edc\u3002\u672c\u6587\u6863\u63d0\u4f9b\u4e86\u4e00\u4e2a\u793a\u4f8b\uff0c\u7528\u4e8e\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95ee\u60a8\u7684BliKVM\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528Zerotier\u6216\u8005\u5176\u5b83VPN\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u672c\u652f\u6301\u7684\u793a\u4f8b\uff0c\u9047\u5230\u4efb\u4f55\u95ee\u9898\u53ef\u4ee5\u53bbTailscale\u5b98\u7f51\u67e5\u627e\u3002 BliKVM\u5b89\u88c5Tailscale \u9996\u5148\u786e\u8ba4\u5f53\u524d\u7cfb\u7edf\u662f\u8bfb\u5199\u6743\u9650\uff0c\u82e5\u662f\u53ea\u8bfb\u7cfb\u7edf\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8fdb\u884c \u5b89\u88c5 : curl -fsSL https://tailscale.com/install.sh | sh \u6709\u4e00\u4e9b\u5730\u533a\u5982\u4e2d\u56fd\uff0c\u6709\u53ef\u80fd\u4f1a\u56e0\u4e3a\u7f51\u7edc\u539f\u56e0\u65e0\u6cd5\u987a\u5229\u4e0b\u8f7d\uff0c\u8bf7\u6b63\u786e\u914d\u7f6e\u7f51\u7edc \u4f7fBliKVM\u52a0\u5165\u5230\u4f60\u7684Tailscale\u5c40\u57df\u7f51\u4e2d \u5728\u5b98\u7f51\u6ce8\u518c\u4f60\u7684tailscale\u8d26\u6237\uff0c\u5e76\u5728\u8bbe\u7f6e\u4e2d\u751f\u6210\u4f60\u81ea\u5df1\u7684keys\uff0c\u5728BliKVM\u7ec8\u7aef\u4e0a\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\uff0c\u5373\u53ef\u5c06BliKVM\u52a0\u5165\u5230tailscale\u751f\u6210\u7684\u5c40\u57df\u7f51\u4e2d\u3002 sudo tailscale up --authkey=your-auth-key --accept-routes \u82e5\u4e00\u5207\u987a\u5229\uff0c\u4f60\u5728BliKMV\u7ec8\u7aef\u8fd0\u884c ip addr show tailscale0 \uff0c\u5373\u53ef\u67e5\u770b\u5230tailscale0\u751f\u6210\u7684\u865a\u62df\u5c40\u57df\u7f51\u7684ip\u5730\u5740\uff0c\u4e00\u4e2a\u4f8b\u5b50\u5982\u4e0b\uff1a 3: tailscale0: mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 100.126.223.28/32 scope global tailscale0 valid_lft forever preferred_lft forever inet6 fd7a:115c:a1e0:ab12:4843:cd96:627e:df1c/128 scope global valid_lft forever preferred_lft forever inet6 fe80::8955:99dc:4e7d:b08b/64 scope link stable-privacy valid_lft forever preferred_lft forever \u5176\u4e2d100.126.223.28\u5c31\u662f\u53ef\u4ee5\u7528\u6765\u5728\u4e3b\u673a\u4e0a\u8bbf\u95eeBliKVM web\u754c\u9762\u7684UI\u5730\u5740\u3002 \u4e3b\u673a\u5b89\u88c5Tailscale \u5c06Tailscale \u4e0b\u8f7d \u5e76\u5b89\u88c5\u5230\u60a8\u7684\u63a7\u5236\u4e3b\u673a\u4e0a\uff0c\u767b\u5f55\u5bf9\u5e94\u7684\u8d26\u6237\uff0c\u7136\u540e\u60a8\u53ef\u4ee5\u5728Tailscale\u7684 \u63a7\u5236\u754c\u9762 \uff0c\u67e5\u770b\u60a8\u7684\u4e24\u53f0\u673a\u5668\u662f\u5426\u90fd\u5728\u7ebf\uff0c\u5982\u679c\u90fd\u5728\u7ebf\uff0c\u5373\u53ef\u4f7f\u7528\u4e0b\u9762\u5730\u5740\uff0c\u5728\u60a8\u7684\u63a7\u5236\u4e3b\u673a\u4e0a\u8bbf\u95eeBliKVM http://","title":"Tailscale VPN"},{"location":"tailscale/#tailscale-vpn","text":"Tailscale \u53ef\u4ee5\u7528\u4e8e\u5c06\u60a8\u7684\u4e3b\u673a\u548cBliKVM\u5728\u516c\u7f51\u4e0b\u8fdb\u884c\u8bbf\u95ee\u3002\u8fd9\u662f\u4e00\u4e2a\u65b9\u4fbf\u4e14\u514d\u8d39\u7684\u7ec4\u7f51\u5de5\u5177\uff0c\u7528\u4e8e\u7ec4\u7ec7\u5c0f\u578bVPN\u7f51\u7edc\u3002\u672c\u6587\u6863\u63d0\u4f9b\u4e86\u4e00\u4e2a\u793a\u4f8b\uff0c\u7528\u4e8e\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95ee\u60a8\u7684BliKVM\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528Zerotier\u6216\u8005\u5176\u5b83VPN\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u672c\u652f\u6301\u7684\u793a\u4f8b\uff0c\u9047\u5230\u4efb\u4f55\u95ee\u9898\u53ef\u4ee5\u53bbTailscale\u5b98\u7f51\u67e5\u627e\u3002","title":"Tailscale VPN"},{"location":"tailscale/#blikvmtailscale","text":"\u9996\u5148\u786e\u8ba4\u5f53\u524d\u7cfb\u7edf\u662f\u8bfb\u5199\u6743\u9650\uff0c\u82e5\u662f\u53ea\u8bfb\u7cfb\u7edf\u4f7f\u7528 rw \u547d\u4ee4\u4f7f\u7cfb\u7edf\u53ef\u5199\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u8fdb\u884c \u5b89\u88c5 : curl -fsSL https://tailscale.com/install.sh | sh \u6709\u4e00\u4e9b\u5730\u533a\u5982\u4e2d\u56fd\uff0c\u6709\u53ef\u80fd\u4f1a\u56e0\u4e3a\u7f51\u7edc\u539f\u56e0\u65e0\u6cd5\u987a\u5229\u4e0b\u8f7d\uff0c\u8bf7\u6b63\u786e\u914d\u7f6e\u7f51\u7edc","title":"BliKVM\u5b89\u88c5Tailscale"},{"location":"tailscale/#blikvmtailscale_1","text":"\u5728\u5b98\u7f51\u6ce8\u518c\u4f60\u7684tailscale\u8d26\u6237\uff0c\u5e76\u5728\u8bbe\u7f6e\u4e2d\u751f\u6210\u4f60\u81ea\u5df1\u7684keys\uff0c\u5728BliKVM\u7ec8\u7aef\u4e0a\uff0c\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\uff0c\u5373\u53ef\u5c06BliKVM\u52a0\u5165\u5230tailscale\u751f\u6210\u7684\u5c40\u57df\u7f51\u4e2d\u3002 sudo tailscale up --authkey=your-auth-key --accept-routes \u82e5\u4e00\u5207\u987a\u5229\uff0c\u4f60\u5728BliKMV\u7ec8\u7aef\u8fd0\u884c ip addr show tailscale0 \uff0c\u5373\u53ef\u67e5\u770b\u5230tailscale0\u751f\u6210\u7684\u865a\u62df\u5c40\u57df\u7f51\u7684ip\u5730\u5740\uff0c\u4e00\u4e2a\u4f8b\u5b50\u5982\u4e0b\uff1a 3: tailscale0: mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 100.126.223.28/32 scope global tailscale0 valid_lft forever preferred_lft forever inet6 fd7a:115c:a1e0:ab12:4843:cd96:627e:df1c/128 scope global valid_lft forever preferred_lft forever inet6 fe80::8955:99dc:4e7d:b08b/64 scope link stable-privacy valid_lft forever preferred_lft forever \u5176\u4e2d100.126.223.28\u5c31\u662f\u53ef\u4ee5\u7528\u6765\u5728\u4e3b\u673a\u4e0a\u8bbf\u95eeBliKVM web\u754c\u9762\u7684UI\u5730\u5740\u3002","title":"\u4f7fBliKVM\u52a0\u5165\u5230\u4f60\u7684Tailscale\u5c40\u57df\u7f51\u4e2d"},{"location":"tailscale/#tailscale","text":"\u5c06Tailscale \u4e0b\u8f7d \u5e76\u5b89\u88c5\u5230\u60a8\u7684\u63a7\u5236\u4e3b\u673a\u4e0a\uff0c\u767b\u5f55\u5bf9\u5e94\u7684\u8d26\u6237\uff0c\u7136\u540e\u60a8\u53ef\u4ee5\u5728Tailscale\u7684 \u63a7\u5236\u754c\u9762 \uff0c\u67e5\u770b\u60a8\u7684\u4e24\u53f0\u673a\u5668\u662f\u5426\u90fd\u5728\u7ebf\uff0c\u5982\u679c\u90fd\u5728\u7ebf\uff0c\u5373\u53ef\u4f7f\u7528\u4e0b\u9762\u5730\u5740\uff0c\u5728\u60a8\u7684\u63a7\u5236\u4e3b\u673a\u4e0a\u8bbf\u95eeBliKVM http://","title":"\u4e3b\u673a\u5b89\u88c5Tailscale"},{"location":"update/","text":"\u8f6f\u4ef6\u66f4\u65b0\u4ecb\u7ecd \u4ecb\u7ecd BLIKVM\u9879\u76ee\u76ee\u524d\u53ef\u7528\u7248\u672c\u6258\u7ba1\u5728github\u4ed3\u5e93\u7684release\u5305\u91cc\uff0c\u66f4\u65b0\u8f6f\u4ef6\u529f\u80fd\u9700\u4fdd\u6301\u8bbe\u5907\u8054\u7f51\uff0c\u66f4\u65b0\u8f6f\u4ef6\u76ee\u524d\u63d0\u4f9b\u4e24\u79cd\u65b9\u5f0f \u65b9\u5f0f1\uff0c\u901a\u8fc7web\u754c\u9762\u70b9\u51fb\u66f4\u65b0\u6309\u94ae\uff0c\u7a0b\u5e8f\u81ea\u52a8\u8fdb\u884c\u66f4\u65b0,\u66f4\u65b0\u5b8c\u9700\u8981\u91cd\u542f\u3002 \u65b9\u5f0f2\uff0c\u624b\u52a8\u5728KVM\u7ec8\u7aef\u4e0a\u8fd0\u884c\u811a\u672c\u8fdb\u884c\u66f4\u65b0\uff0c\u66f4\u65b0\u5b8c\u540e\u9700\u8981\u91cd\u542f\u3002 \u5347\u7ea7\u9519\u8bef\u5e38\u89c1\u539f\u56e0 \u8bbe\u5907\u672a\u8054\u7f51; \u7f51\u7edc\u8bbf\u95eegithub\u53d7\u9650; \u6211\u4eec\u5f3a\u70c8\u5efa\u8bae\u60a8\u5728\u9760\u8fd1\u8981\u5347\u7ea7\u7684BliKVM\u786c\u4ef6\u65f6\u6267\u884c\u66f4\u65b0\u3002\u539f\u56e0\u662f\uff0c\u5982\u679c\u51fa\u73b0\u4efb\u4f55\u95ee\u9898\uff0c\u4f60\u53ef\u4ee5\u8fdb\u884c\u5e72\u9884\u3002 \u5982\u679c\u60a8\u719f\u6089\u547d\u4ee4\u884c\u64cd\u4f5c\uff0c\u5efa\u8bae\u60a8\u624b\u52a8\u66f4\u65b0\u53ef\u4ee5\u5b9e\u65f6\u67e5\u770b\u547d\u4ee4\u884c\u72b6\u6001\u3002 \u82e5\u66f4\u65b0\u5f02\u5e38\uff0cweb\u754c\u9762\u65e0\u6cd5\u9000\u51fa\u66f4\u65b0\u72b6\u6001\uff0c\u53ef\u4ee5\u7ec8\u7aefssh\u8fdb\u5165kvm\u540e\u91cd\u542f\u6062\u590d\u3002 \u624b\u52a8\u8fd0\u884c\u811a\u672c\u66f4\u65b0 ssh\u8fdb\u5165\u8bbe\u5907\u7ec8\u7aef\u3002\u82e5\u5f53\u524d\u7cfb\u7edf\u7ec8\u7aef\u53ef\u4ee5\u770b\u5230ro\u5173\u952e\u5b57\uff0c\u4e3a\u53ea\u8bfb\u7cfb\u7edf\uff0c\u9700\u4f7f\u7528 rw \u8ba9\u7cfb\u7edf\u4e3a\u53ef\u5199\u6743\u9650\u3002 sudo -i cd /opt/bin/blikvm/ git pull --rebase python3 /opt/bin/blikvm/script/update.py //\u5982\u679c\u4f60\u60f3\u6d4b\u8bd5\u6700\u65b0\u7684\u6d4b\u8bd5\u7248\u672c\uff0c\u4f7f\u7528\u4e0b\u9762\u7684\u547d\u4ee4 python3 /opt/bin/blikvm/script/update.py alpha \u89c2\u5bdf\u7ec8\u7aef\u8f93\u51fa\uff0c\u5f53\u770b\u5230\u5347\u7ea7\u5347\u7ea7\u6210\u529f\u6d88\u606f\u63d0\u9192\u65f6\uff0c\u7ec8\u7aef\u8f93\u5165reboot\uff0c\u91cd\u542f\u751f\u6548\u3002 \u82e5\u60a8\u56e0\u7f51\u7edc\u539f\u56e0\uff0c\u4e00\u76f4\u65e0\u6cd5\u66f4\u65b0\u6210\u529f\uff0c\u53ef\u4ee5\u91c7\u7528\u5728\u5176\u5b83\u7f51\u7edcok\u7684PC\u4e0a\u4e0b\u8f7d\u6700\u65b0\u7684release\u5305\uff0c\u7136\u540e\u6309\u7167\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\u3002 \u4e0b\u8f7d\u5730\u5740: https://github.com/ThomasVon2021/blikvm/releases \u5176\u4e2dv1 v2 v3\u786c\u4ef6\u4f7f\u7528 release.tar.gz v4\u786c\u4ef6\u4f7f\u7528 release-h616-v4.tar.gz ssh\u8fdb\u5165\u8bbe\u5907\u7ec8\u7aef\uff0c\u5e76\u4f7f\u7528 tar -zxvf release.tar.gz \u89e3\u538brelease.tar.gz\u3002 sudo -i cd /your release path/ python3 install_release.py --releasepath=./ \u53ef\u4ee5\u89c2\u5bdf/usr/bin/blikvm/package.json\u524d\u540e\u7684\u7248\u672c\u5bf9\u6bd4\uff0c\u82e5\u5347\u7ea7\u5230\u4e86\u6307\u5b9a\u7248\u672c\uff0c\u5219\u6210\u529f\uff0c\u91cd\u542f\u751f\u6548\u3002","title":"\u66f4\u65b0\u8f6f\u4ef6"},{"location":"update/#_1","text":"","title":"\u8f6f\u4ef6\u66f4\u65b0\u4ecb\u7ecd"},{"location":"update/#_2","text":"BLIKVM\u9879\u76ee\u76ee\u524d\u53ef\u7528\u7248\u672c\u6258\u7ba1\u5728github\u4ed3\u5e93\u7684release\u5305\u91cc\uff0c\u66f4\u65b0\u8f6f\u4ef6\u529f\u80fd\u9700\u4fdd\u6301\u8bbe\u5907\u8054\u7f51\uff0c\u66f4\u65b0\u8f6f\u4ef6\u76ee\u524d\u63d0\u4f9b\u4e24\u79cd\u65b9\u5f0f \u65b9\u5f0f1\uff0c\u901a\u8fc7web\u754c\u9762\u70b9\u51fb\u66f4\u65b0\u6309\u94ae\uff0c\u7a0b\u5e8f\u81ea\u52a8\u8fdb\u884c\u66f4\u65b0,\u66f4\u65b0\u5b8c\u9700\u8981\u91cd\u542f\u3002 \u65b9\u5f0f2\uff0c\u624b\u52a8\u5728KVM\u7ec8\u7aef\u4e0a\u8fd0\u884c\u811a\u672c\u8fdb\u884c\u66f4\u65b0\uff0c\u66f4\u65b0\u5b8c\u540e\u9700\u8981\u91cd\u542f\u3002 \u5347\u7ea7\u9519\u8bef\u5e38\u89c1\u539f\u56e0 \u8bbe\u5907\u672a\u8054\u7f51; \u7f51\u7edc\u8bbf\u95eegithub\u53d7\u9650; \u6211\u4eec\u5f3a\u70c8\u5efa\u8bae\u60a8\u5728\u9760\u8fd1\u8981\u5347\u7ea7\u7684BliKVM\u786c\u4ef6\u65f6\u6267\u884c\u66f4\u65b0\u3002\u539f\u56e0\u662f\uff0c\u5982\u679c\u51fa\u73b0\u4efb\u4f55\u95ee\u9898\uff0c\u4f60\u53ef\u4ee5\u8fdb\u884c\u5e72\u9884\u3002 \u5982\u679c\u60a8\u719f\u6089\u547d\u4ee4\u884c\u64cd\u4f5c\uff0c\u5efa\u8bae\u60a8\u624b\u52a8\u66f4\u65b0\u53ef\u4ee5\u5b9e\u65f6\u67e5\u770b\u547d\u4ee4\u884c\u72b6\u6001\u3002 \u82e5\u66f4\u65b0\u5f02\u5e38\uff0cweb\u754c\u9762\u65e0\u6cd5\u9000\u51fa\u66f4\u65b0\u72b6\u6001\uff0c\u53ef\u4ee5\u7ec8\u7aefssh\u8fdb\u5165kvm\u540e\u91cd\u542f\u6062\u590d\u3002","title":"\u4ecb\u7ecd"},{"location":"update/#_3","text":"ssh\u8fdb\u5165\u8bbe\u5907\u7ec8\u7aef\u3002\u82e5\u5f53\u524d\u7cfb\u7edf\u7ec8\u7aef\u53ef\u4ee5\u770b\u5230ro\u5173\u952e\u5b57\uff0c\u4e3a\u53ea\u8bfb\u7cfb\u7edf\uff0c\u9700\u4f7f\u7528 rw \u8ba9\u7cfb\u7edf\u4e3a\u53ef\u5199\u6743\u9650\u3002 sudo -i cd /opt/bin/blikvm/ git pull --rebase python3 /opt/bin/blikvm/script/update.py //\u5982\u679c\u4f60\u60f3\u6d4b\u8bd5\u6700\u65b0\u7684\u6d4b\u8bd5\u7248\u672c\uff0c\u4f7f\u7528\u4e0b\u9762\u7684\u547d\u4ee4 python3 /opt/bin/blikvm/script/update.py alpha \u89c2\u5bdf\u7ec8\u7aef\u8f93\u51fa\uff0c\u5f53\u770b\u5230\u5347\u7ea7\u5347\u7ea7\u6210\u529f\u6d88\u606f\u63d0\u9192\u65f6\uff0c\u7ec8\u7aef\u8f93\u5165reboot\uff0c\u91cd\u542f\u751f\u6548\u3002 \u82e5\u60a8\u56e0\u7f51\u7edc\u539f\u56e0\uff0c\u4e00\u76f4\u65e0\u6cd5\u66f4\u65b0\u6210\u529f\uff0c\u53ef\u4ee5\u91c7\u7528\u5728\u5176\u5b83\u7f51\u7edcok\u7684PC\u4e0a\u4e0b\u8f7d\u6700\u65b0\u7684release\u5305\uff0c\u7136\u540e\u6309\u7167\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\u3002 \u4e0b\u8f7d\u5730\u5740: https://github.com/ThomasVon2021/blikvm/releases \u5176\u4e2dv1 v2 v3\u786c\u4ef6\u4f7f\u7528 release.tar.gz v4\u786c\u4ef6\u4f7f\u7528 release-h616-v4.tar.gz ssh\u8fdb\u5165\u8bbe\u5907\u7ec8\u7aef\uff0c\u5e76\u4f7f\u7528 tar -zxvf release.tar.gz \u89e3\u538brelease.tar.gz\u3002 sudo -i cd /your release path/ python3 install_release.py --releasepath=./ \u53ef\u4ee5\u89c2\u5bdf/usr/bin/blikvm/package.json\u524d\u540e\u7684\u7248\u672c\u5bf9\u6bd4\uff0c\u82e5\u5347\u7ea7\u5230\u4e86\u6307\u5b9a\u7248\u672c\uff0c\u5219\u6210\u529f\uff0c\u91cd\u542f\u751f\u6548\u3002","title":"\u624b\u52a8\u8fd0\u884c\u811a\u672c\u66f4\u65b0"},{"location":"usb-splitter-guide/","text":"USB\u548c\u7535\u6e90\u5206\u7ebf\u677f 1. \u7b80\u4ecb The adaptor allows the Raspberry Pi 4 to be used with a Pi USB-C power supply while allowing access to USB OTG data over a separate USB-C connection. USB-C (RPI4) <> USB-C (USB) and USB-C (PWR) USB-C(RPI4) USB Type-C(USB) USB Type-C(PWR) 5V 5V D- D- D+ D+ CC1 10k to 5V CC1 5.1k to GND CC1 5.1k to GND CC2 10k to 5V CC2 5.1k to GND CC2 5.1k to GND GND GND GND To use the adaptor with the Raspberry Pi 4 you need. USB-C to USB-C cable[1] between Pi4 and the adaptor board USB-C to USB-C or Type-A between adaptor board and PC Power[2] via Official Raspberry Pi USB Type-C Power Supply. [1] Whilst USB-C cables are generally designed for higher current I still advise using short power cable to the Pi where possible to reduce voltage drop. [2] PLEASE NOTE With the Pu/Pd resistors on this board it can only be used with 5V supply to power a 5V device. An adaptor of this kind does not fall within the USB specification. It's designed for use with the official Raspberry Pi USB-C power supply and raspberry pi, use with other power supplies/chargers and devices may cause issues/damage. 2.\u5c3a\u5bf8\u56fe 3.\u6d4b\u8bd5\u89c6\u9891 USB splitter Video 4.3D \u6253\u5370\u5916\u58f3 A simple snap fit case for the USB splitter. \u4e0b\u8f7d\u6587\u4ef6","title":"USB\u4e00\u5206\u4e8c\u7528\u6237\u624b\u518c"},{"location":"usb-splitter-guide/#usb","text":"","title":"USB\u548c\u7535\u6e90\u5206\u7ebf\u677f"},{"location":"usb-splitter-guide/#1","text":"The adaptor allows the Raspberry Pi 4 to be used with a Pi USB-C power supply while allowing access to USB OTG data over a separate USB-C connection. USB-C (RPI4) <> USB-C (USB) and USB-C (PWR) USB-C(RPI4) USB Type-C(USB) USB Type-C(PWR) 5V 5V D- D- D+ D+ CC1 10k to 5V CC1 5.1k to GND CC1 5.1k to GND CC2 10k to 5V CC2 5.1k to GND CC2 5.1k to GND GND GND GND To use the adaptor with the Raspberry Pi 4 you need. USB-C to USB-C cable[1] between Pi4 and the adaptor board USB-C to USB-C or Type-A between adaptor board and PC Power[2] via Official Raspberry Pi USB Type-C Power Supply. [1] Whilst USB-C cables are generally designed for higher current I still advise using short power cable to the Pi where possible to reduce voltage drop. [2] PLEASE NOTE With the Pu/Pd resistors on this board it can only be used with 5V supply to power a 5V device. An adaptor of this kind does not fall within the USB specification. It's designed for use with the official Raspberry Pi USB-C power supply and raspberry pi, use with other power supplies/chargers and devices may cause issues/damage.","title":"1. \u7b80\u4ecb"},{"location":"usb-splitter-guide/#2","text":"","title":"2.\u5c3a\u5bf8\u56fe"},{"location":"usb-splitter-guide/#3","text":"USB splitter Video","title":"3.\u6d4b\u8bd5\u89c6\u9891"},{"location":"usb-splitter-guide/#43d","text":"A simple snap fit case for the USB splitter. \u4e0b\u8f7d\u6587\u4ef6","title":"4.3D \u6253\u5370\u5916\u58f3"},{"location":"wake-on-lan/","text":"Wake-on-LAN \u4ecb\u7ecd Wake-on-LAN\u7b80\u79f0WOL\u6216WoL\uff0c\u529f\u80fd\u4e3a\u8ba9\u5df2\u7ecf\u8fdb\u5165\u4f11\u7720\u72b6\u6001\u6216\u5173\u673a\u72b6\u6001\u7684\u8ba1\u7b97\u673a\uff0cKVM\u901a\u8fc7\u5c40\u57df\u7f51\u53d1\u9001\u7279\u5b9a\u6d88\u606f\uff0c\u4f7f\u88ab\u63a7\u7535\u8111\u4ece\u4f11\u7720\u72b6\u6001\u6216\u5173\u673a\u72b6\u6001\u6539\u4e3a\u5f00\u673a\u72b6\u6001\u3002WoL\u9700\u88ab\u63a7\u7535\u8111\u652f\u6301\uff0c\u5426\u5219\u8be5\u529f\u80fd\u65e0\u6548\uff0c\u53e6\u5916\u9700\u786e\u8ba4WoL\u5df2\u88ab\u5f00\u542f\u548c\u6b63\u786e\u914d\u7f6e\u3002\u4f7f\u7528\u6b64\u529f\u80fd\uff0c\u4e0d\u9700\u8981\u4f7f\u7528atx\u529f\u80fd\u4e5f\u53ef\u4ee5\u5b9e\u73b0\u5f00\u673a\u3002\u82e5\u7528\u6237\u5728\u4f7f\u7528kvm\u7684WoL\u7684\u9047\u5230\u5f02\u5e38\uff0c\u53ef\u5c1d\u8bd5\u4f7f\u7528\u652f\u6301WoL\u7684\u8f6f\u4ef6\u8fdb\u884c\u6d4b\u8bd5\u3002 \u4f7f\u7528\u65b9\u6cd5","title":"Wake-on-LAN"},{"location":"wake-on-lan/#wake-on-lan","text":"","title":"Wake-on-LAN"},{"location":"wake-on-lan/#_1","text":"Wake-on-LAN\u7b80\u79f0WOL\u6216WoL\uff0c\u529f\u80fd\u4e3a\u8ba9\u5df2\u7ecf\u8fdb\u5165\u4f11\u7720\u72b6\u6001\u6216\u5173\u673a\u72b6\u6001\u7684\u8ba1\u7b97\u673a\uff0cKVM\u901a\u8fc7\u5c40\u57df\u7f51\u53d1\u9001\u7279\u5b9a\u6d88\u606f\uff0c\u4f7f\u88ab\u63a7\u7535\u8111\u4ece\u4f11\u7720\u72b6\u6001\u6216\u5173\u673a\u72b6\u6001\u6539\u4e3a\u5f00\u673a\u72b6\u6001\u3002WoL\u9700\u88ab\u63a7\u7535\u8111\u652f\u6301\uff0c\u5426\u5219\u8be5\u529f\u80fd\u65e0\u6548\uff0c\u53e6\u5916\u9700\u786e\u8ba4WoL\u5df2\u88ab\u5f00\u542f\u548c\u6b63\u786e\u914d\u7f6e\u3002\u4f7f\u7528\u6b64\u529f\u80fd\uff0c\u4e0d\u9700\u8981\u4f7f\u7528atx\u529f\u80fd\u4e5f\u53ef\u4ee5\u5b9e\u73b0\u5f00\u673a\u3002\u82e5\u7528\u6237\u5728\u4f7f\u7528kvm\u7684WoL\u7684\u9047\u5230\u5f02\u5e38\uff0c\u53ef\u5c1d\u8bd5\u4f7f\u7528\u652f\u6301WoL\u7684\u8f6f\u4ef6\u8fdb\u884c\u6d4b\u8bd5\u3002","title":"\u4ecb\u7ecd"},{"location":"wake-on-lan/#_2","text":"","title":"\u4f7f\u7528\u65b9\u6cd5"},{"location":"wifi/","text":"Wifi\u529f\u80fd \u7531\u4e8eBLIKVM\u6709\u591a\u6b3e\u786c\u4ef6\uff0c\u652f\u6301\u4e0d\u540c\u7684OS\uff0c\u5982BLIKVM OS\u548cPiKVM OS\uff0c\u4e0d\u540cOS\u94fe\u63a5wifi\u65b9\u5f0f\u4e0d\u4e00\u5b9a\u76f8\u540c\uff0c\u8bf7\u5728\u4f7f\u7528\u672c\u6587\u6863\u65b9\u6cd5\u524d\uff0c\u8bf7\u786e\u8ba4\u81ea\u5df1\u786c\u4ef6\u548c\u4f7f\u7528OS\u7684\u60c5\u51b5\u3002 \u8bf7\u786e\u8ba4\u4f60\u4f7f\u7528\u7684\u786c\u4ef6\u652f\u6301wifi\u529f\u80fd\uff0c\u5982CM400200\u7248\u672c\u4e0d\u5e26wifi\u529f\u80fd\uff1b \u82e5KVM\u786c\u4ef6\u7684SOC\u4e3aCM4\uff0c\u8bf7\u786e\u8ba4\u662f\u5426\u8fde\u63a5\u4e86wifi\u5929\u7ebf\uff1b PiKVM OS\u4e3aarch linux\uff1b BLIKVM OS\u6811\u8393\u6d3e\u7cfb\u5217\u4e3adebian\u7cfb\u7edf\uff0cv4\u7cfb\u5217\u4e3aarmbian\u7cfb\u7edf\uff1b v1\uff0cv2\uff0cv3\u786c\u4ef6\u4f7f\u7528\u7684\u4e3a\u6811\u8393\u6d3edebian\u7cfb\u7edf\uff0c\u4f7f\u7528raspi-config\u8fdb\u884cwifi\u94fe\u63a5 \u767b\u5f55ssh,\u547d\u4ee4: ssh blikvm@ip \u7cfb\u7edf\u91cd\u52a0\u8f7d\u4e3a\u53ef\u5199, \u547d\u4ee4: rw \u542f\u52a8raspi-config, \u547d\u4ee4: sudo raspi-config \u9009\u62e9 System Options \u9009\u62e9 Wireless LAN \u9009\u62e9wifi\u6240\u5728\u56fd\u5bb6,\u4e2d\u56fd\u9009CN, \u5982\u679c\u4ee5\u524d\u8bbe\u7f6e\u8fc7,\u8fd9\u4e00\u6b65\u4f1a\u8df3\u8fc7\u76f4\u63a5\u52307 \u8f93\u5165Wi-Fi\u7684ssid(\u540d\u79f0) \u8f93\u5165Wi-Fi\u7684\u5bc6\u7801,\u5982\u679c\u6ca1\u6709\u5bc6\u7801\u76f4\u63a5\u56de\u8f66 \u8fd9\u65f6\u4f1a\u56de\u5230\u6b65\u9aa44\u7684\u754c\u9762,\u6309tab\u952e\u9009\u62e9 ,\u56de\u8f66 \u67e5\u770b\u662f\u5426\u8fde\u4e0awifi, \u547d\u4ee4: ifconfig wlan0 ,\u5982\u679c\u770b\u5230\u83b7\u53d6\u5230ip\u5c31\u662f\u5df2\u7ecf\u8fde\u4e0a\u4e86 \u5c06\u7cfb\u7edf\u6302\u8f7d\u4e3a\u53ea\u8bfb, \u547d\u4ee4: ro v4\u786c\u4ef6\u4f7f\u7528\u7684\u4e3aarmbian\u7cfb\u7edf\uff0c\u4f7f\u7528armbian-config \u767b\u5f55ssh,\u547d\u4ee4: ssh blikvm@ip\uff0c\u767b\u5f55\u5230 Armbian \u7cfb\u7edf\u3002 \u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\u4ee5\u542f\u52a8 armbian-config \u5de5\u5177\uff1a sudo armbian-config \u5728 armbian-config \u83dc\u5355\u4e2d\uff0c\u4f7f\u7528\u65b9\u5411\u952e\u548c\u56de\u8f66\u952e\u5bfc\u822a\u548c\u9009\u62e9\u9009\u9879\u3002 \u4f7f\u7528\u65b9\u5411\u952e\u5411\u4e0b\u6eda\u52a8\u5230 \"Network\" \u9009\u9879\uff0c\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165\u5b50\u83dc\u5355\u3002 \u5728 \"Network\" \u5b50\u83dc\u5355\u4e2d\uff0c\u9009\u62e9 \"Wireless\" \u9009\u9879\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165 Wi-Fi \u914d\u7f6e\u83dc\u5355\u3002 \u5728 Wi-Fi \u914d\u7f6e\u83dc\u5355\u4e2d\uff0c\u9009\u62e9 \"Connect to Wi-Fi\" \u9009\u9879\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165 Wi-Fi \u8fde\u63a5\u8bbe\u7f6e\u3002 armbian-config \u5c06\u5217\u51fa\u53ef\u7528\u7684\u65e0\u7ebf\u7f51\u7edc\u63a5\u53e3\u548c\u5df2\u914d\u7f6e\u7684\u7f51\u7edc\u3002\u9009\u62e9\u8981\u8fde\u63a5\u7684\u65e0\u7ebf\u7f51\u7edc\u63a5\u53e3\u5e76\u6309\u56de\u8f66\u952e\u3002 armbian-config \u5c06\u663e\u793a\u53ef\u7528\u7684 Wi-Fi \u7f51\u7edc\u5217\u8868\u3002\u4f7f\u7528\u65b9\u5411\u952e\u9009\u62e9\u8981\u8fde\u63a5\u7684 Wi-Fi \u7f51\u7edc\u5e76\u6309\u56de\u8f66\u952e\u3002 \u5982\u679c Wi-Fi \u7f51\u7edc\u53d7\u5230\u5bc6\u7801\u4fdd\u62a4\uff0c armbian-config \u5c06\u63d0\u793a\u60a8\u8f93\u5165 Wi-Fi \u5bc6\u7801\u3002\u8f93\u5165\u5bc6\u7801\u5e76\u6309\u56de\u8f66\u952e\u3002 \u7b49\u5f85\u7247\u523b\uff0cArmbian \u7cfb\u7edf\u5c06\u5c1d\u8bd5\u8fde\u63a5\u5230\u6307\u5b9a\u7684 Wi-Fi \u7f51\u7edc\u3002\u5982\u679c\u8fde\u63a5\u6210\u529f\uff0c\u60a8\u5c06\u5728\u5c4f\u5e55\u4e0a\u770b\u5230\u76f8\u5e94\u7684\u6d88\u606f\u3002 \u9000\u51fa armbian-config \u5de5\u5177\u3002 \u8bf7\u6ce8\u610f\uff0c\u4e0a\u8ff0\u6b65\u9aa4\u4e2d\u7684\u83dc\u5355\u9009\u9879\u548c\u914d\u7f6e\u53ef\u80fd\u4f1a\u6839\u636e\u4e0d\u540c\u7248\u672c\u7684 Armbian \u7cfb\u7edf\u7565\u6709\u4e0d\u540c\u3002\u786e\u4fdd\u6839\u636e\u60a8\u7684\u7cfb\u7edf\u7248\u672c\u548c\u914d\u7f6e\u8fdb\u884c\u76f8\u5e94\u7684\u64cd\u4f5c\u3002","title":"Wifi\u914d\u7f6e"},{"location":"wifi/#wifi","text":"\u7531\u4e8eBLIKVM\u6709\u591a\u6b3e\u786c\u4ef6\uff0c\u652f\u6301\u4e0d\u540c\u7684OS\uff0c\u5982BLIKVM OS\u548cPiKVM OS\uff0c\u4e0d\u540cOS\u94fe\u63a5wifi\u65b9\u5f0f\u4e0d\u4e00\u5b9a\u76f8\u540c\uff0c\u8bf7\u5728\u4f7f\u7528\u672c\u6587\u6863\u65b9\u6cd5\u524d\uff0c\u8bf7\u786e\u8ba4\u81ea\u5df1\u786c\u4ef6\u548c\u4f7f\u7528OS\u7684\u60c5\u51b5\u3002 \u8bf7\u786e\u8ba4\u4f60\u4f7f\u7528\u7684\u786c\u4ef6\u652f\u6301wifi\u529f\u80fd\uff0c\u5982CM400200\u7248\u672c\u4e0d\u5e26wifi\u529f\u80fd\uff1b \u82e5KVM\u786c\u4ef6\u7684SOC\u4e3aCM4\uff0c\u8bf7\u786e\u8ba4\u662f\u5426\u8fde\u63a5\u4e86wifi\u5929\u7ebf\uff1b PiKVM OS\u4e3aarch linux\uff1b BLIKVM OS\u6811\u8393\u6d3e\u7cfb\u5217\u4e3adebian\u7cfb\u7edf\uff0cv4\u7cfb\u5217\u4e3aarmbian\u7cfb\u7edf\uff1b","title":"Wifi\u529f\u80fd"},{"location":"wifi/#v1v2v3debianraspi-configwifi","text":"\u767b\u5f55ssh,\u547d\u4ee4: ssh blikvm@ip \u7cfb\u7edf\u91cd\u52a0\u8f7d\u4e3a\u53ef\u5199, \u547d\u4ee4: rw \u542f\u52a8raspi-config, \u547d\u4ee4: sudo raspi-config \u9009\u62e9 System Options \u9009\u62e9 Wireless LAN \u9009\u62e9wifi\u6240\u5728\u56fd\u5bb6,\u4e2d\u56fd\u9009CN, \u5982\u679c\u4ee5\u524d\u8bbe\u7f6e\u8fc7,\u8fd9\u4e00\u6b65\u4f1a\u8df3\u8fc7\u76f4\u63a5\u52307 \u8f93\u5165Wi-Fi\u7684ssid(\u540d\u79f0) \u8f93\u5165Wi-Fi\u7684\u5bc6\u7801,\u5982\u679c\u6ca1\u6709\u5bc6\u7801\u76f4\u63a5\u56de\u8f66 \u8fd9\u65f6\u4f1a\u56de\u5230\u6b65\u9aa44\u7684\u754c\u9762,\u6309tab\u952e\u9009\u62e9 ,\u56de\u8f66 \u67e5\u770b\u662f\u5426\u8fde\u4e0awifi, \u547d\u4ee4: ifconfig wlan0 ,\u5982\u679c\u770b\u5230\u83b7\u53d6\u5230ip\u5c31\u662f\u5df2\u7ecf\u8fde\u4e0a\u4e86 \u5c06\u7cfb\u7edf\u6302\u8f7d\u4e3a\u53ea\u8bfb, \u547d\u4ee4: ro","title":"v1\uff0cv2\uff0cv3\u786c\u4ef6\u4f7f\u7528\u7684\u4e3a\u6811\u8393\u6d3edebian\u7cfb\u7edf\uff0c\u4f7f\u7528raspi-config\u8fdb\u884cwifi\u94fe\u63a5"},{"location":"wifi/#v4armbianarmbian-config","text":"\u767b\u5f55ssh,\u547d\u4ee4: ssh blikvm@ip\uff0c\u767b\u5f55\u5230 Armbian \u7cfb\u7edf\u3002 \u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\u4ee5\u542f\u52a8 armbian-config \u5de5\u5177\uff1a sudo armbian-config \u5728 armbian-config \u83dc\u5355\u4e2d\uff0c\u4f7f\u7528\u65b9\u5411\u952e\u548c\u56de\u8f66\u952e\u5bfc\u822a\u548c\u9009\u62e9\u9009\u9879\u3002 \u4f7f\u7528\u65b9\u5411\u952e\u5411\u4e0b\u6eda\u52a8\u5230 \"Network\" \u9009\u9879\uff0c\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165\u5b50\u83dc\u5355\u3002 \u5728 \"Network\" \u5b50\u83dc\u5355\u4e2d\uff0c\u9009\u62e9 \"Wireless\" \u9009\u9879\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165 Wi-Fi \u914d\u7f6e\u83dc\u5355\u3002 \u5728 Wi-Fi \u914d\u7f6e\u83dc\u5355\u4e2d\uff0c\u9009\u62e9 \"Connect to Wi-Fi\" \u9009\u9879\u5e76\u6309\u56de\u8f66\u952e\u8fdb\u5165 Wi-Fi \u8fde\u63a5\u8bbe\u7f6e\u3002 armbian-config \u5c06\u5217\u51fa\u53ef\u7528\u7684\u65e0\u7ebf\u7f51\u7edc\u63a5\u53e3\u548c\u5df2\u914d\u7f6e\u7684\u7f51\u7edc\u3002\u9009\u62e9\u8981\u8fde\u63a5\u7684\u65e0\u7ebf\u7f51\u7edc\u63a5\u53e3\u5e76\u6309\u56de\u8f66\u952e\u3002 armbian-config \u5c06\u663e\u793a\u53ef\u7528\u7684 Wi-Fi \u7f51\u7edc\u5217\u8868\u3002\u4f7f\u7528\u65b9\u5411\u952e\u9009\u62e9\u8981\u8fde\u63a5\u7684 Wi-Fi \u7f51\u7edc\u5e76\u6309\u56de\u8f66\u952e\u3002 \u5982\u679c Wi-Fi \u7f51\u7edc\u53d7\u5230\u5bc6\u7801\u4fdd\u62a4\uff0c armbian-config \u5c06\u63d0\u793a\u60a8\u8f93\u5165 Wi-Fi \u5bc6\u7801\u3002\u8f93\u5165\u5bc6\u7801\u5e76\u6309\u56de\u8f66\u952e\u3002 \u7b49\u5f85\u7247\u523b\uff0cArmbian \u7cfb\u7edf\u5c06\u5c1d\u8bd5\u8fde\u63a5\u5230\u6307\u5b9a\u7684 Wi-Fi \u7f51\u7edc\u3002\u5982\u679c\u8fde\u63a5\u6210\u529f\uff0c\u60a8\u5c06\u5728\u5c4f\u5e55\u4e0a\u770b\u5230\u76f8\u5e94\u7684\u6d88\u606f\u3002 \u9000\u51fa armbian-config \u5de5\u5177\u3002 \u8bf7\u6ce8\u610f\uff0c\u4e0a\u8ff0\u6b65\u9aa4\u4e2d\u7684\u83dc\u5355\u9009\u9879\u548c\u914d\u7f6e\u53ef\u80fd\u4f1a\u6839\u636e\u4e0d\u540c\u7248\u672c\u7684 Armbian \u7cfb\u7edf\u7565\u6709\u4e0d\u540c\u3002\u786e\u4fdd\u6839\u636e\u60a8\u7684\u7cfb\u7edf\u7248\u672c\u548c\u914d\u7f6e\u8fdb\u884c\u76f8\u5e94\u7684\u64cd\u4f5c\u3002","title":"v4\u786c\u4ef6\u4f7f\u7528\u7684\u4e3aarmbian\u7cfb\u7edf\uff0c\u4f7f\u7528armbian-config"},{"location":"zerotier/","text":"ZeroTier VPN ZeroTier \u5141\u8bb8\u901a\u8fc7 NAT \u5728\u53cc\u65b9\u4e4b\u95f4\u5b89\u5168\u8bbf\u95ee\u60a8\u7684 BliKVM\u3002\u5b83\u5141\u8bb8\u60a8\u6784\u5efa\u51e0\u4e4e\u4efb\u4f55\u7c7b\u578b\u7684\u73b0\u4ee3\u3001\u5b89\u5168\u7684\u591a\u70b9\u865a\u62df\u5316\u7f51\u7edc\u3002\u672c\u6587\u63d0\u4f9b\u4e86\u4e00\u4e2a\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95ee\u60a8\u7684 BliKVM \u7684\u793a\u4f8b\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528 Tailscale \u6216\u5176\u4ed6 VPN \u89e3\u51b3\u65b9\u6848\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u672c\u793a\u4f8b\uff0c\u5982\u9700\u4efb\u4f55\u7279\u5b9a\u8bbe\u7f6e\u6216\u529f\u80fd\uff0c\u8bf7\u53c2\u9605 ZeroTier\u6587\u6863 \u3002 \u5728 BliKVM \u4e0a\u5b89\u88c5 ZeroTier \u9996\u5148\uff0c\u5728 ZeroTier \u4e0a\u51c6\u5907\u8d26\u6237\u548c VPN \u7f51\u7edc\uff0c\u5177\u4f53\u64cd\u4f5c\u8bf7\u53c2\u89c1\u8fd9\u91cc\uff1a \u521b\u5efa\u7f51\u7edc \uff0c\u4fdd\u5b58\u7f51\u7edc ID \u4ee5\u4f9b\u4ee5\u540e\u4f7f\u7528\u3002\u63a5\u4e0b\u6765\uff0c\u4f7f\u7528 SSH \u534f\u8bae\u8fde\u63a5\u5230 BliKVM \u7ec8\u7aef\uff0c\u5e76\u68c0\u67e5\u8bfb\u5199\u6743\u9650\u3002\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u5176\u8bbe\u7f6e\u4e3a\u53ef\u5199\u3002 \u73b0\u5728\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5 ZeroTier \u5ba2\u6237\u7aef\uff1a curl -s https://install.zerotier.com | sudo bash \u8bf7\u6ce8\u610f\uff0c\u5728\u67d0\u4e9b\u5730\u533a\uff0c\u5982\u4e2d\u56fd\uff0c\u76f4\u63a5\u4e0b\u8f7d ZeroTier \u53ef\u80fd\u4f1a\u53d7\u5230\u7f51\u7edc\u9650\u5236\u7684\u5f71\u54cd\u3002\u8bf7\u76f8\u5e94\u914d\u7f6e\u60a8\u7684\u7f51\u7edc\u3002 \u5c06 BliKVM \u6dfb\u52a0\u5230\u60a8\u7684 ZeroTier \u7f51\u7edc \u5728 BliKVM \u7ec8\u7aef\u4e0a\uff0c\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5c06 BliKVM \u6dfb\u52a0\u5230\u60a8\u7684 ZeroTier \u7f51\u7edc\uff08\u4f7f\u7528 ZeroTier \u7f51\u7edc ID\uff0c\u4f8b\u5982 d5e04297a16fa690\uff09\uff1a sudo zerotier-cli join d5e04297a16fa690 \u5982\u679c\u4e00\u5207\u987a\u5229\uff0c\u60a8\u53ef\u4ee5\u5728 BliKVM \u7ec8\u7aef\u4e0a\u8fd0\u884c ip addr show zerotier \u7f51\u7edc\u8bbe\u5907\uff08\u540d\u79f0\u4ee5 zt \u5f00\u5934\uff09\u4ee5\u67e5\u770b ZeroTier \u4e3a\u865a\u62df\u7f51\u7edc\u5206\u914d\u7684 IP \u5730\u5740\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u8f93\u51fa\uff1a 3: zt6ovrlscs: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether d6:e4:eb:ae:db:64 brd ff:ff:ff:ff:ff:ff inet 172.25.96.75/16 brd 172.25.255.255 scope global zt6ovrlscs valid_lft forever preferred_lft forever inet6 fe80::d4e4:ebff:feae:db64/64 scope link valid_lft forever preferred_lft forever IP \u5730\u5740\uff0c\u4f8b\u5982 172.25.96.75\uff0c\u53ef\u7528\u4e8e\u4ece\u4e3b\u673a\u673a\u5668\u8bbf\u95ee BliKVM Web \u754c\u9762\u3002 \u5728\u5ba2\u6237\u8ba1\u7b97\u673a\u4e0a\u5b89\u88c5 ZeroTier \u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\uff0c\u5728 ZeroTier \u7f51\u7ad9\u4e0a\u5b89\u88c5 ZeroTier \u5230\u63a7\u5236\u4e3b\u673a\u3002\u52a0\u5165\u60a8\u7684 ZeroTier \u7f51\u7edc ID\uff0c\u7136\u540e\u60a8\u53ef\u4ee5\u68c0\u67e5\u60a8\u7684\u7f51\u7edc\u9875\u9762\uff0c\u9a8c\u8bc1\u4e24\u53f0\u673a\u5668\u662f\u5426\u5728\u7ebf\u3002\u68c0\u67e5\u5b83\u4eec\u662f\u5426\u88ab\u6388\u6743\u8fde\u63a5\u5230\u7f51\u7edc\uff08Auth? \u5217\uff09\u3002\u4e00\u65e6\u5b83\u4eec\u5728\u7ebf\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u5730\u5740\u4ece\u63a7\u5236\u4e3b\u673a\u673a\u5668\u8bbf\u95ee BliKVM\uff1a http://","title":"Zerotier VPN"},{"location":"zerotier/#zerotier-vpn","text":"ZeroTier \u5141\u8bb8\u901a\u8fc7 NAT \u5728\u53cc\u65b9\u4e4b\u95f4\u5b89\u5168\u8bbf\u95ee\u60a8\u7684 BliKVM\u3002\u5b83\u5141\u8bb8\u60a8\u6784\u5efa\u51e0\u4e4e\u4efb\u4f55\u7c7b\u578b\u7684\u73b0\u4ee3\u3001\u5b89\u5168\u7684\u591a\u70b9\u865a\u62df\u5316\u7f51\u7edc\u3002\u672c\u6587\u63d0\u4f9b\u4e86\u4e00\u4e2a\u901a\u8fc7\u4e92\u8054\u7f51\u8bbf\u95ee\u60a8\u7684 BliKVM \u7684\u793a\u4f8b\uff0c\u4f46\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528 Tailscale \u6216\u5176\u4ed6 VPN \u89e3\u51b3\u65b9\u6848\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u672c\u793a\u4f8b\uff0c\u5982\u9700\u4efb\u4f55\u7279\u5b9a\u8bbe\u7f6e\u6216\u529f\u80fd\uff0c\u8bf7\u53c2\u9605 ZeroTier\u6587\u6863 \u3002","title":"ZeroTier VPN"},{"location":"zerotier/#blikvm-zerotier","text":"\u9996\u5148\uff0c\u5728 ZeroTier \u4e0a\u51c6\u5907\u8d26\u6237\u548c VPN \u7f51\u7edc\uff0c\u5177\u4f53\u64cd\u4f5c\u8bf7\u53c2\u89c1\u8fd9\u91cc\uff1a \u521b\u5efa\u7f51\u7edc \uff0c\u4fdd\u5b58\u7f51\u7edc ID \u4ee5\u4f9b\u4ee5\u540e\u4f7f\u7528\u3002\u63a5\u4e0b\u6765\uff0c\u4f7f\u7528 SSH \u534f\u8bae\u8fde\u63a5\u5230 BliKVM \u7ec8\u7aef\uff0c\u5e76\u68c0\u67e5\u8bfb\u5199\u6743\u9650\u3002\u5982\u679c\u662f\u53ea\u8bfb\u7cfb\u7edf\uff0c\u8bf7\u4f7f\u7528 rw \u547d\u4ee4\u5c06\u5176\u8bbe\u7f6e\u4e3a\u53ef\u5199\u3002 \u73b0\u5728\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5 ZeroTier \u5ba2\u6237\u7aef\uff1a curl -s https://install.zerotier.com | sudo bash \u8bf7\u6ce8\u610f\uff0c\u5728\u67d0\u4e9b\u5730\u533a\uff0c\u5982\u4e2d\u56fd\uff0c\u76f4\u63a5\u4e0b\u8f7d ZeroTier \u53ef\u80fd\u4f1a\u53d7\u5230\u7f51\u7edc\u9650\u5236\u7684\u5f71\u54cd\u3002\u8bf7\u76f8\u5e94\u914d\u7f6e\u60a8\u7684\u7f51\u7edc\u3002","title":"\u5728 BliKVM \u4e0a\u5b89\u88c5 ZeroTier"},{"location":"zerotier/#blikvm-zerotier_1","text":"\u5728 BliKVM \u7ec8\u7aef\u4e0a\uff0c\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5c06 BliKVM \u6dfb\u52a0\u5230\u60a8\u7684 ZeroTier \u7f51\u7edc\uff08\u4f7f\u7528 ZeroTier \u7f51\u7edc ID\uff0c\u4f8b\u5982 d5e04297a16fa690\uff09\uff1a sudo zerotier-cli join d5e04297a16fa690 \u5982\u679c\u4e00\u5207\u987a\u5229\uff0c\u60a8\u53ef\u4ee5\u5728 BliKVM \u7ec8\u7aef\u4e0a\u8fd0\u884c ip addr show zerotier \u7f51\u7edc\u8bbe\u5907\uff08\u540d\u79f0\u4ee5 zt \u5f00\u5934\uff09\u4ee5\u67e5\u770b ZeroTier \u4e3a\u865a\u62df\u7f51\u7edc\u5206\u914d\u7684 IP \u5730\u5740\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u8f93\u51fa\uff1a 3: zt6ovrlscs: mtu 2800 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether d6:e4:eb:ae:db:64 brd ff:ff:ff:ff:ff:ff inet 172.25.96.75/16 brd 172.25.255.255 scope global zt6ovrlscs valid_lft forever preferred_lft forever inet6 fe80::d4e4:ebff:feae:db64/64 scope link valid_lft forever preferred_lft forever IP \u5730\u5740\uff0c\u4f8b\u5982 172.25.96.75\uff0c\u53ef\u7528\u4e8e\u4ece\u4e3b\u673a\u673a\u5668\u8bbf\u95ee BliKVM Web \u754c\u9762\u3002","title":"\u5c06 BliKVM \u6dfb\u52a0\u5230\u60a8\u7684 ZeroTier \u7f51\u7edc"},{"location":"zerotier/#zerotier","text":"\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\uff0c\u5728 ZeroTier \u7f51\u7ad9\u4e0a\u5b89\u88c5 ZeroTier \u5230\u63a7\u5236\u4e3b\u673a\u3002\u52a0\u5165\u60a8\u7684 ZeroTier \u7f51\u7edc ID\uff0c\u7136\u540e\u60a8\u53ef\u4ee5\u68c0\u67e5\u60a8\u7684\u7f51\u7edc\u9875\u9762\uff0c\u9a8c\u8bc1\u4e24\u53f0\u673a\u5668\u662f\u5426\u5728\u7ebf\u3002\u68c0\u67e5\u5b83\u4eec\u662f\u5426\u88ab\u6388\u6743\u8fde\u63a5\u5230\u7f51\u7edc\uff08Auth? \u5217\uff09\u3002\u4e00\u65e6\u5b83\u4eec\u5728\u7ebf\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u5730\u5740\u4ece\u63a7\u5236\u4e3b\u673a\u673a\u5668\u8bbf\u95ee BliKVM\uff1a http://","title":"\u5728\u5ba2\u6237\u8ba1\u7b97\u673a\u4e0a\u5b89\u88c5 ZeroTier"}]} \ No newline at end of file diff --git a/generated/zh/serial_over_usb/index.html b/generated/zh/serial_over_usb/index.html index 51be39f0..669ec394 100644 --- a/generated/zh/serial_over_usb/index.html +++ b/generated/zh/serial_over_usb/index.html @@ -316,11 +316,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/sitemap.xml b/generated/zh/sitemap.xml index c47cc7ed..6ea7f267 100644 --- a/generated/zh/sitemap.xml +++ b/generated/zh/sitemap.xml @@ -2,197 +2,192 @@ None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 + 2024-09-23 daily None - 2024-09-21 - daily - - - None - 2024-09-21 + 2024-09-23 daily \ No newline at end of file diff --git a/generated/zh/sitemap.xml.gz b/generated/zh/sitemap.xml.gz index ed559733de4a2747eb5ddb04fe8db7ee0cc6e08c..dd3956fc159ef80a6cc51fa51426474423213c9a 100644 GIT binary patch literal 218 zcmV<0044t)iwFo3Ht}Wx|8r?{Wo=<_E_iKh0PW394uUWc1>ilWAl*X|U5F`V=hBrP zpn(b`&>~YsZ!do_+`%`SPG4X8iR|4r{!8~%Ta&U~7%^X)+!nPdQ+B(agConNC!T#n z+WBMIP|7Ojx)bNaFoaY)-Kvg4+n1d3YP=9%Lmq_*lb%1$^ue;tBO05_i#1yCY1=+1 za;+_79L0wqN`iPlR@Q7&%PVC{eed-{7OHMOf^U*V7tkN^Mx literal 220 zcmV<203-h&iwFpSj_zgx|8r?{Wo=<_E_iKh0PW4a4uUWg1>l{hAl;!r9K@8eIXdYB zkWzsJTI5#Ix0k;dp1|qcrMIUi{Y3umTK}a7YOKjv97fF7M%l74RmN`Db8uw2^u%*$ zNjrZk8_HPiTz}$x9LJCvr@Nx3&<+(RRZkbWLY%rNAO*;iu^|c2M!!KaNxj!0|yQqIB?*= WfddErAAC7TJNX6B@@Nfs69520i)ZWr diff --git a/generated/zh/ssh/index.html b/generated/zh/ssh/index.html index b08ca2b0..82d7233d 100644 --- a/generated/zh/ssh/index.html +++ b/generated/zh/ssh/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/static_ip/index.html b/generated/zh/static_ip/index.html index e5f3784a..100a69e2 100644 --- a/generated/zh/static_ip/index.html +++ b/generated/zh/static_ip/index.html @@ -338,11 +338,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/switch-guide/index.html b/generated/zh/switch-guide/index.html index 22ebf49b..0d6a5cf4 100644 --- a/generated/zh/switch-guide/index.html +++ b/generated/zh/switch-guide/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/tailscale/index.html b/generated/zh/tailscale/index.html index 3c334df7..66e9cd82 100644 --- a/generated/zh/tailscale/index.html +++ b/generated/zh/tailscale/index.html @@ -343,11 +343,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/update/index.html b/generated/zh/update/index.html index 5aa2374b..63df10a3 100644 --- a/generated/zh/update/index.html +++ b/generated/zh/update/index.html @@ -294,11 +294,6 @@ 手动运行脚本更新
  • -
  • - - Web界面更新 - -
  • @@ -343,11 +338,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN @@ -474,11 +464,6 @@ 手动运行脚本更新
  • -
  • - - Web界面更新 - -
  • @@ -538,17 +523,6 @@

    手动运行脚本更新

    可以观察/usr/bin/blikvm/package.json前后的版本对比,若升级到了指定版本,则成功,重启生效。 -

    Web界面更新

    -
    -

    当前web升级功能暂时关闭,请使用命令行更新

    -
    -
    -

    点击更多选项按钮后,找到检查更新按钮并点击,若发现可用版本,会出现下图中的弹框,点击OK,即进入升级,升级过程中web界面暂时不可操作。通过手动刷新页面,查看目前更新状态。当出现更新成功的消息提醒时,即表示更新已成功,点击重启按钮,新版本软件就会生效。

    -

    IMG_8366 -IMG_8366 -IMG_8366 -IMG_8366

    -

    diff --git a/generated/zh/usb-splitter-guide/index.html b/generated/zh/usb-splitter-guide/index.html index 19a3131e..bbb47a7b 100644 --- a/generated/zh/usb-splitter-guide/index.html +++ b/generated/zh/usb-splitter-guide/index.html @@ -315,11 +315,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/user-manager/index.html b/generated/zh/user-manager/index.html deleted file mode 100644 index e3243c50..00000000 --- a/generated/zh/user-manager/index.html +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - - - - - - -修改账号密码 - BLIKVM 用户手册 - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - - -

    修改账号密码

    -

    在更多设置里,点击用户管理,修改用户名和密码。修改账号密码后,需要重启kvm系统才能生效。 -修改完后原来的admin用户不可登录。
    -全局默认密码路径在 /etc/kvm.d/conf/admin.ini -

    -
    -
    - - - Last update: - September 6, 2023 -
    - Created: - September 6, 2023 -
    -
    -
    -
    -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/generated/zh/wake-on-lan/index.html b/generated/zh/wake-on-lan/index.html index 71f2ab4d..0c385af9 100644 --- a/generated/zh/wake-on-lan/index.html +++ b/generated/zh/wake-on-lan/index.html @@ -314,11 +314,6 @@ HDMI EDID设置
  • -
  • - - 修改账号密码 - -
  • diff --git a/generated/zh/wifi/index.html b/generated/zh/wifi/index.html index 9bdd91fa..2d66813d 100644 --- a/generated/zh/wifi/index.html +++ b/generated/zh/wifi/index.html @@ -338,11 +338,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/generated/zh/zerotier/index.html b/generated/zh/zerotier/index.html index 81f045e8..48b4ea5f 100644 --- a/generated/zh/zerotier/index.html +++ b/generated/zh/zerotier/index.html @@ -343,11 +343,6 @@
  • - - 修改账号密码 - -
  • -
  • Wake-on-LAN diff --git a/overrides/assets/images/update/update_button.png b/overrides/assets/images/update/update_button.png deleted file mode 100644 index 56c94fa1468907ac8cdd49455ee477ddc46bb92f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28514 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 G!u$uE{=*{x diff --git a/overrides/assets/images/update/update_info.png b/overrides/assets/images/update/update_info.png deleted file mode 100644 index b39547b6b792842778fa06393196335a75278691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67285 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 {G3jGj(XkpZoz<%ZUa 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 diff --git a/overrides/assets/images/update/upgrading.png b/overrides/assets/images/update/upgrading.png deleted file mode 100644 index fa50201815e659899b08fd9c716bfea0d1f3bf5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71440 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 O0000