USB 장치를 연결하는 방법은 무엇입니까?

USB 장치를 연결하는 방법은 무엇입니까?

센서가 있습니다. 센서는 USB를 통해 연결되며 /dev 폴더에 ttyUSB0이라는 파일 이름이 있습니다. 다음과 같은 명령 세트가 있습니다.

1: -m 1024 \
2: -cpu core2duo \
3: -serial stdio \
4: -display none \
5: -hda /dev/sdb \
6: -usb \
7: -usb -device usb-host:productid=0x1a86,vendorid=0x7523 \
8: -drive file=/home/fedor/Git/usb.img \
9: -kernel $BUILD/$E_INIT/$BUILD_TARGET

USB 장치를 연결하는 명령은 6, 7, 8번 라인에 있지만 작동하지 않습니다. 다음 오류 메시지가 표시됩니다.

-device usb-host:productid=0x1a86,vendorid=0x7523: Parameter 'driver' is missing

파일에 전체 읽기/쓰기 권한이 부여됩니다. sudo chmod -R uog=rwx /dev/ttyUSB0

다음 명령을 사용하여 파일 이미지를 만듭니다.mkisofs -J -o usb.img /dev/ttyUSB0

fedor@fedor-VirtualBox:~$ lsusb
Bus 001 Device 003: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

여러 소스를 살펴보고 다양한 옵션을 시도했지만 장치가 연결되지 않습니다.

추가 응답:

첫 번째 링크 -여기에 링크 설명을 입력하세요

두 번째 링크-여기에 링크 설명을 입력하세요

세 번째 링크 -여기에 링크 설명을 입력하세요

그게 다입니다. 나는 다른 것을 찾지 않을 것입니다. 예, 이것들은 실행 지침입니다. 확장자가 .sh인 파일에 있습니다. 크기가 크지만 일부에 불과합니다. 3줄 대신 -serial /dev/ttyUSB0을 삽입하면 모든 것이 잘 작동하지만 장치와의 교체는 발생하지 않습니다. USB 장치를 qemu에 넣고 싶습니다. 그게 전부입니다.


요약하다. 기기를 재설정할 수 없습니다. 이유는 무엇입니까? 모르겠어요. 어쩌면 다른 사람이 나에게 말해 줄 수도 있어요.

1: sudo modprobe -r ch341모든 것을 원래대로 되돌리려면 sudo modprobe ch341.

2: sudo chown -R fedor /dev/bus/usb.

삼: qemu-system-x86_64 -help터미널에 작성하고 "USB 옵션"을 얻습니다.

3.1: -usb enable on-board USB host controller (if not enabled by default).

3.2: -usbdevice name add the host or guest USB device 'name'.

4: lsusb -v다음으로 제가 쓴 명령어는 lsusb가 아니고 lsusb -v 였습니다. 두 줄을 찾았습니다: idVendor 0x1a86 QinHeng Electronics, idProduct 0x7523 CH340 serial converter.

5:다음으로 qemu를 열고 장치가 표시되는지 확인합니다. 나는 터미널에 다음과 같이 쓴다: qemu-system-x86_64. Qemu가 열립니다.

5.1:눌러서 qemu 터미널을 엽니다.Ctrl+Alt+2

5.2:나는 qemu 에 글을 쓰고 info usbhost나면 다음과 같은 정보를 얻습니다. Bus 1, Addr 3, Port 2, Speed 12 Mb/s, Class ff: USB device 1a86:7523

6:장치를 사용할 수 있는지 확인한 후 .sh 확장자를 가진 파일에 다음을 썼습니다.

1:  -m 1024 \
2:  -cpu core2duo \
3:  -serial stdio \
4:  -display none \
5:  -hda /dev/sdb \
6:  -usb \
7:  -usbdevice host,vendorid=0x1a86,productid=0x7523 \
8:  -kernel $BUILD/$E_INIT/$BUILD_TARGET

6행과 7행을 추가했습니다.

7:다음 오류가 표시됩니다.could not add USB device 'host,vendorid=0x1a86,productid=0x7523'

답변1

중첩된 가상화를 수행하고 있는 것 같습니다. VirtualBox VM 내에서 Linux를 실행하고 해당 VM 내에서 다른 Qemu VM을 실행하려고 합니다. 이것이 맞습니까?

또한 사용 중인 Linux 배포판의 이름과 버전 또는 최소한 사용 중인 Qemu 버전을 지정해야 합니다.

