커널 매개변수 "console"과 "earlycon"이 이전 하드웨어를 참조합니까?

커널 매개변수 "console"과 "earlycon"이 이전 하드웨어를 참조합니까?

처음에는 매개변수를 조사하여 이것을 찾았 earlycon지만 찾은 옵션은 console거의 동일해 보였습니다. 둘 다 아래에 나와 있으며 다음에서 발췌했습니다.이것원천:

우리가 가지고 있는 문서에서 console:

console=    [KNL] Output console device and options.

    tty<n>  Use the virtual console device <n>.

    ttyS<n>[,options]
    ttyUSB0[,options]
        Use the specified serial port.  The options are of
        the form "bbbbpnf", where "bbbb" is the baud rate,
        "p" is parity ("n", "o", or "e"), "n" is number of
        bits, and "f" is flow control ("r" for RTS or
        omit it).  Default is "9600n8".

        See Documentation/serial-console.txt for more
        information.  See
        Documentation/networking/netconsole.txt for an
        alternative.

    uart[8250],io,<addr>[,options]
    uart[8250],mmio,<addr>[,options]
    uart[8250],mmio16,<addr>[,options]
    uart[8250],mmio32,<addr>[,options]
    uart[8250],0x<addr>[,options]
        Start an early, polled-mode console on the 8250/16550
        UART at the specified I/O port or MMIO address,
        switching to the matching ttyS device later.
        MMIO inter-register address stride is either 8-bit
        (mmio), 16-bit (mmio16), or 32-bit (mmio32).
        If none of [io|mmio|mmio16|mmio32], <addr> is assumed
        to be equivalent to 'mmio'. 'options' are specified in
        the same format described for ttyS above; if unspecified,
        the h/w is not re-initialized.

    hvc<n>  Use the hypervisor console device <n>. This is for
        both Xen and PowerPC hypervisors.

            If the device connected to the port is not a TTY but a braille
            device, prepend "brl," before the device type, for instance
        console=brl,ttyS0
    For now, only VisioBraille is supported.

우리가 가지고 있는 문서에서 earlycon:

earlycon=   [KNL] Output early console device and options.

        When used with no options, the early console is
        determined by the stdout-path property in device
        tree's chosen node.

    cdns,<addr>
        Start an early, polled-mode console on a cadence serial
        port at the specified address. The cadence serial port
        must already be setup and configured. Options are not
        yet supported.

    uart[8250],io,<addr>[,options]
    uart[8250],mmio,<addr>[,options]
    uart[8250],mmio32,<addr>[,options]
    uart[8250],mmio32be,<addr>[,options]
    uart[8250],0x<addr>[,options]
        Start an early, polled-mode console on the 8250/16550
        UART at the specified I/O port or MMIO address.
        MMIO inter-register address stride is either 8-bit
        (mmio) or 32-bit (mmio32 or mmio32be).
        If none of [io|mmio|mmio32|mmio32be], <addr> is assumed
        to be equivalent to 'mmio'. 'options' are specified
        in the same format described for "console=ttyS<n>"; if
        unspecified, the h/w is not initialized.

    pl011,<addr>
    pl011,mmio32,<addr>
        Start an early, polled-mode console on a pl011 serial
        port at the specified address. The pl011 serial port
        must already be setup and configured. Options are not
        yet supported.  If 'mmio32' is specified, then only
        the driver will use only 32-bit accessors to read/write
        the device registers.

    meson,<addr>
        Start an early, polled-mode console on a meson serial
        port at the specified address. The serial port must
        already be setup and configured. Options are not yet
        supported.

    msm_serial,<addr>
        Start an early, polled-mode console on an msm serial
        port at the specified address. The serial port
        must already be setup and configured. Options are not
        yet supported.

    msm_serial_dm,<addr>
        Start an early, polled-mode console on an msm serial
        dm port at the specified address. The serial port
        must already be setup and configured. Options are not
        yet supported.

    smh Use ARM semihosting calls for early console.

    s3c2410,<addr>
    s3c2412,<addr>
    s3c2440,<addr>
    s3c6400,<addr>
    s5pv210,<addr>
    exynos4210,<addr>
        Use early console provided by serial driver available
        on Samsung SoCs, requires selecting proper type and
        a correct base address of the selected UART port. The
        serial port must already be setup and configured.
        Options are not yet supported.

    lpuart,<addr>
    lpuart32,<addr>
        Use early console provided by Freescale LP UART driver
        found on Freescale Vybrid and QorIQ LS1021A processors.
        A valid base address must be provided, and the serial
        port must already be setup and configured.

    armada3700_uart,<addr>
        Start an early, polled-mode console on the
        Armada 3700 serial port at the specified
        address. The serial port must already be setup
        and configured. Options are not yet supported.

