[완료][커널관련] 네트워크, 소켓 소스 분석중에 막히는 부분이 있습니다.
글쓴이: twinwings / 작성시간: 월, 2015/02/09 - 5:53오후
1.
/net/ipv4/af_inet.c 소스 중 일부분입니다.
(커널 linux-2.6 기준)
inet_init() { ... sock_register(); ... } fs_initcall(inet_init);
아무리 grep 해서 찾아봐도 inet_init()이 어디서 호출되는지 모르겠습니다.
fs_initcall(inet_init);
와 관련 있을 것 같은데 따라 가봐도 도통 모르겠더라구요;
누가 호출하는지 좀 알려주세요~
2.
아 그리고, 각 프로토콜 패밀리 별로 XXX_init()이 있을 것이라 예상되는데,
각각의 프로세스별로 초기화되나요? task_struct에 net이라는 구조체가 보이는 것으로 봐서 그럴 것 같은데...
아니면 커널 초기화 할 때 딱 한번 초기화 되나요?
Forums:
다음 사이트에 잘 설명 되어 있습니다.
http://blog.daum.net/baramjin/16010994
답변 감사합니다.
어셈블리를 공부안해서 조금 어렵지만
이렇게 되는것 맞나요?
최신 커널에서는 좀 코드가 바뀌었네요
그러나 개념은 똑같습니다.
static void __init do_initcalls(void)
{
int level;
for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++)
do_initcall_level(level);
}
static void __init do_initcall_level(int level)
{
extern const struct kernel_param __start___param[], __stop___param[];
initcall_t *fn;
strcpy(static_command_line, saved_command_line);
parse_args(initcall_level_names[level],
static_command_line, __start___param,
__stop___param - __start___param,
level, level,
repair_env_string);
for (fn = initcall_levels[level]; fn < initcall_levels[level+1]; fn++)
do_one_initcall(*fn);
}
static initcall_t *initcall_levels[] __initdata = {
__initcall0_start,
__initcall1_start,
__initcall2_start,
__initcall3_start,
__initcall4_start,
__initcall5_start,
__initcall6_start,
__initcall7_start,
__initcall_end,
};
친절한 답변 감사합니다.
커널 소스 분석 시작한 뉴비에게 큰 도움이 되었습니다.
^^
댓글 달기