2012-02-23 11 views
0

私はカーネルプログラミングで、「Hello World」の例をやめようとしています。 start_kernel()のinit/main.cに次のコードを追加しました。qemuの起動パラメータ

#ifdef HELLO 
    printk("Hello World"); 
#endif 

qemuを使って起動パラメータにHELLOを定義するには?

答えて

1

あなたは、そうでない場合、コンパイラはさえprintk呼び出し、それが放射されますためなしのコードを見たことがない、(どちらかのコンパイラフラグとして-DHELLOどこか#define HELLOで)、コンパイル時にHELLOを定義する必要があります。

ブートパラメータに基づいて初期段階のブート時にCコンパイラを再実行させることはできません。つまり、HELLOを変更する必要があります。

この点でカーネルは他のどのCプログラムとも変わりません。つまり、プリプロセッサディレクティブは実際にはコンパイル時に早く処理されます。

this helper macroでパラメータを設定することができます。これは通常の変数であり、ブート時に設定し、実行時(コンパイル時ではない)で普通の古いif文でテストできます。

+0

私の質問は、ブートパラメータを使ってコードがコンパイルされた後でHELLOを定義する方法があるかどうかです。 – nist

+1

@nist - カーネルは特別ではないですが、プリプロセッサはまだ他のCプログラム。あなたは '#ifdef'の代わりに必要な場合でも他のCプログラムのように、普通の' if'文をカーネルに書くことができます – Flexo

+0

情報をありがとう。 if文を使用すると、私はどのように私のカーネルを異なったブートパラメータで動作させることができますか?そして私自身のブートパラメータをどのように追加しますか? – nist

関連する問題