리눅스 커널 빌드 및 설치

이찬영·2021년 8월 1일
1

리눅스

목록 보기
1/3

리눅스 커널 다운로드

사전 준비

sudo apt-get install build-essential libncurses5 libncurses5-dev bin86 kernel-package libssl-dev bison flex libelf-dev

위에 있는 모든 패키지를 설치해준다.
진행하면서 설치되지 않은 패키지로 에러가 발생할 수가 있다. 에러를 확인하면서 추가적으로 설치해준다.

리눅스 커널 4.19.60 버전을 기준으로 하며 컴파일시 gcc8버전을 사용해야한다.

커널 컴파일

https://mirrors.edge.kernel.org/pub/linux/kernel

wget (커널 파일 주소)
링크에서 원하는 리눅스 커널 버전의 다운로드 경로를 찾은 후 wget 명령어를 통해 다운로드한다.

  1. 커널 디렉토리 변경
    mv 리눅스 커널 파일 /user/src

  2. 압축 해제
    cd /user/src
    tar -xvzf 리눅스 커널 파일

  3. 커널 버전 설정
    cd 리눅스 커널 폴더
    vim Makefile
    EXTRAVERSION=버전명

다운로드 받은 커널 파일을 시스템에 적용

  1. 기존 커널 컴파일에 필요한 설정들을 제거
    make mrproper
    make clean

  2. 현재 커널 환경설정 복사
    cp /boot/config-uname -r ./.config

  3. 커널 구성
    make menuconfing
    Load → .config 확인 → ok → exit → yes

  4. 컴파일
    make -j`nproc`
    make modules -j`nproc`
    `nproc` 는 프로세스 수를 반환

커널 설치

  1. 커널 설치
    make modules_install -j`nproc`
    make install -j`nproc`

  2. 재부팅
    sudo reboot
    재부팅 후 아래 링크를 확인하여 리눅스 커널 변경
    리눅스 커널 변경 방법!!!

  3. 확인
    uname -r
    명령을 입력 후 원하는 커널이 설치 됐는지 확인

빌드 파일 따로 관리하는 방법

외부 폴더로 커널 컴파일 하기

커널 빌드를 하게 되면 현재 폴더 내에서 빌드 파일이 생성된다.
만약 빌드된 파일들을 따로 관리하고 싶으면 아래와 같은 쉘 스크립트를 작성하면 된다.
자료를 참고하고 수정한 스크립트이므로 각자 환경에 맞게 수정하여 쓰면 된다.

#!/bin/bash

rm -rf out build_log.txt

echo "configure build output path"

KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P )"

BUILD_LOG="$KERNEL_TOP_PATH/build_log.txt"

OUTPUT="$KERNEL_TOP_PATH/out"
echo "$OUTPUT"

mkdir $OUTPUT

echo "cd linux-4.*"
cd linux-4.19.60

echo "copy config"
cp /boot/config-`uname -r` ./.config

echo "set config"
make O=$OUTPUT menuconfig

echo "clen config"
make mrproper
make clean

echo "kernel build" 
make O=$OUTPUT -j8 2>&1 | tee $BUILD_LOG
make O=$OUTPUT modules -j8 2>&1 | tee $BUILD_LOG

make O=$OUTPUT menuconfig를 호출하여 OUTPUT경로로 .config 파일을 생성한다.

이후 커널 폴더에 있는 설정 파일들을 아래 명령어로 삭제 해준다.
make mrproper
make clean

마지막으로 OUTPUT 경로로 모듈을 빌드한다.
make O=$OUTPUT modules -j8

기존에는 환경 설정 파일을 삭제하고 설정 파일을 만들어 줬지만 빌드 파일을 외부로 뺄때는 위와 같은 순서를 지켜줘야한다. 이유에 대해선 각 명령어가 수행하는 동작을 찾아보도록.

외부로 컴파일된 커널 설치하기

#!/bin/bash

echo "configure build output path"

KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P )"

BUILD_LOG="$KERNEL_TOP_PATH/build_log.txt"

OUTPUT="$KERNEL_TOP_PATH/out"
echo "$OUTPUT"

echo "cd linux-4.*"
cd linux-4.19.60
make O=$OUTPUT modules_install -j4

cd $OUTPUT
make install

위 쉘스크립트를 실행하면 커널 파일을 설치할 수 있다.

참고 자료
Operating System Concepts 10판 2.9장
https://0902.tistory.com/15
디버깅을 통해 배우는 리눅스 커널의 구조와 원리 - 1

0개의 댓글