생각을 개발하자, 박진형

[CentOS] 기본 #6 - GRUB, 커널, 쉘, 모듈, 커널 컴파일 본문

OS/CentOS

[CentOS] 기본 #6 - GRUB, 커널, 쉘, 모듈, 커널 컴파일

imjinbro imjinbro 2017.07.14 02:22
[GRUB]
- GNU 프로젝트의 부트로더
=> GNU : 유닉스 형태의 운영체제로 프리 소프트웨어
=> 부트로더 : 컴퓨터를 부팅 시켰을 때 가장 먼저 돌아가는 프로그램, OS 커널을 로드하고 커널에 필요한 파라미터를 넘겨줌
    => 운영체제가 시동되기 전에 미리 실행되어 커널이 올바르게 시동되기위해 작업을 처리하고, 최종적으로 OS를 시동시킴
    => 부팅
    (1) BIOS POST 하드웨어 점검
    (2) 부팅 매체 검색
    (3) 부트로더 메모리 적재
    (4) 부트로더 .conf : 커널 선택(이미지) -
    (5) 커널 제어권 
    (6) 커널 초기화 및 초기 프로세스 실행

    => 커널 : 컴퓨터 시스템 제어(하드웨어) 역할, 메모리, 사운드카드, 키보드, 마우스 등 시스템 자원
        => 메모리 매니지먼트, IPC(프로세스 간 통신), 테스크 매니지먼트 등
        => 시스템 자원을 사용하는 것은 응용프로그램의 요청에 의해 사용됨 : 입출력 담당
        => 커널은 응용프로그램 관리 : 응용프로그램이 요구하는 시스템 자원, 실행 순서
        => 커널 + (컴파일러, 브라우저 등 응용 어플리케이션) : 리눅스 배포판(OS)
        => 쉘 : 명령어 기반 인터페이스, 커널과 상호작용할 수 있음, 사용자가 내린 명령어를 커널이 이해할 수 있도록 
            => bash : GNU 프로젝트의 유닉스 쉘

- grub 설정 파일 : /etc/default/grub
=> 설정 후 적용 : shell > grub2-mkconfig -o /boot/grub2/grub.cfg

- 부트로더에서 아이디, 비밀번호 입력을 해야 부팅이 될 수 있도록 수정할 수 있음
=> /etc/grub.d/00_header 수정 : 틀리면 커널 로드가 되지않도록
    => root 비밀번호를 모르더라도 root 비밀번호를 수정하지못하도록 하기위해 원천 봉쇄
(위 코드 생략)
cat << EOF
set superusers=“유저네임”
password 유저네임 비밀번호
EOF

=> 설정 후 적용 : shell > grub2-mkconfig -o /boot/grub2/grub.cfg



[모듈, 커널 컴파일]
- 커널 : 하드웨어를 제어하는 코드들
=> 모듈 : 잘 사용하지않는 하드웨어와 관련된 코드는 따로 모듈화해서 관리 : /lib/module/커널버젼/
     => 필요할 때마다 로딩

- 커널 컴파일(업그레이드)
(1) 현재 커널 버젼 확인 : shell > uname -r
(2) 커널 소스코드 다운로드(.tar.xz) : wget으로 서버로부터 설치, https://www.kernel.org/에서 링크 따오기
=> /usr/src 로 옮긴 후 작업하기

(3) 커널 소스 압축 풀기 : tar xfJ 옵션 설정
(4) 컴파일에 필요한 패키지 설치 : gcc, gcc-c++, qt, qt-devel
(5) 커컬 설정 초기화
(6) 커널 환경 설정 : 하드웨어 제어 및 응용프로그램 설정 관련 
(7) 이전 정보 삭제 : make clean
(8) 커널 컴파일 및 설치 : make ; make modules_install ; make install 
=> make : 파일 관리 유틸리티, 파일 간의 종속관계를 파악하여 Makefile에 적힌 대로 컴파일러에 명령 
     => makefile : 파일 간의 관계를 정의해둔 파일, make는 makefile을 토대로 컴파일을 함 
          
=> 앞선 과정을 통해서 커널 설정을 하고 컴파일을 해서 실행 : 메모리 적재 

(9) 부트 로더에서 커널 확인 : 재부팅


[참고자료]