0

这是第一次在 Linux 环境中工作。我需要你的很多帮助。我想在 shced_setattr https://elixir.bootlin.com/linux/v4.18/source/kernel/sched/core.c#L4578中添加 prink()

SYSCALL_DEFINE3(sched_setattr, pid_t, pid, struct sched_attr __user *, uattr,
                   unsigned int, flags)
{
    printk();
    struct sched_attr attr;
    struct task_struct *p;
    int retval;

    if (!uattr || pid < 0 || flags)
        return -EINVAL;

    retval = sched_copy_attr(uattr, &attr);
    if (retval)
        return retval;

    if ((int)attr.sched_policy < 0)
        return -EINVAL;

    rcu_read_lock();
    retval = -ESRCH;
    p = find_process_by_pid(pid);
    if (p != NULL)
        retval = sched_setattr(p, &attr);
    rcu_read_unlock();

    return retval;
}

但我不知道如何编辑程序。如果有人可以解释我为 printk() 函数编辑 linux 函数,那就太好了!

4

1 回答 1

1

这完全取决于您尝试使用的打印printk内容,类似于printf. printk文档可在以下位置找到:

https://www.kernel.org/doc/html/latest/core-api/printk-formats.html

它也是来源的一部分:

Documentation/printk-formats.txt

最简单的调用只涉及没有占位符的格式字符串:

printk("sched_setattr called\n");

打印pid将导致:

printk("sched_setattr called: pid: %d\n", pid);

可以使用 读取输出dmesg

printk还支持多个日志级别,但这与入门无关。

于 2020-05-11T16:46:38.573 回答