lp

title: lp(4)

summary: устройства для работы с принтерами

text:
# lp(4)

## ИМЯ
lp - устройства для работы с принтерами

## ОБЗОР
\#include <linux/lp.h>

## НАСТРОЙКА
lp[0–2] — это символьные устройства для работы с принтерами, подключёнными к параллельному порту; они имеют старший номер 6 и младшие номера 0–2. Младший номер соответствует базовому адресу порта принтера 0x03bc, 0x0378 и 0x0278, соответственно. Обычно режим доступа к ним устанавливается 220, и они принадлежат root и группе lp. Управлять принтерами можно при помощи опроса или при помощи прерываний. Прерывания рекомендуются при высоких скоростях печати, например, для лазерных принтеров. Для обычных матричных принтеров будет достаточно опроса. По умолчанию устанавливается режим опроса.

## ОПИСАНИЕ
Поддерживаются следующие вызовы ioctl(2):

int ioctl(int fd, LPTIME, int arg)

Устанавливает время между опросами принтера драйвером равным arg, если заполнен буфер принтера. Если принтер быстрый, то лучше уменьшить это число, а если медленный, то лучше увеличить. Значение выражается в сотых долях секунды; по умолчанию равно 2, что означает 0,02 секунды. Влияет только на драйвер опроса.

int ioctl(int fd, LPCHAR, int arg)

Устанавливает максимальное количество циклов равным arg, в течение которых драйвер опроса ожидает готовность принтера к приёму символа. Если печать медленная, то рекомендуется увеличить это число, а если система начинает медленно работать, то уменьшить. По умолчанию равно 1000. Влияет только на драйвер опроса.

int ioctl(int fd, LPABORT, int arg)

Если arg равно 0, то драйвер принтера будет повторять попытки при ошибках, в противном случае он прекратит работу. По умолчанию равно 0.

int ioctl(int fd, LPABORTOPEN, int arg)

Если arg равно 0, то open(2) будет прерван при ошибке, иначе ошибка будет проигнорирована. По умолчанию равно 0.

int ioctl(int fd, LPCAREFUL, int arg)

Если arg равно 0, то для записи необходимо, чтобы сигналы нехватки бумаги, принтер выключен или ошибка, были не установлены. По умолчанию они игнорируются.

int ioctl(int fd, LPWAIT, int arg)

Устанавливает число циклов ожидания в значение arg, которые выполняются перед стробированием принтера для получения только что записанного символа, а также устанавливает число циклов ожидания до остановки стробирования. В спецификации сказано, что это время должно равняться 0,5 микросекунды, но опыт показал, что хватает и времени задержки при выполнении программы. Поэтому устанавливаемое значение по умолчанию равно 0. Используется как в драйвере опроса, так и драйвере прерывания.

int ioctl(int fd, LPSETIRQ, int arg)

Этот ioctl(2) требует прав суперпользователя. Он принимает int, содержащий новый номер IRQ. Побочный эффект — повторный запуск принтера. Если arg равно 0, то будет использован драйвер опроса (по умолчанию).

int ioctl(int fd, LPGETIRQ, int *arg)

Сохраняет используемый в данный момент номер IRQ в arg.

int ioctl(int fd, LPGETSTATUS, int *arg)

Сохраняет значение состояния порта в arg. Биты имеют следующее значение: LP_PBUSY

инвертированный входной сигнал занятости, активен по высокому уровню

LP_PACK

неизменённый входной сигнал подтверждения, активен по низкому уровню

LP_POUTPA

неизменённый входной сигнал отсутствия бумаги, активен по высокому уровню

LP_PSELECD

неизменённый входной сигнал выбора, активен по высокому уровню

LP_PERRORP

неизменённый входной сигнал ошибки, активен по низкому уровню

Обратитесь к руководству принтера для выяснения значения сигналов. Заметим, что в зависимости от принтера неописанные биты тоже могут иметь значение.

int ioctl(int fd, LPRESET)

Перезапускает принтер. Аргументы не используются.

## ФАЙЛЫ
/dev/lp*

## СМОТРИТЕ ТАКЖЕ
chmod(1), chown(1), mknod(1), lpcntl(8), tunelp(8)


mem

package: man-pages-ru

title: mem(4)

text:
# mem(4)

## ИМЯ
mem, kmem, port - системная память, память ядра и порты системы

## ОПИСАНИЕ
Файл /dev/mem — это файл символьного устройства, представляющий образ физической памяти компьютера. Этот файл может быть использован для исследования системы (и даже для внесения в неё исправлений).

Адреса байтов в /dev/mem рассматриваются как адреса физической памяти. При ссылках на несуществующие адреса возвращаются ошибки.

Исследование системы или внесение в неё исправлений иногда приводят к непредвиденным результатам в том случае, если есть биты, которые разрешается только читать или только записывать.

Начиная с версии Linux 2.6.26 и в зависимости от архитектуры, параметр настройки ядра CONFIG_STRICT_DEVMEM ограничивает области, к которым можно получить доступ через этот файл. Например, на архитектуре x86 доступ к ОЗУ не разрешен, однако к отображенной в области PCI памяти доступ есть.

Обычно, этот файл создается так:

```
mknod -m 660 /dev/mem c 1 1
chown root:kmem /dev/mem
```

Файл /dev/kmem идентичен файлу /dev/mem за исключением того, что обеспечивает доступ к виртуальной памяти ядра, а не к физической. Начиная с версии Linux 2.6.26, этот файл становится доступен только после включения параметра настройки ядра CONFIG_DEVKMEM.

Обычно, этот файл создается так:

```
mknod -m 640 /dev/kmem c 1 2
chown root:kmem /dev/kmem
```

Файл /dev/port похож на /dev/mem, но предоставляет доступ к портам ввода-вывода.

Обычно, этот файл создается так:

```
mknod -m 660 /dev/port c 1 4
chown root:kmem /dev/port
```

## ФАЙЛЫ
/dev/mem

/dev/kmem

/dev/port

## СМОТРИТЕ ТАКЖЕ
chown(1), mknod(1), ioperm(2)

branch: sisyphus


mouse

title: mouse(4)

summary: последовательный интерфейс мыши

text:
# mouse(4)

## ИМЯ
mouse - последовательный интерфейс мыши

## НАСТРОЙКА
Мышь подключается последовательному порту RS232/V24, описание смотрите в ttyS(4).

## ОПИСАНИЕ

### Введение
Описание разъёма c 9 контактами, используемого для подключения мыши:

контакт

название

назначение

2

RX

Данные

3

TX

-12 В, Iмакс = 10 мА

4

DTR

+12 В, Iмакс = 10 мА

7

RTS

+12 В, Iмакс = 10 мА

5

GND

Земля

Такое описание приводится в документации, почти любой мыши хватает 9 V.

Драйвер мыши может распознать мышь, посылая низкий сигнал RTS и затем высокий. Примерно через 14 миллисекунд мышь пошлёт 0x4D ('M') по линии данных. Ещё через 63 миллисекунды трёх-кнопочная Microsoft-совместимая мышь пошлёт 0x33 ('3').

Относительное движение мыши посылается как dx (положительное значение означает движение направо) и dy (положительное значение означает движение вниз). Различные мыши могут работать на разных скоростях. Для определения скорости устанавливаются следующие её значения (по очереди): 9600, 4800, 2400 и 1200 бит/с; каждый раз при установке значения скорости пишутся 2 символа из таблицы, приведённой ниже, и после этого выполняется ожидание, равное 0,1 секунды. В таблице указаны скорости и символы, соответствующие им:

бит/с

строка

9600

*q

4800

*p

2400

*o

1200

*n

Первый байт из пакета данных может использоваться для синхронизации.

### Протокол Microsoft
В протоколе Microsoft используется один начальный бит, 7 битов данных (без проверки четности), один стоп-бит; протокол работает со скоростью 1200 бит/с. Данные пересылаются по RxD трёх-байтовыми пакетами. Движения по dx и dy пересылаются в коде дополнения до 2. Значения lb (rb), устанавливаемые при нажатии левой (правой) кнопки:

байт

d6

d5

d4

d3

d2

d1

d0

1

1

lb

rb

dy7

dy6

dx7

dx6

2

0

dx5

dx4

dx3

dx2

dx1

dx0

3

0

dy5

dy4

dy3

dy2

dy1

dy0

### Протокол Microsoft для трёх-кнопочной мыши
Первоначально мышь Microsoft имела две кнопки. Но есть несколько трёх-кнопочных мышей, также использующих протокол Microsoft. О нажатии или отпускании средней кнопки сообщается отправкой пакета с нулевым движением и ненажатыми клавишами. (Таким образом, в отличие от двух других кнопок, состояние средней в каждом пакете не передаётся).

### Протокол Logitech
Трёх-кнопочная мышь Logitech представляет собой расширенный вариант протокола Microsoft: когда средняя кнопка отпущена, посылается вышеописанный трёх-байтовый пакет, а когда она нажата, посылается четырёх-байтовый пакет, где четвёртый байт имеет значение 0x20 (или, как минимум, в нём установлен бит 0x20). В частности, о нажатии средней кнопки сообщается с помощью пакета 0,0,0,0x20 при том, что остальные кнопки остаются ненажатыми.

### Протокол Mousesystems
В протоколе Mousesystems используется один начальный бит, 8 битов данных, без проверки чётности и два стоп-бита при скорости 1200 бит/с. Данные посылаются по RxD пяти-байтовыми пакетами. dx посылается как сумма значений в коде дополнения до 2, dy посылается как отрицательная сумма значений в коде дополнения до 2. lb (mb, rb) обнуляются при нажатии левой (средней, правой) кнопки:

байт

d7

d6

d5

d4

d3

d2

d1

d0

1

1

0

0

0

0

lb

mb

rb

2

0

dxa6

dxa5

dxa4

dxa3

dxa2

dxa1

dxa0

3

0

dya6

dya5

dya4

dya3

dya2

dya1

dya0

4

0

dxb6

dxb5

dxb4

dxb3

dxb2

dxb1

dxb0

5

0

dyb6

dyb5

dyb4

dyb3

dyb2

dyb1

dyb0

Четвёртый и пятый байты описывают изменения, произошедшие за время передачи второго и третьего байта.

### Протокол Sun
Протокол Sun представляет собой трёх-байтовую версию протокола Mousesystems (описанного выше): два последних байта не отсылаются.

### Протокол MM
В протоколе MM используется один начальный бит, 8 битов данных, контроль по нечётности и один стоп-бит при скорости 1200 бит/с. Данные посылаются по RxD трёх-байтовыми пакетами. dx и dy отсылаются как единичные значения со знаком, бит знака указывает на отрицательное значение. lb (mb, rb) устанавливаются при нажатии левой (средней, правой) кнопки:

байт

d7

d6

d5

d4

d3

d2

d1

d0

1

1

0

0

dxs

dys

lb

mb

rb

2

0

dx6

dx5

dx4

dx3

dx2

dx1

dx0

3

0

dy6

dy5

dy4

dy3

dy2

dy1

dy0

## ФАЙЛЫ
/dev/mouse

Обычно используется символьная ссылка на устройство мыши.

## СМОТРИТЕ ТАКЖЕ
ttyS(4), gpm(8)


msr

title: msr(4)

text:
# msr(4)

## ИМЯ
msr - устройство доступа к MSR процессоров x86

## ОПИСАНИЕ
Устройство /dev/cpu/CPUNUM/msr предоставляет интерфейс для чтения и записи в специальные регистры модели (model-specific registers, MSR) процессоров x86. В CPUNUM задаётся номер процессора для доступа; номера перечислены в /proc/cpuinfo.

Доступ к регистру выполняется открытием файла и переходом в файле по смещению под номером нужного MSR; чтение и запись производится порциями по 8 байт. Ввод/вывод более 8 байт выполняется несколькими операциями чтения или записи в нужный регистр.

Файл доступен на чтение и запись только пользователю root или членам группы root.

## ЗАМЕЧАНИЯ
Драйвер msr автоматически не загружается. В модульных ядрах нужно выполнить загрузку явно:

```
$ modprobe msr
```

## СМОТРИТЕ ТАКЖЕ
Intel Corporation Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3B Appendix B for an overview of the Intel CPU MSRs.


title: null(4)

summary: сток для данных

text:
# null(4)

## ИМЯ
null, zero - сток для данных

## ОПИСАНИЕ
Любые данные, записанные в специальные файлы /dev/null или /dev/zero, отбрасываются.

Считывание информации из специального файла /dev/null всегда возвращает конец файла (то есть read(2) вернёт 0), а чтение из файла /dev/zero всегда возвращает байты, содержащие 0 (символы '\0').

Эти устройства обычно создаются так:

```
mknod -m 666 /dev/null c 1 3
mknod -m 666 /dev/zero c 1 5
chown root:root /dev/null /dev/zero
```

## ФАЙЛЫ
/dev/null

/dev/zero

## ЗАМЕЧАНИЯ
Если эти файлы сделать недоступными для чтения и записи для всех пользователей, то многие программы станут работать непредсказуемо.

