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

@ajpylesの答えはうまくいかないかもしれません

デバイスの名前を確認しても、それがワイヤレス アダプターであるとは限りません。そのため、システムがクラッシュしたり、Linux カーネルでモジュールが動かなくなったりするwireless_handlers可能性があります。NULL

于 2012-06-15T17:40:29.530 に答える
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 に答える