|
Не работает драйвер сетевого устройства |
|
|
|
 |
Ответов
|
May 18 2018, 13:45
|
Участник

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995

|
Цитата(k000858 @ May 18 2018, 12:32)  Портирую драйвер сетевого устройства (в общем ethernet драйвер) в OpenWRT. Драйвер успешно создает сетевой интерфейс и тд ондако ничего не работает. Не тикают даже счетчики в статистике. Сам драйвер выдран из SDK с 3.10.* ядром, в OpenWRT 4.4.14 ядро Пока удалось выяснить что по каким то причинам не производится полинг интерфейса.
Сам интерфейс создается с помощью netif_napi_add, в аргументах которой указывается полинг функция. (которая, как выяснилось почему то не вызывается)
Кто сталкивался с подобным эффектом, или может у кого есть идейки куда капнУть? я вообще не специалист по сетевому стеку, но насколько я понимаю сетевое устройство дергает хардверным прерыванием далее начинает работать драйвер сетевого ус-ва и для начала я бы посмотрел обрабатываются ли прерывания и что на входе у драйвера. Полинг (если я не ошибаюсь запускают софтверные прерывания когда в кольцевом буфере появляются данные от сетевого устройства). Вставить в код printf там где вызываются обработчики. Простите если не въехал в "тему" я просто пытаюсь сказать как бы я действовал на вашем месте.
Сообщение отредактировал winniethepooh - May 18 2018, 13:51
|
|
|
|
|
May 21 2018, 04:09
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(winniethepooh @ May 18 2018, 16:45)  я вообще не специалист по сетевому стеку, но насколько я понимаю сетевое устройство дергает хардверным прерыванием далее начинает работать драйвер сетевого ус-ва и для начала я бы посмотрел обрабатываются ли прерывания и что на входе у драйвера. Полинг (если я не ошибаюсь запускают софтверные прерывания когда в кольцевом буфере появляются данные от сетевого устройства). Вставить в код printf там где вызываются обработчики. Простите если не въехал в "тему" я просто пытаюсь сказать как бы я действовал на вашем месте. Вы все верно описали - мой драйвер работает по NAPI модели: Код 1. Драйвер включает NAPI, но изначально тот находится в неактивном состоянии. 2. Прибывает пакет, и сетевая карта напрямую отправляет его в память. 3. Сетевая карта генерирует IRQ посредством запуска обработчика прерываний в драйвере. 4. Драйвер будит подсистему NAPI с помощью SoftIRQ (подробнее об этом — ниже). Та начинает собирать пакеты, вызывая в отдельном треде исполнения (thread of execution) зарегистрированную драйвером функцию poll. 5. Драйвер должен отключить последующие генерирования прерываний сетевой картой. Это нужно для того, чтобы позволить подсистеме NAPI обрабатывать пакеты без помех со стороны устройства. 6. Когда вся работа выполнена, подсистема NAPI отключается, а генерирование прерываний устройством включается снова. 7. Цикл повторяется, начиная с пункта 2. Прерываний нет (не только по прибытию входящих пакетов но и на изменение линка).
|
|
|
|
|
May 21 2018, 07:02
|
Участник

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995

|
Цитата(k000858 @ May 21 2018, 05:09)  Вы все верно описали - мой драйвер работает по NAPI модели: Код 1. Драйвер включает NAPI, но изначально тот находится в неактивном состоянии. 2. Прибывает пакет, и сетевая карта напрямую отправляет его в память. 3. Сетевая карта генерирует IRQ посредством запуска обработчика прерываний в драйвере. 4. Драйвер будит подсистему NAPI с помощью SoftIRQ (подробнее об этом — ниже). Та начинает собирать пакеты, вызывая в отдельном треде исполнения (thread of execution) зарегистрированную драйвером функцию poll. 5. Драйвер должен отключить последующие генерирования прерываний сетевой картой. Это нужно для того, чтобы позволить подсистеме NAPI обрабатывать пакеты без помех со стороны устройства. 6. Когда вся работа выполнена, подсистема NAPI отключается, а генерирование прерываний устройством включается снова. 7. Цикл повторяется, начиная с пункта 2. Прерываний нет (не только по прибытию входящих пакетов но и на изменение линка). непроинициализировано (неправвильно или неисправно) сетевое устройство, как бы самое простое предположение..
|
|
|
|
|
May 21 2018, 07:40
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(winniethepooh @ May 21 2018, 10:02)  непроинициализировано (неправвильно или неисправно) сетевое устройство, как бы самое простое предположение.. что могло так смениться в версиях ядра? сам драйвер прекрасно работает в 3.10.* все подозрения на неработающее прерывание (нет реакции на изменение линка) в начале работы драйвер даже не компилировался, например изза отсутствия в ядре IRQF_DISABLED (удален с 4.12.5 ядра).
|
|
|
|
|
May 21 2018, 08:07
|
Участник

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995

