Skip to content

3.User Setup Guide

ZhuElly edited this page Apr 21, 2026 · 5 revisions

Diagram

---
title: Diagram
---
graph LR
  N1[Master];
  N2[Server];
  N3[[Cameras]];
  N1-->N2;
  N2-->N3;
Loading

Middle-ware use for USB buffer disturber

---
title: Hardware Diagram
---
graph LR
    subgraph "Camera Group A"
        CAMA1[Go Pro Camera];
        CAMA2[Go Pro Camera];
        CAMA3[Go Pro Camera];
        CAMAH[USB HUB];
        CAMAR[Mini PC];

        CAMAH-->CAMA1;
        CAMAH-->CAMA2;
        CAMAH-->CAMA3;
        CAMAR-->CAMAH;
    end
    subgraph "Camera Group B"
        CAMB1[Go Pro Camera];
        CAMB2[Go Pro Camera];
        CAMB3[Go Pro Camera];
        CAMBH[USB HUB];
        CAMBR[Mini PC];

        CAMBH-->CAMB1;
        CAMBH-->CAMB2;
        CAMBH-->CAMB3;
        CAMBR-->CAMBH;
    end
    subgraph "Camera Group C"
        CAMC1[Go Pro Camera];
        CAMC2[Go Pro Camera];
        CAMC3[Go Pro Camera];
        CAMCH[USB HUB];

        CAMCH-->CAMC1;
        CAMCH-->CAMC2;
        CAMCH-->CAMC3;
    end
    L[Monitor Computer];
    L-->|WIFI|CAMAR;
    L-->|RJ45|CAMBR;
    L-->|USB|CAMCH;
Loading

Mini PC Setup

Raspberry Pi Setup Guide Here (ARM64) If you are using normal PC for server, just do it... This guide is for the ARM64 raspberry pi setup

---
title: Development Diagram
---
graph LR
    C[Develop PC];
    PI[Raspberry PI];
    G[Go Pro Camera];
    C-->|RJ45|PI;
    G-->|USB|PI;
Loading

IP Setup

Develop Computer Network Configuration

  • 192.168.10.10, gw 192.168.10.1, netmask 255.255.255.0

Mini PC Network Configuration

  • 192.168.10.(2-9), gw 192.168.10.1, netmask 255.255.255.0

This just for convenient reason, Of course you can change to whatever IP you want.

# SSH to your mini PC
# You can use interface network management tool for this
sudo nmtui

Install program

Develop Computer open a HTTP-server Recommend tool: http-server
The HTTP root path should be Repository root director.

http-server -p 8080
---
title: Action
---
graph LR
    PI[Mini PC];
    C[Develop Computer
    Port open 8080];
Loading

Open another Terminal

# SSH To you mini PC
sudo systemctl stop startup.service
sudo curl http://192.168.10.10:8080/build_server/server -o /usr/local/bin/server
sudo systemctl start startup.service
sudo systemctl status startup.service
---
title: Action
---
graph LR
    PI[Mini PC];
    C[Develop Computer];
    PI-->|HTTP Pull Files|C;
Loading

Use command "ldd" checks dependency

ldd server
# Output:
#   linux-vdso.so.1 (0x0000007fb8ded000)
#   libhv.so => /lib/libhv.so (0x0000007fb8a50000) 這一行 !!
#   libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007fb87e0000)
#   libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007fb87a0000)
#   libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fb85e0000)
#   /lib/ld-linux-aarch64.so.1 (0x0000007fb8da0000)
#   libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007fb8530000)

You will see libhv.so pull from /lib directory

# Quickway fix dependency issue
sudo curl http://192.168.10.10:8080/build_server/lib/libhv.so -o /lib/libhv.so
sudo curl http://192.168.10.10:8080/build_server/_deps/curl-build/lib/libcurl-d.so.4 -o /lib/libcurl-d.so.4
sudo curl http://192.168.10.10:8080/build_server/_deps/curl-build/lib/libcurl-d.so -o /lib/libcurl-d.so

Mini PC Auto Start Script

Create a Bash script

sudo nano /usr/local/bin/startup.sh

打上啟動程式的腳本

下面這一大串就是為了一開機就可以把程式 run 起來的設定.

#!/bin/bash
cd /home/ellly
# 讓我們的程序 只跑在 CPU 3
taskset -c 3 /usr/local/bin/server

建議一個 Service 在 /lib/system/lib/systemd/system/startup.service

sudo nano /lib/systemd/system/startup.service
[Unit]
Description=My Websocket Server
After=network.target

[Service]
ExecStart=/usr/local/bin/startup.sh
Restart=on-failure
RestartSec=2s

[Install]
WantedBy=multi-user.target

重製 systemd

sudo chmod +x /usr/local/bin/startup.sh
sudo systemctl daemon-reload
sudo systemctl enable startup.service
sudo systemctl start startup.service

# 用這一行看執行 log
sudo systemctl status startup.service

# 用這一行重啟動
sudo systemctl restart startup.service

Hardware 探索問題

udev_issue

當樹莓派直接連結到 USB HUB, 會產生 udev worker 無限的去抓 hardware...
這些執行序會燒光你的 CPU 資源.
我們必須去透過設定, 讓 udev 最高執行序被設定 (預設是沒有上限)

# 編輯 udev config
sudo nano /etc/udev/udev.conf
# 給它 2 個子執行序上限
udev_children_max=2
# 重開服務
sudo systemctl restart systemd-udevd

確保 SSH 不會卡

sudo nano /etc/ssh/sshd_config

加這一行

IPQoS throughput lowdelay

然後重開 ssh 服務

sudo systemctl restart ssh

讓 udev 跑在 0, 1, 2 執行序

sudo taskset -p -a 7 $(pidof systemd-udevd)

在 /boot/firmware/cmdline.txt 加上這幾個

sudo nano /boot/cmdline.txt
dwc_otg.fiq_fix_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.nak_holdoff=1,isolcpus=3
  • fiq_fix_enable=1
    • USB 加速, CPU 優化性能
  • fiq_fsm_enable=1
    • Kernal 排序上的優化
  • nak_holdoff=1
    • 如果沒資料, 不會主動 request, CPU 優化
  • isolcpus=3
    • 隔離 CPU 核心 3

之所以需要以上的設定是因為這個

這個是連結 Hub 的時候 lsusb

這個是網路上對於 cdc_ncm 協定的解釋 cdc_ncm

每個 Go Pro USB 連結, 建立 3 個協定. 所以才灌爆 Kernal...
上面做的事情基本上就是, 我的程式要跑在 CPU 3, 其他 USB 什麼鬼的給我去 CPU 1, 2, 3

Clone this wiki locally