编译错误:'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;
答
那本书是很老了,这在最近的内核显然已经改变了。 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一章。
您需要发布您的代码。 – Barmar
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
不要在评论中放置代码,编辑问题以便可以将其格式化为可读。 – Barmar