이제 Raspberry Pi가 실행 중이므로 다른 컴퓨터에 연결할 때 Raspberry Pi가 OTG(On-The-Go) USB 장치로 작동하도록 지시해 보겠습니다. 파일 에 추가하여 이를 수행하겠습니다 /boot/firmware/config.txt
. 다음 명령을 사용하여 파일에 추가합니다.
$ echo "dtoverlay=dwc2,dr_mode=otg" | sudo tee -a /boot/firmware/config.txt
다음 단계는 몇 가지 필수 프로그램을 설치하는 것입니다.
$ sudo apt install git meson libcamera-dev libjpeg-dev
Meson은 나중에 카메라 소프트웨어를 구성하는 데 사용할 오픈 소스 빌드 시스템입니다. Libcamera 와 Libjpeg는 Raspberry Pi가 카메라를 사용할 수 있도록 도와줍니다. 프로그램 설치를 확인하려면 y를 입력하세요 .
다음으로 UVC 가젯 소프트웨어를 다운로드하세요. 이는 USB를 통해 Raspberry Pi가 비디오를 스트리밍하는 데 도움이 됩니다.
$ git clone https://gitlab.freedesktop.org/camera/uvc-gadget.git
다운로드한 폴더로 이동합니다.
이제 다음 명령을 사용하여 소프트웨어를 만들고, 빌드하고, 설치해야 합니다.
$ make uvc-gadget
$ cd build
$ sudo meson install
$ sudo ldconfig
마지막 명령인 은 ldconfig
일반적으로 새 라이브러리를 설치하거나 기존 라이브러리를 업데이트한 후에 실행됩니다. Raspberry Pi OS가 새 라이브러리에 올바르게 연결하는 데 도움이 됩니다.
다음으로 모든 설정을 위해 Raspberry Pi의 전원을 켤 때마다 실행되는 스크립트를 만듭니다. 텍스트 편집기를 사용하여 nano
bash 스크립트를 만듭니다.
$ sudo nano ~/.rpi-uvc-gadget.sh
다음 코드를 복사하여 텍스트 편집기에 붙여넣습니다.
#!/bin/bash
CONFIGFS="/sys/kernel/config"
GADGET="$CONFIGFS/usb_gadget"
VID="0x0525"
PID="0xa4a2"
SERIAL="0123456789"
MANUF=$(hostname)
PRODUCT="UVC Gadget"
BOARD=$(strings /proc/device-tree/model)
UDC=`ls /sys/class/udc`
create_frame() {
FUNCTION=$1
WIDTH=$2
HEIGHT=$3
FORMAT=$4
NAME=$5
wdir=functions/$FUNCTION/streaming/$FORMAT/$NAME/${HEIGHT}p
mkdir -p $wdir
echo $WIDTH > $wdir/wWidth
echo $HEIGHT > $wdir/wHeight
echo $(( $WIDTH * $HEIGHT * 2 )) > $wdir/dwMaxVideoFrameBufferSize
cat <<EOF > $wdir/dwFrameInterval
$6
EOF
}
create_uvc() {
CONFIG=$1
FUNCTION=$2
echo " Creating UVC gadget functionality : $FUNCTION"
mkdir functions/$FUNCTION
create_frame $FUNCTION 640 480 uncompressed u "333333
416667
500000
666666
1000000
1333333
2000000
"
create_frame $FUNCTION 1280 720 uncompressed u "1000000
1333333
2000000
"
create_frame $FUNCTION 1920 1080 uncompressed u "2000000"
create_frame $FUNCTION 640 480 mjpeg m "333333
416667
500000
666666
1000000
1333333
2000000
"
create_frame $FUNCTION 1280 720 mjpeg m "333333
416667
500000
666666
1000000
1333333
2000000
"
create_frame $FUNCTION 1920 1080 mjpeg m "333333
416667
500000
666666
1000000
1333333
2000000
"
mkdir functions/$FUNCTION/streaming/header/h
cd functions/$FUNCTION/streaming/header/h
ln -s ../../uncompressed/u
ln -s ../../mjpeg/m
cd ../../class/fs
ln -s ../../header/h
cd ../../class/hs
ln -s ../../header/h
cd ../../class/ss
ln -s ../../header/h
cd ../../../control
mkdir header/h
ln -s header/h class/fs
ln -s header/h class/ss
cd ../../../
echo 2048 > functions/$FUNCTION/streaming_maxpacket
ln -s functions/$FUNCTION configs/c.1
}
echo "Loading composite module"
modprobe libcomposite
if
[ ! -d $GADGET/g1 ]; then
echo "Detecting platform:"
echo " board : $BOARD"
echo " udc : $UDC"
echo "Creating the USB gadget"
echo "Creating gadget directory g1"
mkdir -p $GADGET/g1
cd $GADGET/g1
if
[ $? -ne 0 ]; then
echo "Error creating usb gadget in configfs"
exit 1;
else
echo "OK"
fi
echo "Setting Vendor and Product ID's"
echo $VID > idVendor
echo $PID > idProduct
echo "OK"
echo "Setting English strings"
mkdir -p strings/0x409
echo $SERIAL > strings/0x409/serialnumber
echo $MANUF > strings/0x409/manufacturer
echo $PRODUCT > strings/0x409/product
echo "OK"
echo "Creating Config"
mkdir configs/c.1
mkdir configs/c.1/strings/0x409
echo "Creating functions..."
create_uvc configs/c.1 uvc.0
echo "OK"
echo "Binding USB Device Controller"
echo $UDC > UDC
echo "OK"
fi
uvc-gadget -c 0 uvc.0
Ctrl+X 를 누른 다음 Y 를 누르고 마지막으로 Enter 를 눌러 편집된 파일을 nano
.
스크립트를 실행 가능하게 만들려면 다음 명령을 사용하십시오.
$ sudo chmod +x ~/.rpi-uvc-gadget.sh
장치가 부팅될 때마다 이 스크립트를 실행하려면 /etc/rc.local
파일에 추가하세요. Raspberry Pi OS는 부팅 후 항상 이 파일을 실행합니다. /etc/rc.local
다음 명령을 사용하여 편집합니다 .
$ sudo nano /etc/rc.local
다음 명령을 추가하여 줄 위의 스크립트를 실행하고 자리 표시자를 Imager에서 지정한 사용자 이름으로 exit 0
바꿉니다 .<username>
$ /home/<username>/.rpi-uvc-gadget.sh &
팁
사용자 이름이 무엇인지 확실하지 않은 경우 Ctrl+X , Y 를nano
차례로 누른 다음 마지막으로 Enter 를 누르고 명령을 실행하세요 . 이 명령은 사용자 이름을 출력합니다.whoami
Ctrl+X 를 누른 다음 Y 를 누르고 마지막으로 Enter 를 눌러 편집된 파일을 nano
. 이제 파일은 다음과 같아야 합니다.
#!/bin/sh -e
_IP=$(hostname -I) || true
if
[ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
/home/<username>/.rpi-uvc-gadget.sh &
exit 0
마지막으로 Raspberry Pi를 종료합니다.