나는 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()
매크로 이므로 모순되는 조언처럼 보일 수 있습니다 .)