|
Цитата(k000858 @ May 21 2018, 08:40)  что могло так смениться в версиях ядра? сам драйвер прекрасно работает в 3.10.* все подозрения на неработающее прерывание (нет реакции на изменение линка)
в начале работы драйвер даже не компилировался, например изза отсутствия в ядре IRQF_DISABLED (удален с 4.12.5 ядра). почему старый драйвер не хочет работать с другим ядром я не могу предположить, но есть вероятно другие драйвера для нового ядра и можно посмотреть в чем отличия..,(изменился номер прерывания, не так регистрируется обработчик, не конфликтует ли с другим устройством т.к. общее прерывание) кажется была у linux возможность посмотреть на каких устройствах какие номера обработчиков зарегистрированы..
Сообщение отредактировал winniethepooh - May 21 2018, 08:18
|
|
|
|
|
May 21 2018, 08:54
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(winniethepooh @ May 21 2018, 11:07)  почему старый драйвер не хочет работать с другим ядром я не могу предположить, но есть вероятно другие драйвера для нового ядра и можно посмотреть в чем отличия..,(изменился номер прерывания, не так регистрируется обработчик, не конфликтует ли с другим устройством т.к. общее прерывание)
кажется была у linux возможность посмотреть на каких устройствах какие номера обработчиков зарегистрированы.. сравниваю интегрируемый драйвер с имеющимися под новое ядро: - в старом интегрируемом драйвере номер прерывания задан дифайном Код #define IRQ_ENET0 3 /* hardware interrupt #3, defined in ... - в новом драйвере номер прерывания выбирается вызовом функции platform_get_irq может тут какое то несоответствие? мне этот момент не очень понятен..
|
|
|
|
|
May 22 2018, 06:16
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 12-04-06
Из: Москва
Пользователь №: 16 039

|
Цитата(k000858 @ May 21 2018, 11:54)  - в новом драйвере номер прерывания выбирается вызовом функции platform_get_irq
может тут какое то несоответствие? мне этот момент не очень понятен.. А как ваше интегрируемое сетевое устройство описано в Device tree? Как там сейчас задается прерывание? Цитата(winniethepooh @ May 21 2018, 11:07)  кажется была у linux возможность посмотреть на каких устройствах какие номера обработчиков зарегистрированы.. cat /proc/interrupts ?
|
|
|
|
|
May 22 2018, 08:01
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(samike @ May 22 2018, 10:16)  А как ваше интегрируемое сетевое устройство описано в Device tree? Как там сейчас задается прерывание?
cat /proc/interrupts ? Вроде как никак не описано. Сам драйвер вызывается Код module_init(ra2882eth_init); module_exit(ra2882eth_cleanup_module);
|
|
|
|
|
May 22 2018, 08:16
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 12-04-06
Из: Москва
Пользователь №: 16 039

|
Цитата(k000858 @ May 22 2018, 11:01)  Вроде как никак не описано. Сам драйвер вызывается Код module_init(ra2882eth_init); module_exit(ra2882eth_cleanup_module); Тогда выложите куда-нибудь посмотреть вашу ф-цию probe() из драйвера интегрируемого сетевого устройства (т.е. ф-цию инициализации драйвера). Если есть подозрения на нерабочие прерывания, нужно посмотреть как они задаются на этапе инициализации - printk куда-нибудь поставить... (если я конечно правильно понимаю проблему)
|
|
|
|
Сообщений в этой теме
k000858 Не работает драйвер сетевого устройства May 18 2018, 11:32       winniethepooh Цитатаcat /proc/interrupts ?
да оно May 22 2018, 07:09         k000858 Цитата(samike @ May 22 2018, 12:16) Тогда... May 22 2018, 09:22          samike Цитата(k000858 @ May 22 2018, 12:22) Даль... May 22 2018, 10:57           k000858 Цитата(samike @ May 22 2018, 14:57) А как... May 23 2018, 10:22            winniethepooh Цитата(k000858 @ May 23 2018, 11:22) да, ... May 23 2018, 12:53 k000858 В моем случае вместо netif_rx выполняется netif_re... May 24 2018, 05:47 winniethepooh Цитата(k000858 @ May 24 2018, 06:47) В мо... May 24 2018, 07:34  k000858 Цитата(winniethepooh @ May 24 2018, 11:34... May 24 2018, 08:04   winniethepooh Цитата(k000858 @ May 24 2018, 09:04) попр... May 24 2018, 08:44 k000858 распарсив sk_buff полученного пакета и сравнив его... May 28 2018, 05:14 winniethepooh Цитата(k000858 @ May 28 2018, 06:14) расп... May 28 2018, 07:19 k000858 Больше волнует вопрос: при получении пакета, долже... May 28 2018, 09:41 winniethepooh Цитата(k000858 @ May 28 2018, 10:41) Боль... May 28 2018, 11:19 k000858 По делу есть кое какие продвижения: счетчик Rx уже... May 31 2018, 04:43 k000858 В общем победил настройки встроенного в SoC свитча... Jun 7 2018, 08:09 winniethepooh Цитата(k000858 @ Jun 7 2018, 09:09) В общ... Jun 7 2018, 08:50 k000858 В общем драйвер успешно интегрирован, Lan'ы ра... Jun 14 2018, 03:51 winniethepooh Цитата(k000858 @ Jun 14 2018, 04:51) В об... Jun 14 2018, 10:51  k000858 Цитата(winniethepooh @ Jun 14 2018, 14:51... Jun 14 2018, 11:17   winniethepooh Цитата(k000858 @ Jun 14 2018, 12:17) тест... Jun 14 2018, 13:26    k000858 Цитата(winniethepooh @ Jun 14 2018, 16:26... Jun 15 2018, 03:27     winniethepooh Цитата(k000858 @ Jun 15 2018, 04:27) самы... Jun 15 2018, 07:17     Olej Цитата(k000858 @ Jun 15 2018, 06:27) Повт... Jul 1 2018, 11:19      k000858 Цитата(Olej @ Jul 1 2018, 14:19) В модели... Jul 2 2018, 03:11 k000858 Как в драйвере задать битовую маску CPU, которая п... Jun 21 2018, 10:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|