我需要从 iw_statistics 结构中读取某些统计信息,代码如下:
struct net_device *dev;
struct iw_statistics *wi_stats;
dev = first_net_device(&init_net);
while (dev)
{
if (strncmp(dev->name , "wlan",4)==0 )
{
if (dev->wireless_handlers->get_wireless_stats(dev) !=NULL ) // <--- here's where the code crashes.
{
wi_stats = dev-wireless_handlers->get_wireless_stats(dev);
printk(KERN_INFO "wi_stats = dev-wireless_handlers->get_wireless_stats(dev); worked!!! :D\n");
}
}
}
我正在研究 linux 内核 2.6.35,并且正在编写一个内核模块。我在这里做错了什么?
最佳答案
看起来 wireless_handlers
结构是 Null
...仅仅因为网络设备的 name
字段已填充并不意味着它已配置。
这是设置 wireless_handlers
的地方:
#ifdef CONFIG_WIRELESS_EXT
/* List of functions to handle Wireless Extensions (instead of ioctl).
* See <net/iw_handler.h> for details. Jean II */
const struct iw_handler_def * wireless_handlers;
/* Instance data managed by the core of Wireless Extensions. */
struct iw_public_data * wireless_data;
#endif
您应该检查名为 CONFIG_WIRELESS_EXT
的值,如果它未设置,wireless_handler
结构未设置,因此您将指向一个 Null
你的模块会卡住
关于linux - 试图阅读 iw_statistics 但代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11060318/