을 사용하는 경우 -serial /dev/ttyUSB0센서는 Qemu VM에 "실제" 직렬 장치로 표시되어야 합니다. 즉, /dev/ttyS0Qemu VM의 운영 체제가 Linux 또는 COM1:Windows인 것처럼 나타나야 합니다.

Qemu VM 제어 하에 직렬 변환기(및 센서)를 USB 장치로 제공하려면 먼저 VirtualBox가 이를 Linux VM에서 사용할 수 있도록 해야 합니다. lsusb목록에 표시 되므로 이미 달성한 것입니다. 다음 단계는 장치에서 Linux VM의 usbserial 드라이버 연결을 끊는 것입니다. 이를 달성하는 방법에는 여러 가지가 있습니다.

직렬 변환기 지원을 담당하는 USB 직렬 드라이버 모듈을 제거합니다.

sudo modprobe -r ch341

또는 직렬 변환기의 USB 경로 사양을 찾아 드라이버에 바인딩을 해제하도록 지시합니다. 예를 들어:

ls -l /sys/bus/usb-serial/devices/ttyUSB0
lrwxrwxrwx 1 root root 0 Dec  6 16:47 /sys/bus/usb-serial/devices/ttyUSB0 -> ../../../devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/ttyUSB0/

내 예에서 USB 경로는 다음과 같습니다 1-8:1.0. 바인딩을 해제하는 방법은 다음과 같습니다.

echo -n "1-8:1.0" > sudo tee /sys/bus/usb/drivers/ch341/unbind

시스템의 올바른 경로를 찾아야 합니다.

USB 직렬 변환기 드라이버가 종료된 후 Qemu가 "원시" USB 장치에 액세스할 수 있는지 확인해야 합니다. 사용자로 가상 머신을 실행하는 경우 fedor:

 sudo chown -R fedor /dev/bus/usb

그런 다음 Qemu VM을 시작하고 자체적으로 USB 직렬 변환기 장치를 선언하도록 할 수 있습니다.

옵션 목록은 -usb#6행과 #7행에서 두 번 지정됩니다. 한 번이면 충분하지 않을까요?

반품,Qemu 4.2.50용 Qemu USB 에뮬레이션 문서USB -device옵션이 있어야한다고 말합니다

-device usb-host,productid=0x1a86,vendorid=0x7523 \

너의 것보다는

-device usb-host:productid=0x1a86,vendorid=0x7523 \

콜론 대신 쉼표를 참고하세요. 이것이 오류 메시지의 원인일 수도 있고, Qemu 버전에 따라 구문이 다를 수도 있습니다.

세 개의 링크 중 어느 것도 mkisofs명령을 언급하지 않습니다. 이를 통해 달성하려는 목표가 아직 명확하지 않습니다.

답변2

아무것도 modprobe -r필요하지 않습니다. AFAIK qemu는 권한을 제외한 모든 것을 처리합니다(따라서 setfacl; chown/ chmod도 좋습니다).

여기에 이미지 설명을 입력하세요.

여기에 이미지 설명을 입력하세요.

내 경험에 따르면 호스트 컨트롤러는 호스트에 연결된 장치와 동일한 유형의 컨트롤러로 에뮬레이트되어야 합니다. 따라서 대부분의 최신 기계의 경우 선택할 수 있으며 qemu-xhci, 일부 오래된 기계의 경우 시도해 볼 수도 있습니다 usb-ehci.

편집: 장치가 최고 속도(12M) 또는 저속(1.5M) 장치이고 어떤 이유로든 에뮬레이트된 XHCI 호스트 컨트롤러 -usb(에뮬레이트된 UHCI 컨트롤러)를 사용할 수 없는 경우 해당 장치를 사용하는 것이 올바른 스위치인 것 같습니다.

qemu가 너무 오래되어 이들 중 하나를 설치할 수 없는 경우 사용 가능한 대안에 대해 알아볼 수 있습니다.

$ qemu-system-x86_64 -device help | grep '[e|x]hci'
name "ich9-usb-ehci1", bus PCI
name "ich9-usb-ehci2", bus PCI
name "nec-usb-xhci", bus PCI
name "qemu-xhci", bus PCI
name "usb-ehci", bus PCI

참조 번호:https://github.com/qemu/qemu/blob/master/docs/system/devices/usb.rst

관련 정보