我々は、最新のRHEL7.5までRedHat Linuxディストリビューションスイートに適して構築されたカーネルモジュールを持っています。
RHEL7.5でビルドしようとすると、次のエラーが発生します。
...エラー: 'GENL_ID_GENERATE'が宣言されていません...
読んでみると、カーネル4.11+以降の変化のようですが、RHEL7.5はカーネル3.10+に基づいています。どうしたの?
とにかく、GENL_ID_GENERATEの値は0であることがわかります。しかし、マクロを置き換えるために0を使用できますか?このカーネルモジュールと通信するユーザーモードモジュールに問題がありますか?
それとも問題を解決する正しい方法は何ですか?どんな提案がありますか?
ありがとう、Weishan
答え1
見ている子コミットnetlinkの場合、バージョン4.11では構造がいくつか変更されているようです。
まず、Linuxが静的ファミリIDを削除したため、.id
初期化プログラムからそのフィールドを完全に省略できます。genl_family
もう一度申し上げますが、このgenl_register_family_with_ops
機能は廃止されました。逆に、Netlink は Linux HOWTO ドキュメントに記載されています。:
Linux 4.10以前では、構造体
genl_register_family_with_ops()
への参照がgenl_ops
構造体の要素genl_family
(element.ops
)とコマンドの数(element.n_ops
)として.4.10以降で含まれていました。