c - 为什么 ticket spinlock .h 文件没有被内核编译?

标签 c linux linux-kernel kernel

我使用 linux-2.6.31.8 作为我的内核环境。现在我需要对内核中的票证自旋锁进行一些修改。但令我惊讶的是,ticket spinlock.h 文件根本不是由内核编译的。我通过添加一些非法的 C 语句和非编译错误来检查这一点。我使用的测试代码如下:

#include <asm/atomic.h>
#include <asm/rwlock.h>
#include <asm/page.h>
#include <asm/processor.h>
#include <linux/compiler.h>
#include <asm/paravirt.h>
test /an invalid statement, but none errors/
/*
 * Your basic SMP spinlocks, allowing only a single CPU anywhere
 *
 * Simple spin lock operations.  There are two variants, one clears IRQ's
 * on the local processor, one does not.
 *
 * These are fair FIFO ticket locks, which are currently limited to 256
 * CPUs.
 *
 * (the type definitions are in asm/spinlock_types.h)
 */

#ifdef CONFIG_X86_32
# define LOCK_PTR_REG "a"
# define REG_PTR_MODE "k"
#else
# define LOCK_PTR_REG "D"
# define REG_PTR_MODE "q"
#endif

请帮忙。谢谢~~

最佳答案

除非某些 .c 文件包含头文件,否则不会编译头文件。

内核在很大程度上依赖于配置,它指定要编译哪些文件。也许,根据您的配置,没有人编译文件使用此自旋锁。

要找出答案,您可以 grep 查找包含此 header 的文件。然后,您应该发现它们是否已编译。您可以使用 makefile 来发现此文件编译所依赖的配置选项。然后,您可以启用此选项并得到您想要的错误。

编辑:

注意:如果您在没有 SMP 的情况下构建它,您的内核将不会使用任何自旋锁。

关于c - 为什么 ticket spinlock .h 文件没有被内核编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741847/

相关文章:

c - 将字符串文字作为定义为指针的函数参数传递

c - 是否可以从整数中删除数字?

编译错误指纹

linux - 如何在新行中传递每个 shell 参数

c - Fifo 从未创建

linux - 在 Linux 中使用 pppd 和聊天通过 gprs/gsm 调制解调器连接到 gprs 网络

c - 访问 PCIe 设备的内部寄存器

c - 为什么 IS_ERR_VALUE 将负的 MAX_ERRNO 转换为无符号长整数?

linux-kernel - 为什么内核关心发布物理上连续的页面?

linux - 在 linux 中,用户模式堆栈存储在哪里?