Начиная с Linux 2.6.31, чтение из /dev/zero может быть прервано сигналами (это изменение было сделано для того, чтобы помочь исправить большое время отклика при чтении больших объёмов из /dev/zero).

## СМОТРИТЕ ТАКЖЕ
chown(1), mknod(1), full(4)


pts

title: pts(4)

summary: основной и подчинённый псевдо\-терминал

text:
# pts(4)

## ИМЯ
ptmx, pts - основной и подчинённый псевдо-терминал

## ОПИСАНИЕ
Файл /dev/ptmx является символьным файлом со старшим номером 5 и младшим номером 2, обычно имеет права доступа 0666 и принадлежит root:root. Используется для создания пары основного и подчинённого псевдо-терминала.

Когда процесс открывает /dev/ptmx, то он получает дескриптор файла основного псевдо-терминала (PTM, pseudoterminal master), а в каталоге /dev/pts создаётся устройство подчинённого псевдо-терминала (PTS, pseudoterminal slave). Каждый дескриптор файла, полученный открытием /dev/ptmx, является независимым PTM со своим отдельным, связанным с ним PTS, чей путь можно определить, передав файловый дескриптор ptsname(3).

Перед открытием подчинённого псевдо-терминала вы должны передать дескриптор файла основного терминала в grantpt(3) и unlockpt(3).

Когда основной и подчинённый псевдо-терминалы будут открыты, подчинённый предоставляет процессам интерфейс, идентичный обычному терминалу.

Данные, записываемые на подчинённый терминал, появляются у файлового дескриптора основного терминала как входные данные. Данные, записываемые на основной терминал, появляются на подчинённом терминале в виде входных данных.

На практике, псевдо-терминалы используются для реализации эмуляторов терминала, таких как xterm(1), где данные, считываемые с основного псевдо-терминала, интерпретируются приложениями в том же виде, как и данные с обычного терминала, а также в программах, реализующих удалённый доступ, таких как sshd(8), где данные, считываемые с основного псевдо-терминала, отправляются по сети в программу-клиент, подключённую к терминалу или эмулятору терминала.

Псевдо-терминалы также могут использоваться для отправки вводимых данных в программы, не желающих принимать обычный ввод из канала (например su(1) и passwd(1)).

## ФАЙЛЫ
/dev/ptmx, /dev/pts/*

## ЗАМЕЧАНИЯ
Поддержка в Linux для всего вышеперечисленного (т.н. именование псевдо-терминалов UNIX 98) осуществляется через файловую систему devpts, которая монтируется к /dev/pts.

До схемы UNIX 98, основные псевдо-терминалы назывались /dev/ptyp0, ..., а подчинённые псевдо-терминалы — /dev/ttyp0, …, и для них требовалось очень много предварительно размещённых нод устройств.

## СМОТРИТЕ ТАКЖЕ
getpt(3), grantpt(3), ptsname(3), unlockpt(3), pty(7)


ram

title: ram(4)

summary: устройство для диска в памяти

text:
# ram(4)

## ИМЯ
ram - устройство для диска в памяти

## ОПИСАНИЕ
Устройство ram представляет собой блочное устройство, предоставляющее прямой доступ к диску в памяти (ram disk).

Обычно, этот файл создается так:

```
mknod -m 660 /dev/ram b 1 1
chown root:disk /dev/ram
```

## ФАЙЛЫ
/dev/ram

## СМОТРИТЕ ТАКЖЕ
chown(1), mknod(1), mount(8)


random

title: random(4)

summary: ядерные устройства\-источники случайных чисел

text:
# random(4)

## ИМЯ
random, urandom - ядерные устройства-источники случайных чисел

## ОБЗОР
\#include <linux/random.h>

int ioctl(fd, RNDrequest, param);

## ОПИСАНИЕ
Специальные символьные файлы /dev/random и /dev/urandom (появились в Linux 1.3.30) предоставляют интерфейс к генератору случайных чисел, встроенному в ядро. Файл /dev/random имеет старший номер устройства 1 и младший номер устройства 8. Файл /dev/urandom имеет старший номер устройства 1 и младший номер устройства 9.

Генератор случайных чисел собирает окружающий шум от работы драйверов устройств и из других источников в пул энтропии. Генератор также постоянно оценивает количество битов шума в пуле энтропии. Именно с помощью этого пула создаются случайные числа.

В Linux 3.17 и новее предоставляется более простой и безопасный интерфейс getrandom(2), который не требует специальных файлов; смотрите справочную страницу getrandom(2).

При чтении из устройства /dev/urandom возвращаются произвольные байты, полученные из генератора псевдослучайных чисел, инициализированного из пула энтропии. Чтение из этого устройства не приводит к блокировке (то есть, ЦП не отдаёт управление), но может вызвать заметную задержку при запросе большого количества данных.

При чтении во время начальной загрузки ОС /dev/urandom может возвращать данные до инициализации пула энтропии. Если это неприемлемо для приложения, используйте getrandom(2) или /dev/random.

Устройство /dev/random является устаревшим интерфейсом, который относится ко времени времени, когда криптографическим примитивам, используемым в реализации /dev/urandom, не очень не доверяли. Интерфейс возвращает произвольные байты только с подсчитанным количеством бит свежего шума в пуле энтропии, блокируя работу при необходимости. Устройство /dev/random подходит для приложений, которым нужна произвольность высокого качества и без проблем относятся к задержкам на неопределённое время.

Если пул энтропии пуст, попытка чтения /dev/random приведёт к блокировке, пока не будет собран дополнительный окружающий шум. Если вызов open(2) для /dev/random запускается с флагом O_NONBLOCK, то последующий read(2) не будет заблокируется, если количество запрашиваемых байт недостаточно. Вместо этого будут возвращены имеющиеся байты. Если ни одного байта нет, то read(2) вернёт -1 и значение errno станет равно EAGAIN.

При открытии /dev/urandom флаг O_NONBLOCK не учитывается. При вызове read(2) для устройства /dev/urandom чтение до 256 байт вернёт запрошенное количество байт и не будет прервано обработчиком сигнала. Чтение с буфером больше ограничения может вернуть количество байт меньше запрошенного или завершиться ошибкой EINTR при прерывании обработчиком сигнала.

Начиная с Linux 3.16, вызов read(2) может прочитать из /dev/urandom почти 32 МБ. Из /dev/random будет прочитано не более 512 байт (340 байт для ядер Linux до версии 2.6.12).

При записи в /dev/random или /dev/urandom выполняется обновление пула энтропии записываемыми данными, но при этом не увеличивается счётчик энтропии. Это означает, что изменения отразятся в обоих файлах, но это не ускорит процесс чтения из /dev/random.

### Использование
Интерфейс /dev/random считается устаревшим, во всех случаях предпочтительно использовать /dev/urandom; исключением являются приложения, которым нужны произвольные байты во время загрузки системы; в таких приложениях нужно использовать getrandom(2), так как этот вызов выполняет блокировку для ожидания наполнения пула энтропии.

Если файл начальных чисел (seed file) сохраняется между перезагрузками как рекомендуется далее (во всех основных дистрибутивах Linux это делается начиная с 2000 года), то результат шифрования стоек от атакующего, не имеющего локально привилегированного доступа, до перезагрузки машины, и вполне подходит для ключей шифрования сетевых сеансов. Так как чтение из /dev/random может привести к блокировке, пользователи хотели бы открывать его в неблокирующем режиме (или выполнять чтение с задержкой), и иметь механизм оповещения, если желаемый уровень энтропии в данный момент недоступен.

### Настройка
Если в системе нет /dev/random и /dev/urandom, то их можно создать следующими командами:

```
mknod -m 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
```

Когда Linux-система запускается без участия человека, пул энтропии может оказаться в довольно предсказуемом состоянии. Это снижает значимый объём шума в пуле энтропии ниже оцениваемого. Для преодоления этого эффекта можно сохранять информацию пула энтропии во время выключения и восстанавливать во время запуска системы. Для этого добавьте строки в сценарий, который выполняется при запуске Linux-системы:

```
echo "Инициализация генератора случайных чисел…"
random_seed=/var/run/random-seed
#  перенос случайного начального числа от запуска к запуску
# загрузка и сохранение всего пула энтропии
if [ -f $random_seed ]; then

    cat $random_seed >/dev/urandom
else

    touch $random_seed
fi
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096
bytes=$(expr $bits / 8)
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
```

Также добавьте следующие строки в сценарий, который выполняется при завершении работы Linux-системы:

```
# перенос случайного начального числа от выключения до запуска
# сохранение всего пула энтропии
echo "Сохранение случайного начального числа…"
random_seed=/var/run/random-seed
touch $random_seed
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096
bytes=$(expr $bits / 8)
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
```

В примерах выше мы предполагаем, что используется ядро Linux 2.6.0 или новее, в котором /proc/sys/kernel/random/poolsize содержит размер пула энтропии в битах (смотрите ниже).

### Интерфейсы /proc
Файлы в каталоге /proc/sys/kernel/random (начиная с 2.3.16) предоставляют дополнительную информацию об устройстве /dev/random:

entropy_avail

Файл доступен только для чтения и показывает количество бит доступной энтропии. Данное число находится в диапазоне от 0 до 4096.

poolsize

Файл содержит размер пула энтропии. Формат файла зависит от версии ядра:

Linux 2.4:

В файле содержится размер пула энтропии в байтах. Обычно это число 512, но так как файл доступен на запись, значение можно изменить, подстроив его под доступный алгоритм. Возможные значения — 32, 64, 128, 256, 512, 1024 или 2048.

Linux 2.6 и новее:

Файл доступен только на чтение и содержит размер пула энтропии в битах. Значение равно 4096.

read_wakeup_threshold

В файле содержится количество бит энтропии, требуемое для пробуждения процессов, которые спят в ожидании энтропии из /dev/random. Значение по умолчанию равно 64.

write_wakeup_threshold

В файле содержится количество бит энтропии, менее которого мы пробуждаем процессы, которые выполнили вызовы select(2) или poll(2) для ожидания записи в /dev/random. Эти значения можно изменить, записав новые числа в эти файлы.

uuid и boot_id

Эти файлы, доступные только для чтения, содержат произвольные строки вида 6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. Значение первого генерируется заново при каждом чтении, а значение второго генерируется только один раз.

### Интерфейс ioctl(2)
Для файловых дескрипторов, соединённых с файлами /dev/random и /dev/urandom, определены запросы ioctl(2), перечисленные ниже. Все выполняемые запросы обращаются к входному пулу энтропии, который относится к и к /dev/random, и к /dev/urandom. Для выполнения всех запросов (кроме RNDGETENTCNT) требуется мандат CAP_SYS_ADMIN.

RNDGETENTCNT

Возвращает счётчик энтропии входного пула, возвращается содержимое из файла entropy_avail в proc. Результат сохраняется в int, указанный в параметре.

RNDADDTOENTCNT

Увеличивает или уменьшает счётчик энтропии входного пула на значение аргумента.

RNDGETPOOL

Удалён из Linux 2.6.9.

RNDADDENTROPY

Вносит дополнительную энтропию во входной пул, увеличивая счётчик энтропии. Запись в /dev/random или /dev/urandom добавляет только данные, но не увеличивает счётчик энтропии (в этом отличие). Используется следующая структура:

```
struct rand_pool_info {

    int    entropy_count;

    int    buf_size;

    __u32  buf[0];
};

```

Здесь entropy_count — добавляемое (или вычитаемое) значение к счётчику энтропии, а buf — буфер с размером buf_size, из которого в пул энтропии добавляются данные.

RNDZAPENTCNT, RNDCLEARPOOL

Обнуляет счётчики всех пулов и добавляет в них некоторые системные данные (такие как время).

## ФАЙЛЫ
/dev/random

/dev/urandom

## ЗАМЕЧАНИЯ
Обзор и сравнение возможных интерфейсов, через которые можно получать случайные данные, смотрите в random(7).

## ДЕФЕКТЫ
Во время начальной загрузки ОС чтение из /dev/urandom может возвращать данные до инициализации пула энтропии.

## СМОТРИТЕ ТАКЖЕ
mknod(1), getrandom(2), random(7)

RFC 1750, "Randomness Recommendations for Security"


rtc

title: rtc(4)

summary: часы реального времени

text:
# rtc(4)

## ИМЯ
rtc - часы реального времени

## ОБЗОР
\#include <linux/rtc.h>

int ioctl(fd, RTC_request, param);

## ОПИСАНИЕ
Данное устройство представляет собой интерфейс к драйверам часов реального времени (RTC).

В большинстве компьютеров есть одни и более аппаратных часов, ведущих отчёт "обычного" времени. Они называются "часами реального времени" (Real Time Clock, RTC). Некоторые из них имеют батарею резервного питания для продолжения работы в периоды, когда компьютер выключен. В RTC часто встроены будильники и другие прерывания.

Все ПК i386 и системы с ACPI содержат RTC, которые совместимы с микросхемой Motorola MC146818 из первоначальной модели PC/AT. Сегодня такие RTC обычно встраивают в чипсет материнской платы (в южный мост), и они используют заменяемую резервную батарею (типа «таблетки»).

В системах, несовместимых с PC (например, встраиваемые системы, собираемые на процессоре "всё в одном"), используются другие варианты. Обычно, они не предоставляют таких возможностей, как RTC в PC/AT.

### RTC и системные часы
Не нужно путать RTC с системными часами, которые представляют собой часы, реализованные в ядре программно и используемые для работы gettimeofday(2) и time(2), а также при указании временных меток файлов и т. п. Системные часы выдают секунды и микросекунды, начиная отсчёт от эпохи POSIX: 1970-01-01 00:00:00 +0000 (UTC) (в основном, реализуется на основе таймера прерываний ведя подсчёт «мигов» (jiffy) c частотой 100, 250 или 1000 Гц). То есть, предполагается, что они показывают обычное время как и RTC.

Ключевым отличием RTC от системных часов, является то, что RTC работают даже когда система находится в состоянии пониженного энергопотребления (даже в выключенном), а для системных часов такое недоступно. До своей инициализации системные часы показывают время, прошедшее с момента запуска системы, а не с начала эпохи POSIX. Поэтому при загрузке и после восстановления из состояния пониженного энергопотребления в системных часах часто подстраивают текущее время с помощью RTC. Системам без RTC требуется установить свои системные часы с помощью других часов, возможно через сеть или ручного ввода данных.

### Назначение RTC
Из RTC можно читать или писать с помощью hwclock(8) или через вызовы ioctl, перечисленные ниже.

Помимо контроля даты и времени многие RTC также позволяют генерировать прерывания

- при каждом обновлении часов (т.е. раз в секунду);

- через периодические интервалы с частотой, значение которой может быть любой степенью 2 в диапазоне от 2 Гц до 8192 Гц;

- по достижению указанного времени будильника.

Каждый из этих источников прерываний можно включать или выключать независимо друг от друга. Во многих системах прерывание будильника можно настроить как событие пробуждения системы, для вывода системы из состояний пониженного энергопотребления таких как: ждущего режима (Suspend-to-RAM (STR), S3 в терминологии ACPI), спящего режима (hibernation, S4 в терминологии ACPI) или даже из "выключенного" состояния (S5 в терминологии ACPI). Но в некоторых системах RTC с резервной батареей не могут генерировать прерывания.

Устройство /dev/rtc (или /dev/rtc0, /dev/rtc1 и т.д.) можно открыть только один раз (до тех пор, пока не будет закрыто) и только для чтения. При вызове read(2) и select(2) вызывающий процесс блокируется до следующего приёма прерывания от RTC. После прерывания процесс может прочитать длинное целое, в котором наименее значимый байт содержит битовую маску типа произошедшего прерывания, а остальные 3 байта содержат количество прерываний, произошедших с последнего вызова read(2).

### Интерфейс ioctl(2)
Для файловых дескрипторов, указывающих на открытые устройства RTC, доступны следующие запросы ioctl(2):

RTC_RD_TIME

Получить время RTC в виде следующей структуры:

```
struct rtc_time {

    int tm_sec;

    int tm_min;

    int tm_hour;

    int tm_mday;

    int tm_mon;

    int tm_year;

    int tm_wday;     /* не используется */

    int tm_yday;     /* не используется */

    int tm_isdst;    /* не используется */
};