사용 예는 다음과 같습니다.

earlycon=uart8250,0x21c0500

내 질문은 다음과 같습니다

  • 참조가 왜 있는거죠?8250/16550물리적 하드웨어? 이 오래된 구현이 현대 디자인의 인터페이스 사양에 통합되었습니까? 즉, 이러한 통신 장치가 SoC 외부에 있을 때 호환 가능한 UART 드라이버를 계속 사용하고 있습니까?

  • MMIO가 있는 경우메모리 매핑된 IO, 이 맥락에서 "정상" IO는 무엇을 의미합니까?

  • 매개변수는 무엇입니까 <addr>? 이것이 이 코어를 실행 중인 특정 SoC에 대한 UART 구성 레지스터의 시작입니까? 대부분의 UART 구성 레지스터는 일반 UART 드라이버가 하드웨어를 올바르게 구성할 수 있도록 특정 레지스터 레이아웃을 준수합니까?

답변1

아직도 이런 일을 하는 사람들이 있을 거라 확신합니다. 하지만 ILO/DRAC/등 이전 시절로 거슬러 올라갑니다. 가격이 저렴해지고 일반화되면서 긴급 상황이나 예상치 못한 상황에서 "대역 외" 콘솔에 액세스하는 가장 좋은 방법은 직렬 포트를 통하는 것입니다. 랙에 터미널 서버를 설치하고 케이블을 서버의 직렬 포트에 연결할 수 있습니다. 일부 BIOS는 직렬 포트로의 콘솔 리디렉션을 지원합니다(예: 1999년 이상 시간 범위의 VA Linux 및 SuperMicro 서버).

8250/16550 UARTS는 당시 가장 인기 있는 직렬 칩 중 하나였으며 이는 Linux에서 가장 잘 지원된다는 것을 의미했으며 모두 8250 커널 드라이버를 사용했습니다(8250 커널 드라이버를 사용하는 시리즈에는 더 많은 모델이 있었습니다) ) 동일한 운전자).

나는 Linux용으로 의도된 많은 SoC 설계에 8250/16550 호환 UART가 내장되어 있다고 생각합니다. 왜냐하면 UART는 간단한 푸시 버튼이기 때문입니다. 잘 문서화되어 있고훌륭한테스트된 드라이버. 멀티바이트 버퍼가 포함된 최신 버전을 구축했으면 좋았겠지만(물론 오늘날의 표준에 따르면 "느린" 프로세서라도 115k 직렬 포트가 수신할 수 있는 것보다 더 자주 직렬 인터럽트를 처리할 수 있습니다). IIRC Mac에는 248k 속도의 로컬/Apple Talk(프로토콜과 하드웨어가 무엇인지 기억할 수 없음)용 직렬 포트가 있습니다. 그러나 그것은 CPU가 60Mhz로 클럭되었을 때였습니다.

이는 아마도 MMIO와 포트 I/O의 차이점에 대한 가장 좋은 대답일 것입니다.https://en.wikipedia.org/wiki/Memory-mapped_I/O이 정도로 요약할 만큼 이 수준을 잘 이해하지 못합니다.

위의 링크는 이들의 목적이 무엇인지 대답할 수 있지만 기본적으로 이는 메모리 주소입니다.

관련 정보