2016-08-15 74 views
-2

我跟隨LDD3學習網絡設備驅動程序。我剛剛編譯snull的驅動程序的源代碼,我得到這個編譯錯誤:編譯錯誤:'struct net_device'沒有名爲'open'的成員

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

我也得到了類似的錯誤,當我嘗試初始化結構net_device的其他成員。請幫助解決此錯誤。

下面是代碼:

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; 

這有成員一樣:

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

因此,等效代碼將是:

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

但也可能有其他更改設備驅動程序影響如何編碼的環境。我建議你閱讀API changes in the 2.6 kernel series一章。

相關問題