```

Поля структуры имеют те же значения и диапазоны что и у структуры tm, описанной в gmtime(3). Указатель на эту структуру должен передаваться в третьем аргументе ioctl(2).

RTC_SET_TIME

Установить время RTC в значение, заданное в структуре rtc_time, на которую указывает третий аргумент ioctl(2). Для установки времени RTC процесс должен иметь права (т.е., мандат CAP_SYS_TIME).

RTC_ALM_READ, RTC_ALM_SET

Получить и установить время будильника, если он поддерживается RTC. Прерывание будильника должно быть включено или выключено отдельно с помощью запросов RTC_AIE_ON, RTC_AIE_OFF. Третий аргумент ioctl(2) является указателем на структуру rtc_time. В структуре используются только поля tm_sec, tm_min и tm_hour.

RTC_IRQP_READ, RTC_IRQP_SET

Получить и установить частоту периодических прерываний, если они поддерживаются RTC. Периодическое прерывание должно быть включено или выключено отдельно с помощью запросов RTC_PIE_ON, RTC_PIE_OFF. Третий аргумент ioctl(2) имеет тип unsigned long * или unsigned long, соответственно. Значение задаёт частоту прерываний в секунду. Можно указывать частоты кратны степени 2 в диапазоне от 2 до 8192. Только привилегированный процесс (т.е., имеющий мандат CAP_SYS_RESOURCE) может устанавливать частоты выше значения, указанного в /proc/sys/dev/rtc/max-user-freq. (По умолчанию в этом файле содержится значение 64.)

RTC_AIE_ON, RTC_AIE_OFF

Включить или выключить прерывание от будильника, если RTC поддерживает будильники. Третий аргумент ioctl(2) игнорируется.

RTC_UIE_ON, RTC_UIE_OFF

Включить или выключить прерывание при каждом обновлении часов, если RTC поддерживает создание прерываний один раз в секунду. Третий аргумент ioctl(2) игнорируется.

RTC_PIE_ON, RTC_PIE_OFF

Включить или выключить периодическое прерывание, если RTC поддерживает периодические прерывания. Третий аргумент ioctl(2) игнорируется. Только привилегированный процесс (т.е., имеющий мандат CAP_SYS_RESOURCE) может устанавливать частоты выше значения, указанного в /proc/sys/dev/rtc/max-user-freq.

RTC_EPOCH_READ, RTC_EPOCH_SET

В многих RTC год кодируется в 8-битном регистре, значение которого может учитываться как 8-битное двоичное число или как число в двоично-десятичном коде (BCD). В обоих случаях, число учитывается относительно начала эпохи RTC. Эпоха RTC на большинстве систем начинается с 1900 года, но на Alpha и MIPS также она может начинаться с 1952, 1980 или 2000 года, в зависимости от значения годового регистра RTC. С некоторыми RTC эти операции можно использовать для чтения или установки эпохи RTC, соответственно. Третий аргумент ioctl(2) имеет тип unsigned long * или unsigned long, соответственно, а возвращаемое значение (или назначаемое) является эпохой. Чтобы установить эпоху RTC процесс должен быть привилегированным (т.е., иметь мандат CAP_SYS_TIME).

RTC_WKALM_RD, RTC_WKALM_SET

Некоторые RTC поддерживают более универсальный интерфейс будильника, в котором эти ioctl используются для чтения и записи времени будильника RTC (соответственно) с помощью структуры:

```
struct rtc_wkalrm {

    unsigned char enabled;

    unsigned char pending;

    struct rtc_time time;
};
```

Флаг enabled используется для включения или отключения прерывания будильника, или для чтения его текущего состояния; когда совершаются данные вызовы RTC_AIE_ON и RTC_AIE_OFF не используются. Флаг pending используется RTC_WKALM_RD для сообщения об ожидающем прерывании (хотя это практически бесполезно в Linux, за исключением RTC, управляемого микропрограммой EFI). Поле time используется RTC_ALM_READ и RTC_ALM_SET, но поля tm_mday, tm_mon и tm_year также учитываются. Указатель на эту структуру должен передаваться в третьем аргументе ioctl(2).

## ФАЙЛЫ
/dev/rtc, /dev/rtc0, /dev/rtc1, и тд.

Файлы специального символьного устройства RTC.

/proc/driver/rtc

состояние (первого) RTC.

## ЗАМЕЧАНИЯ
Когда системное время ядра синхронизируется с внешним источником с помощью adjtimex(2), оно будет обновляться назначенным RTC с периодичностью каждые 11 минут. Для этого ядро на время отключает периодические прерывания; это может повлиять на программы, использующие RTC.

Эпоха RTC не имеет ничего общего с эпохой POSIX, которая используется только в системных часах.

Если год, согласно эпохи RTC и регистр года меньше чем 1970, то предполагается, что время на 100 лет позже, то есть, между 2000 и 2069 годами.

Некоторые RTC поддерживают значения «шаблона» в полях будильника, чтобы обеспечить поддержку сценариев, например периодические будильники, через первые 15 минут в начале каждого часа, или первый день каждого месяца. Но это непереносимо; переносимый код пользовательского пространства только ожидает единичное прерывание от будильника, и будет или отключать, или реинициализировать будильник после приёма.

Некоторые RTC поддерживают периодические прерывания с периодами кратными степени 2, а не дробной секунде; несколько будильников; программируемые выходные сигналы часов; энергонезависимую память; другие аппаратные свойства, для которых пока ещё не предусмотрено программного интерфейса.

## СМОТРИТЕ ТАКЖЕ
date(1), adjtimex(2), gettimeofday(2), settimeofday(2), stime(2), time(2), gmtime(3), time(7), hwclock(8)

Файл Documentation/rtc.txt в дереве исходного кода ядра Linux


sd

title: sd(4)

summary: драйвер для дисковых накопителей SCSI

text:
# sd(4)

## ИМЯ
sd - драйвер для дисковых накопителей SCSI

## ОБЗОР

```
#include <linux/hdreg.h>        /* для HDIO_GETGEO */
#include <linux/fs.h>           /* для BLKGETSIZE и BLKRRPART */
```

## НАСТРОЙКА
Эти блочные устройства именуются согласно следующему формату: sdlp, где l — буква, обозначающая физический накопитель, а p — номер раздела на этом физическом накопителе. Часто номер раздела p бывает пропущен, тогда устройство соответствует полностью всему накопителю.

Файлам устройств дисков SCSI присвоен старший номер 8, а младшие номера устройств рассчитываются как (16 * номер_накопителя) + номер_раздела, где номер_накопителя — это номер физического накопителя в порядке обнаружения, а номер_раздела:

+3

раздел 0 — накопитель полностью

разделы 1–4 —«первичные» разделы DOS

разделы 5–8 — «расширенные» (или «логические») разделы DOS

Например, устройство /dev/sda будет иметь старший номер 8, младший 0 и указывать на первый накопитель SCSI в системе; устройство /dev/sdb3 будет иметь старший номер 8, младший 19 и указывать на третий "первичный" раздел DOS на втором накопителе SCSI.

В настоящий момент поддерживаются только блочные устройства. Устройства для прямого доступа (raw) пока не реализованы.

## ОПИСАНИЕ
Доступны следующие вызовы ioctl:

HDIO_GETGEO

Возвращает параметры диска из BIOS в виде следующей структуры:

```
struct hd_geometry {

    unsigned char  heads;

    unsigned char  sectors;

    unsigned short cylinders;

