stdout 리디렉션을 위한 qemu 매개변수는 어떻게 작동하나요?

stdout 리디렉션을 위한 qemu 매개변수는 어떻게 작동하나요?

게스트의 출력이 호스트 콘솔로 리디렉션되도록 다음 매개변수를 사용하여 QEMU를 시작합니다.

-chardev stdio,id=virtiocon0
-device virtio-serial
-device virtconsole,chardev=virtiocon0

다음과 같은 질문이 있습니다.

  1. 이 기호들은 무엇을 의미하나요?
  2. 게스트 측과 호스트 측 모두에 어떤 유형의 장치가 생성됩니까?
  3. 실제로 읽고 싶은 호스트 측 장치를 어디에서 찾아야 합니까?

답변1

맨페이지에서:

-chardev 백엔드,id=id [,mux=on|off] [,options]

백엔드는 null, 소켓, udp, msmouse, vc, ringbuf, 파일, 파이프, 콘솔, 직렬, pty, stdio, 점자, tty, 병렬, parport, spicevmc 중 하나입니다. 향신료 항구. 특정 백엔드에 따라 적용되는 옵션이 결정됩니다.

모든 장치에는 ID가 있어야 하며, ID는 최대 127자 길이의 문자열일 수 있습니다. 이는 다른 명령줄 명령 중에서 장치를 고유하게 식별하는 데 사용됩니다.

특히 stdio 백엔드와 관련하여:

-chardev stdio ,id=id [,signal=on|off]

QEMU 프로세스의 표준 입력 및 표준 출력에 연결합니다.

따라서 이것은 virtiocon0chardev를 qemu 프로세스의 표준 입출력에 연결합니다.

나머지 두 개는 다음과 같습니다.

-devicedriver[,prop[=value][,...]]
장치 드라이버를 추가합니다. prop=value는 드라이버 속성을 설정합니다. 유효한 속성은 드라이버에 따라 다릅니다.

첫 번째 드라이버는 virtio-serial단순히 호스트와 게스트 간의 통신 채널을 생성합니다. 이는 다음 운전자를 위해 필요합니다.

마지막은 virtconsole게스트 가상 머신에 콘솔 장치를 생성하고 이를 이전에 생성된 chardev에 연결한 다음 장치를 qemu의 stdio/out에 연결하는 것입니다.

그런 다음 게스트는 이 콘솔 장치를 다른 tty처럼 사용할 수 있습니다(예: 호출 getty등).

게스트에서 생성된 장치는 커널과 컴파일 방법에 따라 달라지며, Linux에서는 일반적으로 /dev/hvc0입니다.

이 경우 호스트에는 장치가 생성되지 않으며 표준 입력과 표준 출력만 사용됩니다. stdin에서 읽고 stdout에 씁니다.

또한 stdin 및 stdout을 다른 것으로 리디렉션하거나 다른 chardev백엔드를 사용할 수도 있습니다. 소켓이나 파이프를 사용해 보세요.

관련 정보