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 명령어를 통해 다운로드한다.
커널 디렉토리 변경
mv 리눅스 커널 파일 /user/src
압축 해제
cd /user/src
tar -xvzf 리눅스 커널 파일
커널 버전 설정
cd 리눅스 커널 폴더
vim Makefile
EXTRAVERSION=버전명
다운로드 받은 커널 파일을 시스템에 적용
기존 커널 컴파일에 필요한 설정들을 제거
make mrproper
make clean
현재 커널 환경설정 복사
cp /boot/config-
uname -r ./.config
커널 구성
make menuconfing
Load → .config 확인 → ok → exit → yes
컴파일
make -j`nproc`
make modules -j`nproc`
`nproc`
는 프로세스 수를 반환
커널 설치
make modules_install -j`nproc`
make install -j`nproc`
재부팅
sudo reboot
재부팅 후 아래 링크를 확인하여 리눅스 커널 변경
리눅스 커널 변경 방법!!!
확인
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