1

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

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

代码编译正确,但是当尝试运行它时,模块卡住而不是被删除......我使用的是 linux 内核 2.6.35 并且我的无线设备已启动并正在运行,因此结构中必须有一些值.

4

2 回答 2

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.
于 2012-06-11T01:50:52.047 回答
1

@ajpyles 的答案可能不起作用

因为检查设备名称并不意味着它是无线采用者,这就是为什么wireless_handlersNULL导致系统崩溃或模块卡在 linux 内核中的原因

于 2012-06-15T17:40:29.530 回答