2012-06-09 2 views
1

Я пишу ядро, где мне нужно прочитать некоторые статистические данные из iw_statistics структуры, вот код:Пытается использовать структуру iw_statistics, но имеет проблемы?

struct net_device *dev; 
struct iw_statistics *wi_stats; 
wi_stats = dev->wireless_handlers->get_wireless_stats(dev); 

код компилируется правильно, но при попытке запустить его, модуль застревает Невозможно открыть удаляются. .. Я использую linux kernel 2.6.35, и мое беспроводное устройство работает и работает, поэтому структура имеет некоторые значения в нем.

ответ

1

Необходимо сначала убедиться в том, что dev был инициализирован. Для инициализации Дев, вы можете сделать что-то вроде следующего:

static struct net_device* getdev() 
{ 
    struct net_device *dev; 
#ifndef CONFIG_WIRELESS_EXT 
    return NULL; 
#endif  
    dev = first_net_device(&init_net); 
    while (dev) { 
     if (dev->wireless_handles != NULL) 
       break; 
     dev=next_net_device(dev); 
    } 
    return dev; // if not found dev is NULL; 
} 

struct iw_statistics *wi_stats=NULL; 
struct net_device *dev = getdev(); 
if (dev) 
    wi_stats = dev->wireless_handlers->get_wireless_stats(dev); 
else 
    printk("error finding wireless device"); 
if (!wi_stats) 
    return; // error wi_stats not configured. 
1

@ ответ ajpyles могут не работать, хотя

Cuz проверки имя устройства не означает, что это беспроводной усыновителя, поэтому wireless_handlers может быть NULL что привело к сбою в вашей системе или к тому, что ваш модуль застрял в ядре Linux

+0

это именно то, что происходит ... любая идея, как избавиться от этого? –

+0

Я предположил, что вы уже знаете имя беспроводного адаптера. Вы ищете универсальное решение, которое будет работать со всеми беспроводными адаптерами? Здесь определяется – ajpyles

+2

net_device. Установлено ли в вашем ядре CONFIG_WIRELESS_EXT? http://lxr.linux.no/linux+v3.3/include/linux/netdevice.h#L1135 – ajpyles

Смежные вопросы