我使用linux-2.6.31.8作为我的内核环境。现在我需要对内核中的ticket spinlock进行一些修改。但令我惊讶的是,内核根本没有编译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
任何帮助PLZ。谢谢~~
答案 0 :(得分:0)
除非某些.c文件包含它们,否则不会编译头文件。
内核在很大程度上取决于配置,它指定要编译的文件。也许,使用您的配置,没有一个编译文件使用此自旋锁。
要找出答案,您可以grep查找包含此标题的文件。然后,您应该发现它们是否已编译。您可以使用makefile来发现此文件编译所依赖的配置选项。然后,您可以启用此选项并获得理想的错误。
编辑:
注意:如果您在没有SMP的情况下构建它,您的内核将不会使用任何自旋锁。