Ich experimentiere mit Netzwerktreibern in einer qemu VM mit Ubuntu 16.04.1. uname -r
gibt 4.4.0-31-generische als Kernel-Version."Nur lesen" -Fehler beim Zuweisen der Treiberfunktion zu netdev_ops Funktionszeiger
In linux/netdevice.h for that kernel version fand ich den Kommentar
"@netdev_ops: Enthält mehrere Zeiger auf Rückrufe, wenn man will die ndo _ *() Funktionen außer Kraft setzen"
jedoch in meinem Code, einen Auftrag wie dev->netdev_ops->ndo_open = netmod_open
(wo netmod_open die offene Methode in meinem eigenen Treiber ist) gibt den Compiler-Fehler:
assignment of member 'ndo_open' in read-only object
Ferner netdev_ops
ist als const
in der Quelle erklärt:
const struct net_device_ops *netdev_ops;
Wie kann ich „die ndo außer Kraft setzen _ *() Funktionen“, wenn die Struktur ihre Zeiger enthalten const
ist?
Es sieht so aus, als müsste ich meine eigene 'struct net_device_ops' erstellen und dann' dev-> netdev_ops' die Adresse dieser 'struct' zuweisen. Im Allgemeinen muss ich mehr darüber lernen, wie Datenstrukturen im Kernel weitergegeben werden. Irgendwelche Verbindungen zu solchen Informationen würden geschätzt werden. Es scheint, als ob die meisten Tutorials veraltete Kernel-APIs haben. – Vale132