web-dev-qa-db-ja.com

netlink:GNEL_ID_GENERATE定義がRHEL7.5カーネルライブラリから削除されました

最近のRHEL7.5まで、LinuxディストリビューションのRedHatファミリー用に正常に構築されていたカーネルモジュールがあります。

RHEL7.5でビルドしようとすると、次のエラーが発生します。

...エラー:「GENL_ID_GENERATE」が宣言されていません...

少し読んだところ、これはカーネル4.11以降からの変更のようですが、RHEL7.5はカーネル3.10以降に基づいています。どうした?

とにかく、GENL_ID_GENERATEの値が単純に0であることはわかっています。しかし、0を使用してマクロを置き換えることはできますか?このカーネルモジュールと通信するためのユーザーモードモジュールに問題はありますか?

または、問題を解決するための適切な方法は何ですか?何かアドバイス?

よろしくお願いします、Weishan

1
Weishan Yang

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_)に含めます。 )。

2
ErikF