我想使用自 Linux 3.14 以来SCHED_DEADLINE
可用的新调度策略编写程序。
我从一个尝试使用该sched_setattr
功能的简单程序开始。
#include <sched.h>
int main(void)
{
// struct sched_attr attr;
// attr.size = sizeof(struct sched_attr);
// attr.sched_policy = SCHED_DEADLINE;
sched_setattr(0, (void*)0, 0);
return 0;
}
但是,在编译时出现以下错误:
$gcc dead.c
dead.c: In function ‘main’:
dead.c:8:2: warning: implicit declaration of function ‘sched_setattr’ [-Wimplicit-function-declaration]
sched_setattr(0, (void*)0, 0);
^~~~~~~~~~~~~
/tmp/ccGxWxZE.o: In function `main':
dead.c:(.text+0x19): undefined reference to `sched_setattr'
collect2: error: ld returned 1 exit status
我的系统运行的是 Ubuntu 16.10 Yakkety,内核为 4.8.0-59-generic。包含的sched.h
文件位于包中/usr/include/sched.h
并由包提供libc6-dev
。此头文件不包含sched_setattr
我尝试使用的功能和朋友。
然而,我安装的内核(和内核头文件)带有一个sched.h
包含我需要的定义的头文件。它位于/usr/src/linux-headers-4.8.0-58/include/linux/sched.h
, 在我的系统上。
所以我天真地认为让我们只针对较新的 linux 头文件而不是 libc6-dev 提供的头文件进行构建。我的程序只能在这个或更新的内核上运行,但这很好。
我将第一行修改为:#include <linux/sched.h>
并执行:
gcc -I/usr/src/linux-headers-$(uname -r)/include -I/usr/src/linux-headers-$(unam -r)/arch/x86/include dead.c
现在我得到一页又一页的错误和警告。这似乎不是要走的路。
针对比 libc 提供的更新的 Linux 头文件构建用户空间程序的正确方法是什么?
随后我如何构建上面的程序?