C 编译错误:';结构网络设备&x2019;没有名为‘的成员;打开&x2019;

C 编译错误:';结构网络设备&x2019;没有名为‘的成员;打开&x2019;,c,linux-device-driver,C,Linux Device Driver,我跟随LDD3学习网络设备驱动程序。我刚刚编译了snll驱动程序的源代码,我得到了这个编译错误: error: ‘struct net_device’ has no member named ‘open’ 当我尝试初始化structnet\u device的其他成员时,我也遇到了类似的错误。请帮助解决此错误 代码如下: struct net_device *snull_devs[2]; snull_devs[0] = alloc_netdev(sizeof(struct snull_priv)

我跟随LDD3学习网络设备驱动程序。我刚刚编译了snll驱动程序的源代码,我得到了这个编译错误:

error: ‘struct net_device’ has no member named ‘open’
当我尝试初始化struct
net\u 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;

这本书很老了,在最近的内核中,这一点显然发生了变化
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;

但设备驱动程序环境可能会有其他变化,影响编码方式。我建议您阅读本章。

您需要发布您的code.struct net\u设备开发;snull_devs[0]=所有网络开发(sizeof(struct snull_priv),“sn%d”,snull_init);void snull_init(结构网络设备*dev){ether_设置(dev)/分配一些字段*/dev->open=snull\u open;dev->stop=snull\u release;不要在注释中添加代码,编辑问题,以便您可以将其格式化为易读的格式。请参阅中的结构声明。没有
open
成员。您怎么认为这是正确的使用方法?是的,我也看到了。但是我是一个新手到设备驱动程序,正如我所说的,我遵循LDD3来编写这个驱动程序。我假设作者不会做错任何事情,我可能会错过一些东西。