Следующий Предыдущий Содержание

## 2. Модемы для Linux

## 2.1 Не все винмодемы будут работать с Linux

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

Для использования модема надо включить последовательный порт, к которому он подключен, и настроить его в используемой операционной системе, в частности в Linux. Подробные объяснения того, как это сделать, даны в этом HOWTO и в Plug-and-Play-HOWTO.

## 2.2 Внешний супротив внутреннего

Модемы для ПК бывают внутренними, внешними последовательными или внешними USB. Внутренний модем устанавливается в системный блок ПК (для этого придется снять крышку). Внешний модем подсоединяется посредством кабеля к разъему: либо USB (модем USB), либо последовательного порта (последовательный RS-232 модем). Внутренние модемы по сравнению с внешними последовательными стоят дешевле, не страдают потерей данных вследствие переполнения буфера и потребляют меньшее количество электроэнергии. Внутренний модем не занимает места на столе.

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

К сожалению, большинство внешних последовательных модемов не имеют выключателя электропитания, поэтому потребляют энергию и при простое (пока не вытащите адаптер из розетки). За год таких "паразитных" киловатт-часов набегает на $1 с лишним (по их расценкам :) -- прим. перев.). Еще одним возможным неудобством внешних модемов является то, что скорость передачи данных не может быть выше115200 бит/сек из-за существующих ограничений последовательного порта (правда, на конец 2000 года новые модели внутренних модемов, за исключением некоторых, также не поддерживали бОльшие скорости). Подробнее -- в разделе Не могу выставить высокую скорость

## 2.3 А драйвер нужен?

Драйвер последовательного порта, необходимый для работы любого модема, присутствует в Linux (либо как часть ядра, либо как модуль). Для PCI-модема этот драйвер определяет только лишь используемый им последовательный порт, т.е. драйвером модема как такового не является.

Драйвер необходим для любого программного модема (винмодем, линмодем). Для аппаратного модема драйвер не нужен и может потребоваться только для включения дополнительных функций, например голосовых и/или "modem on hold" (удержание соединения).

Программным модемам по определению необходимо программное обеспечение, именуемое драйвером. Если Linux-драйвера нет, то программный модем в Linux работать не будет. Драйверы под MS Windows для Linux не походят. Подробнее -- в разделе Программные модемы (винмодемы, линмодемы)

## 2.4 Внешние модемы

### Под Linux работают все внешние модемы?

В какой-то момент времени (2002 год ?) все внешние модемы должны были работать под Linux. Но затем появились бесконтроллерные внешние модемы... Если на коробке напечатано, что требуется Windows и не упоминается Linux, то будет ли работать данный модем под Linux -- вопрос. Означает ли это, что программное обеспечение, поставляемое с модемом и написанное под Windows, необходимо только для использования дополнительных функций, таких как "modem on hold", автоответчик и т.д., и он будет работать под Linux? Если у Вас есть опыт использования бесконтроллерных модемов под Linux, дайте мне о нем знать.

### Внешние модемы PnP

Многие внешние модемы обозначены как "Plug and Play" (PnP). Аппаратные модемы должны работать все: и PnP, и не-PnP, если правильно настроен последовательный порт (его номер прерывания и адреса ввода-вывода).

Модем PnP имеет специальную встроенную PnP-идентификацию, которую поддерживающая PnP операционная система может считать (через последовательный порт). Таким образом, операционная система будет знать, что к такому-то порту подключен модем с таким-то идентификатором (id number). Если модем бесконтроллерный, то она может попытаться найти драйвер для него. Также система может указать прикладным программам порт, к которому модем подключен (например, /dev/ttyS2 или COM3). Linux может этого и не сделать, тогда придется вручную задать номер ttyS (к примеру, /dev/ttyS2) в настройках программы. Некоторые программы, тот же wvdial, сами могут проверить имеющиеся порты на наличие модема.

### Подключение

Модем подключается к одному из последовательных портов с помощью "прямого" (straight through) кабеля, идущего обычно в комплекте или покупаемого отдельно в магазине. "Нуль-модемный" кабель с перекрещенными линиями для подключения модема к последовательному порту не подходит. Настройка и проверка модема после подключения осуществляется с помощью имеющейся связной программы (communication program). Может быть, при необходимости придется изменить значения номера прерывания IRQ и адреса ввода-вывода используемого последовательного порта.

