Linux-Kernel
在編譯時靜態初始化信號量?
我一直在嘗試遵循 Love 的 Linux Kernel Development 中的一些語法,但在以下簡化的信號量初始化中遇到了一些困難。在核心編譯期間,我不斷收到“錯誤:預期的聲明說明符或 ‘…’ 在 ‘&’ 標記”之前。這聽起來像是將我的 sema_init() 呼叫視為函式原型,而實際上它只是一個靜態內聯函式呼叫。
#include <linux/sched.h> #include <linux/mutex.h> #include <linux/slab.h> #include <linux/kthread.h> #include <linux/syscalls.h> #include <linux/pstrace.h> #include <linux/semaphore.h> struct semaphore sem1; int count1 = 3; sema_init(&sem1,count1); SYSCALL_DEFINE0(helloworld){ extern struct semaphore sem1; printk("hello, world\n"); return 0; }
關於如何做到這一點的任何想法?(我知道我實際上並沒有在通話中使用信號量。)
謝謝。
您不能以這種方式在函式外部呼叫函式。要初始化您的信號量,請使用以下
__init
函式:static int __init helloworld_init(void) { sema_init(&sem1, 3); return 0; } module_init(helloworld_init);
你
#include <linux/module.h>
也需要。(是的,這看起來像是自相矛盾的建議,因為
module_init()
它似乎是在函式之外呼叫的,但sema_init()
它是一個函式,並且module_init()
是一個宏。)