我正在编写一个内核,我需要从iw_statistics
结构中读取某些统计信息,这里是代码:
struct net_device *dev;
struct iw_statistics *wi_stats;
wi_stats = dev->wireless_handlers->get_wireless_stats(dev);
代码编译正确,但是当试图运行它时,模块卡住了内容被删除...我正在使用linux内核2.6.35并且我的无线设备启动并运行,所以结构有一些其中的价值观。
答案 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内核中