### Назначение световых индикаторов внешних модемов

- TM - режим проверки (Test Modem)
- AA - автоответ (Auto Answer): если светится, то модем будет отвечать на входящие звонки
- RD - прием данных (Receive Data), линия RxD
- SD - передача данных (Send Data), линия TxD
- TR - ПК готов к обмену данными (Terminal Ready), линия DTR
- RI - индикатор звонка (Ring Indicator): сигнализирует о поступлении входящего вызова
- OH - снятая трубка (Off Hook): загорается при "снятии трубки" модемом
- MR - модем к сеансу готов (Modem Ready), линия DSR
- EC - используется протокол коррекции ошибок (Error Correction)
- DC - используется протокол сжатия данных (Data Compression)
- HS - используется высокоскоростной (High Speed) протокол

## 2.5 Внутренние модемы

Установка внутреннего модема производится путем снятия крышки корпуса ПК и вставки карты модема в свободный слот на материнской плате. Есть модемы для слотов PCI, ISA, а недавно появились программные "модемы" для нового слота AMR. Последовательный порт внутреннего модема встроенный. Другим словами, карта внутреннего модема содержит и последовательный порт, и модем.

Раньше выставление значений адреса ввода-вывода и номера прерывания IRQ последовательного порта выполнялось имеющимися на карте перемычками (jumper). Это такие маленькие черные "параллелепипедики" размером около 5х4х2 мм, которыми замыкаются штырьковые контакты. В модемах Plug-and-Play настройка указанных параметров вместо перемычек осуществляется командами, посылаемыми по шине внутри компьютера. Эти команды исходят или от PnP BIOS, или от программ isapnp (шина ISA), setpci (шина PCI), или от драйвера последовательного порта для некоторых модемов. Таким образом, требуемая настройка io-irq внутреннего модема (а точнее его последовательного порта) под Linux осуществляется одним из следующих средств:

1. Для шины ISA: программа isapnp, запуск которой можно осуществлять при каждой загрузке
2. PnP BIOS: возможно потребуется указать заданные BIOS значения IO и IRQ программе setserial
3. Для шины PCI: программа lspci -vv -- для получения информации, программа setpci -- для настройки.

Дополнительно см. в разделе Быстрая установка.

## 2.6 Программные модемы (винмодемы, линмодемы)

### Введение

У программных модемов выполнение некоторых (или почти всех) необходимых функций переложено на центральный процессор (ЦП) компьютера. Это обстоятельство требует специального программного обеспечения -- драйвера модема (отсюда и название ;) -- прим. с улыб. перев.). До конца 1999 года такое программное обеспечение выпускалось только для MS Windows и с Linux не работало. К тому же, производитель модема не открывал его программный интерфейс, что не позволяло желающим написать Linux-драйвер.

Но все меняется к лучшему, и на сегодняшний день (конец 2001 года) для многих программных модемов есть Linux-драйвер. Т.к. стандартного интерфейса не существует, то для различных моделей программных модемов различных производителей требуются различные драйвера (зависит от чипсета модема). Не все драйверы могут работать превосходно, также в них могут быть не реализованы все возможности, имеющиеся в драйверах для MS Windows.

Другое название программных модемов (используемое MS) -- "модем, основанный на драйвере" ("driver-based modem"). Стандартный аппаратный модем (который работает с Linux) не требует драйвера (но использует драйвер последовательного порта Linux). Большинство внутренних модемов, созданных после середины 1998 года, было программными модемами.

Программные модемы разделяются на 2 множества: линмодемы и винмодемы. Винмодемы будут работать только под MS Windows. Линмодемы будут работать и под Linux. Можно сказать, что линмодемы являются подмножеством винмодемов. Вообще-то термин "Винмодем" ("Winmodem") является торговой маркой некоторых моделей "винмодемов" (производства 3com USRobotics -- прим. перев.). Здесь "винмодем" употребляется в указанном значении: программный модем, работающий только под MS Windows.

### Линмодемы

