리눅스의 부팅과정
- 작성자
- 고친과정
2009년 7월 25일 : 처음씀
1.1. 간단요약
- POWER ON
- BIOS가 눈을 뜸 (POST과정을 거침)
- BIOS는 Booting 가능한 매체의 MBR(Master Boot Record)를 읽어서 메모리 7c00H로 탑재후 분기함.
- MBR(7c00H에 탑재된 코드)에서는 부트로더(LILO 또는 GRUB)를 로딩하여 실행
- 부트로더는 설정된 커널을 로딩하고 이에 대한 필요한 인자를 넘겨줌
- 커널은 기본 장치를 초기화하고 root= 옵션에 정의된 root fs를 마운트하고 init 프로세스를 실행함. 또는 init= 으로 지정된 실행가능한 파일을 실행함.
- init 프로세스는 보통 "/sbin/init"에 위치하며 통상적으로 "/etc/inittab"에서 명시하는 sysinit 항목을 실행
예) si::sysinit:/sbin/rc sysinit <= 이 경우 "/sbin/rc sysinit"이 실행된다고 보면 됩니다.
보통 Boot splash 는 여기서 지정한 실행파일에서 처리하게 됩니다. - sysinit에서 지정한 실행파일(보통은 스크립트)에서 "/etc/init.d/S??*" (여기부터는 반드시 이런 과정이 아니고 배포판마다 차이가 있는 부분입니다.) 을 차례대로 실행합니다.
- sysinit 에서 지정한 실행이 끝나면 respawn 항목으로 지정한 터미날을 생성하게 되며 보통은 getty 같은 명령을 실행하게 합니다. 이렇게 되면 터미날(콘솔을 이어받은 터미날)이 만들어집니다.
- getty 는 login명령을 실행하여 사용자로 하여금 login을 요구받게 됩니다.
응용) getty 대신에 "/bin/sh" 로 바꾸면 로그인과정이 생략되고 바로 쉘로 진입할수 있겠죠?
- login에 필요한 정보가 합당하면 로그인이 성공하고 /sbin/sh 가 실행됩니다. 이로서 사용자가 사용하게 됩니다.