Linux Network Administratoramp;#039;s Guide (3rd Edition) [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Linux Network Administratoramp;#039;s Guide (3rd Edition) [Electronic resources] - نسخه متنی

Tony Bautts, Terry Dawson, Gregor N. Purdy

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید







3.3. Using the Configuration Utilities


Now let's spend some
time looking at the two most useful serial device configuration
utilities: setserial and
stty.


3.3.1. 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
rc.serial on some distributions, though yours
may very. 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 3-1. For information on the remainder of the
parameters, you should refer to the setserial
manpage.

Table 3-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 3-1. Most Linux distributions will
include something slightly more sophisticated than this one.


Example 3-1. rc.serial setserial commands

# /etc/rc.serial - serial line configuration script.
#
# Configure serial devices
/sbin/setserial /dev/ttyS0 auto_irq skip_test autoconfig
/sbin/setserial /dev/ttyS1 auto_irq skip_test autoconfig
/sbin/setserial /dev/ttyS2 auto_irq skip_test autoconfig
/sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig
#
# Display serial device configuration
/sbin/setserial -bg /dev/ttyS*

The -bg /dev/ttyS* argument in
the last command will print a neatly formatted summary of the
hardware configuration of all active serial devices. The output will
look like that shown in Example 3-2.


Example 3-2. Output of setserial -bg /dev/ttyS command

/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
/dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A


3.3.2. The stty Command


The name stty
probably means "set tty," but the
stty command can also be used to display a
terminal's configuration. Perhaps even more so than
setserial, the stty command
provides a bewildering number of characteristics that you can
configure. We'll cover the most important of these
in a moment. You can find the rest described in the
stty manpage.

The stty command is most commonly used to
configure terminal parameters, such as whether characters will be
echoed or what key should generate a break signal. We explained
earlier that serial devices are tty devices and the
stty command is therefore equally applicable to
them.

One of the more
important uses of the stty for serial devices is
to enable hardware handshaking on the device. We talked briefly about
hardware handshaking earlier in this chapter. The default
configuration for serial devices is for hardware handshaking to be
disabled. This setting allows "three
wire" serial cables to work; they
don't support the necessary signals for hardware
handshaking, and if it were enabled by default,
they'd be unable to transmit any characters to
change it.

Surprisingly, some serial communications
programs don't enable hardware handshaking, so if
your modem supports hardware handshaking, you should configure the
modem to use it (check your modem manual for what command to use),
and also configure your serial device to use it. The
stty command has a crtscts
flag that enables hardware handshaking on a device;
you'll need to use this. The command is probably
best issued from the rc.serial file (or
equivalent) at boot time using commands such as those shown in Example 3-3.


Example 3-3. rc.serial stty commands

#
stty crtscts < /dev/ttyS0
stty crtscts < /dev/ttyS1
stty crtscts < /dev/ttyS2
stty crtscts < /dev/ttyS3
#

The stty
command works on the current terminal by default, but by using the
input redirection (<) feature of the shell, we can have
stty manipulate any tty device.
It's a common mistake to forget whether you are
supposed to use < or >; modern versions of the
stty command have a much cleaner syntax for
doing this. To use the new syntax, we'd rewrite our
sample configuration to look like that shown in Example 3-4.


Example 3-4. rc.serial stty commands using modern syntax

#
stty crtscts -F /dev/ttyS0
stty crtscts -F /dev/ttyS1
stty crtscts -F /dev/ttyS2
stty crtscts -F /dev/ttyS3
#

We mentioned that the
stty command can be used to display the terminal
configuration parameters of a tty device. To display all of the
active settings on a tty device, use:

$ stty -a -F /dev/ttyS1


The output of this command, shown in
Example 3-5, gives you the status of all flags for
that device; a flag shown with a preceding minus, as in
-crtscts, means that the flag has been turned off.

Example 3-5. Output of stty -a command


speed 19200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon
-ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
bs0 vt0 ff0
-isig -icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop
-echoprt echoctl echoke

A description of the most important of these flags is given in Table 3-2. Each of these flags is enabled by supplying
it to stty and disabled by supplying it to
stty with the - character in front of it. Thus,
to disable hardware handshaking on the ttyS0 device, you would use:

$ stty -crtscts -F /dev/ttyS0

Table 3-2. stty flags most relevant to configuring serial devices

Flags


Description


N


Set the line speed to N bits per second.


crtsdts


Enable/disable hardware handshaking.


ixon


Enable/disable XON/XOFF flow control.


clocal


Enable/disable modem control signals such as DTR/DTS and DCD. This is
necessary if you are using a "three
wire" serial cable because it does not supply these
signals.


cs5 cs6
cs7
cs8


Set number of data bits to 5, 6, 7, or 8, respectively.


parodd


Enable odd parity. Disabling this flag enables even parity.


parenb


Enable parity checking. When this flag is negated, no parity is used.


cstopb


Enable use of two stop bits per character. When this flag is negated,
one stop bit per character is used.


echo


Enable/disable echoing of received characters back to sender.

The next example combines some of these flags and sets the ttyS0
device to 19,200 bps, 8 data bits, no parity, and hardware
handshaking with echo disabled:

$ stty 19200 cs8 -parenb crtscts -echo -F /dev/ttyS0


/ 121