0
私はカーネルプログラミングで、「Hello World」の例をやめようとしています。 start_kernel()のinit/main.cに次のコードを追加しました。qemuの起動パラメータ
#ifdef HELLO
printk("Hello World");
#endif
qemuを使って起動パラメータにHELLOを定義するには?
私はカーネルプログラミングで、「Hello World」の例をやめようとしています。 start_kernel()のinit/main.cに次のコードを追加しました。qemuの起動パラメータ
#ifdef HELLO
printk("Hello World");
#endif
qemuを使って起動パラメータにHELLOを定義するには?
あなたは、そうでない場合、コンパイラはさえprintk
呼び出し、それが放射されますためなしのコードを見たことがない、(どちらかのコンパイラフラグとして-DHELLO
どこか#define HELLO
で)、コンパイル時にHELLO
を定義する必要があります。
ブートパラメータに基づいて初期段階のブート時にCコンパイラを再実行させることはできません。つまり、HELLO
を変更する必要があります。
この点でカーネルは他のどのCプログラムとも変わりません。つまり、プリプロセッサディレクティブは実際にはコンパイル時に早く処理されます。
this helper macroでパラメータを設定することができます。これは通常の変数であり、ブート時に設定し、実行時(コンパイル時ではない)で普通の古いif
文でテストできます。
私の質問は、ブートパラメータを使ってコードがコンパイルされた後でHELLOを定義する方法があるかどうかです。 – nist
@nist - カーネルは特別ではないですが、プリプロセッサはまだ他のCプログラム。あなたは '#ifdef'の代わりに必要な場合でも他のCプログラムのように、普通の' if'文をカーネルに書くことができます – Flexo
情報をありがとう。 if文を使用すると、私はどのように私のカーネルを異なったブートパラメータで動作させることができますか?そして私自身のブートパラメータをどのように追加しますか? – nist