    unsigned long  start;
};
```

Указатель на эту структуру передаётся ioctl(2) в виде параметра.

Информация, возвращаемая в параметре, представляет собой геометрию дискового накопителя как это понимается в DOS! Эта геометрия не является физической геометрией накопителя. Однако, она используется при составлении таблицы разделов накопителя, и требуется для удобства при работе с fdisk(1), efdisk(1) и lilo(1). Если информация о геометрии диска недоступна, все поля структуры равны нулю.

BLKGETSIZE

Возвращает размер устройства в секторах. Параметр ioctl(2) должен быть указателем на long.

BLKRRPART

Заставляет перечитать таблицы разделов на диске SCSI. Используется без параметра.

Также поддерживаются операции SCSI через ioctl(2). Если ioctl(2) требуется параметр и он равен NULL, то ioctl(2) завершается ошибкой EINVAL.

## ФАЙЛЫ
/dev/sd[a-h]

устройство целиком

/dev/sd[a-h][0-8]

отдельные блочные разделы


title: sk98lin(4)

text:
# sk98lin(4)

## ИМЯ
sk98lin - драйвер Marvell/SysKonnect Gigabit Ethernet, версия 6.21

## ОБЗОР
insmod sk98lin.o [Speed_A=i,j,...] [Speed_B=i,j,...] [AutoNeg_A=i,j,...] [AutoNeg_B=i,j,...] [DupCap_A=i,j,...] [DupCap_B=i,j,...] [FlowCtrl_A=i,j,...] [FlowCtrl_B=i,j,...] [Role_A=i,j,...] [Role_B=i,j,...] [ConType=i,j,...] [Moderation=i,j,...] [IntsPerSec=i,j,...] [PrefPort=i,j,...] [RlmtMode=i,j,...]

## ОПИСАНИЕ
Замечание: Данный устаревший драйвер был удалён из ядра версии 2.6.26.

sk98lin — это драйвер Gigabit Ethernet для сетевых адаптеров Marvell и SysKonnect. Он поддерживает SysKonnect SK-98xx/SK-95xx-совместимые адаптеры Gigabit Ethernet и любые карты с Yukon-совместимым чипсетом.

При загрузке драйвера с помощью insmod, параметры сетевого адаптера можно указать в командной строке через запятую. Если, например, установлено два сетевых адаптера и AutoNegotiation на порту A первого адаптера нужно включить, а на порту A второго адаптера — выключить, то введите следующее:

insmod sk98lin.o AutoNeg_A=On,Off

После того как sk98lin подхватит один или более адаптер и будет смонтирована файловая система /proc, будут созданы отдельные файлы статистики в каталоге /proc/net/sk98lin для каждого порта установленных сетевых адаптеров. Эти файлы будут называться eth[x], где x — номер интерфейса, который был назначен каждому порту в системе.

После завершения загрузки каждому eth[x] может быть назначен желаемый IP-адрес с помощью команды ifconfig(8). Это заставит адаптер подключиться к Ethernet и вывести сообщение на консоль: "ethx: network connection up using port y" с настроенными или определёнными параметрами подключения.

Драйвер sk98lin также поддерживает большие фреймы (также называемые jumbo фреймами). С помощью jumbo-фреймов можно очень сильно увеличить пропускную способность при передаче больших объёмов данных. Чтобы включить большие фреймы, нужно на интерфейсе установить большое значение MTU (максимальная единица передачи). Значение MTU по умолчанию равно 1500 и может быть увеличено до 9000 (байт). Установку размера MTU можно выполнить при назначении IP-адреса интерфейсу или позднее с помощью команды ifconfig(8) с параметром mtu. Если, например, eth0 нужно назначить IP-адрес и большой размер фрейма MTU, то это можно сделать с помощью следующих двух команд:

ifconfig eth0 10.1.1.1

ifconfig eth0 mtu 9000

Эти две команды можно объединить в одну:

ifconfig eth0 10.1.1.1 mtu 9000

Заметим, что большие фреймы можно использовать только, если эта позволяет ваша сетевая инфраструктура. Это означает, что все коммутаторы сети Ethernet также должны поддерживать большие фреймы. Довольно много коммутаторов поддерживают большие фреймы, но для этого их нужно настроить. В большинстве случаев, в настройках по умолчанию используются только стандартные фреймы с размером MTU равным 1500 (байт). Помимо коммутатором сети, все используемые сетевые адаптеры также должны принимать jumbo-фреймы. Если адаптер не настроен для приёма больших фреймов, то он их просто отбрасывает.

Для переключения обратно к стандартному размеру фрейма Ethernet можно использовать такую команду ifconfig(8):

ifconfig eth0 mtu 1500

Драйвер Marvell/SysKonnect Gigabit Ethernet для Linux поддерживает VLAN и объединение каналов в соответствии со стандартами IEEE 802.1, 802.1q и 802.3ad. Эти свойства доступны только после установки открытых модулей, которые можно найти в Интернет:

VLAN: http://www.candelatech.com/~greear/vlan.html

Link Aggregation: http://www.st.rim.or.jp/~yumo

Заметим, что Marvell/SysKonnect не предлагает поддержку этих открытых модулей и не несёт ответственности при отказах и проблемах, связанных с использованием этих модулей.

### Параметры
Speed_A=i,j,...

Этот параметр используется для задания скорости порта A. Работает только для адаптеров Yukon с медным интерфейсом. Возможные значения: 10, 100, 1000 или Auto; по умолчанию задано Auto. Обычно, скорость согласуется между двумя портами во время установки связи. Если процедура завершается неудачно, то порт можно принудительно перевести на нужную скорость с помощью этого параметра.

Speed_B=i,j,...

Этот параметр используется для задания скорости порта B. Работает только для адаптеров Yukon с медным интерфейсом. Возможные значения: 10, 100, 1000 или Auto; по умолчанию задано Auto. Обычно, скорость согласуется между двумя портами во время установки связи. Если процедура завершается неудачно, то порт можно принудительно перевести на нужную скорость с помощью этого параметра.

AutoNeg_A=i,j,...

Включение или выключение автосогласования на порту A. Возможные значения: On, Off или Sense; по умолчанию задано On. В режиме Sense выполняется автоматическое обнаружение поддержки автосогласования у партнёра по связи.

AutoNeg_B=i,j,...

Включение или выключение автосогласования на порту B. Возможные значения: On, Off или Sense; по умолчанию задано On. В режиме Sense выполняется автоматическое обнаружение поддержки автосогласования у партнёра по связи.

DupCap_A=i,j,...

Этот параметр используется для задания режима дуплекса на порту A. Возможные значения: Half, Full или Both; по умолчанию задано Both. Этот параметр учитывается только, если AutoNeg_A для порта A не установлено в Sense. Если значение AutoNeg_A равно On, то может быть указано любое из трёх значений DupCap_A ( Half, Full или Both). Если AutoNeg_A равно Off, то значениями DupCap_A могут быть только Full и Half. Параметр DupCap_A полезен, если партнёр по связи не поддерживает все возможные комбинации дуплекса.

DupCap_B=i,j,...

Этот параметр используется для задания режима дуплекса на порту B. Возможные значения: Half, Full или Both; по умолчанию задано Both. Этот параметр учитывается только, если AutoNeg_B для порта B не установлено в Sense. Если значение AutoNeg_B равно On, то может быть указано любое из трёх значений DupCap_B ( Half, Full или Both). Если AutoNeg_B равно Off, то значениями DupCap_B могут быть только Full и Half. Параметр DupCap_B полезен, если партнёр по связи не поддерживает все возможные комбинации дуплекса.

FlowCtrl_A=i,j,...

Этот параметр используется для задания свойств управления потоком, которые анонсируются портом при автосогласовании. Возможные значения: Sym, SymOrRem, LocSend или None; по умолчанию задано SymOrRem. Назначение режимов:

Sym = Symmetric

Оба партнёра по связи позволяют посылать фреймы PAUSE.

SymOrRem = SymmetricOrRemote

Оба или только один партнёр по связи позволяет посылать фреймы PAUSE.

LocSend = LocalSend

Только локальная связь партнёра позволяет посылать фреймы PAUSE.

None = None

Партнёры по связи не позволяют посылать фреймы PAUSE.

Заметим, что этот параметр игнорируется, если значение AutoNeg_A равно Off.

FlowCtrl_B=i,j,...

Этот параметр используется для задания свойств управления потоком, которые анонсируются портом при автосогласовании. Возможные значения: Sym, SymOrRem, LocSend или None; по умолчанию задано SymOrRem. Назначение режимов:

Sym = Symmetric

Оба партнёра по связи позволяют посылать фреймы PAUSE.

SymOrRem = SymmetricOrRemote

Оба или только один партнёр по связи позволяет посылать фреймы PAUSE.

LocSend = LocalSend

Только локальная связь партнёра позволяет посылать фреймы PAUSE.

None = None

Партнёры по связи не позволяют посылать фреймы PAUSE.

Заметим, что этот параметр игнорируется, если значение AutoNeg_B равно Off.

Role_A=i,j,...

Этот параметр доступен только для адаптеров 1000Base-T. При организации связи между двумя портами 1000Base-T один должен играть роль основного (предоставлять синхронизацию), другой — подчинённого. Возможные значения: Auto, Master или Slave; по умолчанию задано Auto. Обычно, роль порта согласуется во время установления связи, но если этого достичь не удалось, с помощью этого параметра порту A можно принудительно назначить нужное значение.

Role_B=i,j,...

Этот параметр доступен только для адаптеров 1000Base-T. При организации связи между двумя портами 1000Base-T один должен играть роль основного (предоставлять синхронизацию), другой — подчинённого. Возможные значения: Auto, Master или Slave; по умолчанию задано Auto. Обычно, роль порта согласуется во время установления связи, но если этого достичь не удалось, с помощью этого параметра порту B можно принудительно назначить нужное значение.

ConType=i,j,...

Этот параметр представляет собой комбинацию всех пяти параметров порта. Он упрощает настройку обоих портов адаптера. Различные значения этой переменной отражают большую часть важных комбинаций параметров порта. Возможные значения и их соответствующие комбинации параметров портов:

```
ConType | DupCap   AutoNeg   FlowCtrl   Role   Speed
--------+-------------------------------------------
Auto    |  Both      On      SymOrRem   Auto   Auto
100FD   |  Full      Off       None     Auto   100
100HD   |  Half      Off       None     Auto   100
10FD    |  Full      Off       None     Auto   10
10HD    |  Half      Off       None     Auto   10
```

Задание любого другого параметра порта вместе с ConType приводит к объединению обеих настроек. Одиночные параметры порта (например, Speed_A) имеют больший приоритет чем значение переменной ConType.

Moderation=i,j,...

Регулирование прерываний используется для ограничения максимального количества прерываний, которое может обработать драйвер. То есть одно и более прерываний (которые означают обработку передачи или приёма пакета) ставится в очередь для ожидания обработки драйвером. Параметр IntsPerSec определяет когда обслуживается очередь (см. далее). Возможные режимы регулирования: None, Static или Dynamic; по умолчанию задано None. Назначение режимов:

None Не выполнять регулирование прерываний для адаптера. Следовательно, каждое прерывания по передаче или приёму будет обработано немедленно, сразу после появления на линии прерывания адаптера.

Static Выполнять регулирование прерываний для адаптера. Все прерывания по передаче и приёму ставятся в очередь в ожидании завершения интервала регулирования. После окончания интервала все прерывания в очереди обрабатываются одним большим заданием без задержки. Термин Static отражает тот факт, что регулирование прерываний всегда включено, независимо от сетевой загрузки на определённом интерфейсе в данный момент. Кроме того, длительность интервала регулирования прерываний имеет постоянную величину, которая при работающем драйвере никогда не меняется.

Dynamic Регулирование прерываний может применяться к адаптеру в зависимости от загрузки системы. Если драйвер обнаруживает, что система очень загружена, то он попытается оградить систему от излишней сетевой нагрузки, включив регулирование прерываний. Если позднее нагрузка на ЦП снизится (или если сетевая загрузка станет очень маленькой), то регулирование прерываний будет автоматически выключено.

Регулирование прерываний должно использоваться, когда драйвер обрабатывает много трафика на одном или более интерфейсах, который, как следствие, также приводит большой нагрузке на ЦП. Применение регулирования при большой сетевой нагрузке на медленных компьютерах может понизить загрузку ЦП на 20–30%.

Заметим, что отрицательной стороной регулирования прерываний является увеличение времени на передачу и подтверждение (round-trip-time, RTT), так как постановка в очередь и обслуживание прерываний происходит только через определённые интервалы.

IntsPerSec=i,j,...

Этот параметр определяет длительность любого интервала регулирования прерываний. Предполагая, что используется регулирование прерываний, при значении параметра IntsPerSec равном 2000, получается интервал регулирования прерываний в 500 микросекунд. Возможные значения этого параметра находятся в диапазоне 30...40000 (прерываний в секунду). Значение по умолчанию равно 2000.

Этот параметр используется только, если для сетевого адаптера включено статическое или динамическое регулирование прерываний. Если регулирование не применяется, то параметр игнорируется.

Заметим, что длительность интервала регулирования прерываний нужно выбирать с осторожностью. На первый взгляд, выбор очень большой длительности (например, только 100 прерываний в секунду) кажется осмысленным, но это колоссально увеличит задержку в обработке. С другой стороны, выбор очень короткого интервала регулирования мог бы компенсировать использование любого применяемого регулирования.

PrefPort=i,j,...

Этот параметр используется для принудительного задания предпочтительного порта: A или B (на двухпортовых адаптерах). Предпочтительный порт будет использован когда оба порта, A и B, считаются полностью взаимозаменяемыми. Возможные значения: A или B; по умолчанию задано A.

RlmtMode=i,j,...

RLMT-слежение за состоянием порта. Если связь на активном порту пропадает, то RLMT сразу переключает работу на резервную связь. Виртуальная связь поддерживается так долго, пока есть не менее одной работающей «физической» связи. Этот параметр определяет как RLMT должен отслеживать состояние портов. Возможные значения: CheckLinkState, CheckLocalPort, CheckSeg или DualNet; по умолчанию задано CheckLinkState. Назначение режимов:

CheckLinkState Проверять только состояние связи: RLMT использует состояние связи, сообщаемое аппаратурой адаптера для каждого порта, для определения, можно ли использовать порт для передачи данных в сеть или нет.

CheckLocalPort В этом режиме RLMT отслеживает сетевой путь между двумя портами адаптера, периодически пересылая пакеты между ними. Для работы этого режима требуется настройка сети, при которой два порта смогли бы "видеть" друг друга (то есть, между ними не должно быть маршрутизатора).

CheckSeg Проверять локальный порт и сегментирование: Этот режим поддерживает те же функции что и CheckLocalPort и вдобавок проверяет сегментирование сети между портами. Поэтому этот режим может использоваться только, если в сети установлены коммутаторы Gigabit Ethernet, на которых настроен протокол Spanning Tree.

DualNet В этом режиме порты A и B используются как раздельные устройства. Если у вас адаптер с двумя портами, то порт A будет настроен как eth[x], а порт B как eth[x+1]. Оба порта можно использовать независимо с различающимися IP-адресами. Настройка выбора предпочтительного порта не используется. RLMT выключено.

Заметим, что RLMT-режимы CheckLocalPort и CheckLinkState предназначены для работы в условиях, где сетевой путь между портами существует на одном адаптере. Более того, они не работают, если адаптеры соединены друг с другом.

## ФАЙЛЫ
/proc/net/sk98lin/eth[x]

Файлы статистики для определённого интерфейса адаптера. Содержит общую информацию о карте адаптера и подробную сводку по всем счётчикам передачи и приёма.

/usr/src/linux/Documentation/networking/sk98lin.txt

Это файл README от драйвера sk98lin. В нём содержится подробная инструкция по установке и описание всех параметров драйвера. Также отмечены общие проблемы и их решения.

## ДЕФЕКТЫ
О дефектах сообщайте по адресу: linux@syskonnect.de

## СМОТРИТЕ ТАКЖЕ
ifconfig(8), insmod(8), modprobe(8)


smartpqi

title: smartpqi(4)

summary: драйвер Microsemi Smart Family SCSI

text:
# smartpqi(4)

## ИМЯ
smartpqi - драйвер Microsemi Smart Family SCSI

## ОБЗОР
modprobe smartpqi

[disable_device_id_wildcards={0|1}] [disable_heartbeat={0|1}] [disable_ctrl_shutdown={0|1}] [lockup_action={none|reboot|panic}] [expose_ld_first={0|1}] [hide_vsep={0|1}]

## ОПИСАНИЕ
smartpqi — это драйвер SCSI для контроллеров Microsemi Smart Family.

### Поддерживаемые операции ioctl()
Для совместимости с приложениями, написанными для драйверов cciss(4) и hpsa(4), многие операции ioctl(2), поддерживаемые в драйвере hpsa, также поддерживаются драйвером smartpqi(4) (но не все). Структуры данных, используемые в операциях, описаны в файле исходного кода ядра Linux include/linux/cciss_ioctl.h.

CCISS_DEREGDISK, CCISS_REGNEWDISK, CCISS_REGNEWD

Это операции выполняют ту же работу — заставляют драйвер искать новые устройства. Это тоже самое, как если выполнить запись в атрибут rescan конкретного узла smartpqi.

CCISS_GETPCIINFO

Возвращает домен PCI, шину, устройство, функцию и «board ID» (ID подсистемы PCI).

CCISS_GETDRIVVER

Возвращает версию драйвера в виде четырёх байт в формате:

```
(основная_версия << 28) | (дополнительная_версия << 24) |

        (выпуск << 16) | редакция

