5.2 Сетевой драйвер |
Предыдущая Содержание Следующая |
В 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: процедура, которая копирует данные из памяти оборудования в сетевые буферы. Она используется в тракте приёма.
|
Предыдущая Содержание Следующая |