Под конец 1999 года появилось два программных модема, которые могли работать под Linux. Lucent Technologies (LT) неофициально выпустила драйвер в двоичном коде, поддерживающий многие их PCI-модемы. PC-TEL ("Zoltrix") представила новый программный модем для Linux. После этих событий возрос интерес к адаптации винмодемов под Linux. Появился GPL-драйвер для чипсета Intel (Modem Silicon Operations) MD563x HaM (созданного подразделением Ambient компании Cirrus Logic). К середине 2001 г. имеются драйверы для модемов на чипах: Conexant HSF и HCF, Motorola SM56 (поддержка прекращена), ESS (только ISA) и IBM Mwave для Thinkpad 600+. См. http://linmodems.org.

Какой процент программных модемов работает под Linux сейчас (2001 г.)? Есть несколько неподдерживаемых чипов: Lucent/Agere ARM (Scorpio), 3COM/US Robotics, некоторые SmartLink (3 различных чипсета), Ambient HSP, возможно еще какие-то. Т.е. по состоянию на конец 2001 г. поддерживается, наверное, более половины чипов программных модемов. К 2005 г. ситуация, похоже, не улучшилась, а ухудшилась немного. Почему? Число настольных систем с Linux растет не так быстро, как ожидалось, и многие пользователи ПК уже перешли на более высокоскоростные кабельные модемы и DSL.

Еще одна проблема -- то, что многие драйверы работают только со старыми версиями ядра Linux.

Для того чтобы определить линмодем у Вас или нет, надо выяснить какой у Вашего модема чипсет и кто его производитель. Правда, этого может оказаться недостаточно. Первый способ определить чипсет -- воспользоваться утилитой scanModem с сайта http://linmodems.org (точнее http://linmodems.technion.ac.il-- замечание перев.). Если будет трудно разобраться в ее выводе, то поищите помощи в рассылке discuss@linmodems.org. Еще один способ -- набрать в командной строке "lspci -v" и поискать в базе данных или в Интернете прозводителя чипсета по полученному в результате номеру. Последний способ -- посмотреть на наименования, напечатанные на микросхемах модемной платы. В итоге, после проделанного, может оказаться, что Ваш модем не поддерживается или поддержка обеспечивается только со старыми версиями ядра. Более подробно об этом в Линмодем HOWTO.

### Сайты и документация по линмодемам

- Линмодем HOWTO
- Винмодемы и Linux HOWTO
- http://linmodems.org с рассылкой
- Модемы Conexant/Rockwell HOWTO
- Сайт Роба Кларка содержит информацию о линмодемах
- Конфигурирование PCTel HSP MicroModem mini-HOWTO

### Типы программных модемов

Есть два основных типа программных модемов. У первых почти всю работу выполняет программное обеспечение (софт). У вторых в программное обеспечение заложены функции "контроллера" (цифровая обработка сигналов осуществляется аппаратно). Т.к. аппаратная часть таких модемов не содержит контроллера, то они называются "бесконроллерными". Модемы первого типа называются полностью программными (all-software) или просто программными.

В обоих типах модемов должна быть аналоговая часть, сопрягающая модем с телефонной линией. Она преобразует сигнал из цифровой (дискретной) формы в аналоговую (непрерывную) и посылает его в линию. Там же должно осуществляться обратное преобразование -- аналого-цифровое. Устройство, выполняющее эти преобразования, называется кодеком (кодер-декодер).

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

Разница между двумя типами программных модемов в том, где происходит модуляция. Во всех полностью программных (all-software) модемах модуляция цифровым кодом осуществляется в ЦП ПК (хоста) -- Host Signal Processor (HSP). В бесконтроллерных модемах она осуществляется в модеме, но вся остальная работа выполняется ЦП. Под остальной работой понимается обработка AT-команд, сжатие данных, коррекция ошибок и имитирование последовательного порта. В полностью программном модеме аппаратной частью все же выполняются аналого-цифровое и цифро-аналоговое преобразования, осуществляемое кодеком, и эхо-подавление.

### Как определить программный модем?

Как определить, является ли модем программным? Сперва посмотрите на его название, описание или название драйвера MS Windows, присутствует ли в них указание на программный модем: HSP (Host Signal Processor) , HCF (Host Controlled Family), HSF (Host Signal Family), controllerless, host-controlled, host-based, soft-... modem. Если да, то модем будет работать в Linux только при наличии драйвера для него. Программные модемы можно распознать и по цене -- они стоят дешевле.

Если модель модема не известна и имеется установленная Windows, откройте иконку "Модемы" в "Панели управления", посмотрите там, потом тут. Если не получится (или не захочется), то можно посмотреть на коробку, в которой пришел модем (или в руководство). Внимание обратить стоит на "Минимальные системные требования" или просто "Системные требования".

