如何在Linux内核模式下编写和编译“Hello World”代码?

5

是的,正如标题所说,我不知道如何在Linux内核模式下编写和编译“Hello World”代码,请以最简单易懂的方式帮助我。谢谢!(欢迎提供任何相关文档,我刚开始接触这个)


但是你最终是如何做到的呢?你遵循了哪些步骤?你是先运行虚拟机,然后分发 ISO 进行测试的,还是采取了其他步骤? - user285594
哦不,我只是在Linux内核模式下测试了它,而不是从启动时。因此,Iso和虚拟机是不需要的。很抱歉我没有回复我的答案,可能是来自其他在线指南。 - Little Jack
3个回答

7
你可以从这里开始:
/*  
 *  hello-1.c - The simplest kernel module.
 */
#include <linux/module.h>   /* Needed by all modules */
#include <linux/kernel.h>   /* Needed for KERN_INFO */

int init_module(void)
{
    printk(KERN_INFO "Hello world 1.\n");

    /* 
     * A non 0 return means init_module failed; module can't be loaded. 
     */
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye world 1.\n");
}

3

哇,这是一个问题!

首先要考虑的是Linux内核没有终端,也没有与用户的直接交互。Hello World不能像其他用户程序一样在命令行上调用。我能想到的最好的匹配是实现为内核模块的字符设备驱动程序,例如会在设备/dev/helloworld上读取“Hello World”。

我可以指向Rubini的书:Linux Device Drivers。它解释并提供了创建简单的Hello World内核模块的示例。


感谢大家,我刚刚在内核模式下完成了我的第一个“Hello World”。在这个“编程深度”上玩得太开心了 :) - Little Jack

1

补充信息:printk函数由内核提供,它将输出打印到文件中,比如/var/log/messages。在Ubuntu系统中,这个文件是/var/log/syslog。你可以在这个文件中看到hello模块的输出。 此外,感谢fseto指出了Linux内核模块编程指南。它非常棒。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接