Книга: Linux Network Administrator Guide, Second Edition
The setserial Command
The setserial Command
The kernel will make its best effort to correctly determine how your serial hardware is configured, but the variations on serial device configuration makes this determination difficult to achieve 100 percent reliably in practice. A good example of where this is a problem is the internal modems we talked about earlier. The UART they use has a 16-byte FIFO buffer, but it looks like a 16450 UART to the kernel device driver: unless we specifically tell the driver that this port is a 16550 device, the kernel will not make use of the extended buffer. Yet another example is that of the dumb 4-port cards that allow sharing of a single IRQ among a number of serial devices. We may have to specifically tell the kernel which IRQ port it's supposed to use, and that IRQs may be shared.
setserial was created to configure the serial driver at runtime. The setserial command is most commonly executed at boot time from a script called 0setserial on some distributions, and rc.serial on others. This script is charged with the responsibility of initializing the serial driver to accommodate any nonstandard or unusual serial hardware in the machine.
The general syntax for the setserial command is:
setserial device [
parameters
]
in which the device is one of the serial devices, such as ttyS0.
The setserial command has a large number of parameters. The most common of these are described in Table 4.1. For information on the remainder of the parameters, you should refer to the setserial manual page.
Table 4.1: setserial Command-Line Parameters
Parameter Description | |
---|---|
port port_number | Specify the I/O port address of the serial device. Port numbers should be specified in hexadecimal notation, e.g., 0x2f8. |
irq num | Specify the interrupt request line the serial device is using. |
uart uart_type | Specify the UART type of the serial device. Common values are 16450, 16550, etc. Setting this value to none will disable this serial device. |
fourport | Specifying this parameter instructs the kernel serial driver that this port is one port of an AST Fourport card. |
spd_hi | Program the UART to use a speed of 57.6 kbps when a process requests 38.4 kbps. |
spd_vhi | Program the UART to use a speed of 115 kbps when a process requests 38.4 kbps. |
spd_normal | Program the UART to use the default speed of 38.4 kbps when requested. This parameter is used to reverse the effect of a spd_hi or spd_vhi performed on the specified serial device. |
auto_irq | This parameter will cause the kernel to attempt to automatically determine the IRQ of the specified device. This attempt may not be completely reliable, so it is probably better to think of this as a request for the kernel to guess the IRQ. If you know the IRQ of the device, you should specify that it use the irq parameter instead. |
autoconfig | This parameter must be specified in conjunction with the port parameter. When this parameter is supplied, setserial instructs the kernel to attempt to automatically determine the UART type located at the supplied port address. If the auto_irq parameter is also supplied, the kernel attempts to automatically determine the IRQ, too. |
skip_test | This parameter instructs the kernel not to bother performing the UART type test during auto-configuration. This is necessary when the UART is incorrectly detected by the kernel. |
A typical and simple rc file to configure your serial ports at boot time might look something like that shown in Example 4.1. Most Linux distributions will include something slightly more sophisticated than this one.
Example 4.1: Example rc.serial setserial Commands
- Using the Configuration Utilities
- 4.4.4 The Dispatcher
- About the author
- Chapter 7. The state machine
- Appendix A. Detailed explanations of special commands
- Appendix E. Other resources and links
- Example NAT machine in theory
- The final stage of our NAT machine
- Compiling the user-land applications
- The conntrack entries
- Untracked connections and the raw table
- Basics of the iptables command