试图使用iw_statistics结构但遇到麻烦?

时间:2012-06-09 13:51:46

标签: c linux-kernel kernel-module

我正在编写一个内核,我需要从iw_statistics结构中读取某些统计信息,这里是代码:

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

代码编译正确,但是当试图运行它时,模块卡住了内容被删除...我正在使用linux内核2.6.35并且我的无线设备启动并运行,所以结构有一些其中的价值观。

2 个答案:

答案 0 :(得分:1)

您需要确保首先初始化dev。要初始化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 :(得分:1)

@ ajpyles的回答可能不起作用

Cuz检查设备名称并不意味着它是无线采用者,这就是为什么wireless_handlers可能NULL导致系统崩溃或导致模块卡在Linux内核中