【问题标题】:Boot parameters in qemuqemu 中的引导参数
【发布时间】: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


    【解决方案1】:

    您需要在编译时定义HELLO(将-DHELLO 作为编译器标志或#define HELLO 在某处),否则编译器甚至不会看到printk 调用并且不会发出任何代码。

    您不能让 C 编译器根据启动参数在启动的早期阶段重新运行,这是您需要在此处更改 HELLO 的操作。

    在这方面,内核与任何其他 C 程序没有什么不同 - 预处理器指令在编译的早期就被处理了。

    您可以使用 this helper macro 设置参数,这些参数是一个常规变量,可以使用普通的旧 if 语句在运行时(而非编译时)设置启动和测试。

    【讨论】:

    • 我的问题是在代码编译后使用引导参数是否有任何方法可以定义HELLO
    • @nist - 内核并不特殊,预处理器仍然在编译的早期发生,就像任何其他 C 程序一样。您可以像在任何其他 C 程序中一样在内核中编写普通的 if 语句,但如果您愿意而不是 #ifdef
    • 感谢您的信息。如果我使用 if 语句,我怎样才能使我的内核在不同的引导参数下表现不同?如何添加自己的引导参数?
    • @nist - de-brauwer.be/wiki/wikka.php?wakka=HelloParam 显示了通常方式的示例。我认为如果你想在启动的早期这样做,你需要使用__setup
    猜你喜欢
    • 1970-01-01
    • 2020-05-24
    • 2014-12-01
    • 1970-01-01
    • 2014-07-16
    • 2019-08-27
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    相关资源
    最近更新 更多