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?
你需要在編譯時定義HELLO
,(或者與地方-DHELLO
作爲一個編譯器標誌或#define HELLO
),否則編譯器甚至從來沒有看到printk
呼叫並沒有它的代碼時發出。
基於引導參數,您不能使C編譯器在早期啓動時重新運行,這是您需要在那裏更改HELLO
。
內核沒有比在這方面的任何其他C程序不同 - 預處理指令在編譯處理,真正早期。
您可以使用this helper macro設置參數,這些參數是一個常規變量,可以在運行時(不是編譯時)使用普通舊的if
語句進行引導和測試。
我的問題是,如果有任何的方式來定義HELLO代碼後通過使用引導參數 – nist 2012-02-23 17:08:52
@nist編譯 - 內核是不是特別的,預處理器仍然發生很早在編譯,就像任何其他C程序。您可以在內核中編寫普通的'if'語句,就像您可以在任何其他C程序中一樣,但是如果您想要而不是'#ifdef' – Flexo 2012-02-23 17:11:42
感謝您的信息。如果我使用if語句,我怎麼能讓我的內核在不同的bootparameters下運行不同,以及如何添加我自己的啓動參數? – nist 2012-02-23 17:19:55