小编Fik*_*iki的帖子

DEFINE_SPINLOCK(...) spinlock_t 参数错误

我目前正在开发一个班级项目,其中包括基于内核的信号量实现。而不是使用 DEFINE_SPINLOCK(sem_lock); 作为 /kernel/sys.c 中的全局变量,我创建了一个方案,其中信号量结构保存 spinlock_t 变量(在用户空间中屏蔽为 void *),以便允许不同的信号量有机会 down()/up( )独立(这应该转化为更高效的代码,更少的繁忙等待)。我进行系统调用来初始化信号量,并将指针传递给结构。但是,在初始化信号量的 spinlock_t 时,我遇到了一行错误。

我联系了我的教授,他说出于本次作业的目的,只是使用具有全局自旋锁定义的粗略实现。然而,很难放手这一点。虽然我显然不介意走这条路,但我仍然想了解为什么我的实现不起作用。谁能帮我这个?

这是错误:

    CC      kernel/sys.o
kernel/sys.c: In function 'sys_cs1550_sem_init':
kernel/sys.c:2491: error: expected '=', ',', ';', 'asm' or '__attribute__' before '->' token
kernel/sys.c:2491: error: expected expression before '->' token
make[1]: *** [kernel/sys.o] Error 1
make: *** [kernel] Error 2
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

DEFINE_SPINLOCK(sem->sem_lock);  
DEFINE_SPINLOCK(&(sem->sem_lock));  
DEFINE_SPINLOCK((&(sem->sem_lock)));  
DEFINE_SPINLOCK(*(sem->sem_lock));  
spinlock_t *lock = &(sem->sem_lock);  
DEFINE_SPINLOCK(lock);
Run Code Online (Sandbox Code Playgroud)

我在 /kernel/sys.c 中的信号量结构代码:

/*
* Initialize a semaphore with the creation of it's spinlock.
* The idea is to avoid …
Run Code Online (Sandbox Code Playgroud)

c linux kernel system-calls linux-kernel

1
推荐指数
1
解决办法
3186
查看次数

标签 统计

c ×1

kernel ×1

linux ×1

linux-kernel ×1

system-calls ×1