这是第一次在Linux环境中工作。 我需要你的很多帮助。 我想在shced_setattr中添加 prink(( https://elixir.bootlin.com/linux/v4.18/source/kernel/sched/core.c#L4578
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 函数,那就太好了!
这完全取决于您尝试使用printk
打印的内容,这类似于printf
。printk
文档可在以下位置找到:
https://www.kernel.org/doc/html/latest/core-api/printk-formats.html
它也是来源的一部分:
Documentation/printk-formats.txt
最简单的调用只涉及没有占位符的格式字符串:
printk("sched_setattr calledn");
使用pid
打印将导致:
printk("sched_setattr called: pid: %dn", pid);
可以使用dmesg
读取输出。
printk
还支持多个日志级别,但这应该与入门无关。