152 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
SERIAL DEVICE NAMING
 | 
						|
 | 
						|
    As of 2.6.10, serial devices on ia64 are named based on the
 | 
						|
    order of ACPI and PCI enumeration.  The first device in the
 | 
						|
    ACPI namespace (if any) becomes /dev/ttyS0, the second becomes
 | 
						|
    /dev/ttyS1, etc., and PCI devices are named sequentially
 | 
						|
    starting after the ACPI devices.
 | 
						|
 | 
						|
    Prior to 2.6.10, there were confusing exceptions to this:
 | 
						|
 | 
						|
	- Firmware on some machines (mostly from HP) provides an HCDP
 | 
						|
	  table[1] that tells the kernel about devices that can be used
 | 
						|
	  as a serial console.  If the user specified "console=ttyS0"
 | 
						|
	  or the EFI ConOut path contained only UART devices, the
 | 
						|
	  kernel registered the device described by the HCDP as
 | 
						|
	  /dev/ttyS0.
 | 
						|
 | 
						|
	- If there was no HCDP, we assumed there were UARTs at the
 | 
						|
	  legacy COM port addresses (I/O ports 0x3f8 and 0x2f8), so
 | 
						|
	  the kernel registered those as /dev/ttyS0 and /dev/ttyS1.
 | 
						|
 | 
						|
    Any additional ACPI or PCI devices were registered sequentially
 | 
						|
    after /dev/ttyS0 as they were discovered.
 | 
						|
 | 
						|
    With an HCDP, device names changed depending on EFI configuration
 | 
						|
    and "console=" arguments.  Without an HCDP, device names didn't
 | 
						|
    change, but we registered devices that might not really exist.
 | 
						|
 | 
						|
    For example, an HP rx1600 with a single built-in serial port
 | 
						|
    (described in the ACPI namespace) plus an MP[2] (a PCI device) has
 | 
						|
    these ports:
 | 
						|
 | 
						|
                                  pre-2.6.10      pre-2.6.10
 | 
						|
                    MMIO         (EFI console    (EFI console
 | 
						|
                   address        on builtin)     on MP port)    2.6.10
 | 
						|
                  ==========      ==========      ==========     ======
 | 
						|
      builtin     0xff5e0000        ttyS0           ttyS1         ttyS0
 | 
						|
      MP UPS      0xf8031000        ttyS1           ttyS2         ttyS1
 | 
						|
      MP Console  0xf8030000        ttyS2           ttyS0         ttyS2
 | 
						|
      MP 2        0xf8030010        ttyS3           ttyS3         ttyS3
 | 
						|
      MP 3        0xf8030038        ttyS4           ttyS4         ttyS4
 | 
						|
 | 
						|
CONSOLE SELECTION
 | 
						|
 | 
						|
    EFI knows what your console devices are, but it doesn't tell the
 | 
						|
    kernel quite enough to actually locate them.  The DIG64 HCDP
 | 
						|
    table[1] does tell the kernel where potential serial console
 | 
						|
    devices are, but not all firmware supplies it.  Also, EFI supports
 | 
						|
    multiple simultaneous consoles and doesn't tell the kernel which
 | 
						|
    should be the "primary" one.
 | 
						|
 | 
						|
    So how do you tell Linux which console device to use?
 | 
						|
 | 
						|
	- If your firmware supplies the HCDP, it is simplest to
 | 
						|
	  configure EFI with a single device (either a UART or a VGA
 | 
						|
	  card) as the console.  Then you don't need to tell Linux
 | 
						|
	  anything; the kernel will automatically use the EFI console.
 | 
						|
 | 
						|
	  (This works only in 2.6.6 or later; prior to that you had
 | 
						|
	  to specify "console=ttyS0" to get a serial console.)
 | 
						|
 | 
						|
	- Without an HCDP, Linux defaults to a VGA console unless you
 | 
						|
	  specify a "console=" argument.
 | 
						|
 | 
						|
    NOTE: Don't assume that a serial console device will be /dev/ttyS0.
 | 
						|
    It might be ttyS1, ttyS2, etc.  Make sure you have the appropriate
 | 
						|
    entries in /etc/inittab (for getty) and /etc/securetty (to allow
 | 
						|
    root login).
 | 
						|
 | 
						|
