배경

배경

배경

저는 FreeBSD 12.1-RELEASE를 호스트로 실행하고 있습니다.비비가상 기기.

가상 머신 내에서 FreeBSD 12.1-RELEASE 게스트가 실행되고 있습니다. 두 개의 TTY 레벨 장치로 구성하고 싶습니다.

매뉴얼 페이지에 따르면 두 개의 TTY 클래스 장치로 VM을 시작하려면 다음과 유사한 명령줄 옵션을 사용하여 bhyve를 시작해야 합니다 -l com1,/dev/nmdm0B -l com2,/dev/nmdm1B. 그러면 이 두 가지를 통해 게스트에 연결할 수 있어야 합니다.널 모뎀 터미널그리고 cu -l /dev/nmdm0A그리고 cu -l /dev/nmdm1A.

질문

첫 번째 명령은 예상대로 작동합니다. cu -l /dev/nmdm0A게스트의 기본 콘솔을 보여줍니다.

그러나 두 번째 명령은 게스트에 연결되지만 아무것도 표시하지 않습니다. 다른 TTY로 전환하는 것처럼 로그인 프롬프트가 표시되기를 원합니다.

내가 무엇을 놓치고 있나요?


추가 세부 사항

  • 게스트는 FreeBSD를 새로 설치한 것입니다.

  • 게스트의 출력은 dmesg | grep uart다음과 같습니다.

    uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
    uart0: console (115200,n,8,1)
    uart1: <16550 or compatible> port 0x2f8-0x2ff irq 3 on acpi0
    
  • 나는 hint.uart.1.flags먼저 설정을 0x10시도한 다음 다음으로 설정을 시도했습니다 0x80. (내 이해로는 이것이 커널 디버거를 위한 것이지만)직렬 포트(4)) 각 변경 후에는 다시 시작하세요. 작동하지 않습니다.

인용하다

답변1

/etc/ttys해결책은 게스트에서 수정하는 것입니다. amd64에서는 다음과 같은 기본값을 갖습니다.

#
# $FreeBSD: head/sbin/init/ttys.amd64 338454 2018-09-04 15:48:13Z brd $
#   @(#)ttys    5.1 (Berkeley) 4/17/89
#
# This file specifies various information about terminals on the system.
# It is used by several different programs.  Common entries for the
# various columns include:
#
# name  The name of the terminal device.
#
# getty The program to start running on the terminal.  Typically a
#       getty program, as the name implies.  Other common entries
#       include none, when no getty is needed, and xdm, to start the
#       X Window System.
#
# type The initial terminal type for this port.  For hardwired
#      terminal lines, this will contain the type of terminal used.
#      For virtual consoles, the correct type is typically xterm.
#      Other common values include dialup for incoming modem ports, and
#      unknown when the terminal type cannot be predetermined.
#
# status Must be on or off.  If on, init will run the getty program on
#        the specified port.  If the word "secure" appears, this tty
#        allows root login.
#
# name  getty               type    status      comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none                unknown off secure
#
ttyv0   "/usr/libexec/getty Pc"     xterm   onifexists secure
# Virtual terminals
ttyv1   "/usr/libexec/getty Pc"     xterm   onifexists secure
ttyv2   "/usr/libexec/getty Pc"     xterm   onifexists secure
ttyv3   "/usr/libexec/getty Pc"     xterm   onifexists secure
ttyv4   "/usr/libexec/getty Pc"     xterm   onifexists secure
ttyv5   "/usr/libexec/getty Pc"     xterm   onifexists secure
ttyv6   "/usr/libexec/getty Pc"     xterm   onifexists secure
ttyv7   "/usr/libexec/getty Pc"     xterm   onifexists secure
ttyv8   "/usr/local/bin/xdm -nodaemon"  xterm   off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyu0   "/usr/libexec/getty 3wire"  vt100   onifconsole secure
ttyu1   "/usr/libexec/getty 3wire"  vt100   onifconsole secure
ttyu2   "/usr/libexec/getty 3wire"  vt100   onifconsole secure
ttyu3   "/usr/libexec/getty 3wire"  vt100   onifconsole secure
# Dumb console
dcons   "/usr/libexec/getty std.9600"   vt100   off secure

보시다시피, 각 ttyu 터미널 장치의 상태는 onifconsole secure(해당 secure부분은 여기서 관련이 없음)로 설정됩니다. 즉, 이러한 터미널 장치는 콘솔 역할을 할 때만 열립니다. 호스트에서 이러한 장치에 액세스할 수 있으려면 간단히 onifconsole로 바꾸면 됩니다 onifexists.

내 특별한 경우에는 다음 줄을 바꿔야 했습니다.

ttyu1   "/usr/libexec/getty 3wire"  vt100   onifconsole secure

그리고:

ttyu1   "/usr/libexec/getty 3wire"  vt100   ifexists secure

이제 두 번째 콘솔을 사용하여 게스트 시스템에 연결할 수 있습니다.

# cu -l /dev/nmdm1A
Password:
Connected
 
 
FreeBSD/amd64 (testvm) (ttyu1)
 
login: root
Password:
Last login: Fri Jun 26 19:59:40 on ttyu1
FreeBSD 12.1-RELEASE r354233 GENERIC
 
Welcome to FreeBSD!

관련 정보