Аппаратные модемы прекрасно работают и на старых процессорах (вроде 386). Таким образом, если в требованиях значится современный ЦП (Pentium или другой "высокоскоростной" ЦП с частотой, скажем, более 150 МГц), то это полностью программный модем. Если требуется 486-й процессор (или лучше), то вполне вероятно это бесконтроллерный (host-controlled) модем. Надпись "Работает только с Windows" не прибавляет оптимизма. Однако, и для такого модема может существовать Linux-драйвер, а надпись может оказаться просто ошибкой в маркировании.

Эмблема "designed for Windows" ("разработано для Windows") может значить только то, что модем полностью поддерживает Microsoft plug-and-play, -- это нормально, т.к. Linux использует те же спецификации plug-and-play (правда, настроить PnP в Linux труднее). Так что, модем "designed for Windows" может работать и под Linux. Обратитесь на web-сайт производителя или спросите его по email. Некоторые производители специально отмечают, что их некоторые модели работают под Linux. Они могут оказаться линмодемами и потребовать установки определенного драйвера.

### Стоит ли покупать программный модем?

Только если Вы точно знаете, что есть нормально работающий драйвер для Linux. Но может быть так, что драйвер больше не поддерживается и как результат не работает с будущими версиями ядра. Также драйвер может не иметь всех функциональных возможностей.Кроме проблем с драйвером, какие еще есть "за и против" у программных модемов? Т.к. программный модем использует ЦП для выполнения некоторой (или всей) своей работы, то ему не требуются многие комплектующие аппаратного модема и поэтому он стоит меньше. В то же время программный модем увеличивает загрузку ЦП, что приводит к уменьшению быстродействия.

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

Стоит ли экономить, покупая программный модем? Если Вы не используете модем много и не запускаете какие-либо требовательные к ЦП программы одновременно с этим, то да. Сэкономленные деньги можно потратить на более производительный ЦП, который немного увеличит общую производительность системы. Но все же аппаратный модем исполняет требуемую работу более эффективно. Поэтому если Вы активно пользуетесь модемом, то лучше избежать покупки программного модема.

## 2.7 PCI-модемы

PCI-модем представляет собой карту, вставляемую в слот PCI-шины на материнской плате ПК. Многие PCI-модемы являются винмодемами и не будут работать под Linux (из-за отсутствия драйвера), но не все. Драйвер последовательного порта Linux был доработан для поддержки определенных аппаратных модемов, выполненных на PCI-карте (но не винмодемов/линмодемов). Линмодем будет работать только после установки соответствующего драйвера. Если аппаратный PCI-модем поддерживается в Linux драйвером последовательного порта, то драйвер сам его настроит (PnP). См. раздел Поддержка шины PCI. Если поддержка Вашего аппаратного PCI-модема специально не предусмотрена в драйвере последовательного порта Linux, то его настройку придется выполнить самому.

## 2.8 AMR-модемы

Встречаются в основном в лэптопах. Все являются винмодемами, вставляются в особый слот на материнской плате, именуемый AMR (Audio Modem Riser). Данный слот используется некоторыми звуковыми и комбинированными картами, работающими и как звуковая карта, и как модем (audio-modem). AMR-модемы относятся к модемам HSF(Host Signal Family), т.е. ЦП выполняет почти всю работу. Следствием этого являются малые размеры карты "модема" и самого слота AMR. Материнская плата содержит кодек, преобразующий поступающие от ЦП данные в аналоговый сигнал, передаваемый к слоту AMR (и наоборот). Т.е. "модем", вставляемый в слот, занимается лишь согласованием телефонной линии с кодеком. Linux поддерживает по меньшей мере один AMR-модем. Он должен отображаться в выводе lspci -v.

## 2.9 USB-модемы

USB = Universal Serial Bus (Универсальная последовательная шина). Большинство USB-модемов являются винмодемами, так что многие из них с Linux работать не будут. Linux поддерживает модемы, соответствующие USB Communication Device Class Abstract Control Model (= USB CDC ACM). За это отвечает модуль acm.o. Информация о нем содержится в файле /usb/acm.txt в каталоге с документацией к ядру (/usr/share/doc/kernel-doc-2.6.x в Debian или /usr/doc/kernel... в других диструбутивах). "Последовательным портом" для первого (нулевого) модема ACM является /dev/usb/acm/0 или /dev/usb/ttyACM0 в зависимости от того, используется ли новая "файловая система устройств" ("device file system") или нет (?). Последовательным портом он на самом деле не является, но для программ, использующих модем, драйвер представляет его как обычный последовательный порт (последовательный порт реализуется программно :) -- резюме перев.).

