Установка Ethernet

Сейчас Linux поддерживает различные марки Ethernet карт. Больше всего драйверов было написано Donald Becker ([email protected]). Он автор семейства драйверов для карт основанных на чипе National Semiconductor 8390. Они стали известными как серия Becker-драйверов. Есть также драйверы для пары изделий D-Link, среди них адаптер D-Link, который предлагает доступ к Ethernet через параллельный порт. Драйвер для этого был написан Bjrn Ekwall ([email protected]). DEPCA драйвер был написан David C. Davies ([email protected]). Список поддерживаемых карт постоянно растет, так что Ваша карта почти наверняка поддерживается.

Когда-то раньше в руководствах по Linux пытались перечислить все допустимые карты. Сейчас такой список займет слишком много места. К счастью, Paul Gortmaker поддерживает Ethernet HOWTO, в котором есть список всех карт и информация о том, как заставить их работать в Linux. Документ рассылается в группу новостей comp.os.linux.answers и доступен на зеркалах Linux Documentation Project.

Даже если Вы уверены, что знаете, как установить специфический тип платы Ethernet на своей машине, все равно стоит ознакомиться с Ethernet HOWTO на предмет возможных хитростей. Это поможет сэкономить немало сил для DMA-карт Ethernet, которые используют тот же канал DMA, что и контроллер Adaptec 1542 SCSI. Если их не разделить, Вы получите карту Ethernet, записывающую данные пакетов в произвольное место на Вашем жестком диске.

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

Автоопределение Ethernet

Многие из драйверов Linux Ethernet достаточно интеллектуальны, чтобы знать, как искать расположение Вашей платы Ethernet. Это избавляет от необходимости сообщать такие данные ядру вручную. Ethernet HOWTO перечисляет, использует ли специфический драйвер автопоиск, и в каком порядке он ищет адрес ввода-вывода платы.

Имеются три ограничения на автопоиск. Во-первых, это не может распознавать все платы правильно. Это особенно верно для некоторых дешевых аналогов популярных плат. Во-вторых, ядро не будет искать больше, чем одну плату, если оно определенно не проинструктировано об этом. Это было сознательным решением проекта, поскольку считается что Вы захотите иметь контроль над тем, какая плата какому интерфейсу назначена. Самый лучший способ делать это надежно: вручную конфигурировать платы Ethernet. В-третьих, драйвер избегает некоторых адресов, чтобы не конфликтовать с другим оборудованием. Так что еще не факт, что адрес платы вообще будет проверен.

PCI-платы должны быть опознаны правильно, но все равно Вы имеете способ инструктировать ядро лично относительно марки и адреса карты, если используете больше одной платы, или автопоиск потерпел неудачу.

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

Если Вы используете lilo для загрузки, параметры можно передать, указав их через аргумент append в файле lilo.conf. Например, можно передать ядру следующие параметры, чтобы проинструктировать его о плате Ethernet:

ether=irq, base_addr, [param1,][param2,] name

Первые четыре параметра задают числа, последний задает имя устройства. Параметры irq, base_addr и name обязательны, но два param опциональны. Числовые значения могут быть установлены в ноль, в этом случае ядро будет их искать, исходя из имеющейся информации.

Первый параметр задает IRQ. По умолчанию, ядро попробует его найти само. Например, драйвер 3c503 имеет специальное свойство, которое выбирает свободный IRQ из 5, 9, 3, 4 и настраивает плату, чтобы использовать эту линию. Параметр base_addr задает адрес ввода-вывода карты, значение 0 сообщает, чтобы ядро исследовало возможные адреса карты.

Различные драйверы используют следующие два параметра по разному. Для карт с разделением памяти (shared-memory cards), подобных WD80x3, они определяют первый и последний адреса разделяемой памяти. Другие платы обычно используют param1, чтобы установить уровень выдачи отладочной информации. Значения от 1 до 7 задают повышенные уровни отладки, 8 выключает ее, 0 выдает нормальное число сообщений. Драйвер 3c503 использует param2, чтобы выбрать между своим трансивером (по умолчанию) и внешним (значение 1). Аргументы param не должны быть включены вообще, если нет ничего особо нуждающегося в настройке.

Первый нечисловой параметр интерпретируется ядром как имя устройства. Вы должны определить имя устройства для каждой платы Ethernet.

Если у Вас две платы Ethernet cards, можно поручить определение первой ядру, а самому настроить вторую через lilo. Можно и вручную конфигурировать обе платы. Если Вы решите поручить ядру поиск первой платы, надо выяснить, какую плату считаете первой Вы, а какую ядро. Ваши мнения совпадут не всегда. Решить проблему позволяет опция lilo reserve, которая однозначно запретит ядру поиск в адресном пространстве первой карты. Например, чтобы Linux нашла вторую карту Ethernet на адресе 0x300 с именем eth1 задайте параметры ядра:

reserve=0x300,32 ether=0,0x300,eth1

Опция reserve запрещает какому-либо драйверу обращаться в указанное адресное пространство. Вы можете также использовать ядерные параметры, чтобы отменить автопоиск для eth0 :

reserve=0x340,32 ether=0,0x340,eth0

Автопоиск можно и вовсе запретить (допустим, Вы временно сняли одну из плат Ethernet). Чтобы запретить автопоиск задайте аргумент base_addr как –1:

ether=0,-1,eth0

Для передачи этих параметров ядру при загрузке Вы их вводите в ответ на приглашение lilo "boot:". Чтобы lilo выдал запрос "boot:", надо при загрузке держать нажатой одну из клавиш Control, Alt или Shift. Если в ответ на приглашение нажать Tab, будет выведен список ядер, которые можно загрузить. Для загрузки ядра с параметрами введите его имя, пробел и все нужные параметры. Затем нажмите клавишу Enter, и lilo загрузит заданное ядро с заданными параметрами.

Чтобы параметры воспринимались при каждой перезагрузке автоматически, внесите их в /etc/lilo.conf, используя ключевое слово append=. Например:

boot=/dev/hda
root=/dev/hda2
install=/boot/boot.b
map=/boot/map
vga=normal
delay=20
append="ether=10,300,eth0"

image=/boot/vmlinuz-2.2.14
label=2.2.14
read-only

После правки lilo.conf, выполните команду lilo для активизации изменений.