2016-06-22 11 views
1

シナリオ1:私は(実際には、Elrepoからkernel-lt)バニラカーネル3.10とRHEL6上にIBMGPFSドライバをインストールしようとしています。適切な機能をチェック

  • 構造体xは彼らのコードは罰金にコンパイルし、そのようなメンバー
  • 型の不一致

を持っていない機能に渡されたの数が多すぎ/少なすぎる引数:GPL部分が起因してコンパイルされませんRHEL/Suseのカーネルは、古いものよりも新しいものですが、ここでは失敗します。

シナリオ2: 私は株式カーネルでRHEL6上のオープンソースsoftiwarpドライバをコンパイルしようとしているが、それはしかし、それはバニラカーネル上で正常にコンパイルシナリオ1と同じエラーで失敗します。

#if LINUX_KERNEL_VERSION >= 2061300 
#define FOO <newer variant> 
#else 
#define FOO <older variant> 
#endif 

しかし、RHELおよびSUSEは、多くのバックポートとバグ修正を持っているので、彼らの3.10.101はバニラ3.10.101と同じではありません。彼らの機能チェックヘッダーは次のようになりので

このすべてがあります。

の機能(バージョン番号ではありません)をチェックするコードの書き方は?ユーザ空間プログラムでは、私はAC_CHECK_MEMBER/AC_CHECK_FUNC

答えて

0

はどのような機能ではなく、バージョン番号を確認するコードを書くためにAutoconfマクロを使用するのでしょうか?ユーザ空間プログラムでは、私は、AutoconfマクロAC_CHECK_MEMBER/AC_CHECK_FUNC

標準プリプロセッサの機能は、一部の人々が考えているようだよりもはるかに小さいを使用します。それはあなたが直接したいことをする能力を持っていません。 Autoconfはこの点でも魔法を提供しません。単にコンパイラが与えられたコードを受け入れるかどうかをチェックするだけでよく、プリプロセッサマクロを定義させることによってコンパイラに結果を伝えるだけです。 (あなたの例のような条件テストでは、必要に応じてマクロを使用する責任があります。)

しかし、私たちはAutoconfについて話しているので、あなたが構築しているカーネル、少なくともいくつかのAutoconfマクロがうまくいくはずです。他の人のためにカスタムAutoconfテストを書くことができるはずです。確かに、ビルド時にコンパイラが検出できる問題は、Autoconfもテストできるはずです。

もちろん、このような厄介な問題が発生した場合には、モジュールビルダーに必要な設定の詳細を明示的に指定するオプションもあります。たとえば、フィーチャ選択マクロを調整して、ビルダーが結果のモジュレーションに使用するために予約されているシンボルにも注意を払うようにします。

+0

何ですか? Autotoolsはlibcの下に大きく依存しています。自分自身をハッキングせずにカーネルでどのように使うことができますか? – 0andriy

+0

@AndyShevchenko、あなたは '' gcc'と 'make'がlibcに依存していると言うかもしれません。だから、どうやってそれらを使ってカーネルを構築できますか?"実際には、あなたの問題に関連するAutoconfのチェックは、コンパイラを使ったテストに依存しているので、私が言ったように、あなたが必要としているカーネルヘッダが正しいものであることを保証する必要があります。カーネルビルド(例:ライブラリチェック)には意味がありませんが、それは意味をなさないチェックを使うことができないという意味ではありません。 –

+0

第1段落@JohnBollingerの私の無知のあなたの仮定が好きではありませんが、残りの答えは意味をなさない。私はそれを受け入れる – basin

関連する問題