커널 공부를 하다가 궁금한게 있어서요...
리눅스 커널에도 main() 함수가 있나요...
있다면 리눅스가 처음 시작할때 main() 부터 시작을 하는건가요???
없다면 리눅스도 C언어 인데 어떻게 작동이 되는건가요???
궁금합니다...
답변 좀 해 주세요...^^
/init/main.c 부터 커널이 시작하는걸로 알고 있었는데....
아닌가요 ?
있다고 해야 겠죠. 어셈으로 만들어진 초기화 코드는 kernel이 실행되기 최소한의 기능을 수행하고 kernel로 jump합니다. 거기가 프로그램의 시작이니 main()이라고 할 수 있겠네요. 그 쪽 코드는 kernel source의 arch/i386/kernel 쪽에 있겠네요. 사실상 더 복잡하지만요.
/init/main.c
void __init start_kernel(void)
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.. or should I?
/init/main.c void __init start_kernel(void)
어셈부분 부터 보면 여기 실제 커널의 시작인 start_kernel 로 점프하게 되죠.
원래 C 소스만 컴파일 하면 링크 할때, 실행 파일의 Start Entry 로 main 함수가 지정이 되는겁니다. 고운 하루되시길... ^^
========================= CharSyam ^^ --- 고운 하루 =========================
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
커널 시작은 ....
/init/main.c 부터 커널이 시작하는걸로 알고 있었는데....
아닌가요 ?
있다고 해야 겠죠. 어셈으로 만들어진 초기화 코드는kernel이
있다고 해야 겠죠.
어셈으로 만들어진 초기화 코드는
kernel이 실행되기 최소한의 기능을 수행하고
kernel로 jump합니다. 거기가 프로그램의
시작이니 main()이라고 할 수 있겠네요.
그 쪽 코드는 kernel source의 arch/i386/kernel
쪽에 있겠네요. 사실상 더 복잡하지만요.
/init/main.cvoid __init start_kernel
/init/main.c
void __init start_kernel(void)
I thought what I'd do was,
I'd pretend I was one of those deaf-mutes.. or should I?
[quote="웃는남자"]/init/main.cvoid __ini
어셈부분 부터 보면 여기 실제 커널의 시작인 start_kernel 로 점프하게 되죠.
원래 C 소스만 컴파일 하면 링크 할때, 실행 파일의 Start Entry 로 main 함수가 지정이 되는겁니다. 고운 하루되시길... ^^
=========================
CharSyam ^^ --- 고운 하루
=========================
댓글 달기