2016-12-21 7 views
0

Ubuntu 16.04.1を実行しているqemu VMでネットワークドライバを試しています。 uname -rはカーネルバージョンとして4.4.0-31-genericを与えます。 linux/netdevice.h for that kernel versionnetdev_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として宣言されていますか?

+0

私は自分の 'struct net_device_ops'を作成し、' dev-> netdev_ops'に 'struct'のアドレスを割り当てる必要があるようです。ですから、一般的に私は、カーネル内でデータ構造がどのように渡されるかについてもっと知る必要があります。そのような情報へのリンクは高く評価されます。私が見つけたチュートリアルのほとんどは、古いカーネルAPIを持っているようです。 – Vale132

答えて

1

How can I "override the ndo_*() functions"

タイプstruct net_device_opsの独自の変数を定義し、あなたがオーバーライドし、dev->netdev_opsに、この変数を割り当てるセットアップそのフィールド(実際にはフック)。

注意、struct net_device_opsためdescriptionによると、唯一のフィールド.ndo_start_xmitを設定する必要があることを、他のフィールドは、あなたが(それがNULLである)未初期化残すことができます。

関連する問題