Os parâmetros do kernel “console” e “earlycon” referem-se ao hardware antigo?

2

Eu descobri isso pela primeira vez investigando parâmetros para earlycon , mas descobri que as opções para console são quase idênticas. Ambos estão abaixo e foram retirados de esta fonte:

Da documentação de console , temos:

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.

Da documentação de earlycon , temos:

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.

Um exemplo do uso é:

earlycon=uart8250,0x21c0500

Minhas perguntas são:

  • Por que há uma referência ao hardware físico 8250/16550 ? Essa antiga implementação foi moldada em uma especificação de interface para projetos modernos? Ou seja, ainda estamos usando os drivers da UART que eram compatíveis quando esses dispositivos de comunicação eram externos ao SoC?

  • Se o MMIO é IO mapeado na memória , o que é IO "normal" referindo-se a este contexto?

  • Qual é o parâmetro <addr> ? Este é o começo dos registros de configuração UART para o SoC específico em que você está executando este kernel? A maioria dos registros de configuração UART está em conformidade com um layout de registro específico, de forma que um driver UART genérico possa configurar adequadamente o hardware?

por sherrellbc 28.06.2016 / 20:21

1 resposta

2

Tenho certeza de que alguém ainda está fazendo isso, mas nos dias anteriores a coisas como ILO / DRAC / etc. tornou-se barato e ubiquitios a melhor maneira de obter acesso "fora da banda" para o console em caso de emergências ou um oops foi sobre a porta serial. Você montaria um Terminal Server no rack e, em seguida, executaria os cabos na porta serial de seus servidores. Alguns BIOSs suportavam o redirecionamento de console para a porta serial (por exemplo, servidores VA Linux e SuperMicro no período de 1999+).

O 8250/16550 UARTS era um dos mais populosos chips de porta serial da época, o que significa que eles seriam os melhores suportados no Linux, e todos eles usavam o driver do kernel 8250 (havia muitos outros modelos naquela série que todos usaram o mesmo driver).

Eu suspeito que muitos designs de SoC pretendiam ser usados pelo linux construíram UARTs compatíveis com o 8250/16550, porque era o botão fácil - bem documentado e um driver testado bem . Embora esperamos que eles construíssem as últimas versões do buffer multibyte (claro que até mesmo os processadores "lentos" pelos padrões de hoje podem atender uma interrupção serial muito mais do que uma porta serial 115k pode recebê-lo. IIRC o Mac tinha uma porta serial usada para Local / Apple Talk (Não lembro qual era o protocolo e qual era o hardware) que fez 248k. Ainda assim, isso foi quando os processadores fizeram 60Mhz.

Esta é provavelmente a melhor resposta para a diferença entre o MMIO e o Port I / O: link I não entendo esse nível bem o suficiente para reduzi-lo.

O link acima provavelmente responderá o que é para esses propósitos, mas basicamente é um endereço de memória.

    
por 28.06.2016 / 22:12