```

CCISS_PASSTHRU

Позволить передачу команд BMIC и CISS напрямую в контроллер.

### Параметры загрузки
disable_device_id_wildcards={0|1}

Отключить поддержку, совпадающих с шаблоном идентификаторов устройств. Значение по умолчанию равно 0.

disable_heartbeat={0|1}

Отключить поддержку сторожевой проверки (heartbeat check). Этот параметр используется для отладки. Значение по умолчанию равно 0, что оставляет активной поддержку сторожевой проверки.

disable_ctrl_shutdown={0|1}

Отключить поддержку по выключению контроллера в ответ на события его блокировки. Значение по умолчанию равно 0.

lockup_action={none|reboot|panic}

Задаёт действие, которое выполняет драйвер, когда обнаруживается блокировка контроллера. Действие по умолчанию равно none. параметр

действие

none

отключить только контроллер (offline)

reboot

перезагрузить систему

panic

вызвать панику системы

expose_ld_first={0|1}

Этот параметр включает поддержку доступа к логическим устройствам в системе раньше физических устройств. Значение по умолчанию равно 0.

hide_vsep={0|1}

Этот параметр включает отключение на узле доступа к виртуальному SEP. Обычно, это относится к напрямую подключаемым устройствам. Значение по умолчанию равно 0.

## ФАЙЛЫ

### Узлы устройства
Логические диски доступны через драйвер дисков SCSI (sd), ленточные устройства — через драйвер лент SCSI (st), а контроллеры RAID — через общий драйвер SCSI (sg); имена узлов устройств называются /dev/sd*, /dev/st* и /dev/sg*, соответственно.

### Файлы в /sys, относящиеся к атрибутам узла SmartPQI
/sys/class/scsi_host/host*/rescan

Атрибут rescan узла только для записи. Факт записи заставляет драйвер выполнить сканирование на предмет появления новых, изменившихся или удалённых устройств (например, подключаемых на ходу ленточных накопителей или только что настроенных или удалённых логических дисков и т. д.) и уведомить прослойку (midlayer) SCSI об обнаруженных изменениях. Обычно, пересканирование выполняется автоматически при изменении состава оборудования, поэтому, обычно, пользователь не должен выполнять запись в этот файл. Такое действие может быть полезным при подключении на ходу устройств, таких как ленточные накопители или хранилища с уже настроенными логическими дисками.

/sys/class/scsi_host/host*/version

Атрибут узла version доступен только для чтения. Он содержит версию драйвера и микропрограммы контроллера.

Пример:

```
$ cat /sys/class/scsi_host/host1/version
driver: 1.1.2-126
firmware: 1.29-112

```

/sys/class/scsi_host/host*/lockup_action

Атрибут узла lockup_action доступен на чтение/запись. Он заставляет драйвер выполнять определённое действие при маловероятном событии — обнаружении блокировки контроллера. Смотрите в разделе ПАРАМЕТРЫ описание значений lockup_action.

/sys/class/scsi_host/host*/driver_version

Атрибут driver_version доступен только для чтения. В данном атрибуте хранится версия драйвера smartpqi.

Пример:

```
$ cat /sys/class/scsi_host/host1/driver_version
1.1.2-126

```

/sys/class/scsi_host/host*/firmware_version

Атрибут firmware_version доступен только для чтения. Он содержит версию микропрограммы контроллера.

Пример:

```
$ cat /sys/class/scsi_host/host1/firmware_version
1.29-112

```

/sys/class/scsi_host/host*/model

Атрибут model доступен только для чтения. Он содержит маркировочную строку модели контроллера.

Пример:

```
$ cat /sys/class/scsi_host/host1/model
1100-16i

```

/sys/class/scsi_host/host*/serial_number

Атрибут serial_number доступен только для чтения. Он содержит уникальный маркировочный номер контроллера.

Пример:

```
$ cat /sys/class/scsi_host/host1/serial_number
6A316373777

```

/sys/class/scsi_host/host*/vendor

Атрибут vendor доступен только для чтения. Он содержит маркировочную строку производителя контроллера.

Пример:

```
$ cat /sys/class/scsi_host/host1/vendor
Adaptec

```

### Файлы в /sys, относящиеся к атрибутам диска SmartPQI
В определениях файла ниже символ c означает номер соответствующего контроллера SCSI, b — номер шины, t — номер цели, l — номер логического элемента (LUN).

/sys/class/scsi_disk/c:b:t:l/device/raid_level

Атрибут raid_level доступен только для чтения. В данном атрибуте хранится уровень RAID каждого логического диска.

Пример:

```
$ cat /sys/class/scsi_disk/4:0:0:0/device/raid_level
RAID 0

```

/sys/class/scsi_disk/c:b:t:l/device/sas_address

Атрибут sas_address доступен только для чтения. В данном атрибуте хранится уникальный идентификатор диска.

Пример:

```
$ cat /sys/class/scsi_disk/1:0:3:0/device/sas_address
0x5001173d028543a2

```

/sys/class/scsi_disk/c:b:t:l/device/ssd_smart_path_enabled

Атрибут ssd_smart_path_enabled доступен только для чтения. Он имеется у томов с включённым ioaccel (ioaccel — альтернативный путь доступа для драйвера, который позволяет драйверу посылать запросы ввода-вывода напрямую устройству SCSI минуя микропрограмму контроллера. Это увеличивает производительность. Данный метод используется для дисков HBA и логических томов на SSD). Содержит 1, если ioaccel включён для тома и 0 в противном случае.

Пример:

```
$ cat /sys/class/scsi_disk/1:0:3:0/device/ssd_smart_path_enabled
0

```

## ВЕРСИИ
Драйвер smartpqi() впервые появился в Linux версии 4.9.

## ЗАМЕЧАНИЯ

### Настройка
Описание настройки контроллера Microsemi Smart Family смотрите в руководстве пользователя на контроллер, которое можно найти поискав нужный контроллер на странице https://storage.microsemi.com/.

## СМОТРИТЕ ТАКЖЕ
cciss(4), hpsa(4), sd(4), st(4)

Файл Documentation/ABI/testing/sysfs-bus-pci-devices-cciss в дереве исходного кода ядра Linux.


st

title: st(4)

summary: ленточный накопитель SCSI

text:
# st(4)

## ИМЯ
st - ленточный накопитель SCSI

## ОБЗОР

```
#include <sys/mtio.h>
```

```
int ioctl(int fd, int request [, (void *)arg3]);
int ioctl(int fd, MTIOCTOP, (struct mtop *)mt_cmd);
int ioctl(int fd, MTIOCGET, (struct mtget *)mt_status);
int ioctl(int fd, MTIOCPOS, (struct mtpos *)mt_pos);
```

## ОПИСАНИЕ
Драйвер st предоставляет интерфейс к различным ленточным накопителям SCSI. В настоящее время драйвер позволяет управлять любыми устройствами "последовательного доступа". Драйвер st использует для устройств старший номер 9.

Для каждого устройства есть восемь младших номеров. Первые пять битов в младших номерах определяют последовательность обнаружения. В ядрах 2.6 первые восемь битов объединяются с первыми пятью битами для создания номера ленты. Младшие номера могут быть сгруппированы в два набора из четырех чисел: основные младшие номера для устройств (n) с автоперемоткой и номера устройств без автоперемотки (n + 128). При открытии устройства с основным младшим номером, будет послана команда REWIND. При открытии с использованием устройства без автоперемотки этого произведено не будет. (Заметим, что использование устройства с автоперемоткой для установки ленты в определённое положение, например, mt, не даст желаемого результата: лента перемотается после команды mt, и следующая команда будет выполняться с начала ленты).

В каждой группе четыре младших номера доступны для определения устройств с особыми характеристиками (такими как: размер блока, сжатие, плотность и другое). Когда система запускается, доступно только первое устройство. Другие три приводятся в действие, когда определены некоторые их характеристики (смотрите ниже). Путем изменения константы при компиляции возможно изменение баланса между максимальным числом ленточных накопителей и числом из младших номеров каждого накопителя. Начальное значение позволяет контролировать 32 ленточных устройства. Например, возможно контролировать до 64-х ленточных устройств с двумя младшими номерами для различных параметров.

Устройства обычно создаются так:

```
mknod -m 666 /dev/st0 c 9 0
mknod -m 666 /dev/st0l c 9 32
mknod -m 666 /dev/st0m c 9 64
mknod -m 666 /dev/st0a c 9 96
mknod -m 666 /dev/nst0 c 9 128
mknod -m 666 /dev/nst0l c 9 160
mknod -m 666 /dev/nst0m c 9 192
mknod -m 666 /dev/nst0a c 9 224
```

Соответствующее блочное устройство отсутствует.

Драйвер использует внутренний буфер, которого достаточно для сохранения, как минимум, одного блока ленты. В ядре до версии 2.1.121 буфер выделялся как один непрерывный блок. Это ограничивало размер блока самым большим непрерывным участком памяти, которое может выделить ядро. Ограничение в настоящее время составляет: 128 Кбайт для 32-битной и 256 Кбайт для 64-битной архитектуры. В новейших ядрах драйвер располагает буфер в нескольких частях, если это необходимо. По умолчанию максимальное число частей — 16. Таким способом можно сделать максимальный размер блока очень большим (2 МБ, если выделяется 16 блоков по 128 Кбайт).

Размер внутреннего буфера драйвера определяется константой при сборке; эта константа может быть изменена при загрузке ядра. Вдобавок к этому, драйвер пытается разместить больший временный буфер во время запуска, если это необходимо. Тем не менее, размещение во время запуска больших блоков памяти может завершиться неудачно, и лучше не полагаться на динамическое размещение буфера в ядре до версии 2.1.121 (это применяется также при загрузке драйвера по требованию с помощью kerneld или kmod).

В драйвере нет специальной поддержки для устройств определённых производителей или моделей. После старта системы параметры ленточного устройства определяются микропрограммой устройства. Для примера, если микропрограмма выбирает режим с блоками одинакового размера, то ленточное устройство использует этот режим. Параметры могут быть изменены вызовами ioctl(2) и действуют до тех пор, пока устройство не закрыто и потом не открыто вновь. Установка параметров влияет на оба устройства (с автоперемоткой и без автоперемотки).

Внутри подгруппы четырёх устройств для каждого могут быть заданы особые параметры. Параметры начинают работать, когда устройство открывается. Для примера, системный администратор может определить одно устройство, которое записывает данные в режиме блоков одинакового размера с задаваемым размером и другое, которое записывает данные в режиме блоков с разным размером (если накопитель поддерживает оба режима).

Драйвер поддерживает ленточные разделы, но только если их поддерживает само устройство. Заметим, что ленточные разделы не имеют ничего общего с разделами диска. Размеченная лента одного носителя может выглядеть как несколько логических лент. Поддержка разделов включается с помощью ioctl(2). Местоположение ленты зафиксировано внутри каждого раздела. При последующих ленточных операциях используется нужный раздел, выбранный с помощью ioctl(2). Переключение раздела выполняется вместе со следующей операцией с лентой во избежании ненужной перемотки. Максимальное число разделов на ленте определяется константой при компиляции (изначально оно равно четырём). Драйвер содержит вызов ioctl(2), который позволяет форматировать ленту с одним или двумя разделами.

Обычно, в системе создаётся устройство /dev/tape в виде жёсткой или символьной ссылки на ленточное устройство по умолчанию.

Начиная с ядра 2.6.2, драйвер экспортирует в каталог sysfs в файл /sys/class/scsi_tape подключённые устройства и некоторые их параметры.

### Передача данных
Драйвер поддерживает операции в обоих режимах: с постоянным и переменным размером блоков (только если оба режима поддерживает само устройство). В режиме с постоянным размером блока устройство выполняет запись блоками заданного размера, и размер блока не зависит от количества байтов, которые записываются системными вызовами. В режиме с переменным размером блока один блок ленты записывается при каждом вызове записи, и размер соответствующего блока ленты определяется в соответствии с количеством записываемых байт. Заметим, что блоки ленты не содержат информации о режиме записи: при чтении единственно важной вещью является использование нужных команд, которые принимают размеры блоков ленты.

В режиме с переменным размером блока при чтении количество байтов не совпадает точно с размером блока ленты. Если количество байтов больше, чем в следующем блоке ленты, драйвер возвращает данные, а функция возвращает реальный размер блока. Если размер блока больше, чем количество байтов, то возвращается ошибка.

При чтении в режиме с постоянным размером блока количества байтов может быть произвольным, если включена буферизация, или пропорциональным размеру блока ленты, если буферизация выключена. Ядра версий до 2.1.121, позволяли записывать произвольное количество байтов, если включена буферизация. Во всех других случаях (ядра до 2.1.121 с выключенной буферизацией и новые ядра) количество байтов должно быть пропорциональным размеру блока ленты.

В ядрах 2.6 драйвер пытается использовать прямую пересылку между пользовательским буфером и устройством. Если это невозможно, то используется внутренний буфер драйвера. Причинами отказа от использования прямой пересылки может быть включение неправильного выравнивания пользовательского буфера (по умолчанию 512 байт, но может быть изменено драйвером HBA), одна или более страниц пользовательского буфера недостижима из адаптера SCSI и т. п.

Маркер файла автоматически записывается на ленту, если последней операцией до закрытия была запись.

Когда при чтении обнаруживается маркер файла, происходит следующее. Если при обнаружении маркера есть данные в буфере, то возвращаются данные буфера. Следующее чтение вернёт ноль байтов. Затем вернёт данные из следующего файла. О конце записанных данных будет сообщено возвращением нуля байтов в двух операциях чтения подряд. И, наконец, третье чтение вернёт ошибку.

### Вызовы ioctl
Драйвер поддерживает три запроса ioctl(2). Запросы, не опознанные драйвером st, пропускаются в драйвер SCSI. Определения, приведённые далее, взяты из /usr/include/linux/mtio.h:

### MTIOCTOP — выполнение операций с лентой
Для этого запроса требуется аргумент с типом (struct mtop *). Не все устройства поддерживает все операции. Драйвер возвращает ошибку EIO, если устройство не выполнило операцию.

```
/* Структура для MTIOCTOP - операция с маг. лентой */
struct mtop {

