2012-02-23 27 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