問題タブ [kbuild]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 大規模な C ソフトウェアを構成/記述するための Kconfig (カーネル構成言語) の代替
大規模な C システムの構成/構築に興味があります...
Linux カーネルはKconfig言語を使用して、さまざまな構成オプション (CONFIG_X として定義されたマクロ) とその依存関係を記述します...基本的に、各ディレクトリには、このサブシステムで定義された構成オプションを含む Kconfig ファイルがあります...
Apache や *-BSD などの大規模な C システムで構成オプションを説明するための代替手段はありますか? 人々は一般的に何を使用しますか? ベストプラクティスは何ですか?
linux - makeを使用してC99としてコンパイルする方法は?
Makefileを使用してLinuxカーネルモジュールをコンパイルしようとしています。
それは私に与えます:
C99に切り替える必要があります。読んだ後、フラグ-std = c99を追加する必要があることに気付きましたが、どこに追加するのかわかりません。
Makefileを変更してC99としてコンパイルするにはどうすればよいですか?
linux-kernel - Kconfigエントリがmenuconfigに表示されないのはなぜですか?
drivers / media / video/Kconfigに次のエントリがあります。
menuconfigでVIDEO_OMAP3を検索すると、次のようになります。
ただし、menuconfigオプションはありません。makefileを変更することでオブジェクトを手動でビルドすることができますが、これが大きな問題の一部ではないことを確認したいと思います。
makefile - ツリー外の Linux カーネル モジュールを別のオブジェクト ディレクトリにビルドする
Linux カーネル ビルド システム (Kbuild、カーネル ≥2.6.28) と、より大きなプロジェクトのディレクトリ構造とビルド システムに直面しています。私たちのプロジェクトには、ツリー外の Linux カーネル モジュールが含まれており、ディレクトリ構造は次のようになります (明らかに単純化されています)。
ビルド プロセスでは の下を変更してcheckout
はならず、モジュールのビルドでは の下を変更してはなりませんtmp/linux-2.6.xx
。すべての出力ファイルは、最終的にoutput/linux-arm-debug
(または、ビルド時に選択されたアーキテクチャおよびデバッグ バリアント) の下にある必要があります。
を読みkbuild/modules.txt
、Kbuild
ファイルの書き込みを開始しました。
これは、オブジェクトファイルを、存在する場所とは別のディレクトリに保存することを処理しますKbuild
。からfoo_common.o
コンパイルする必要があることをどのように指定できますか?…/checkout/src/common/foo_common.c
foo_linux.o
…/checkout/src/linux-driver/foo_linux.c
linux - Kconfig と LKM
カーネル ツリーの外部で LKM を使用しており、MYLKM_CONFIG_{something} などのモジュールのコンパイル オプションを使用したいと考えています。これは、C の前処理 (#define // #ifdef // #endif) を使用して実行できることを知っています。しかし、その目的でKbuild(Kconfigファイルまたは関連するもの)を使用することは可能ですか?..
そしてもう1つ質問です。make menuconfig
カーネルツリー全体ではなく、モジュールのみを対象にすることはできますか?
ありがとう。
makefile - makefile に dir を含める
Ubuntu で 1 つの C ファイルをコンパイルしていますが、ヘッダー ファイルをインクルードするとエラーが発生します。私のメイクファイルは次のとおりです。
しかしCFLAGS
、makefile に with の行を含めた後でも、含まれているディレクトリに存在する、含まれていない 1 つのヘッダー ファイルに対してエラーが発生します。
他の方法はありますか? ヘッダー ファイルをメイクファイルに含めるにはどうすればよいですか?
linux - 宣言で:=が使用されているにもかかわらず、Makefile変数の置換が行われていないようです
他のカーネルモジュールと通信するメインカーネルモジュールがあります。私はこのようにモジュールを構成しました(概念的に):
これらはカーネルモジュールなので、次のようにコンパイルする必要があります。
ただし、ドライバのMakefileは以前のディレクトリから呼び出すことができる$(shell pwd)
ため、他のmake(Linuxのmake)を呼び出す前に行う必要があります。したがって、Makefileは次のようになります。
これまでのところ問題はなく、完全に機能します。問題はこれです:私はドライバーがインクルードする必要があるファイルを持っているので、作成するインクルードパスを指定する必要があります。私は最初に試しました
そして、それが機能しない理由をすぐに理解しました(相対パスは現在のディレクトリではなく/ lib / module / ...になります)。だから私はそれを次のように変更しました:
奇妙なことに、これは機能しません!私が書いたら
手動でコンパイルします!誰かが私が間違っていることを説明できますか?makeを呼び出す前に、私はecho
ed$(CURRENT_DIR)
と$(MAIN_MODULE_HOME)
変数に意味があります。
EXTRA_CFLAGS
それがすぐに評価されないことは知っていますが、CURRENT_DIR
とMAIN_MODULE_HOME
宣言されているので、:=
物事がどのように台無しになっているのかわかりません。
(誰かが質問のタイトルをよりよく表現できるなら、してください!)
linux - Linux Makefile でのオブジェクト ファイルのアドレス指定
Linux で簡単なデバイス ドライバーを作成しています。メイクファイルでは、通常、最初の行を次のように記述します
hello
モジュールはどこに書かれていますか。他のメイクファイルで、シンボル+=
が置き換えられているのを見たこと:=
があります。2つの重要な違いは何ですか?また、可能なオプションは何ですか?
linux-kernel - Kconfig の選択: 選択されていない選択が新規として表示されます
次の Kconfig コードがあります。
私の問題、make oldconfig を実行するたびに次のように表示されます。
設定ファイルを確認したところ、
選択されていないオプションが常に新規として表示される理由は何ですか?
linux - Linuxカーネルをコンパイルするときに出力されるCC、LD、CC [M]などのコードは何ですか?
Linuxを最初からコンパイルしていると、コンパイル中に表示されるコンパイルコードがあることに気付きました。
たとえば、CCファイル名、LDファイル名、CC[M]ファイル名。
これらのコードはどういう意味ですか?