J'expérimente des pilotes réseau dans une machine virtuelle qemu exécutant Ubuntu 16.04.1. uname -r
donne 4.4.0-31-generic comme version du noyau.Erreur "Lecture seule" lors de l'affectation de la fonction du pilote au pointeur de fonction netdev_ops
En linux/netdevice.h for that kernel version, je trouve le commentaire
"@netdev_ops: Comprend plusieurs pointeurs vers callbacks, si l'on veut passer outre les fonctions ndo _ *()"
Cependant, dans mon code, une mission tels que dev->netdev_ops->ndo_open = netmod_open
(où netmod_open est la méthode ouverte dans mon propre pilote) donne l'erreur du compilateur:
assignment of member 'ndo_open' in read-only object
de plus, netdev_ops
est déclarée comme const
dans la source:
const struct net_device_ops *netdev_ops;
Comment puis-je "passer outre les fonctions ndo _ *()" si le struct contenant leurs pointeurs est const
?
Il semble que je doive créer ma propre structure 'struct net_device_ops', puis assigner' dev-> netdev_ops' l'adresse de cette 'struct'. Donc, en général, j'ai besoin d'en savoir plus sur la façon dont les structures de données sont transmises dans le noyau. Tous les liens vers de telles informations seraient appréciés. Il semble que la plupart des tutoriels que je trouve ont des API noyau obsolètes. – Vale132