最近のRHEL7.5まで、LinuxディストリビューションのRedHatファミリー用に正常に構築されていたカーネルモジュールがあります。
RHEL7.5でビルドしようとすると、次のエラーが発生します。
...エラー:「GENL_ID_GENERATE」が宣言されていません...
少し読んだところ、これはカーネル4.11以降からの変更のようですが、RHEL7.5はカーネル3.10以降に基づいています。どうした?
とにかく、GENL_ID_GENERATEの値が単純に0であることはわかっています。しかし、0を使用してマクロを置き換えることはできますか?このカーネルモジュールと通信するためのユーザーモードモジュールに問題はありますか?
または、問題を解決するための適切な方法は何ですか?何かアドバイス?
よろしくお願いします、Weishan
git commits を見ると、netlinkの場合、バージョン4.11で構造にいくつかの変更が加えられたようです。
まず、Linuxが静的ファミリIDを削除したため、_.id
_の初期化子から_genl_family
_フィールドを完全に省略できます。
また、_genl_register_family_with_ops
_関数は使用されなくなりました。代わりに、 netlinkのLinux HOWTOドキュメントに記載されています :
Linux 4.10までは、
genl_register_family_with_ops()
を使用してください。 4.10以降では、_genl_ops
_構造体への参照を要素として_genl_family
_構造体(要素_.ops
_)、およびコマンドの数(要素_.n_ops
_)に含めます。 )。