【发布时间】:2012-02-23 17:02:22
【问题描述】:
我是内核编程的新手,正在尝试做一个“Hello World”示例。我在 start_kernel() 中将以下代码添加到 init/main.c
#ifdef HELLO
printk("Hello World");
#endif
现在我的问题。如何使用 qemu 在启动参数中定义 HELLO?
【问题讨论】:
标签: c linux-kernel boot qemu
我是内核编程的新手,正在尝试做一个“Hello World”示例。我在 start_kernel() 中将以下代码添加到 init/main.c
#ifdef HELLO
printk("Hello World");
#endif
现在我的问题。如何使用 qemu 在启动参数中定义 HELLO?
【问题讨论】:
标签: c linux-kernel boot qemu
您需要在编译时定义HELLO(将-DHELLO 作为编译器标志或#define HELLO 在某处),否则编译器甚至不会看到printk 调用并且不会发出任何代码。
您不能让 C 编译器根据启动参数在启动的早期阶段重新运行,这是您需要在此处更改 HELLO 的操作。
在这方面,内核与任何其他 C 程序没有什么不同 - 预处理器指令在编译的早期就被处理了。
您可以使用 this helper macro 设置参数,这些参数是一个常规变量,可以使用普通的旧 if 语句在运行时(而非编译时)设置启动和测试。
【讨论】:
if 语句,但如果您愿意而不是 #ifdef