Back to home page

OSCL-LXR

 
 

    


0001 ==============
0002 Serial Devices
0003 ==============
0004 
0005 Serial Device Naming
0006 ====================
0007 
0008     As of 2.6.10, serial devices on ia64 are named based on the
0009     order of ACPI and PCI enumeration.  The first device in the
0010     ACPI namespace (if any) becomes /dev/ttyS0, the second becomes
0011     /dev/ttyS1, etc., and PCI devices are named sequentially
0012     starting after the ACPI devices.
0013 
0014     Prior to 2.6.10, there were confusing exceptions to this:
0015 
0016         - Firmware on some machines (mostly from HP) provides an HCDP
0017           table[1] that tells the kernel about devices that can be used
0018           as a serial console.  If the user specified "console=ttyS0"
0019           or the EFI ConOut path contained only UART devices, the
0020           kernel registered the device described by the HCDP as
0021           /dev/ttyS0.
0022 
0023         - If there was no HCDP, we assumed there were UARTs at the
0024           legacy COM port addresses (I/O ports 0x3f8 and 0x2f8), so
0025           the kernel registered those as /dev/ttyS0 and /dev/ttyS1.
0026 
0027     Any additional ACPI or PCI devices were registered sequentially
0028     after /dev/ttyS0 as they were discovered.
0029 
0030     With an HCDP, device names changed depending on EFI configuration
0031     and "console=" arguments.  Without an HCDP, device names didn't
0032     change, but we registered devices that might not really exist.
0033 
0034     For example, an HP rx1600 with a single built-in serial port
0035     (described in the ACPI namespace) plus an MP[2] (a PCI device) has
0036     these ports:
0037 
0038       ==========  ==========     ============    ============   =======
0039       Type        MMIO           pre-2.6.10      pre-2.6.10     2.6.10+
0040                   address
0041                                  (EFI console    (EFI console
0042                                  on builtin)     on MP port)
0043       ==========  ==========     ============    ============   =======
0044       builtin     0xff5e0000        ttyS0           ttyS1         ttyS0
0045       MP UPS      0xf8031000        ttyS1           ttyS2         ttyS1
0046       MP Console  0xf8030000        ttyS2           ttyS0         ttyS2
0047       MP 2        0xf8030010        ttyS3           ttyS3         ttyS3
0048       MP 3        0xf8030038        ttyS4           ttyS4         ttyS4
0049       ==========  ==========     ============    ============   =======
0050 
0051 Console Selection
0052 =================
0053 
0054     EFI knows what your console devices are, but it doesn't tell the
0055     kernel quite enough to actually locate them.  The DIG64 HCDP
0056     table[1] does tell the kernel where potential serial console
0057     devices are, but not all firmware supplies it.  Also, EFI supports
0058     multiple simultaneous consoles and doesn't tell the kernel which
0059     should be the "primary" one.
0060 
0061     So how do you tell Linux which console device to use?
0062 
0063         - If your firmware supplies the HCDP, it is simplest to
0064           configure EFI with a single device (either a UART or a VGA
0065           card) as the console.  Then you don't need to tell Linux
0066           anything; the kernel will automatically use the EFI console.
0067 
0068           (This works only in 2.6.6 or later; prior to that you had
0069           to specify "console=ttyS0" to get a serial console.)
0070 
0071         - Without an HCDP, Linux defaults to a VGA console unless you
0072           specify a "console=" argument.
0073 
0074     NOTE: Don't assume that a serial console device will be /dev/ttyS0.
0075     It might be ttyS1, ttyS2, etc.  Make sure you have the appropriate
0076     entries in /etc/inittab (for getty) and /etc/securetty (to allow
0077     root login).
0078 
0079 Early Serial Console
0080 ====================
0081 
0082     The kernel can't start using a serial console until it knows where
0083     the device lives.  Normally this happens when the driver enumerates
0084     all the serial devices, which can happen a minute or more after the
0085     kernel starts booting.
0086 
0087     2.6.10 and later kernels have an "early uart" driver that works
0088     very early in the boot process.  The kernel will automatically use
0089     this if the user supplies an argument like "console=uart,io,0x3f8",
0090     or if the EFI console path contains only a UART device and the
0091     firmware supplies an HCDP.
0092 
0093 Troubleshooting Serial Console Problems
0094 =======================================
0095 
0096     No kernel output after elilo prints "Uncompressing Linux... done":
0097 
0098         - You specified "console=ttyS0" but Linux changed the device
0099           to which ttyS0 refers.  Configure exactly one EFI console
0100           device[3] and remove the "console=" option.
0101 
0102         - The EFI console path contains both a VGA device and a UART.
0103           EFI and elilo use both, but Linux defaults to VGA.  Remove
0104           the VGA device from the EFI console path[3].
0105 
0106         - Multiple UARTs selected as EFI console devices.  EFI and
0107           elilo use all selected devices, but Linux uses only one.
0108           Make sure only one UART is selected in the EFI console
0109           path[3].
0110 
0111         - You're connected to an HP MP port[2] but have a non-MP UART
0112           selected as EFI console device.  EFI uses the MP as a
0113           console device even when it isn't explicitly selected.
0114           Either move the console cable to the non-MP UART, or change
0115           the EFI console path[3] to the MP UART.
0116 
0117     Long pause (60+ seconds) between "Uncompressing Linux... done" and
0118     start of kernel output:
0119 
0120         - No early console because you used "console=ttyS<n>".  Remove
0121           the "console=" option if your firmware supplies an HCDP.
0122 
0123         - If you don't have an HCDP, the kernel doesn't know where
0124           your console lives until the driver discovers serial
0125           devices.  Use "console=uart,io,0x3f8" (or appropriate
0126           address for your machine).
0127 
0128     Kernel and init script output works fine, but no "login:" prompt:
0129 
0130         - Add getty entry to /etc/inittab for console tty.  Look for
0131           the "Adding console on ttyS<n>" message that tells you which
0132           device is the console.
0133 
0134     "login:" prompt, but can't login as root:
0135 
0136         - Add entry to /etc/securetty for console tty.
0137 
0138     No ACPI serial devices found in 2.6.17 or later:
0139 
0140         - Turn on CONFIG_PNP and CONFIG_PNPACPI.  Prior to 2.6.17, ACPI
0141           serial devices were discovered by 8250_acpi.  In 2.6.17,
0142           8250_acpi was replaced by the combination of 8250_pnp and
0143           CONFIG_PNPACPI.
0144 
0145 
0146 
0147 [1]
0148     http://www.dig64.org/specifications/agreement
0149     The table was originally defined as the "HCDP" for "Headless
0150     Console/Debug Port."  The current version is the "PCDP" for
0151     "Primary Console and Debug Port Devices."
0152 
0153 [2]
0154     The HP MP (management processor) is a PCI device that provides
0155     several UARTs.  One of the UARTs is often used as a console; the
0156     EFI Boot Manager identifies it as "Acpi(HWP0002,700)/Pci(...)/Uart".
0157     The external connection is usually a 25-pin connector, and a
0158     special dongle converts that to three 9-pin connectors, one of
0159     which is labelled "Console."
0160 
0161 [3]
0162     EFI console devices are configured using the EFI Boot Manager
0163     "Boot option maintenance" menu.  You may have to interrupt the
0164     boot sequence to use this menu, and you will have to reset the
0165     box after changing console configuration.