    short   mt_op;       /* операции перечислены далее */

    int     mt_count;    /* их количество */
};
```

Операции с магнитной лентой для обычного использования:

MTBSF

Перемотка ленты на mt_count файловых маркеров назад.

MTBSFM

Перемотка ленты на mt_count файловых маркеров назад. Перемотка ленты на сторону EOT последнего маркера файла.

MTBSR

Перемотка ленты на mt_count записей назад (блоков ленты).

MTBSS

Перемотка ленты на mt_count сборочных маркеров (setmarks) назад.

MTCOMPRESSION

Включение режима сжатия данных на ленте устройства, если mt_count не равно 0, и отключение сжатия, если mt_count равно 0. Эта команда использует MODE page 15, поддерживаемую многими DAT-устройствами.

MTEOM

Переход в конец записанных на носителе данных (для добавления файлов).

MTERASE

Стирание ленты. В ядре 2.6 выполняется быстрое стирание (удаление маркера ленты), если аргумент равен 0. В противном случае выполняется полное стирание.

MTFSF

Перемотка ленты на mt_count файловых маркеров вперёд.

MTFSFM

Перемотка ленты на mt_count файловых маркеров вперёд. Перемотка ленты на сторону BOT последнего маркера файла.

MTFSR

Перемотка ленты на mt_count записей вперёд (блоков ленты).

MTFSS

Перемотка ленты на mt_count сборочных маркеров вперёд.

MTLOAD

Выполнение SCSI-команды загрузки. Для некоторых автозагрузчиков HP выполняется особое действие. Если mt_count равно константе MT_ST_HPLOADER_OFFSET плюс некоторое число, то это значение передаётся устройству для управления автозагрузчиком.

MTLOCK

Блокирование дверцы ленточного устройства.

MTMKPART

Форматирование ленты на один или два раздела. Если mt_count положительно, то оно определяет размер раздела 1, а раздел 0 займёт остаток ленты. Если mt_count равно 0, то лента форматируется с одним разделом. Для ядра версии 4.6: отрицательное значение mt_count задаёт размер раздела 0, а раздел 1 займёт остаток ленты. Физический порядок разделов зависит от устройства. Эта команда запрещена для устройств, не поддерживающих разделы (смотрите MT_ST_CAN_PARTITIONS далее).

MTNOP

Нет операции, как побочный эффект — сброс буфера устройства. Операция должна выполняться до чтения состояния с помощью MTIOCGET.

MTOFFL

Перемотка ленты и отключение устройства.

MTRESET

Возврат устройства в исходное состояние.

MTRETEN

Подтягивание ленты.

MTREW

Перемотка ленты назад.

MTSEEK

Переход к блоку ленты с номером mt_count. Эта операция требует устройства SCSI-2, поддерживающего команду LOCATE (адрес, определяемый устройством), или Tandberg-совместимого устройства SCSI-1 (Tandberg, Archive Viper, Wangtek, ... ). Номер блока должен быть равен значению, которое было получено ранее с помощью MTIOCPOS, если используется адрес, определяемый устройством.

MTSETBLK

Задание размера блока устройства равному mt_count. Нулевое значение включает режим с переменным размером блоков.

MTSETDENSITY

Задание плотности данных на ленте равной mt_count. Коды плотности данных, поддерживаемые устройством, можно найти в документации к устройству.

MTSETPART

Переключение активного раздела на номер mt_count. Разделы нумеруются начиная с нуля. Эта команда только для устройств с включённой поддержкой разделов (см. MT_ST_CAN_PARTITIONS далее).

MTUNLOAD

Выполнение SCSI-команды выгрузки (но лента не выталкивается).

MTUNLOCK

Разблокирование дверцы ленточного устройства.

MTWEOF

Запись mt_count маркеров файлов.

MTWSM

Запись mt_count сборочных маркеров.

Операции с магнитной лентой по установке параметров устройства (для суперпользователя):

MTSETDRVBUFFER

Установка различных параметров устройства и драйвера согласно битам mt_count. Задаётся режим буферизации устройства, набор логических параметров драйвера, порог буфера записи, значения по умолчанию для размера блока, плотности и время ожидания (только для ядра версии 2.1 или более поздних). Одна операция может присваивать значение только одного пункта из списка выше (логические параметры считаются за одну).

Нулевое значение старших 4-х битов будет использовано для установки режима буферизации устройства. Режимы буферизации:

0

Устройство не сообщит, что запись прошла успешно (GOOD) до тех пор, пока блоки данных фактически не будут записаны на носитель.

1

Устройство может сообщить, что запись прошла успешно после того, как все данные будут перемещены во внутренний буфер устройства.

2

Устройство может сообщить, что запись прошла успешно после того, как: (а) все данные будут перемещены во внутренний буфер устройства и (б) все буферизованные данные из различных источников были успешно записаны на носитель.

Для контроля записи пороговое значение mt_count должно включать в себя константу MT_ST_WRITE_THRESHOLD побитно сложенную (OR) с счётчиком блоков в первых 28-и битах. Счётчик блоков содержит количество блоков по 1024 байта, а не физических блоков на ленте. Пороговое значение не может превышать размер внутреннего буфера устройства. (см. ОПИСАНИЕ выше).

Для установки и очистки логических параметров значение mt_count должно включать в себя одну из констант: MT_ST_BOOLEANS, MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS, MT_ST_DEFBOOLEANS или любую их побитно сложенную комбинацию. Используя параметры MT_ST_BOOLEANS можно задать значения соответствующими битами. С помощью параметров MT_ST_SETBOOLEANS можно выборочно установить, а с помощью MT_ST_DEFBOOLEANS — выборочно сбросить некоторые биты.

Параметры по умолчанию для ленточного устройства устанавливаются с помощью MT_ST_DEFBOOLEANS. Неактивное ленточное устройство (например, устройство с младшим номером 32 или 160) активируется когда для него назначаются параметры по умолчанию в первый раз. Активированное устройство наследует параметры, которые не заданы явно, от устройства, активированного при загрузке ОС.

Логические параметры:

MT_ST_BUFFER_WRITES (по умолчанию true)

Выполнять буферизацию чтения и опережающее чтение в режиме с постоянным размером блока. Если значение параметра равно false и устройство использует режим с постоянным размером блока, то во всех операциях чтения должны использоваться блоки кратной длины. Для надёжной записи многотомных архивов значение этого параметра должно быть равно false.

MT_ST_ASYNC_WRITES (по умолчанию true)

Когда значение этого параметра равно true, то операции записи сразу завершаются, не дожидаясь пока данные переместятся в устройство, если данные помещаются в буфер драйвера. Порог записи определяет, насколько должен быть заполнен буфер до ввода новых SCSI-команд. Любые ошибки, возвращённые устройством, хранятся до следующей операции. Для надёжной записи многотомных архивов значение этого параметра должно быть равно false.

MT_ST_READ_AHEAD (по умолчанию true)

Этот параметр указывает драйверу выполнять буферизацию чтения и опережающее чтение в режиме с постоянным размером блока. Если значение параметра равно false и устройство использует режим с постоянным размером блока, то во всех операциях чтения должны использоваться блоки кратной длины.

MT_ST_TWO_FM (по умолчанию false)

Этот параметр изменяет поведение драйвера после закрытия файла. По умолчанию драйвер записывает один маркер файла. Если значение параметра равно true, то драйвер запишет два маркера файла и вернётся на место второго.

Замечание: этому параметру не может быть присвоено значение true для ленточных устройств QIC, так как они не могут перезаписать маркер файла. Они находят конец записанных данных ища пустое место на ленте, а не два последовательных маркера файла. Многие современные устройства также находят конец записанных данных, и использование двух меток файла обычно необходимо только при одновременном использовании лент в нескольких разных системах.

MT_ST_DEBUGGING (по умолчанию false)

Этот параметр включает вывод отладочных сообщений драйвера (работает только в том случае, если драйвер был собран с ненулевым значением DEBUG).

MT_ST_FAST_EOM (по умолчанию false)

Этот параметр заставляет посылать операцию MTEOM непосредственно устройству, потенциально увеличивая скорость операций, но возникает опасность потерять дорожку текущего файла, номер которой обычно возвращается по запросу MTIOCGET. Если значение параметра MT_ST_FAST_EOM равно false, то драйвер отвечает на запрос MTEOM, перематывая ленту к концу записанных файлов.

MT_ST_AUTO_LOCK (по умолчанию false)

Когда этому параметру присвоено значение true, дверца блокируется, если устройство открыто, и дверца разблокируется, когда устройство закрыто.

MT_ST_DEF_WRITES (по умолчанию false)

Параметры ленты (размер блока, режим, сжатие и т.д.) могут изменяться, когда выполняется переход от одного устройства к другому устройству, которое связано с тем же устройством, в зависимости от того, как определяются устройства. Этот параметр определяет, будут ли применяться изменения через драйвер при помощи команд SCSI, или устройство само определит возможности, которые будут использоваться. Если значение параметра равно false, то драйвер будет посылать команды SCSI сразу после смены устройства. Если значение параметра равно true, команды SCSI не отправляются до запроса записи. В этом случае микропрограмма устройства позволяет выполнить обнаружение структуры ленты во время чтения, а команды SCSI используются только для проверки правильности записи на ленту в соответствии со спецификацией.

MT_ST_CAN_BSR (по умолчанию false)

Если используется упреждающее чтение, лента должна быть иногда перемотана назад для правильного её размещения при закрытом устройстве. Для перемотки ленты назад используется команда SCSI. Некоторые старые устройства не могут правильно обрабатывать эту команду, и этот параметр может использоваться для того, чтобы указать драйверу не применять данную команду. В конечном итоге, с упреждающим чтением и в режиме с постоянным размером блока может быть неверно определено местоположение файла при закрытом устройстве. В ядре 2.6 значение параметра равно true для устройств с поддержкой SCSI-3.

MT_ST_NO_BLKLIMS (по умолчанию false)

Некоторые устройства не понимают SCSI-команду READ BLOCK LIMITS. Если параметр установлен, то драйвер не исполняет эту команду. Недостатком этого является невозможность проверки драйвером до отправки команд, поддерживается ли устройством выбранный размер блока.

MT_ST_CAN_PARTITIONS (по умолчанию false)

Этот параметр даёт возможность поддерживать несколько разделов на ленте. Он применяется ко всем файлам устройств, связанным с устройством.

MT_ST_SCSI2LOGICAL (по умолчанию false)

Этот параметр заставляет драйвер использовать адресацию логических блоков, определённую в стандарте SCSI-2 для выполнения операций поиска и пересчёта (с командами MTSEEK и MTIOCPOS и в том случае, когда изменяются разделы ленты). Желательно установить этот параметр, если устройство поддерживает логические адреса, потому что они рассчитывают также и маркеры файлов. Некоторые устройства поддерживают только адресацию логических блоков.

MT_ST_SYSV (по умолчанию false)

Когда этот параметр установлен, ленточные устройства используют семантику SystemV. В других случаях используется семантика BSD. Основное различие между ними (когда устройство, используемое для чтения, закрыто) состоит в следующем: по семантике SYSV лента перематывается вперед за следующий маркер файла, если этого не произошло во время использования устройства. В семантике BSD позиция на ленте не меняется.

MT_NO_WAIT (по умолчанию false)

Включает режим без задержки (т.е., не ждать завершения работы команды) для некоторых команд (например, rewind).

Пример:

```
struct mtop mt_cmd;
mt_cmd.mt_op = MTSETDRVBUFFER;
mt_cmd.mt_count = MT_ST_BOOLEANS |

        MT_ST_BUFFER_WRITES | MT_ST_ASYNC_WRITES;
