네트워크 초기화 부분인데 이 함수가 가리키는 부분이 어딘지 모

blue39의 이미지

아래 코드는 리눅스 커널 2.6.0-test2 버전 init시에 호출되는 do_basic_set

up() 함수에서 호출되는 네트워크를 초기화하는 do_initcalls()입니다.

extern initcall_t __initcall_start, __initcall_end;
 
 static void __init do_initcalls(void)
 {
         initcall_t *call;
         int count = preempt_count();
 
         for (call = &__initcall_start; call < &__initcall_end; call++)
	 char *msg;
 
                 if (initcall_debug)
                         printk("calling initcall 0x%p\n", *call);
 
                 (*call)();

다른게 아니라 이 함수 내부의 initcall_t *call에 __initcall_start의 포인터를

할당해서 마지막으로 (*call)()의 형식으로 가상 함수를 호출하고 있습니다. 그

런데 제 생각으로는 이 부분이 각 프로토콜 패밀리들에 대한 각 가상함수들을

초기화하고 연결하는 부분이라 생각하는데 도무지 저 initcall_t 타입의 변수를

찾아가봐도 적당한 값이 없더군요. 단지 init.h 파일에
typedef int (*initcall_t)(void);
extern initcall_t __initcall_start, __initcall_end;
이렇게 정의만 되어있고 어떤 값으로 초기화가 되어있는지 영 못찾겠네요

저 __initcall_start 부분이 어떤 부분으로 연결이 되는지, 이 부분이 어떻게 초

기화가 되는지 아시는 분 답변 좀 부탁드립니다.

그럼 항상 행복하시구요~~