-
Notifications
You must be signed in to change notification settings - Fork 0
3.User Setup Guide
---
title: Diagram
---
graph LR
N1[Master];
N2[Server];
N3[[Cameras]];
N1-->N2;
N2-->N3;
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;
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;
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 nmtuiDevelop 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];
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;
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.soCreate 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
當樹莓派直接連結到 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.txtdwc_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 的時候

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

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