reference:
- "리눅스 커널 내부구조" / 백승재, 최종무
- "Operating Systems: Three Easy Pieces" / Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
- https://ttend.tistory.com/61
- https://damduc.tistory.com/152
리눅스를 새로 깔거나 버전이 업그레이드된다면 새로운 커널을 컴파일 하고, 컴파일 된 커널로 재부팅하면 된다. 일반적인 소스 코드를 컴파일하여 실행 파일로 만드는 것과 동일하다. 단지 차이점이 있다면 커널이라는 실행 파일(bzImage 또는 zImage)은 실행 시(부팅) 항상 메모리에 상주하게 되지만, 일반적인 응용은 필요할 때 메모리에 적재된다. 또한 커널은 사용자 권한보다 강력한 커널 권한(kernel level)로 동작하고, 사용자 응용 프로그램은 사용자 권한(user level)로 동작한다.
커널을 만들 땐 많은 소스 파일들을 기반으로 컴파일하여야 하기 때문에 make 유틸리티를 사용한다.
: 새로 만들어질 리눅스 커널에게 현재 시스템에 존재하는 H/W 특성, 커널 구성 요소, 네트워크 특성 등의 정보를 알려주는 과정(초기화 과정). 이 과정은 매우 복잡하며 자신이 가지고 있는 시스템의 H/W 정보들에 대한 사전 지식이 필요.
커널 구성 단계에서 사용자가 선택한 사항은 include/linux/autoconf.h와 .config 파일에 저장되며 이 후 커널 컴파일 단계에서 사용됨.
커널 구성 수행 방법: make config, make menuconfig, make xconfig 등의 방법.
: 커널 소스 파일을 이용해 실행 가능한 커널을 만드는 과정. make bzImage나 make zImage 등의 명령으로 생성시킬 수 있다. 커널 2.6 이후부터는 그냥 make만 입력해도 된다. 컴파일이 끝나면 새로운 커널이 kernel/arch/$(ARCH)/boot/ 디렉터리에 생성된다.
: 커널 인스톨이란 "생성된 커널로 시스템이 부팅될 수 있도록 만드는 과정". 생성된 (1) 커널 이미지를 루트 파일시스템으로 복사, (2) 모듈 인스톨, 그리고 (3) 부트 로더(예를 들면 grub) 수정 등의 과정.
source: https://damduc.tistory.com/152
부트로더: 커널 이미지 작동
: 부트섹터(부트 드라이버의 첫번째 섹터)에 적재되어 있는 프로그램으로 리눅스의 경우 'GRUB'이다.
이 부트로더에 의해 선택된 OS의 커널 이미지가 작동하며 부팅을 시작한다. 커널 이미지는 압축되어 있는 상태이므로 swapper이라는 프로그램에 의해 압축이 풀어진다.
커널: 커널 메시지 출력
: 부트로더에 의해 OS 부팅이 시작되면 가장 먼저 커널이 동작된다. 부팅 시 시스템 내의 HW를 인식하여 이에 대한 정보를 보여주는데, 이를 커널 메시지라 한다.
루트 파일 시스템 마운트
: 커널은 루트 파일시스템을 마운트(mount)한다. 부트로더의 설정 파일(/boot/grub/menu.lst)에 있는
'root=' 옵션으로 명시된 파티션을 루트 파일 시스템으로 마운트 시킨다.
시스템 초기화 프로그램(init) 작동
: 루트 파일 시스템 마운트가 끝난 후 제일 먼저 시작되는 프로세스는 'init'이고, 프로세스 번호 1번을 갖는다.
시스템은 init 프로세스에 의해 초기화가 이루어지며 '파일 시스템 점검', '서비스 프로세스 관리', '가상 콘솔 접속 관리', '실행 레벨 관리' 등 사용자가 리눅스를 사용하기 위한 환경 조성을 위한 초기화 작업을 실행한다.