2016-08-15 12 views
-2

ネットワークデバイスドライバを学習するためにLDD3に従っています。私はちょうどsnullドライバのソースコードをコンパイルし、私はこのコンパイルエラーました:私は構造体net_deviceの他のメンバーを初期化しようとすると、私はまた、同様のエラーを得たコンパイルエラー: 'struct net_device'に 'open'というメンバーがありません

error: ‘struct net_device’ has no member named ‘open’ 

を。このエラーを解決するのを手伝ってください。以下は

はコードです:

struct net_device *snull_devs[2]; 
snull_devs[0] = alloc_netdev(sizeof(struct snull_priv), "sn%d", 
        snull_init); 

void snull_init(struct net_device *dev) 
{ 
    ether_setup(dev); /* assign some of the fields */ 

    dev->open   = snull_open; 
    dev->stop   = snull_release; 
+0

コードを投稿する必要があります。 – Barmar

+0

struct net_device * dev; \t snull_devs [0] = alloc_netdev(sizeof(struct snull_priv)、 "sn%d"、 snull_init); void snull_init(struct net_device * dev) { ether_setup(dev);/*いくつかのフィールドを割り当てる*/ dev-> open = snull_open; dev-> stop = snull_release; – anbu

+0

コメントにコードを入れないでください。質問を編集して、わかりやすく書式設定できるようにしてください。 – Barmar

答えて

1

その本はかなり古いですが、これは明らかに、より最近のカーネルに変更されました。 struct net_device今、以下のメンバーがあります。

const struct net_device_ops *netdev_ops; 

これは、のようなメンバーがあります。

dev->netdev_ops->ndo_open = snull_open; 
dev->netdev_ops->ndo_stop = snull_release; 

しかし、デバイスドライバに他の変更があるかもしれません:

int      (*ndo_open)(struct net_device *dev); 
    int      (*ndo_stop)(struct net_device *dev); 

だから同等のコードは次のようになりますこれをどのようにコード化するかに影響する環境です。私はあなたが章API changes in the 2.6 kernel seriesを読むことをお勧めします。

関連する問題