## 2.10 Какие внутренние модемы могут не работать с Linux?

- Программные модемы (винмодемы, линмодемы). Только около половины программных модемов имеют драйвер для Linux.
- MWave и модемы с DSP будут работать, но при условии, что после каждого включения ПК Вы сначала будете запускать Windows/Dos.
- Модемы, требующие драйверы Rockwell (RPI), работают, но не шустро (with reduced performance).

### MWave и некоторые модемы с DSP

Для модема ACP (MWave), используемого в ноутбуках IBM Thinkpad 600+, есть Linux-драйвер. См. mini-HOWTO: ACP-Modem.

Все аппартные модемы имеют DSP (Digital Signal Processors -- цифровой сигнальный процессор, процессор цифровой обработки сигналов). Но в некоторых из них DSP программируется драйвером, который должен быть загружен с жесткого диска компьютера в память DSP перед использованием модема. К сожалению, такая загрузка обычно выполняется Dos/Windows-программами (которые не работают в Linux). Но тем не менее были достигнуты значительные успехи в приведении некоторых из таких модемов в работоспособное в Linux состояние. К примеру, имеется Linux-драйвер для модема Lucent (DSP).

Обычные модемы, прекрасно работающие в Linux (и не нуждающиеся в особом драйвере), часто также имеют DSP (об этом может быть указано на упаковке), но коды программ, выполняющихся в DSP, хранятся внутри модема. Примером модема с DSP, имеющего проблемы с работой под Linux, может служить Aptiva MWAVE от IBM.

Одним из способов заставить некоторые модемы с DSP работать с Linux является загрузка из DOS (если она установлена на Вашем ПК). Сперва надо установить драйвер под DOS (именно под DOS, а не под Windows). Затем запустить Dos/Windows и загрузить драйвер, с тем чтобы запрограммировать DSP. И, не выключая компьютер, запустить Linux.

Можно написать "пакетный" ("batch") файл (скрипт) для выполнения перечисленных действий. В качестве исходного возьмите следующий, подправив его под свои исходные данные:

> ``

>     rem mwave -- пакетный файл, предоставляемый производителем модема
>     call c:\mww\dll\mwave start
>     rem loadlin.exe -- DOS-программа, загружающая Linux из DOS (См.
>     rem Config-HOWTO).
>     c:\linux\loadlin f:\vmlinuz root=/dev/hda3 ro

Можно создать ярлык на рабочем столе Windows для этого пакетного файла, установив в его свойствах "Запускать в режиме MS-DOS". Двойным щелчком по нему настраивается модем и загружается Linux. Другой возможный способ загрузить Linux из DOS -- нажать CTRL-ALT-DEL и выполнить перезагрузку (предполагается, что у Вас установлен и настроен какой-либо загрузчик или менеджер загрузок, который позволит загрузить Linux). Модем остается на том же com-порте (с тем же адресом IO), использовавшемся под DOS.

Модем Newcom ifx требует небольшой заплатки (patch) к ядру для своей правильной работы, т.к. его имитация последовательного порта не является стандартной. Заплатка и другая информация, касающаяся использования этого модема с Linux, находятся на http://quinine.pharmacy.ohio-state.edu/~ejolson/linux/newcom.html.

### Драйверы Rockwell (RPI)

Для модемов на некоторых старых микросхемах Rockwell требуются драйверы Rockwell RPI (Rockwell Protocol Interface). Эти драйверы, работающие только под MS Windows, выполняют лишь сжатие данных и коррекцию ошибок. Такие модемы можно использовать в Linux без сжатия данных и коррекции ошибок. Для этого надо отключить RPI путем посыла модему комманды "RPI disable" после включения модема (прописывается в строке инициализации). На моем старом модеме такой командой была +H0. С отключенным сжатием данных web-страницы загружаются медленнее, а вот уже сжатые файлы скачиваются также.

Следующий Предыдущий Содержание