[완료] 리눅스 커널 init_task 에 관한 질문
글쓴이: khjo321 / 작성시간: 일, 2011/11/06 - 3:19오후
제가 커널 소스를 공부하고 있습니다. 공부 중 이해가 안되은 부분이 있어 질문을 드립니다.
arch/x86/kernel/init_task.c 파일을 보면 다음과 같이 init_thread_union 과 init_task를 초기화 하는 코드가 나옵니다. 커널 3.0.3 기준.
union thread_union init_thread_union __init_task_data =
{ INIT_THREAD_INFO(init_task) };
struct task_struct init_task = INIT_TASK(init_task);
EXPORT_SYMBOL(init_task);
제가 이해가 안되는 부분은 위의 init_thread_union 초기화 하기 위해 INIT_THREAD_INFO(init_task)를 사용하는 부분입니다. 여기에서 init_task를 사용하는데 이 init_task는 그 아래에 선언이 되어 있어 이 지점에서는 아직 선언이 안되어 있는 상태인데 어떻게 에러없이 컴파일이 되는건지 이해를 못하겠습니다. 궁금증 좀 풀어 주세요.
Forums:
init_task 변수는 linux/sched.h에
init_task 변수는 linux/sched.h에 선언돼 있습니다.
'그 아래'에서는 정의가 돼 있구요.
어딘가에 변수가 있다고 선언해 뒀으니 컴파일러는 그렇다고 믿고서 init_thread_union 정의문을 컴파일 합니다. 아래에 init_task 정의문이 없다면 링크 과정에서 심볼을 못 찾는다는 오류가 나올 테구요.
$PWD `date`
감사합니다.
아하! sched.h 에 extern으로 선언이 되어 있었군요. 제가 눈이 문제가 있는듯....
말씀하신걸 보고 크로스 레퍼런씽을 보니 버젓이 sched.h 파일에 init_task 가 있다고 나오는구만....
전에는 그게 왜 안보였을까?
정말, 정말, 정말 감사합니다.
댓글 달기