我正在关注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;
答案 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一章。