5.2 Сетевой драйвер

Предыдущая  Содержание  Следующая V*D*V

В Linux драйвер сетевого устройства рассматривается как отдельный класс драйверов. Сетевые драйверы не привязаны к файловой системе, а скорее связаны с интерфейсом подсистемы (таким, как интерфейс Ethernet). Прикладная программа не общается с драйвером сетевого устройства напрямую, а использует сокеты и IP адреса. Сетевой уровень направляет сделанные  поверх сокета запросы в сетевой драйвер. В этом разделе описывается процесс написания сетевого драйвера для ядра Linux версии 2.4.

Чтобы объяснить архитектуру сетевого драйвера, этот раздел предполагает использование выдуманного сетевого оборудования. Сетевая карта подключена непосредственно к адресному пространству процессора и, следовательно, её регистры и внутренняя память отображаются в адресное пространство процессора непосредственно. Мы предполагаем два банка памяти: один для передачи, другой для приёма. Для простоты мы предполагаем отсутствие DMA; для передачи данных из системной оперативной памяти в сетевую карту и наоборот драйвер должен вызывать процедуру memcpy.

Снова мы предполагаем, что доступны следующие функции/макросы:

 

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

NW_IRQ: линия прерывания, используемая для сетевой карты.

FILL_ETHER_ADDRESS: макрос, который программирует оборудование сетевым адресом.

INIT_NW: процедура, которая инициализирует сетевую карту.

RESET_NW: процедура, которая выполняет сброс сетевой карты.

READ_INTERRUPT_CONDITION: этот макрос указывает, что вызвало прерывание. В нашем случае есть две причины: одна это получение входящих данных, а другая - конец передачи.

FILL_TX_NW: процедура для копирования данных из сетевых буферов в память оборудования. Она используется в передающем тракте.

READ_RX_NW: процедура, которая копирует данные из памяти оборудования в сетевые буферы. Она используется в тракте приёма.

 

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