Commit | Line | Data |
---|---|---|
8e7fbec6 MCC |
1 | .. _serial_console: |
2 | ||
c2ffd5da MCC |
3 | Linux Serial Console |
4 | ==================== | |
1da177e4 LT |
5 | |
6 | To use a serial port as console you need to compile the support into your | |
7 | kernel - by default it is not compiled in. For PC style serial ports | |
c2ffd5da MCC |
8 | it's the config option next to menu option: |
9 | ||
10 | :menuselection:`Character devices --> Serial drivers --> 8250/16550 and compatible serial support --> Console on 8250/16550 and compatible serial port` | |
11 | ||
1da177e4 LT |
12 | You must compile serial support into the kernel and not as a module. |
13 | ||
14 | It is possible to specify multiple devices for console output. You can | |
15 | define a new kernel command line option to select which device(s) to | |
16 | use for console output. | |
17 | ||
c2ffd5da | 18 | The format of this option is:: |
1da177e4 LT |
19 | |
20 | console=device,options | |
21 | ||
22 | device: tty0 for the foreground virtual console | |
23 | ttyX for any other virtual console | |
24 | ttySx for a serial port | |
25 | lp0 for the first parallel port | |
f1a1c2dc | 26 | ttyUSB0 for the first USB serial device |
1da177e4 LT |
27 | |
28 | options: depend on the driver. For the serial port this | |
f1a1c2dc RD |
29 | defines the baudrate/parity/bits/flow control of |
30 | the port, in the format BBBBPNF, where BBBB is the | |
31 | speed, P is parity (n/o/e), N is number of bits, | |
32 | and F is flow control ('r' for RTS). Default is | |
1da177e4 LT |
33 | 9600n8. The maximum baudrate is 115200. |
34 | ||
35 | You can specify multiple console= options on the kernel command line. | |
571079f5 PM |
36 | |
37 | The behavior is well defined when each device type is mentioned only once. | |
38 | In this case, the output will appear on all requested consoles. And | |
39 | the last device will be used when you open ``/dev/console``. | |
40 | So, for example:: | |
1da177e4 LT |
41 | |
42 | console=ttyS1,9600 console=tty0 | |
43 | ||
c2ffd5da | 44 | defines that opening ``/dev/console`` will get you the current foreground |
1da177e4 LT |
45 | virtual console, and kernel messages will appear on both the VGA |
46 | console and the 2nd serial port (ttyS1 or COM2) at 9600 baud. | |
47 | ||
571079f5 PM |
48 | The behavior is more complicated when the same device type is defined more |
49 | times. In this case, there are the following two rules: | |
50 | ||
51 | 1. The output will appear only on the first device of each defined type. | |
52 | ||
53 | 2. ``/dev/console`` will be associated with the first registered device. | |
54 | Where the registration order depends on how kernel initializes various | |
55 | subsystems. | |
56 | ||
57 | This rule is used also when the last console= parameter is not used | |
58 | for other reasons. For example, because of a typo or because | |
59 | the hardware is not available. | |
60 | ||
61 | The result might be surprising. For example, the following two command | |
62 | lines have the same result: | |
63 | ||
64 | console=ttyS1,9600 console=tty0 console=tty1 | |
65 | console=tty0 console=ttyS1,9600 console=tty1 | |
66 | ||
67 | The kernel messages are printed only on ``tty0`` and ``ttyS1``. And | |
68 | ``/dev/console`` gets associated with ``tty0``. It is because kernel | |
69 | tries to register graphical consoles before serial ones. It does it | |
70 | because of the default behavior when no console device is specified, | |
71 | see below. | |
72 | ||
73 | Note that the last ``console=tty1`` parameter still makes a difference. | |
74 | The kernel command line is used also by systemd. It would use the last | |
75 | defined ``tty1`` as the login console. | |
1da177e4 LT |
76 | |
77 | If no console device is specified, the first device found capable of | |
78 | acting as a system console will be used. At this time, the system | |
79 | first looks for a VGA card and then for a serial port. So if you don't | |
80 | have a VGA card in your system the first serial port will automatically | |
81 | become the console. | |
82 | ||
c2ffd5da MCC |
83 | You will need to create a new device to use ``/dev/console``. The official |
84 | ``/dev/console`` is now character device 5,1. | |
1da177e4 | 85 | |
f1a1c2dc | 86 | (You can also use a network device as a console. See |
d9d6ef25 | 87 | ``Documentation/networking/netconsole.rst`` for information on that.) |
f1a1c2dc | 88 | |
c2ffd5da | 89 | Here's an example that will use ``/dev/ttyS1`` (COM2) as the console. |
1da177e4 LT |
90 | Replace the sample values as needed. |
91 | ||
c2ffd5da MCC |
92 | 1. Create ``/dev/console`` (real console) and ``/dev/tty0`` (master virtual |
93 | console):: | |
1da177e4 | 94 | |
c2ffd5da MCC |
95 | cd /dev |
96 | rm -f console tty0 | |
97 | mknod -m 622 console c 5 1 | |
98 | mknod -m 622 tty0 c 4 0 | |
1da177e4 LT |
99 | |
100 | 2. LILO can also take input from a serial device. This is a very | |
101 | useful option. To tell LILO to use the serial port: | |
c2ffd5da | 102 | In lilo.conf (global section):: |
1da177e4 | 103 | |
c2ffd5da | 104 | serial = 1,9600n8 (ttyS1, 9600 bd, no parity, 8 bits) |
1da177e4 LT |
105 | |
106 | 3. Adjust to kernel flags for the new kernel, | |
c2ffd5da | 107 | again in lilo.conf (kernel section):: |
1da177e4 | 108 | |
c2ffd5da | 109 | append = "console=ttyS1,9600" |
1da177e4 LT |
110 | |
111 | 4. Make sure a getty runs on the serial port so that you can login to | |
112 | it once the system is done booting. This is done by adding a line | |
c2ffd5da | 113 | like this to ``/etc/inittab`` (exact syntax depends on your getty):: |
1da177e4 | 114 | |
c2ffd5da | 115 | S1:23:respawn:/sbin/getty -L ttyS1 9600 vt100 |
1da177e4 | 116 | |
c2ffd5da | 117 | 5. Init and ``/etc/ioctl.save`` |
1da177e4 | 118 | |
c2ffd5da MCC |
119 | Sysvinit remembers its stty settings in a file in ``/etc``, called |
120 | ``/etc/ioctl.save``. REMOVE THIS FILE before using the serial | |
1da177e4 LT |
121 | console for the first time, because otherwise init will probably |
122 | set the baudrate to 38400 (baudrate of the virtual console). | |
123 | ||
c2ffd5da | 124 | 6. ``/dev/console`` and X |
1da177e4 | 125 | Programs that want to do something with the virtual console usually |
c2ffd5da | 126 | open ``/dev/console``. If you have created the new ``/dev/console`` device, |
1da177e4 LT |
127 | and your console is NOT the virtual console some programs will fail. |
128 | Those are programs that want to access the VT interface, and use | |
c2ffd5da | 129 | ``/dev/console instead of /dev/tty0``. Some of those programs are:: |
1da177e4 | 130 | |
c2ffd5da | 131 | Xfree86, svgalib, gpm, SVGATextMode |
1da177e4 LT |
132 | |
133 | It should be fixed in modern versions of these programs though. | |
134 | ||
c2ffd5da MCC |
135 | Note that if you boot without a ``console=`` option (or with |
136 | ``console=/dev/tty0``), ``/dev/console`` is the same as ``/dev/tty0``. | |
137 | In that case everything will still work. | |
1da177e4 LT |
138 | |
139 | 7. Thanks | |
140 | ||
141 | Thanks to Geert Uytterhoeven <geert@linux-m68k.org> | |
142 | for porting the patches from 2.1.4x to 2.1.6x for taking care of | |
143 | the integration of these patches into m68k, ppc and alpha. | |
144 | ||
145 | Miquel van Smoorenburg <miquels@cistron.nl>, 11-Jun-2000 |