sched_setaffinity和glibc - 交叉编译

时间:2014-05-14 19:53:09

标签: c gcc linux-kernel cross-compiling glibc

我正在使用带有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中。有没有办法可以强制我的程序在内核中使用实现?可能导致这个问题的原因是什么?

提前致谢!

1 个答案:

答案 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