我想使用新的SCHED_DEADLINE
调度策略since Linux 3.14编写一个程序。针对比libc更新的linux头文件的构建使用
我从一个简单的程序开始尝试使用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泛型。包含的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
现在我得到页错误和警告的页面之后。这似乎没有办法。
什么是正确的方式来建立一个较新的Linux头的用户空间程序比那些由libc提供的?
然后我如何构建上面的程序?
谢谢你,我自己做系统调用让我走了。不过,我仍然想回答一般问题。有没有办法使用更新的Linux内核头来做到这一点,而不是像这样复制代码? –
对我来说这是一个有点未知的领域,但看着'chrt'源代码(https://github.com/karelzak/util-linux/blob/master/schedutils/chrt.c),它似乎完全这样做一样的方法。 –