안경잡이개발자

728x90
반응형

※ 리눅스(Linux) 커널 소스코드 다운로드 ※

 

우분투는 전형적인 데비안 리눅스 기반의 운영체제다. 가장 먼저 리눅스 커널 소스코드를 다운로드받는다. 버전별로 리눅스 커널 소스코드를 업로드해 놓은 사이트가 존재하는데, 아래 사이트에 접속하여 자신에게 필요한 버전의 소스코드를 받을 수 있다.

 

  ▶ 전체 커널 소스코드 목록: mirrors.edge.kernel.org/pub/linux/kernel/

 

필자의 경우 리눅스 5.8.7 커널 이미지를 다운로드받았다. 간단히 wget 명령어를 이용해 다운로드할 수 있다.

 

!wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.8.7.tar.gz

 

다운로드를 완료하면 .tar 확장자의 압축 파일이 생긴다. 다음의 명령을 이용하여 압축을 해제하자.

 

tar xvf linux-5.8.7.tar.gz

 

이후에 다음과 같이 리눅스(Linux) 소스코드 폴더로 이동하면 된다. 여기에 전체 커널 코드가 있다.

 

 

※ 환경설정(configuration) 파일 준비하기 ※


커널 디렉터리 내부에 들어온 뒤에는 가장 먼저 .config 파일을 생성해야 한다. 이는 커널 환경설정 파일이다. 이때 간단히 현재 자신의 커널 설정을 그대로 옮겨올 수 있다. 만약 컴파일을 진행하는 컴퓨터의 커널 설정을 그대로 적용하고자 한다면 마음과 같은 형태의 코드를 사용한다.

 

sudo cp /boot/config-{커널 버전} ./.config

 

필자는 아래와 같이 명령어를 입력하여 실행했다.

 

 

※ 커널 컴파일(Compile) 준비하기 ※

 

이어서 리눅스 커널을 컴파일하기 위해 필요한 패키지들을 설치한다. 아래 명령어는 필수 패키지 설치를 위해 일반적으로 많이 사용되는 명령어다. 가능하다면 필요하지 않은 패키지는 설치하지 않고, 패키지가 없다는 오류 메시지가 나오면 그때마다 패키지를 설치하는 방법으로 진행해도 된다.

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

 

※ 커널 컴파일(Compile) ※

 

컴파일 및 빌드는 생각보다 간단하다. 커널 소스코드를 수정한 뒤에 make를 입력하여 컴파일을 진행하면 된다. 이때 컴파일 속도를 빠르게 만드는 옵션을 사용할 수 있다. 이를 위해 가장 먼저 nproc 명령어를 이용하여 컴파일을 수행하는 컴퓨터의 프로세서(processor) 개수를 구하자.

 

 

필자의 경우 8코어 CPU를 사용하고 있기 때문에, -j8 옵션을 사용하겠다. 더불어 데비안 패키지(Debian Package) 형태로 빌드를 진행하겠다. 참고로 데비안 패키지는 .deb 확장자를 가지며, 비유하자면 윈도우에서의 .exe나 .msi와 같은 확장자를 가지는 프로그램 설치용 소프트웨어와 유사한 기능을 제공한다.

 

make -j8 bindeb-pkg

 

커널 컴파일을 진행해보자. 일반적인 PC에서 컴파일 명령어를 입력하면 1시간 이상의 시간이 소요될 수 있다. 대신에 한 번 컴파일했다면 그다음부터는 소스코드를 조금씩 수정해도 비교적 금방 컴파일이 완료될 것이다.

 

 

다음의 사진과 같이 매우 많은 소스코드를 컴파일하게 되는 것을 알 수 있다.

 

 

컴파일이 완료되고 .deb 패키지들이 생겼다.

 

 

대략 다음과 같은 형태의 데비안 패키지들을 얻었다면 성공이다.

 

linux-headers-5.8.7_5.8.7-4_amd64.deb
linux-image-5.8.7_5.8.7-4_amd64.deb
linux-libc-dev_5.8.7-4_amd64.deb

 

※ 패키지 옮기기 ※

 

필자의 경우에는 컴파일을 수행한 컴퓨터가 아닌 다른 컴퓨터의 커널을 업데이트할 것이다. 따라서 일단 데비안 패키지를 커널을 업데이트할 컴퓨터의 저장장치로 옮기면 된다.

 

그러므로 일단 커널을 업데이트할 저장장치를 연결한 뒤에 마운트를 진행한다.

 

mkdir -p mnt/fat32
mkdir -p mnt/ext4
sudo mount {블록 디바이스} mnt/fat32
sudo mount {블록 디바이스} mnt/ext4

 

 

이제 cp 명령어를 이용하여 .deb 파일을 옮긴다.

 

cp linux-headers-5.8.7_5.8.7-4_amd64.deb mnt/ext4/home/
cp linux-image-5.8.7_5.8.7-4_amd64.deb mnt/ext4/home/
cp linux-libc-dev_5.8.7-4_amd64.deb mnt/ext4/home/

 

패키지(package) 파일을 모두 옮겼다면 마운트를 해제하면 된다.

 

sync
sudo umount mnt/fat32
sudo umount mnt/ext4
rm -rf mnt/

 

 

※ 커널 업데이트 ※

 

모든 .deb 파일을 옮겼다면, 커널을 업데이트할 컴퓨터를 실행한 뒤에 dpkg 명령어를 이용하여 패키지를 설치한다.

 

sudo dpkg -i linux-headers-5.8.7_5.8.7-4_amd64.deb
sudo dpkg -i linux-image-5.8.7_5.8.7-4_amd64.deb
sudo dpkg -i linux-libc-dev_5.8.7-4_amd64.deb

 

설치가 완료되었다면 재부팅한다.

 

sudo reboot

 

 

※ 참고사항 ※

 

커널이 정상적으로 업데이트되었는지 확인하기 위해 커널 정보를 출력할 수 있다.

 

cat /proc/version

 

728x90
반응형