ioctl(fd, MTIOCTOP, mt_cmd);
```

Размер блока по умолчанию для устройства может быть установлен с помощью MT_ST_DEF_BLKSIZE, а плотность данных по умолчанию может быть установлена с помощью MT_ST_DEFDENSITY. Значения параметров логически складываются с кодом операции.

В ядре версии 2.1.x и более поздних время ожидания может быть установлено подкомандой MT_ST_SET_TIMEOUT логически сложенной со значением ожидания. Долгое время ожидания (используется при перемотке и выполнении других команд, занимающих длительное время) может быть установлено с помощью MT_ST_SET_LONG_TIMEOUT. Значения, используемые в ядре по умолчанию, слишком велики, для уверенности в том, время ожидания не истечёт. Из-за этого драйвер может надолго застрять в ожидании. Эти команды могут быть использованы для установки оптимальных для значений различных устройств. Установка времени ожидания для одного устройства применяется для всех файлов устройств, связанных с этим устройством.

Начиная с ядер 2.4.19 и 2.5.43, в драйвере появился бит состояния, который показывает, была ли запрошена очистка у устройства. Метод, используемый устройством для возврата информации об очистке, задаётся с помощью подкоманды MT_ST_SEL_CLN. Если значение равно 0, то бит очистки всегда ноль. Если значение равно 1, то используются данные TapeAlert, определённые в стандарте SCSI-3 (пока не реализовано). Значения 2–17 зарезервированы. Если самые младшие восемь бит >= 18, то используются биты из расширенных данных уточнённого состояния (extended sense data). Биты 9–16 задают маску для выбора бит, которые должны просматриваться, а биты 17–23 задают битовый шаблон поиска. Если битовый шаблон равен 0, то один или более бит в маске указывают на запрос очистки. Если шаблон не равен нулю, то шаблон должен совпадать с байтом уточнённого состояния согласно маске.

### MTIOCGET — получение состояния ленты
Для этого запроса требуется аргумент с типом (struct mtget *).

```
/* структура для MTIOCGET - команда получения состояния ленты */
struct mtget {

    long     mt_type;

    long     mt_resid;

    /* следующие регистры зависят от устройства */

    long     mt_dsreg;

    long     mt_gstat;

    long     mt_erreg;

    /* следующие два поля используются не всегда */

    daddr_t  mt_fileno;

    daddr_t  mt_blkno;
};
```

mt_type

В заголовочном файле определено множество значений mt_type, но текущий драйвер сообщает только об общих типах MT_ISSCSI1 (лента общего типа SCSI-1) и MT_ISSCSI2 (лента общего типа SCSI-2).

mt_resid

Содержит номер текущего раздела ленты.

mt_dsreg

Содержит текущие настройки размера блока устройства (в младших 24-х битах) и плотность (в старших 8-х битах). Эти поля определяются с помощью MT_ST_BLKSIZE_SHIFT, MT_ST_BLKSIZE_MASK, MT_ST_DENSITY_SHIFT и MT_ST_DENSITY_MASK.

mt_gstat

Содержит общую (независимую от устройства) информацию о состоянии. В заголовочном файле определены макросы для тестирования бит:

GMT_EOF(x): Текущая позиция сразу после маркера файла (всегда false после выполнения операции MTSEEK).

GMT_BOT(x): Текущая позиция на начале первого файла (всегда false после операции MTSEEK).

GMT_EOT(x): Текущая позиция у физического конца ленты.

GMT_SM(x): Текущая позиция на сборочном маркере (всегда false после выполнения операции MTSEEK).

GMT_EOD(x): Текущая позиция в конце записанных данных.

GMT_WR_PROT(x): Устройство защищено от записи. Для некоторых устройств это может означать, что они не поддерживают запись на установленный носитель (неподдерживаемый тип).

GMT_ONLINE(x): Последний вызов open(2) привёл к тому, что лента в нужном месте и устройство готово к работе.

GMT_D_6250(x), GMT_D_1600(x), GMT_D_800(x): "Общая" информация о текущей плотности только для 9-дорожечных ½" устройств.

GMT_DR_OPEN(x): Нет ленты в устройстве.

GMT_IM_REP_EN(x): Сообщает о режиме. Этот бит устанавливается, если нет гарантии, что данные были правильно физически записаны на ленту после возврата из функции записи. Этот бит приобретает нулевое значение, когда драйвер не записывает данные в буфер и устройство не настроено на буферизацию данных.

GMT_CLN(x): У устройства запросили очистку. Реализовано в ядрах, начиная с 2.4.19 и 2.5.43.

mt_erreg

Содержит счётчик (младшие 16 бит) исправленных ошибок, определяемых с помощью MT_ST_SOFTERR_SHIFT и MT_ST_SOFTERR_MASK. Из-за противоречивости способов сообщения об исправленных ошибках устройствами, часто этот счётчик не ведётся (большинство устройств по умолчанию не сообщают об исправленных ошибках, это можно изменить с помощью SCSI-команды MODE SELECT).

mt_fileno

Содержит текущий номер файла (отсчёт ведётся с 0). Если номер файла неизвестен, то значение равно -1 (например, после MTBSS или MTSEEK).

mt_blkno

Содержит номер блока (отсчёт ведётся с 0) в пределах текущего файла. Если номер блока неизвестен, то значение равно -1 (например, после MTBSF, MTBSS или MTSEEK).

### MTIOCPOS — получение текущей позиции ленты
Для этого запроса требуется аргумент с типом (struct mtpos *). Он возвращает текущий номер блока ленты, который необязательно совпадает со значением mt_blkno, возвращаемым MTIOCGET. Устройство должен быть SCSI-2, чтобы поддерживать команду READ POSITION (адрес, определяемый устройством), или Tandberg-совместимым устройством SCSI-1 (Tandberg, Archive Viper, Wangtek, …).

```
/* структура для MTIOCPOS - команда получения позиции на ленте */
struct mtpos {

    long mt_blkno;    /* текущий номер блока */
};
```

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
EACCES

Попытка записать или стереть ленту, защищённую от записи. (Эта ошибка не возникает при open(2).)

EBUSY

Устройство уже используется, или драйвер не способен выделить буфер.

EFAULT

Параметры команды указывают на память, не принадлежащую вызывающему процессу.

EINVAL

Вызову ioctl(2) был передан неверный аргумент, или запрошен неправильный размер блока.

EIO

Запрошенные операции не могут быть завершены.

ENOMEM

Счётчик байт в read(2) меньше чем следующий физический блок ленты (до версии 2.2.18 и 2.4.0 лишние байты просто игнорировались).

ENOSPC

Операция записи не может завершиться, потому что лента закончилась.

ENOSYS

Неизвестный вызов ioctl(2).

ENXIO

Во время открытия обнаружено, что ленточного устройства не существует.

EOVERFLOW

Попытка чтения или записи блоков переменной длины, больших, чем внутренний буфер драйвера.

EROFS

Попытка открытия с параметром O_WRONLY или O_RDWR, но лента в устройстве защищена от записи.

## ФАЙЛЫ
/dev/st*

ленточные устройства SCSI с автоперемоткой

/dev/nst*

ленточные устройства SCSI без автоперемотки

## ЗАМЕЧАНИЯ
1.

При обмене данными между системами в них должен быть согласован физический размер блока ленты. Параметры устройства после загрузки часто не являются теми, которые использует большинство операционных систем, работающих с этими устройствами. Большинство систем используют устройства в режиме с переменным размером блока, если этот режим поддерживается устройством. Это применимо к большинству современных устройств, включая DAT, DLT и т.д. Возможно, целесообразно использовать эти устройства в режиме с переменным размером блока также и в Linux (т.е., используйте MTSETBLK или MTSETDEFBLK при запуске системы для установки необходимого режима), по крайней мере при обмене данными с другими системами. Недостатком этого является довольно большой размер блока ленты, который нужно использовать для работы на приемлемой скорости при передаче данных по шине SCSI.

2.

Многие программы (например, tar(1)) позволяют пользователю задать размер блока в командной строке. Заметим, что это помогает определить размер физического блока на ленте, но только в режиме с переменным размером блока.

3.

Для использования ленточных устройств SCSI, базовый драйвер SCSI, драйвер SCSI-адаптера и драйвер ленты SCSI должны быть включены в ядро или загружаться как модули. Если драйвер SCSI-ленты отсутствует, то устройство считается распознанным, но поддержка работы с лентой, описанная здесь, будет недоступна.

4.

Драйвер записывает сообщения об ошибках в консоль/журнал. Коды SENSE, содержащиеся в некоторых сообщениях, автоматически транслируются в текст, если в ядре включён параметр подробного вывода сообщений SCSI.

5.

Использование внутреннего буфера драйвера позволяет достичь хорошей пропускной способности в режиме с постоянным размером блока даже с маленьким числом байт в read(2) и write(2). Прямой обмен для этого невозможен и может привести к неожиданностям при переходе на ядро 2.6. В качестве решения предлагается указать ПО использовать больший обмен передачи (часто, указав использовать больший размер блоков). Если это невозможно, то прямой обмен может быть выключен.

## СМОТРИТЕ ТАКЖЕ
mt(1)

Файл drivers/scsi/README.st или Documentation/scsi/st.txt (ядро >= 2.6) из дерева исходного кода ядра Linux содержит самую последнюю информацию о драйвере и его возможностях настройки


tty

title: tty(4)

summary: управляющий терминал

text:
# tty(4)

## ИМЯ
tty - управляющий терминал

## ОПИСАНИЕ
Файл /dev/tty является символьным файлом со старшим номером 5 и младшим номером 0, обычно имеет права доступа 0666 и принадлежит root:tty. Используется как синоним управляющего терминала процесса (если есть).

В дополнении к запросам ioctl(2), поддерживаемым устройством, на которое указывает tty, также поддерживается вызов ioctl(2) TIOCNOTTY.

### TIOCNOTTY
Отсоединить вызывающий процесс от его управляющего терминала.

Если процесс является лидером сеанса, то использующей терминал группе процессов (foreground process group) будут посланы сигналы SIGHUP и SIGCONT, и все процессы в текущем сеансе потеряют свои управляющие tty.

Вызов ioctl(2) может работать только с дескрипторами файлов, которые подключены к /dev/tty. Это используется процессами служб, когда они запущены пользователем с терминала. Процесс пытается открыть /dev/tty. Если это удаётся, то он отсоединяется от терминала с помощью TIOCNOTTY; если же операция не удалась, то очевидно, что процесс не присоединён к терминалу и отсоединение не требуется.

## ФАЙЛЫ
/dev/tty

## СМОТРИТЕ ТАКЖЕ
chown(1), mknod(1), ioctl(2), ioctl_console(2), ioctl_tty(2), termios(3), ttyS(4), vcs(4), pty(7), agetty(8), mingetty(8)


ttyS

title: ttyS(4)

summary: последовательные терминальные линии

text:
# ttyS(4)

## ИМЯ
ttyS - последовательные терминальные линии

## ОПИСАНИЕ
ttyS[0-3] — это символьные устройства для последовательных терминальных линий.

Файлы устройств, обычно, создаются следующим образом:

```
mknod -m 660 /dev/ttyS0 c 4 64 # базовый адрес 0x3f8
mknod -m 660 /dev/ttyS1 c 4 65 # базовый адрес 0x2f8
mknod -m 660 /dev/ttyS2 c 4 66 # базовый адрес 0x3e8
mknod -m 660 /dev/ttyS3 c 4 67 # базовый адрес 0x2e8
chown root:tty /dev/ttyS[0-3]
```

## ФАЙЛЫ
/dev/ttyS[0-3]

## СМОТРИТЕ ТАКЖЕ
chown(1), mknod(1), tty(4), agetty(8), mingetty(8), setserial(8)


vcs

title: vcs(4)

summary: память виртуальной консоли

text:
# vcs(4)

## ИМЯ
vcs, vcsa - память виртуальной консоли

## ОПИСАНИЕ
/dev/vcs0 представляет собой символьное устройство со старшим номером 7 и младшим 0, обычно имеет права доступа 0644 и принадлежит root:tty. Устройство указывает на память отображаемого в данный момент виртуального консольного терминала.

/dev/vcs[1-63] представляют собой символьные устройства виртуальных консольных терминалов, имеют старший номер 7 и младшие от 1 до 63, обычно имеют права доступа 0644 и принадлежат root:tty. /dev/vcsa[0-63] представляют собой те же устройства, но имеют атрибуты в виде чисел типа unsigned short (с порядком байт узла) и приставкой из четырех байтов, задающих размеры экрана и положение курсора: lines, columns, x, y. (x = y = 0 означает верхний левый угол экрана.)

При загрузке шрифта с 512 символами значение 9-го бита можно получить через ioctl(2) с помощью операции VT_GETHIFONTMASK (доступна в ядрах Linux версии 2.6.18 и новее) над /dev/tty[1-63]; третий аргумент ioctl(2) содержит указатель на unsigned short, куда возвращается результат.

Эти устройства заменяют операции ioctl(2) по снятию снимка экрана ioctl_console(2), и позволяют системному администратору контролировать доступ с помощью файловой системы.

Устройства для первых восьми виртуальных консолей могут быть созданы с помощью следующих команд:

```
for x in 0 1 2 3 4 5 6 7 8; do

    mknod -m 644 /dev/vcs$x c 7 $x;

    mknod -m 644 /dev/vcsa$x c 7 $[$x+128];
