dummy_hcd 루프백 웹캠. 불가능한?

dummy_hcd 루프백 웹캠. 불가능한?

dummy_hcd저는 커널 모듈의 도움으로 루프백 USB 웹캠 장치를 만들려고 노력해 왔습니다. 내가 취한 조치:

나는 .libcompositemodprobe libcomposite

그런 dummy_hcd다음 modprobe dummy_hcd. 그러면 소프트웨어로 에뮬레이트된 UDC 칩이 생성됩니다. 내가 발견한 것 더보기여기.

그런 다음 스크립트를 사용하여 USB 웹캠 장치를 만들고 구성했습니다. 내 스크립트는 다음을 기반으로합니다.이것그리고이것. 여기있어:

#!/bin/bash
GADGET_NAME=virtcam
GADGET_ROOT=/sys/kernel/config/usb_gadget/$GADGET_NAME
mkdir $GADGET_ROOT
cd $GADGET_ROOT
echo 0x1d6b > idVendor
echo 0x0104 > idProduct
echo 0x0100 > bcdDevice
echo 0x0200 > bcdUSB
echo 0xEF > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
mkdir strings/0x409
cd strings/0x409
echo 100000000d2386db > serialnumber
echo "Samsung" > manufacturer
echo "Webcam" > product
cd $GADGET_ROOT
mkdir configs/c.1
mkdir configs/c.1/strings/0x409
cd configs/c.1/strings/0x409
echo "UVC" > configuration
cd $GADGET_ROOT/configs/c.1
echo 500 > MaxPower
cd $GADGET_ROOT
mkdir functions/uvc.usb0
cd functions/uvc.usb0
echo 2048 > streaming_maxpacket
mkdir control/header/h
cd control
ln -s header/h class/fs
ln -s header/h class/ss
cd $GADGET_ROOT/functions/uvc.usb0/streaming/uncompressed
mkdir -p u/720p
cd u/720p
cat <<EOF > dwFrameInterval
666666
1000000
5000000
EOF
cat <<EOF > wWidth
1280
EOF
cat <<EOF > wHeight
720
EOF
cat <<EOF > dwMinBitRate
29491200
EOF
cat <<EOF > dwMaxBitRate
29491200
EOF
cat <<EOF > dwMaxVideoFrameBufferSize
1843200
EOF
mkdir $GADGET_ROOT/functions/uvc.usb0/streaming/header/h
cd $GADGET_ROOT/functions/uvc.usb0/streaming
ln -s uncompressed/u header/h
ln -s header/h class/fs
ln -s header/h class/hs
ln -s header/h class/ss
cd $GADGET_ROOT
ln -s functions/uvc.usb0 configs/c.1/uvc.usb0
# ln -s functions/acm.usb0 configs/c.1/acm.usb0
udevadm settle -t 5 || :

테스트한 두 컴퓨터( 5.15.16-1-MANJAROraspberrypi 5.10.94-v7+) 모두에서 스크립트가 오류 없이 완료되지만 생성된 USB 장치를 가상 UDC에 실제로 연결하려고 하면 오류가 발생합니다.

cd $GADGET_ROOT
echo "dummy_udc.0" > UDC
# it returns 'bash: echo: write error: Invalid argument'

이는 기본적으로 장치가 UDC 칩에 연결할 수 없음을 의미합니다. 이 작업을 수행하면 dmesg -Tw다음을 얻습니다.

[Fri Feb  4 00:00:00 2022] configfs-gadget gadget: uvc: uvc_function_bind()
[Fri Feb  4 00:00:00 2022] configfs-gadget gadget: uvc: Unable to allocate streaming EP
[Fri Feb  4 00:00:00 2022] configfs-gadget dummy_udc.0: failed to start virtcam: -22

오류는 두 장치 모두에서 동일하므로 장치별로 다르지 않습니다. 그래서 이 오류가 발생하여 Google을 방문해야 했습니다. 찾았어요이것스레드에서 한 사람이 이렇게 말했습니다.

늦었다는 건 알지만 dummy_hcd와 함께 g_webcam 또는 uvc configfs를 사용하려는 다른 사람을 위해... UVC 기능은 동기 전송을 사용하므로 작동하지 않습니다.

사실 따져보면소스 코드, 댓글에 이렇게 나와 있습니다.

참고: 시뮬레이션에는 동기화된 전송이 포함되지 않습니다!

그래서 저는 기본적으로 정말 갇혀 있습니다. 등시성 전송을 지원하지 않는 것으로 밝혀졌지만 dummy_hcd웹캠은 이를 사용하는 것 같으므로 하드웨어 UDC 칩(또는 이를 포함하는 일부 장치)을 구입하거나 해결 방법을 찾으십시오.

Linux에서 완전히 가상 루프백 웹캠을 만들 수 있는 방법이 정말 없나요? 웹캠이 작동하려면 전송을 동기화해야 합니까?

커널 수정 사항을 작성하지 않고 이를 실행할 수 있는 방법이 있습니까 dummy_hcd.c? 아니면 하드웨어를 구입하고 제대로 작동하기를 바라기만 해야 합니까?

관련 정보