학습자료(~2017)/리눅스

커널 컴파일

단세포소년 2013. 11. 18. 20:37
반응형

참고 : 

http://www.thegeekstuff.com/2013/06/compile-linux-kernel/

http://mintnlatte.tistory.com/314

http://bbanghee.wordpress.com/2010/08/05/make%EC%9D%98-j-%EC%98%B5%EC%85%98%EC%9D%80-%EC%8B%A4%EC%A0%9C%EB%A1%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%EA%B0%80/ - make j 옵션 설명



1. 우분투 - 커널 deb 패키지 만들어 설치하기


커널을 그냥 컴파일하여 설치하는 방식이 아닌 패키지를 만들어 설치하는 방법으로 커널 패키지를 생성시키면 여러대의 우분투의 커널을 업그레이드하고 싶을 때 따로따로 컴파일 필요없이 패키지를 만들어 쉽게 설치할 수 있다.

하지만 이 방법은 컴파일에 꽤 오랜시간이 걸린다.



1.1 필요 패키지 설치

$ sudo apt-get install build-essential libncurses5-dev bin86 kernel-package




1.2 커널 소스 다운로드

$ sudo apt-get install linux-source  # 현재 설치된 버전의 커널 소스를 다운받는다.

혹은


https://www.kernel.org/ 사이트에서 원하는 커널 버전을 다운로드한다.

예를 들어

$ sudo wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.xz 

받은 커널 파일은 압출을 푼다.

$ sudo tar linux-3.10.tar.xz


커널 소스는 /usr/src 에 위치시키는 것이 좋다.



1.3 컴파일 설정 파일 가져오기

모든 설정을 하기는 힘들다. 따라서 이미 설치된 커널의 설정파일을 가져다가 쓴다.

/boot 폴더에 config 로 시작하는 파일이 커널 설정 파일이며 이를 커널 소스 디렉토리에 넣는다.

$ sudo cp /boot/config-`uname -r` /usr/src/linux-3.x.x/.config


커널 소스 디렉토리에서 아래의 명령을 수행하고 load 를 선택하고 .config 를 선택하여 설정파일을 로드한다.

$ sudo make menuconfig

혹은


$ sudo make oldconfig 

oldconfig 는 현재 설치된 커널 버전의 설정 파일을 자동으로 가져온다. 위의 sudo cp 명령을 자동으로 해준다고 생각하면된다.



1.4 컴파일 설정 바꾸기

$ sudo make menuconfig 

혹은 

$ sudo vi .config

를 통해 설치할 모듈을 선택한다.

(따로 포함시킬 모듈이 없다면  설정은 굳이 바꾸지 않아도 된다.)




1.5 커널을 컴파일하고 패키지화 한다.

$ sudo make-kpkg clean

$ sudo make-kpkg --initrd kernel_image kernel_headers kernel_source modules_image


make-kpkg 시 target 리스트는 $ sudo make-kpkg --target 명령을 수행하면 리스트가 출력된다.




1.6 커널 패키지 설치

커널이 정상적으로 컴파일 되면 linux-xxxxx.deb , linux-headers-xxxxx.deb 가 생성되고 이 패키지를 설치하면 커널이 업그레이드된다.

$ sudo dpkg -i *.deb

$ sudo reboot






2. 일반적인 커널 컴파일




1.1 커널 소스 다운로드

$ sudo apt-get install linux-source  # 현재 설치된 버전의 커널 소스를 다운받는다.

혹은


https://www.kernel.org/ 사이트에서 원하는 커널 버전을 다운로드한다.

예를 들어

$ sudo wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.xz 

받은 커널 파일은 압출을 푼다.

$ sudo tar linux-3.10.tar.xz


커널 소스는 /usr/src 에 위치시키는 것이 좋다.




1.2 컴파일 설정 파일 가져오기

모든 설정을 하기는 힘들다. 따라서 이미 설치된 커널의 설정파일을 가져다가 쓴다.

/boot 폴더에 config 로 시작하는 파일이 커널 설정 파일이며 이를 커널 소스 디렉토리에 넣는다.

$ sudo cp /boot/config-`uname -r` /usr/src/linux-3.x.x/.config


커널 소스 디렉토리에서 아래의 명령을 수행하고 load 를 선택하고 .config 를 선택하여 설정파일을 로드한다.

$ sudo make menuconfig

혹은


$ sudo make oldconfig 

oldconfig 는 현재 설치된 커널 버전의 설정 파일을 자동으로 가져온다. 위의 sudo cp 명령을 자동으로 해준다고 생각하면된다.



1.3 컴파일 설정 바꾸기

$ sudo make menuconfig 

혹은 

$ sudo vi .config

를 통해 설치할 모듈을 선택한다.

(따로 포함시킬 모듈이 없다면  설정은 굳이 바꾸지 않아도 된다.)



1.4 커널 컴파일 하기

$ sudo make  
#컴파일 속도를 향상시키기 위해서 sudo make -j8 옵션을 주면 된다. -j 옵션은 주어진 개수만큼 동시에 빌드를 수행한다.
자세한 정보는 위 참조를 확인하라.

$ sudo make modules

$ sudo make modules_install

$ sudo make install 

sudo make install 시 vmlinuz-x.x.x , System.map-x.x.x , initrd.img-x.x.x , config-x.x.x 파일이 /boot 에 복사되면 grub.cfg 파일이 자동으로 갱신된다. 따라서 grub.cfg 를 수동으로 수정하지 않아도 된다.

$ sudo reboot







3. 우분투 커널을 패키지로 쉽게 설치하기


# ubuntu kernel 을 패키지로 설치하는 방법도 있다.

http://kernel.ubuntu.com/~kernel-ppa/mainline/  여기가서 원하는 커널 버전을 받는다.

linux-header-..._all.deb

linux-headers-..._i386(amd64).deb

linux-image-..._i386(amd64).deb

32bit면 i386, 64bit면 amd 64 받으면 된다. 위의 3개의 패키지를 다 받아야 한다.




$ sudo dpkg -i linux-header-..._all.deb

$ sudo dpkg -i linux-headers-..._amd64.deb

$ sudo dpkg -i linux-image-..._amd64.dev



3개의 패키지를 다 설치한다. 귀찮으면 sudo dpkg -i linux* 

설치후 재부팅한다.

$ sudo reboot 



재부팅후 kernel 버전 확인 한다.

$ uname -a



반응형