ABOUT ME

금융을 하다 어쩌다보니 system architect가 되어 하루하루 고군분투하는 중. 매일이 공부의 연속이라 아주 조금씩이라도 기록해보고자 합니다.

Today
Yesterday
Total
  • 리눅스 커널 빌드 과정과 커널-모듈의 차이
    CS 공부/기본CS 2024. 11. 18. 23:22

    Linux 운영체제의 핵심 부분인 커널은 하드웨어와 소프트웨어 사이에서 중요한 인터페이스 역할을 합니다. 이번 글에서는 리눅스 커널을 빌드하는 과정과, 커널의 확장 기능인 모듈에 대해 알아보겠습니다.


    1. 커널 빌드 과정

    리눅스 커널을 빌드할 때는 커널 설정부터 빌드, 설치까지의 여러 단계를 거치게 됩니다. 아래는 주요 명령어와 각 명령어의 역할을 설명한 과정입니다.

    • make menuconfig: 커널 빌드 설정 파일을 만드는 명령어로, 사용자 인터페이스를 통해 커널에서 사용할 기능과 모듈을 설정합니다. 이 설정은 .config 파일에 저장되며, 이후 빌드 과정에서 적용됩니다.
    • make -j16: 커널을 빌드하는 명령어로, -j16 옵션을 통해 동시에 16개의 프로세스를 생성하여 빌드를 병렬로 진행하게 합니다. 이를 통해 빌드 속도를 향상시킬 수 있습니다. 저는 프로세스를 16개로 지정하였지만 본인의 환경에 맞게 변경하여 적용하면 됩니다.
    • make modules_install: 빌드된 커널 모듈을 시스템에 설치하는 명령어로, 커널에서 선택한 모듈들이 적절한 디렉터리에 배치됩니다.
    • sudo make install: 커널 이미지를 빌드하고, 이를 시스템의 /boot 디렉터리에 설치하는 과정입니다. 이 명령어는 또한 initrd 이미지시스템 맵 파일을 생성하여, 빌드된 커널이 시스템에서 부팅 가능하도록 준비합니다.

    이 과정은 커널 빌드를 시작하기 위한 필수적인 단계이며, 각 명령어는 커널의 기능과 모듈을 포함한 설치 환경을 완성하는 역할을 합니다.


    2. 커널과 모듈의 차이

    커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 사이에서 데이터와 명령어가 원활하게 전달되도록 합니다. 그러나 모든 하드웨어와 기능을 커널에 직접 포함하는 것은 비효율적일 수 있습니다. 모듈은 커널의 이 문제를 해결하기 위한 확장 기능으로, 필요에 따라 동적으로 로드하거나 언로드할 수 있는 바이너리 파일입니다.

    • 리눅스 커널 모듈: 커널 모듈은 C 컴파일러로 작성된 오브젝트 파일로, .ko 형식으로 생성되어 /lib/modules/커널버전/kernel 디렉터리에 위치합니다. 모듈은 커널의 일부이지만, 커널의 핵심 기능이 아닌 특정 하드웨어 지원 등과 같은 부가 기능을 제공합니다. 예를 들어, 특정 하드웨어 장치를 지원하기 위한 모듈이 있다면, 해당 장치를 사용하지 않는 시스템에서는 이 모듈을 로드할 필요가 없습니다. 이처럼 모듈은 커널의 유연성을 높이는 중요한 요소입니다.

    커널과 모듈의 역할 비교:

    • 커널: 운영 체제의 핵심 부분으로, 하드웨어와 소프트웨어 사이의 중요한 인터페이스 역할을 수행합니다.
    • 모듈: 커널의 부가 기능을 담당하며, 필요에 따라 동적으로 로드 및 언로드할 수 있는 파일입니다. 이로 인해 커널의 기능을 효율적으로 확장할 수 있습니다.

    커널 빌드 과정에서 선택한 설정에 따라 다양한 커널 모듈이 생성되며, make modules_install 명령어를 통해 시스템에 적절히 설치됩니다. 이렇게 커널과 모듈이 상호작용하여, 리눅스 시스템은 유연하고 확장 가능한 구조를 갖추게 됩니다.


    3. 관련 어휘

    커널 빌드 과정에서 생성되는 Initrd와 시스템 맵은 리눅스 커널의 부팅 및 디버깅 과정에서 중요한 역할을 합니다.

     

    Initrd (Initial RAM Disk): Initrd는 Initial RAM Disk의 약자로, 리눅스 시스템이 부팅할 때 사용하는 임시 파일 시스템입니다. 이 임시 파일 시스템은 커널이 메인 파일 시스템을 마운트하기 전까지 필요한 초기 파일과 드라이버를 포함하고 있습니다. Initrd는 시스템이 부팅되는 초기 단계에서 루트 파일 시스템을 마운트할 수 있도록 필요한 드라이버와 파일들을 제공합니다. 부팅이 완료되면, Initrd는 메모리에서 제거되고, 시스템은 메인 루트 파일 시스템으로 전환됩니다.

    시스템 맵 (System Map): 시스템 맵은 커널 내 중요한 심볼 정보가 포함된 파일입니다. 커널이 빌드될 때 생성되며, 커널 함수와 변수들의 메모리 주소가 나열되어 있습니다. 시스템 맵은 커널 디버깅과 오류 분석에 사용되며, 커널 패닉이나 오류가 발생했을 때 특정 주소가 어떤 함수나 변수에 해당하는지 파악하는 데 유용합니다. 커널 빌드 시 생성된 시스템 맵 파일은 주로 /boot 디렉터리에 저장됩니다.


    이 글에서는 리눅스 커널을 빌드하는 과정과, 커널과 모듈의 차이를 통해 커널의 유연성을 이해했습니다. 모듈을 통해 커널의 기능을 효율적으로 확장함으로써 리눅스 시스템의 다양한 환경에 대응할 수 있게 됩니다.

Designed by Tistory.