我正在运行Ubuntu 16.04.1中的QEMU VM中的网络驱动程序。uname -r
将4.4.0-31代作为内核版本。
在linux/netdevice.h中,该内核版本我找到了评论
"@@netdev_ops:包括几个指向回调的指针, 如果要覆盖NDO _*()函数"
但是,在我的代码中,诸如 dev->netdev_ops->ndo_open = netmod_open
(netmod_open是我自己的驱动程序中的打开方法)之类的作业给出了编译器错误:
assignment of member 'ndo_open' in read-only object
此外,netdev_ops
在来源中被声明为const
:
const struct net_device_ops *netdev_ops;
如果包含指针的结构是const
?
我如何"覆盖ndo _*()函数"
定义您自己的struct net_device_ops
类型变量,设置其字段(实际上是挂钩),您要覆盖,并将此变量分配给dev->netdev_ops
。
请注意,根据struct net_device_ops
的描述,需要设置唯一的字段.ndo_start_xmit
,您可能会留下非判决的其他字段(即null)。