EARLY SERIAL CONSOLE
 | 
						|
 | 
						|
    The kernel can't start using a serial console until it knows where
 | 
						|
    the device lives.  Normally this happens when the driver enumerates
 | 
						|
    all the serial devices, which can happen a minute or more after the
 | 
						|
    kernel starts booting.
 | 
						|
 | 
						|
    2.6.10 and later kernels have an "early uart" driver that works
 | 
						|
    very early in the boot process.  The kernel will automatically use
 | 
						|
    this if the user supplies an argument like "console=uart,io,0x3f8",
 | 
						|
    or if the EFI console path contains only a UART device and the
 | 
						|
    firmware supplies an HCDP.
 | 
						|
 | 
						|
TROUBLESHOOTING SERIAL CONSOLE PROBLEMS
 | 
						|
 | 
						|
    No kernel output after elilo prints "Uncompressing Linux... done":
 | 
						|
 | 
						|
	- You specified "console=ttyS0" but Linux changed the device
 | 
						|
	  to which ttyS0 refers.  Configure exactly one EFI console
 | 
						|
	  device[3] and remove the "console=" option.
 | 
						|
 | 
						|
	- The EFI console path contains both a VGA device and a UART.
 | 
						|
	  EFI and elilo use both, but Linux defaults to VGA.  Remove
 | 
						|
	  the VGA device from the EFI console path[3].
 | 
						|
 | 
						|
	- Multiple UARTs selected as EFI console devices.  EFI and
 | 
						|
	  elilo use all selected devices, but Linux uses only one.
 | 
						|
	  Make sure only one UART is selected in the EFI console
 | 
						|
	  path[3].
 | 
						|
 | 
						|
	- You're connected to an HP MP port[2] but have a non-MP UART
 | 
						|
	  selected as EFI console device.  EFI uses the MP as a
 | 
						|
	  console device even when it isn't explicitly selected.
 | 
						|
	  Either move the console cable to the non-MP UART, or change
 | 
						|
	  the EFI console path[3] to the MP UART.
 | 
						|
 | 
						|
    Long pause (60+ seconds) between "Uncompressing Linux... done" and
 | 
						|
    start of kernel output:
 | 
						|
 | 
						|
	- No early console because you used "console=ttyS<n>".  Remove
 | 
						|
	  the "console=" option if your firmware supplies an HCDP.
 | 
						|
 | 
						|
	- If you don't have an HCDP, the kernel doesn't know where
 | 
						|
	  your console lives until the driver discovers serial
 | 
						|
	  devices.  Use "console=uart,io,0x3f8" (or appropriate
 | 
						|
	  address for your machine).
 | 
						|
 | 
						|
    Kernel and init script output works fine, but no "login:" prompt:
 | 
						|
 | 
						|
	- Add getty entry to /etc/inittab for console tty.  Look for
 | 
						|
	  the "Adding console on ttyS<n>" message that tells you which
 | 
						|
	  device is the console.
 | 
						|
 | 
						|
    "login:" prompt, but can't login as root:
 | 
						|
 | 
						|
	- Add entry to /etc/securetty for console tty.
 | 
						|
 | 
						|
    No ACPI serial devices found in 2.6.17 or later:
 | 
						|
 | 
						|
	- Turn on CONFIG_PNP and CONFIG_PNPACPI.  Prior to 2.6.17, ACPI
 | 
						|
	  serial devices were discovered by 8250_acpi.  In 2.6.17,
 | 
						|
	  8250_acpi was replaced by the combination of 8250_pnp and
 | 
						|
	  CONFIG_PNPACPI.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
[1] http://www.dig64.org/specifications/agreement 
 | 
						|
    The table was originally defined as the "HCDP" for "Headless
 | 
						|
    Console/Debug Port."  The current version is the "PCDP" for
 | 
						|
    "Primary Console and Debug Port Devices."
 | 
						|
 | 
						|
[2] The HP MP (management processor) is a PCI device that provides
 | 
						|
    several UARTs.  One of the UARTs is often used as a console; the
 | 
						|
    EFI Boot Manager identifies it as "Acpi(HWP0002,700)/Pci(...)/Uart".
 | 
						|
    The external connection is usually a 25-pin connector, and a
 | 
						|
    special dongle converts that to three 9-pin connectors, one of
 | 
						|
    which is labelled "Console."
 | 
						|
 | 
						|
[3] EFI console devices are configured using the EFI Boot Manager
 | 
						|
    "Boot option maintenance" menu.  You may have to interrupt the
 | 
						|
    boot sequence to use this menu, and you will have to reset the
 | 
						|
    box after changing console configuration.
 |