done
chown root:tty /dev/vcs*
```

Запросы ioctl(2) не поддерживаются.

## ФАЙЛЫ
/dev/vcs[0-63]

/dev/vcsa[0-63]

## ВЕРСИИ
Впервые появились в версии ядра Linux 1.1.92.

## ПРИМЕР
Вы можете сделать снимок экрана vt3, переключившись на vt1 и написав

```
cat /dev/vcs3 >foo
```

Заметим, что вывод не будет содержать символов новой строки, поэтому может потребоваться дополнительная обработка, например

```
fold -w 81 /dev/vcs3 | lpr
```

или (жуть)

```
setterm -dump 3 -file /proc/self/fd/1
```

Устройство /dev/vcsa0 используется для поддержки дисплея Брайля.

Эта программа выводит символ и атрибуты экрана, находящиеся под курсором на второй виртуальной консоли, и затем меняет цвет фона в том же месте.

```
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/vt.h>
int
main(void)
{

    int fd;

    char *device = "/dev/vcsa2";

    char *console = "/dev/tty2";

    struct {unsigned char lines, cols, x, y;} scrn;

    unsigned short s;

    unsigned short mask;

    unsigned char attrib;

    int ch;

    fd = open(console, O_RDWR);

    if (fd < 0) {

        perror(console);

        exit(EXIT_FAILURE);

    }

    if (ioctl(fd, VT_GETHIFONTMASK, &mask) < 0) {

        perror("VT_GETHIFONTMASK");

        exit(EXIT_FAILURE);

    }

    (void) close(fd);

    fd = open(device, O_RDWR);

    if (fd < 0) {

        perror(device);

        exit(EXIT_FAILURE);

    }

    (void) read(fd, &scrn, 4);

    (void) lseek(fd, 4 + 2*(scrn.y*scrn.cols + scrn.x), SEEK_SET);

    (void) read(fd, &s, 2);

    ch = s & 0xff;

    if (s & mask)

        ch |= 0x100;

    attrib = ((s & ~mask) >> 8);

    printf("ch=0x%03x attrib=0x%02x\n", ch, attrib);

    s ^= 0x1000;

    (void) lseek(fd, -2, SEEK_CUR);

    (void) write(fd, &s, 2);

    exit(EXIT_SUCCESS);
}
```

## СМОТРИТЕ ТАКЖЕ
ioctl_console(2), tty(4), ttyS(4), gpm(8)


veth

title: veth(4)

summary: виртуальное устройство Ethernet

text:
# veth(4)

## ИМЯ
veth - виртуальное устройство Ethernet

## ОПИСАНИЕ
Устройства veth — это виртуальные устройства Ethernet. Они могут служить туннелями между сетевыми пространствами имён для создания моста к физическому сетевому устройству в другом пространстве имён, а также использоваться как самостоятельные сетевые устройства.

Устройства veth всегда создаются парами. Пара может быть создана с помощью команды:

```
# ip link add <имя-p1> type veth peer name <имя-p2>
```

Здесь имя-p1 и имя-p2 это имена, назначенные двум соединённым конечным точкам.

Пакеты, переданные в одно устройство пары сразу же принимаются другим устройством. Если у какого-то устройства выключается связь (down), то то выключается пара целиком.

Пары устройств veth полезны для объединения сетевых свойств ядра разными интересными способами. В частности, можно поместить один конец пары veth в одно сетевое пространство имён, а другой конец в другое сетевое пространство имён; таким способом установится связь между сетевыми пространствами имён. Для этого сначала создайте устройство veth как описано выше, а затем поместите один конец пары в другое пространство имён:

```
# ip link set <имя-p2> netns <пространство-имён-p2>
```

Для нахождения конца сетевого интерфейса veth можно использовать ethtool(8) следующим образом:

```
# ip link add ve_A type veth peer name ve_B   # создаём пару veth
# ethtool -S ve_A         # находим индекс интерфейса
статистики NIC:

     peer_ifindex: 16
# ip link | grep '^16:'   # ищем интерфейс
16: ve_B@ve_A: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc ...
```

## СМОТРИТЕ ТАКЖЕ
clone(2), network_namespaces(7), ip(8), ip-link(8), ip-netns(8)


wavelan

title: wavelan(4)

summary: драйвер устройства AT&T GIS WaveLAN ISA

text:
# wavelan(4)

## ИМЯ
wavelan - драйвер устройства AT&T GIS WaveLAN ISA

## ОБЗОР
insmod wavelan_cs.o [io=B,B..] [ irq=I,I..] [name=N,N..]

## ОПИСАНИЕ
Данный драйвер устарел: он был удалён из ядра версии 2.6.35.

wavelan — это низкоуровневый драйвер для беспроводных ethernet-устройств NCR/AT&T/Lucent WaveLAN ISA и Digital (DEC) RoamAbout DS. Этот драйвер доступен как модуль или может быть включён в ядро при сборке. Драйвер поддерживает несколько карт (до 4-х) в любых сочетаниях. Каждой карте выделяется доступное ethernet-устройство (eth0..eth#), кроме случаев, когда название устройства не указано конкретно (см. далее). Название устройства будет указано в журнале ядра вместе с MAC-адресом, NWID и рабочей частотой карты.

### Параметры
Этот раздел применим только к модулю ядра (параметры передаются с помощью insmod(8)). Если драйвер включён в ядро, используйте синтаксис ether=IRQ,IO,NAME в командной строке ядра.

io

Определяет список начальных адресов, по которым производится поиск устройств (адрес задаётся с помощью переключателей на карте). Если список адресов не задан, драйвер просканирует адреса 0x390 и 0x3E0, что может вызвать конфликт с другими устройствами...

irq

Определяет список irq, который должна использовать каждая карта (данные об irq сохраняются для дальнейшего использования).

name

Определяет список имён устройств, которые будут использоваться для каждой карты (имена используются с ifconfig(8)).

### Беспроводные расширения
Для управления беспроводными расширениями используйте iwconfig(8).

### NWID (или домен)
Определяет идентификатор сети [0 to FFFF] или отключает его [off]. Поскольку NWID сохраняется в постоянной памяти карты, он может быть многократно использован в дальнейшем.

### Частота и каналы
Для карт, работающих на частоте 2.4 ГГц 2.00, вы можете установить частоту, определяемую одним из десяти каналов (2.412, 2.422, 2.425, 2.4305, 2.432, 2.442, 2.452, 2.460, 2.462 или 2.484) или напрямую указать её величину. Выбранная частота будет установлена, и это значение записано в память. Доступность определённых частот зависит от законов в стране.

### Статистика
Определяет список сетевых MAC-адресов для драйвера (до 8-и) и выводит сведения о качестве последнего соединения по каждому из адресов (см. iwspy(8)).

### /proc/net/wireless
status — состояние, сообщаемое модемом. Link quality сообщает качество модуляции (direct sequence spread spectrum) [максимум = 16]. Level и Noise сообщают об уровне сигнала и шумах [максимум = 64]. Счётчики crypt discarded packet и misc discarded packet пока не реализованы.

### Нестандартные ioctl
Для работы с нестандартными ioctl можно использовать iwpriv(8).

### Качество и пороговое значение
Устанавливает параметр качества и порогового уровня, используемый модемом (пакеты ниже этого уровня будут отброшены).

### Гистограмма
Делает возможным установку количества интервалов между уровнями сигнала и подсчитывать количество пакетов, принятых в каждый из этих интервалов. Это распределение может быть использовано для вычисления среднего значения и стандартного отклонения уровня сигнала.

### Специальные замечания
Этот драйвер не распознаёт некоторые карты не NCR/ATT&T/Lucent Wavelan. Если это произошло, взгляните в исходный код и добавьте вашу карту в процедуру распознавания.

Некоторые из упоминавшихся возможностей необязательны. Вы можете включить или выключить их, изменив флаги в заголовочном файле драйвера и пересобрав его.

## СМОТРИТЕ ТАКЖЕ
wavelan_cs(4), ifconfig(8), insmod(8), iwconfig(8), iwpriv(8), iwspy(8)


console

package: man-pages-ru-extra

title: console(4)

text:
# console(4)

## ИМЯ
console - консольные терминалы и виртуальные консоли

## ОПИСАНИЕ
В Linux-системе имеется до 63 виртуальных консолей (символьных устройств с большим номером устройства 4 и меньшим -- от 1 до 63). Обычно устройства консоли называются /dev/ttyn, где 1 ≤ n ≤ 63. Текущая консоль также доступна как /dev/console или /dev/tty0, символьное устройство с номером устройства (4:0). Файлы устройств /dev/* обычно создаются с помощью скрипта MAKEDEV, или с помощью mknod(1). Права доступа у этих файлов обычно 0622, а владелец -- root.tty.

До версии ядра 1.1.54 количество виртуальных консолей задавалось при его компиляции (в tty.h: #define NR_CONSOLES 8), и изменить это значение можно было редактированием файла и пересборкой ядра. Начиная с версии 1.1.54 виртуальные консоли создаются на лету при необходимости.

Обычные способы запустить процесс на консоли: (a) указать init(8) (в inittab(5)) запускать getty(8) на консоли; (b) попросить open(1) запустить процесс на консоли; (c) запустить X - они найдут первую неиспользованную консоль, и будут пользоваться ею для вывода данных. (Есть еще древняя doshell(8).)

Обычные способы переключения между консолями: (a) использовать Alt+Fn или Ctrl+Alt+Fn для переключения в консоль n; AltGr+Fn может перекинуть вас в консоль n+12 [здесь Alt и AltGr относятся к левой и правой клавишам Alt, соответственно]; (b) использование Alt+СтрелкаВправо или Alt+СтрелкаВлево для перехода по кругу по используемым консолям; (c) использование программы chvt(1). (Назначение клавиш может определять пользователь, см. loadkeys(1); указанные выше комбинации клавиш соответствуют установкам по умолчанию.)

Команда deallocvt(1) (ранее известная как disalloc) освободит память, занятую экранными буферами консолей, не используемых ни одним процессом.

## СВОЙСТВА
У консолей множество особенностей. Я надеюсь когда-нибудь все их задокументировать. Самое важное - что консоли эмулируют vt100 терминалы. В частности, консоль сбрасывается в начальное состояние выводом на нее двух символов ESC c. Все escape-последовательности вы найдете в console_codes(4).

## ФАЙЛЫ
/dev/console

/dev/tty*

## СМОТРИ ТАКЖЕ
chvt(1), deallocvt(1), loadkeys(1), mknod(1), open(1), console_codes(4), console_ioctl(4), tty(4), ttys(4), charsets(7), getty(8), init(8), mapscrn(8) resizecons(8), setfont(8),