0

ネットワーク ドライバ モジュールによってエクスポートされたネットワーク デバイス インターフェイスを使用したいと考えています。これは私のプログラムdevget.cです

 #include<stdio.h>
 #include<linux/netdevice.h>

  void main(void)
  {
     struct net_device* device;

     device = dev_get_by_name("eth0");
     if (device == NULL)
         printf("device is NULL\n");
     else
         printf("This is a success story\n");
   }

これをクロスコンパイルしています。`dev_get_by_name' への未定義の参照。現在、この関数は /linux/netdevice.h ファイルでプロトタイプとして定義されています。これを agcc でコンパイルし、スクリプトにインクルード パスを指定します。

4

1 に答える 1

1

カーネルモジュールではなく、ユーザー空間プログラムを構築しているようです。

ユーザー空間プログラムはカーネル関数を使用できません。libc または他のライブラリの関数のみを使用できます。

コードをカーネル モジュールとしてコンパイルする必要があります。
これにより、いくつかの点が変更されます。main関数がなく (代わりに がありinit_module、これは同じではありません)、コンパイル プロセスが異なります (単に ではありませんgcc -o myprog myprog.c)。

カーネル開発に関する基本的な本を読むことをお勧めします。

于 2012-02-25T19:35:46.563 に答える