2012-06-09 60 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內核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的回答可能無法正常工作,雖然

曲子檢查設備的名稱並不意味着它是一個無線收養這就是爲什麼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