usbip
usbip를 사용해서 system 간에 usb를 공유해보자.
이번에는 zigbee usb동글을 라즈베리파이 시스템에 꽂고 실제 zigbee동글의 정보는 n100 미니pc에서 받아서 사용하는 것으로 할 것이다.
- 라즈베리파이 : zigbee usb 동글 연결
- n100 미니 pc : usbip로 zigbee 정보를 받아서 사용ㅎ함.
usbip를 설치하자.
sudo apt update
sudo apt install usbip
usbip를 사용하여 자동 loading을 위해서는 /etc/modules 파일에 아래의 코드를 추가한다.
usbip_core
usbip_host
수동으로 추가할 때는 아래 명령어를 사용한다.
sudo modprobe usbip_core
sudo modprobe usbip_host
usb에 연결된 장치를 확인하자.
sudo usbip list -l
추가된 usb장치는 1-1.2임을 잘 기억하자.
다음은 bind 해보자.
sudo usbip bind -b 1-1.2
이제는 n100 미니 pc에서 설정하자.
동일하게 usbip를 설치하고, /etc/modules에 아래의 내용을 업데이트 하자.
vhci_hcd
그리고, 라즈베리파이의 ip주로를 통해서 usbip가 open되어 있는지 확인하자.
sudo usbip list -r 192.168.0.33
라즈베리파이(192.168.0.33)의 ip device가 잘 올라왔다.
이제는 n100 미니 pc에 attach 해보자.
sudo usbip attach -r 192.168.0.33 -b 1-1.2
아래는 bind 안되었을때 usbip port의 상황이고,
아래는 bind 되었을때 usbip port의 상황이다. 잘 물려있다.
lsusb로 device가 잘 올라왔음을 알 수 있다.
아래는 usbip로 연결하지 않았을 때의 결과이다.
이제 home assistant에 zigbee 동글 설정하러 가자!
========= 25.05.14 ==========================
usbip 서버인 라즈베리파이에서 usbipd가 activation 되지 않는다.
binary012@raspberrypi:~ $ sudo systemctl status usbipd
× usbipd.service - USBIP Daemon
Loaded: loaded (/etc/systemd/system/usbipd.service; enabled; preset: enabled)
Active: failed (Result: start-limit-hit) since Wed 2025-05-14 00:14:33 KST; 642ms ago
Duration: 18ms
Process: 17439 ExecStart=/usr/sbin/usbipd -D (code=exited, status=0/SUCCESS)
Main PID: 17439 (code=exited, status=0/SUCCESS)
CPU: 23ms
May 14 00:14:33 raspberrypi systemd[1]: usbipd.service: Scheduled restart job, restart counter is at 5.
May 14 00:14:33 raspberrypi systemd[1]: Stopped usbipd.service - USBIP Daemon.
May 14 00:14:33 raspberrypi systemd[1]: usbipd.service: Start request repeated too quickly.
May 14 00:14:33 raspberrypi systemd[1]: usbipd.service: Failed with result 'start-limit-hit'.
May 14 00:14:33 raspberrypi systemd[1]: Failed to start usbipd.service - USBIP Daemon.
그래서, 다음과 같이 실행하자.
# 실행되는지 확인하기(메세지 없이 종료되면 커널 모듈이나 의존성 문제가 있는 것이다.)
sudo usbipd -d
#커널 모듈 수동 로드
sudo modprobe usbip_core
sudo modprobe usbip_host
# 확인하기
lsmod | grep usbip
# 정상 수행되는지 재확인
sudo usbipd -d
/etc/systemd/system/usbipd.service 파일을 새로 만들어 아래 내용을 추가한다. 복붙하자.
[Unit]
Description=USBIP Daemon
After=network.target
[Service]
ExecStart=/usr/sbin/usbipd -d
Restart=always
RestartSec=2
StartLimitIntervalSec=0
[Install]
WantedBy=multi-user.target
-d는 포그라운드 실행 모드이며, systemd가 프로세스를 감시할 수 있게 한다.
StartLimitIntervalSec=0은 재시도 제한을 제거한다.
sudo systemctl daemon-reload
sudo systemctl reset-failed
sudo systemctl restart usbipd
sudo systemctl status usbipd
==== 25.05.14 업데이트 ================================
재부팅시 자동으로 설정되게 하자.
1) 서버쪽 설정
아래 파일을 만들어 코드를 추가하자.
sudo nano /etc/systemd/system/usbip-bind.service
[Unit]
Description=Bind USB devices for USBIP
After=usbipd.service
[Service]
Type=oneshot
ExecStart=/usr/sbin/usbip bind -b 1-1.2
[Install]
WantedBy=multi-user.target
device를 추가하려면 ExecStart=/usr/sbin/usbip bind -b 1-1.2 아래에 추가하자.
reload 및 enable 시켜준다.
sudo systemctl daemon-reload
sudo systemctl enable usbip-bind
2) 클라이언트쪽 설정
아래 파일을 열어 코드 2줄 추가해 준다.
sudo nano /etc/modules
vhci_hcd
usbip_core
부팅시 자동 스크립트를 만들기 위해 아래 파일에 코드를 추가해 준다.
sudo nano /usr/local/bin/usbip-autoattach.sh
#!/bin/bash
# 서버 IP
SERVER=192.168.0.33
# attach할 장치 busid (서버 기준)
BUSID=1-1.2
# attach 시도
/usr/sbin/usbip attach -r $SERVER -b $BUSID
실행 권한 부여하자.
sudo chmod +x /usr/local/bin/usbip-autoattach.sh
systemd를 서비스로 등록하자.
아래 파일을 열어서 코드를 추가하자.
sudo nano /etc/systemd/system/usbip-attach.service
[Unit]
Description=USBIP Attach Script
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/usbip-autoattach.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
서비스 등록하자.
sudo systemctl daemon-reload
sudo systemctl enable usbip-attach
'Linux 관련' 카테고리의 다른 글
debian12에서 wifi 활성화 하기 (0) | 2025.05.09 |
---|---|
시스템 사용자 확인 및 ssh 사용자 등록 (0) | 2025.03.03 |
debian 한글화 설정 (0) | 2025.03.03 |
crontab 확인하기 (0) | 2025.03.01 |
debian 지역/시간 설정하기 (0) | 2025.03.01 |
댓글