Linux-Kernel

在編譯時靜態初始化信號量?

  • February 24, 2021

我一直在嘗試遵循 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()是一個宏。)

引用自:https://unix.stackexchange.com/questions/636118