hyojeonglee / osfall2019

Undergraduate Operating Systems course (2019 fall)
17 stars 8 forks source link

[proj1] tasklist_lock 관련질문 #8

Open kooyunmo opened 4 years ago

kooyunmo commented 4 years ago

안녕하세요 조교님, tasklist_lock 관련해서 질문을 드립니다.

현재 시스템콜을 등록하고 커널을 컴파일 하기 전에 debugfs로 코드를 작성하고 있는데요, 다음과 같이 tasklist_lock을 사용하면 unknown symbol이라는 에러가 발생합니다.

#include <linux/sched/task.h>

read_lock(&tasklist_lock);
preorder(root, nr);
read_unlock(&tasklist_lock);

locking 부분을 제거하고 코드를 실행하면 에러 없이 제대로 동작하는데 read_lock을 넣으면 다음과 같은 에러 메세지가 뜹니다.

스크린샷 2019-10-03 오후 7 13 49

dmesg에서 뜨는 에러 문구는 Unknown symbol tasklist_lock (err -2)입니다.

문제가 발생하는 원인이 무엇일까요?

hyojeonglee commented 4 years ago

네, 안녕하세요. 일단은 알려주신 정보로만은 정확한 문제 파악이 어렵습니다. 지금 타이젠 커널이 아닌, 로컬 커널에 모듈을 삽입해서 테스트하시려는 상황이신가요? 관련해서 예상되는 문제/해결방법은 다음과 같습니다.

추가로, 커널 모듈 빌드 시 참고하실만한 링크이니 참고하시길 바랍니다.

kooyunmo commented 4 years ago

답변 감사합니다.

MODULE_LICENSE("GPL");은 추가한 상태였으나 에러가 발생했고 다른 방법들을 시도해봤는데 symbol을 찾지 못하는 문제가 반복됩니다.

그래서 read_lock(&tasklist_lock); 대신에 rcu_read_lock()을 사용해봤는데 synchronize가 문제없이 잘 수행되는 걸로 보입니다. 혹시 read_lock을 사용하는 것이 필수조건이 아니라면 rcu_read_lock을 사용해도 무방할까요?

hyojeonglee commented 4 years ago

네, 무방합니다만, 로컬의 리눅스커널 배포판 (올려주신 스크린샷에 보이듯 버전 5.0.0)이 아닌 타이젠 커널에 테스트하셔야합니다. 해당 모듈을 위한 Makefile에 쓰여있는 커널 path를 다시 한 번 확인해보시길 바랍니다.

kooyunmo commented 4 years ago

네 감사합니다!