我想使用新的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),它似乎完全這樣做一樣的方法。 –