gpt4 book ai didi

c - 为 Linux 内核编写内置对象?

转载 作者:太空狗 更新时间:2023-10-29 11:08:40 24 4
gpt4 key购买 nike

无论我在哪里搜索 Linux 内核开发,我都能找到创建 Linux 内核模块的答案。示例

 /*
* 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");
}

这里有 init_module 和 cleanup_module 函数,据我所知,它们包含在内核初始化和清理时要执行的内容。有通过添加obj-m += hello-1.c到生成文件。

但我不想要这个。我想添加一个内置程序,而不是驱动程序,基本上是一种服务,以促进从内核级别云上传一些数据。在编译内核时,我根本不想要程序的模块选项。

我知道对于程序我应该使用 obj-y 而不是 obj-m。但是没有编写此类程序的手册。为什么?我错过了什么吗?这些程序是否也具有 init_module 和 cleanup_module 函数,即使它们不是模块?

最佳答案

例如,假设您的源代码位于 linux 内核源代码树中的 driver/new 下。您需要修改 driversnew 下的 Makefile 的,以将您的模块静态构建到 linux 内核中。

drivers/Makefile 下,在末尾添加以下行。

obj-y   += new/

drivers/new/Makefile 下,在末尾添加以下行。

obj-y   += hello.o

构建 linux 内核之后。并加载以查看您的模块是否已使用 dmesg 命令打印了 printk 消息。

注意:将模块静态构建到 linux 中时,更改

int init_module(void)

int __init init_module(void)

和改变

void cleanup_module(void)

void __exit cleanup_module(void)

关于c - 为 Linux 内核编写内置对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27916116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com