2012-02-23 64 views
0

我是內核編程的新手,試圖做一個「Hello World」示例。我在start_kernel()中添加了以下代碼到init/main.c中qemu中的引導參數

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

現在來我的問題。我如何使用qemu在啓動參數中定義HELLO?

回答

1

你需要在編譯時定義HELLO,(或者與地方-DHELLO作爲一個編譯器標誌或#define HELLO),否則編譯器甚至從來沒有看到printk呼叫並沒有它的代碼時發出。

基於引導參數,您不能使C編譯器在早期啓動時重新運行,這是您需要在那裏更改HELLO

內核沒有比在這方面的任何其他C程序不同 - 預處理指令在編譯處理,真正早期。

您可以使用this helper macro設置參數,這些參數是一個常規變量,可以在運行時(不是編譯時)使用普通舊的if語句進行引導和測試。

+0

我的問題是,如果有任何的方式來定義HELLO代碼後通過使用引導參數 – nist 2012-02-23 17:08:52

+1

@nist編譯 - 內核是不是特別的,預處理器仍然發生很早在編譯,就像任何其他C程序。您可以在內核中編寫普通的'if'語句,就像您可以在任何其他C程序中一樣,但是如果您想要而不是'#ifdef' – Flexo 2012-02-23 17:11:42

+0

感謝您的信息。如果我使用if語句,我怎麼能讓我的內核在不同的bootparameters下運行不同,以及如何添加我自己的啓動參數? – nist 2012-02-23 17:19:55