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

时间:2016-08-15 06:39:08

标签: c linux-device-driver

我正在关注LDD3学习网络设备驱动程序。我刚编译了snull驱动程序的源代码,我得到了这个编译错误:

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

当我尝试初始化struct 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;

1 个答案:

答案 0 :(得分:2)

这本书已经很老了,而且在最近的内核中这显然已经发生了变化。 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一章。