编译错误:'struct net_device'没有名为'open'的成员

问题描述:

我跟随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

那本书是很老了,这在最近的内核显然已经改变了。 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一章。