添加一个新的系统调用Linux5-9.8并使其出现在引导屏幕上

添加一个新的系统调用Linux5-9.8并使其出现在引导屏幕上,linux,linux-kernel,Linux,Linux Kernel,我正在尝试向linux-5.9.8添加一个新的系统调用。为此,我一直在学习本教程,本教程与本教程非常相似,所有内容都按预期工作,但为了让系统调用显示在dmesg中,我们在启动后编译以下代码: 这段代码实际上会将消息添加到dmesg中,但它会在启动后执行,我每次都需要运行代码,我应该如何使我的系统调用真正出现在启动屏幕上,而不是稍后,我应该编辑什么文件来实现它?如果目标只是在系统启动时显示某种消息,您不需要系统调用,而是需要一个静态链接或动态加载的内核模块 在定义系统调用的文件中,可以添加一个in

我正在尝试向linux-5.9.8添加一个新的系统调用。为此,我一直在学习本教程,本教程与本教程非常相似,所有内容都按预期工作,但为了让系统调用显示在dmesg中,我们在启动后编译以下代码:


这段代码实际上会将消息添加到dmesg中,但它会在启动后执行,我每次都需要运行代码,我应该如何使我的系统调用真正出现在启动屏幕上,而不是稍后,我应该编辑什么文件来实现它?

如果目标只是在系统启动时显示某种消息,您不需要系统调用,而是需要一个静态链接或动态加载的内核模块

在定义系统调用的文件中,可以添加一个init例程,内核将在启动时调用该例程。为了做到这一点,内核构建链使用_init section identifier将所有初始化入口点收集到一个专用的节中。然后,在引导过程中,调用本节中的所有函数。你可以从你的网站上试试下面的东西,我没有试过

包括 包括 SYSCALL_DEFINE0identity { printkI am Jihan Jasper Al-rashid。\n; 返回0; } void uu init identity\u entryvoid { 来自标识的printkBoot消息\n; }
不知道你所说的启动屏幕是什么意思。选择要加载的操作系统是一个阶段吗?Linux内核在此阶段未加载,系统调用不起作用。
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>

#define __NR_identity 440

long identity_syscall(void)
{
    return syscall(__NR_identity);
}

int main(int argc, char *argv[])
{
    long activity;
    activity = identity_syscall();

    if(activity < 0)
    {
        perror("Sorry. Your system call appears to have failed.");
    }

    else
    {
        printf("Congratulations! Your system call is functional. Run the command dmesg in the terminal and find out!\n");
    }

    return 0;
}