컴파일 타임에 세마포어의 정적 초기화?

컴파일 타임에 세마포어의 정적 초기화?

나는 Love's 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;
}

이 작업을 수행하는 방법에 대한 다른 아이디어가 있습니까? (실제로 통화에서 세마포어를 사용하지 않는다는 것을 알고 있습니다.)

감사해요.

답변1

이 방법으로는 함수 외부에서 함수를 호출할 수 없습니다. 세마포어를 초기화하려면 __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()매크로 이므로 모순되는 조언처럼 보일 수 있습니다 .)

관련 정보