Ubuntu 16.04.1を実行しているqemu VMでネットワークドライバを試しています。 uname -r
はカーネルバージョンとして4.4.0-31-genericを与えます。 linux/netdevice.h for that kernel versionでnetdev_ops関数ポインタにドライバ機能を割り当てる際に「読み取り専用」エラーが発生する
、私はコメント
が見つかりました:、私のコードでは、しかし割り当てを
"@netdev_opsは1がNDO _ *()関数をオーバーライドしたい場合は、コールバックに をいくつかのポインタが含まれています"
assignment of member 'ndo_open' in read-only object
さらに、:(netmod_openは私自身のドライバでopenメソッドである)dev->netdev_ops->ndo_open = netmod_open
は、コンパイラエラーを与えるなど
const struct net_device_ops *netdev_ops;
がどのように私は自分のポインタを含む構造体がconst
であれば、「NDO _ *()関数上書き」をすることができます:は、ソースのconst
として宣言されていますか?
私は自分の 'struct net_device_ops'を作成し、' dev-> netdev_ops'に 'struct'のアドレスを割り当てる必要があるようです。ですから、一般的に私は、カーネル内でデータ構造がどのように渡されるかについてもっと知る必要があります。そのような情報へのリンクは高く評価されます。私が見つけたチュートリアルのほとんどは、古いカーネルAPIを持っているようです。 – Vale132