Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): 17.15. A Few Other Details

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

17.15. Ещё несколько подробностей

hardorsoft 26.10.10 в 05:37

0

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

hardorsoft 26.10.10 в 05:37

0

17.15.1. Поддержка независимого от среды интерфейса.

hardorsoft 26.10.10 в 05:37

0

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

hardorsoft 26.10.10 в 05:37

0

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

hardorsoft 26.10.10 в 05:38

0

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);

hardorsoft 26.10.10 в 05:38

0

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

hardorsoft 26.10.10 в 05:38

0

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

hardorsoft 26.10.10 в 05:39

0

17.15.2. Поддержка Ethtool

hardorsoft 26.10.10 в 05:39

0

Ethtool – утилита, которая дает системным администраторам
возможность управлять сетевым интерфейсом. С утилитой, можно
контролировать различные параметры, включая скорость, тип
передающей среды, дуплексные операции, настройки ПДП, аппаратное
вычисление контрольной суммы, выход из спящего режима (wake-on-LAN)
и т.д. Все это возможно, только если ethtool поддерживается драйвером.
Ethtool можно получить по адресу http://sf.net/projects/gkernel/.

hardorsoft 26.10.10 в 05:39

0

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

hardorsoft 26.10.10 в 05:40

0

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

hardorsoft 26.10.10 в 05:40

0

17.15.3. Netpoll

hardorsoft 26.10.10 в 05:40

0

Относительно позднее добавление (2.6.5) к сетевому стеку.
Предназначено для того, чтобы ядро могло принимать и посылать пакеты,
когда сетевая подсистема и подсистема ввода-вывода могут быть
недоступны. Используется для сетевых консолей и удаленной отладки
ядра. Поддержка netpoll в вашем драйвере не обязательна, но может
сделать ваше устройство полезнее в некоторых ситуациях. Поддержка
netpoll, как правило, относительно проста.

hardorsoft 26.10.10 в 05:40

0

Для поддержки netpoll драйвер должен реализовать метод
poll_controller. Работа метода не должна прерываться, а это может
произойти при возникновении прерывания. Почти все методы
poll_controller выглядят так:

hardorsoft 26.10.10 в 05:40

0

void my_poll_controller(struct net_device *dev)
{
disable_device_interrupts(dev);
call_interrupt_handler(dev->irq, dev, NULL);
reenable_device_interrupts(dev);
}

hardorsoft 26.10.10 в 05:41

0

В сущности, метод poll_controller
прерывания устройства.

hardorsoft 26.10.10 в 05:41

0
Минутку...