The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Несколько других подробностей

Несколько других подробностей

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

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

Поддержка интерфейса, не зависящего от среды передачи

Интерфейс, не зависящий от среды передачи (Media Independent Interface, или MII), является стандартом IEEE 802.3, описывающим, как трансивер Ethernet может взаимодействовать с сетевыми контроллерами; этому интерфейсу соответствуют многие продукты на рынке. Если вы пишете драйвер для MII-совместимого контроллера, ядро экспортирует универсальный уровень поддержки MII, который может сделать вашу жизнь легче.

 

Чтобы использовать универсальный уровень MII, вам следует подключить <linux/mii.h>. Вам необходимо заполнить структуру mii_if_info информацией о физическом идентификаторе трансивера, поддерживается ли на самом деле полный дуплекс и так далее. Также для структуры mii_if_info требуются два метода:

 

int (*mdio_read) (struct net_device *dev, int phy_id, int location);

void (*mdio_write) (struct net_device *dev, int phy_id, int location, int val);

 

Как и следовало ожидать, эти методы должны реализовывать связь с вашим специфичным интерфейсом MII.

 

Универсальный код MII обеспечивает набор функций для запроса и изменения режима режим работы трансивера, многие из них предназначены для работы с утилитой ethtool (описанной в следующем разделе). Для подробности посмотрите <linux/mii.h> и drivers/net/mii.c.

Поддержка Ethtool

Ethtool является утилитой, разработанной, чтобы дать системным администраторам больше возможностей контроля по  управлению сетевыми интерфейсами. С помощью ethtool можно управлять различными параметрами интерфейса, включая скорость, тип носителя, дуплексная работа, установка кольца DMA, аппаратный подсчёт контрольной суммы, операция пробуждения по сети и так далее, но только если ethtool поддерживается драйвером. Ethtool может быть загружена с http://sf.net/projects/gkernel/.

 

Соответствующие декларации поддержки ethtool могут быть найдены в <linux/ethtool.h>. Основой является структура типа ethtool_ops, которая содержит полные 24 различных метода для поддержки ethtool. Большинство из этих методов являются относительно простыми; для подробностей смотрите <linux/ethtool.h>. Если ваш драйвер использует уровень MII, можно использовать mii_ethtool_gset и mii_ethtool_sset, чтобы реализовать методы get_settings и set_settings, соответственно.

 

Чтобы ethtool работала с вашим устройством, необходимо поместить указатель на вашу структуру ethtool_ops в структуру net_device. Для этой цели следует использовать макрос SET_ETHTOOL_OPS (определённый <linux/netdevice.h>). Обратите внимание, что ваши методы для ethtool могут быть вызваны даже когда интерфейс выключен.

Netpoll

"Netpoll" является сравнительно поздним (2.6.5) дополнением к сетевому стеку; его целью является позволить ядру посылать и получать пакеты в тех случаях, когда полная сетевая подсистема и подсистема ввода/вывода могут быть недоступны. Он используется для функций, подобных удаленным сетевым консолям и удаленной отладки ядра. Поддержка netpoll в драйвере в любом случае не является необходимой, но это может сделать ваше устройство более полезным в некоторых ситуациях. В большинстве случаев поддержка netpoll также является относительно простой.

 

Драйверы, поддерживающие netpoll, должны реализовать метод poll_controller. Его задача состоит сохранять всё, что может происходить на контроллере в отсутствие прерываний от устройства. Почти все методы poll_controller принимают следующую форму:

 

void my_poll_controller(struct net_device *dev)

{

    disable_device_interrupts(dev);

    call_interrupt_handler(dev->irq, dev, NULL);

    reenable_device_interrupts(dev);

}

 

Метод poll_controller, по сути, является просто моделированием прерываний от данного устройства.

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