1

我在 Ubuntu 12.04 上编译内核版本 2.6.25。当我使用“make”命令编译它时。

我收到错误:

kernel/built-in.o:在函数“mutex_lock”中:

/usr/src/linux-2.6.25/kernel/mutex.c:92: 未定义对“__mutex_lock_slowpath”的引用

kernel/built-in.o:在函数“mutex_unlock”中:

/usr/src/linux-2.6.25/kernel/mutex.c:117: 未定义对 `__mutex_unlock_slowpath' 的引用

制作:* [.tmp_vmlinux1] 错误 1

我该如何纠正这些错误?请帮忙

4

2 回答 2

1

原来解决方案是kernel/mutex.c在四个位置进行更改:

第 60、96、192 行

-static void fastcall noinline __sched
+static __attribute__ ((used)) void fastcall noinline __sched

第 251 行

-static fastcall noinline void
+static __attribute__ ((used)) void fastcall noinline __sched

我不知道为什么__used不起作用。

于 2016-09-27T16:04:52.037 回答
0

更改 kernel/mutex.c 中的声明以强制将函数保留在目标文件中就足够了。您可以像这样使用 gcc 属性扩展“__used”:

-static void noinline __sched
+static __used void noinline __sched
 __mutex_lock_slowpath(atomic_t *lock_count);

-static noinline void __sched __mutex_unlock_slowpath(atomic_t *lock_count);
+static __used noinline void __sched __mutex_unlock_slowpath(atomic_t *lock_count);
于 2014-07-10T11:55:53.113 回答