我正在使用带有Alpha ISA的完整系统模拟器(GEM5)。我已成功交叉编译(使用gcc-4.3.2,glibc-2.6.1)Linux 2.6.27 for Alpha。现在,我正在交叉编译我自己的程序,该程序调用sched_setaffinity函数。程序编译,但在运行时它返回-1,错误是#34;函数未实现"。该函数确实在我的交叉编译内核中实现(在kernel / sched.c中),但该实现永远不会被调用。
我认为问题可能是没有在Alpha磁盘映像上的glibc(libc-2.3.5.so)中定义/实现sched_setaffinity。如果我只是用更新的交叉编译版本替换libc-2.3.5.so,它会使磁盘映像上的其他程序无法正常工作。我相信sched_setaffinity应该已经存在于libc-2.3.5.so中。有没有办法可以强制我的程序在内核中使用实现?可能导致这个问题的原因是什么?
提前致谢!
答案 0 :(得分:0)
要调用没有libc包装器的perf_event_open
系统调用,我使用以下函数:
static long
perf_event_open(struct perf_event_attr *hw_event, pid_t pid,
int cpu, int group_fd, unsigned long flags)
{
int ret;
ret = syscall(__NR_perf_event_open, hw_event, pid, cpu,
group_fd, flags);
return ret;
}
可能你应该能够做一个类似的函数来直接调用libc sched_set_affinity函数使用的系统调用。查看我的Linux源代码树版本3.11.0,我可以在include/uapi/asm-generic/unistd.h
#define __NR_sched_setaffinity 122