본문 바로가기

대학생활

[Linux] Kernel Compiling 새 커널을 입혀보자!!

예전에 8시간 걸려서 커널 컴파일을 했던 기억이 있는데.. 이번에 다시 (해야)할 기회가 생겼다.

하다가 너무 고생해서 (다시는 고생 안하도록) 성공담을 써보려 합니다.. 흑흑😭

 

커널 파일 다운로드 및 작업 공간 정리(Before Compiling)

 

일단 kernel archive로부터 받고 싶은 버전의 커널을 다운 받는다.

(검색창에  kernel archive 치고 들어가면 됨 ㅎㅎ)

 

 

저는 최신 판 6.0.6을 다운 받아서 컴파일해보겠습니다

 

"도전"

 

일단.. 현재 Ubuntu는 20.04 버전에.. 커널은 5.15.52 버전입니다..

 

 

그 다음에 Download 폴더에서 다운받은 커널 압축파일 열어주시고..

 

tar -xvf <압축 커널 파일 이름>

 

/usr/src에서 작업을 진행하기 위한 조치를 취해준다..(왠지는 모름.. 기존 버전의 커널 소스도 여기에 있긴 하네요)

 

sudo mv <kernel dircectory name> usr/src/

 

mkdir 안해도 되는 거 같아요.. 괜히 깊이만 깊어짐;;

 

커널 컴파일링에 필요한 밑작업(Before Compiling2)

 

그 다음에.. 적당히 필요한 것들을 설치해주면 된다.

 

 apt-get install make gcc kernel-package libncurses5-dev bison flex libssl-dev libelf-dev dwarves zstd

 

🛑참고로 Ubuntu 22.04 버전에서는 kernel-package가 설치가 안 됨..(다시.. 다시 깔죠 ㅎㅎ..)🛑

 

 

설치 잘~ 하고 있는데 이거 뜨면 2번째 keep~~에 놔두고 엔터 누르시면 됩니당~

 

다~ 깔아 놨으니 작업 공간으로 이동해볼까요~

cd /usr/src/<your kernel directory>

컴파일을 위해서는 설정파일(config file)이 필요한데, 다행히 구 버전의 것을 "복사"해서 사용할 수 있다.

cp /boot/<구버전의 config file> ./.config
나 구 버전 설정파일 어디 있는지 몰라.

 

하시는 분들은 복사 전에 먼저 찾아볼 수 있습니다.

 

ls /boot/

 

가서 config-로 시작하는 파일이 카피 대상 파일입니다.

 

복사했으니 이 설정 파일이 새 커널에 적용될 수 있도록 명령어를 실행한다.

 

make menuconfig

 

Load -> Ok -> Save -> Ok -> Exit -> Exit 

순서대로 눌러주면 됨.

 

이제.. 대망의 커널 컴파일링이 남았다..

'진지하게' 오래 걸리니까,, cpu 8개 코어로 돌리길 추천한다.

가상 환경 자체에 먼저 cpu 8개를 할당해 줘야하기에 가상환경을 종료하고 설정 들어가서 늘려주면 된다.

 

요기

 

커널 컴파일링(Kernel Compiling)

 

자.. 그럼.. 8기통으로 커널 컴파일링을..😯

 

※ 하기 전에!!

이미 존재하는 버전 때문에 오류가 발생할 수 있다.

 

make: *** [debian/rulset/targets/common.mk:301: debian/stamp/build/kernel] Error 2

이 자식 ㄹㅇ..

 

그래서 어떤 FLAG는 off 해줘야함

 

scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS

 

"OFF"

이제 찐으로 컴파일링 드가자~🤭

 

sudo make-kpkg -j8 --initrd --revision=1.0 kernel_image

 

...

(전 5시간 걸렸어요.. ㄹㅇ..)

...

그 다음엔 헤더도 컴파일 해준다(이건 금방 끝남)

 

sudo make-kpkg -j8 --initrd --revision=1.0 kernel_headers

 

오오오,,

 

그러면 위처럼 상위 폴더에 그 "결과물"이 나타난다.

 

결과물 적용

위치: /usr/src/ (컴파일 결과물이 있는 곳)

 

    cd	../
    dpkg -i <image deb파일>
    dpkg -i <header deb파일>
    reboot

 

※ 만약 이때 

dpkg frontend is locked by another process

오류가 나타난다면!!!!!😱😱

.

.

.

기다리면 됩니다 ㅎ. shell은 끝난 것처럼 보여도 다른 process는 일 중이래요~~

 

 

재부팅 되고(기다려야 함) 커널 버전을 확인해 보면..

 

 

잘됐네요 ㅎ

 

"끝"