안녕하세요.


제 블로그에 가장 많이 유입되는 포스팅 중 하나가 리눅스 커널 컴파일 (http://harryp.tistory.com/9) 관련 포스팅 입니다.


제가 대학원 들어가서 블로그를 시작 했을 때 거의 처음 작성했던 글이었는데요.


시간이 상당히 많이 지나 나름 최신 우분투 버전에서 다시 진행해봤습니다.


OS는 우분투 18.04이고, Default 커널에서 4.20 커널로 업데이트 했습니다.


(이전 포스팅과 중복되는 내용이 있습니다. 필요 내용만 골라서 작성했으니 햇갈리는 부분이 있으면 이전 포스팅을 참조해주세요.)



커널 컴파일 전에 커널에 대해서 알아보도록 하겠습니다.


커널이란, 운영체제에서 시스템의 제어 등을 하는 프로그램을 말합니다.


컴퓨터를 부팅 하면 자동으로 실행되어 메모리에 올라가게 됩니다.


이 커널은 수시로 업그레드, 업데이트가 됩니다.


새로운 커널의 소스는 http://kernel.org 에서 다운로드 받으실 수 있구요.


이 사이트에서 받은 소스를 내 컴퓨터에 설치할 수 있게 만드는 과정을 커널 컴파일 이라고 합니다.

 

커널은 여러 사용자(컴퓨터)와의 원활한 호환을 위해 다양한 정보를 담고 있습니다.


때문에 필요한 정보보다는 불필요한 정보가 더 많이 담겨있게 되죠.


능숙한 사용자, 개발자일수록 본인에게 필요한 것만 설정하여 더 최적화 된 커널을 빌드할 수 있게 됩니다.


저 역시 능숙한 개발자가 아니기 때문에…


이 글에서는 커널 판 올림을 위한 커널 컴파일만을 다루도록 하겠습니다.



1. 현재 커널 버전 확인


현재 커널 버전을 확인은 다음 명령어를 통해 할 수 있습니다.


$ uname -r

 

이렇게 하면 현재 커널의 버전을 확인할 수 있습니다.




제 PC의 커널엔 우분투 18.04의 Default 커널인 4.15.0-36-generic이 설치되어 있습니다.



2. 커널 소스 다운로드




커널 소스는 http://kernel.org 에서 받으실 수 있습니다.


제가 이 글을 쓰는 시점에서의 최신 커널 버전은 4.20.2 네요.


원하시는 버전의 커널 소스를 다운받으시면 됩니다.



3. 필요 패키지 설치


커널 컴파일을 하는데 필요한 패키지가 있습니다.


다음의 명령어를 통해 설치하시면 됩니다.


$ sudo apt-get update

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

 


4. 다운로드 받은 커널 소스 이동 및 압축 해제


다운로드 받은 커널 소스를 '/usr/src/' 디렉토리로 이동시켜 줍니다.


그리고 해당 디렉토리로 이동하여 압축을 풀어줍니다.


커널 소스는 tar.xz 로 압축되있어서 xz와 tar로 두번 압축을 풀어줘야 합니다.


xz로 압축을 풀면 tar로 압축이 풀립니다.


압축이 풀리면 해당 디렉토리로 이동하셔서 작업하시면 됩니다.


$ sudo mv 커널소스파일명 /usr/src/

$ cd /usr/src

$ sudo xz -d 커널소스파일명.tar.xz
$ sudo tar xf 커널소스파일명.tar
$ cd 커널소스디렉토리



5. 현재 커널의 config 파일 복사


현재 커널의 configuration 파일을 복사 합니다.


현재 커널 설정을 그대로 가져갈 경우 별다른 수정 없이 사용할 수 있습니다.


먼저 현재 커널의 버전을 'uname -a' 명령어로 확인합니다.


그리고 현재 커널의 configuration 파일을 복사합니다.


파일 경로 및 파일 명은


/boot/config-현재커널명


입니다.


커널 소스 디렉토리에 '.config' 파일로 복사해 줍니다.


# sudo cp /boot/config-현재커널명 ./.config


본 포스팅 같은 경우엔 4.15.0-36-generic 커널을 사용하고 있으므로


# sudo cp /boot/config-4.15.0-36-generic ./.config


명령어를 사용하였습니다.


(원본 파일명을 치실 때 'tab' 키를 활용하시면 좀 더 편하게 사용하실 수 있습니다.



6. make menuconfig


커널 소스 디렉토리로 이동한 후엔 현재 내 컴퓨터에 맞는 설정을 해주어야 합니다.


menuconfig를 통해 빌드 할 커널의 설정이 가능합니다.


이 포스팅에선 이전 단계에서 복사한 config 파일을 불러와 사용 할 예정입니다.


$ sudo make menuconfig



제대로 작동 된다면 다음의 화면을 만날 수 있습니다.





이전 단계에 복사한 .config 파일을 불러옵니다.


Load 클릭 후 .config 파일을 불러옵니다.






현재 커널의 설정을 불러 왔습니다.


추가로 설정할 내용이 있으시면 설정하시고,


아니면 save를 누르시고 .config 로 저장하시면 됩니다.




저장하신 후 Exit로 나가시면 됩니다.



7. 커널 컴파일 (커널 설치 이미지 생성)


이제 커널 컴파일을 하여 설치 이미지를 생성하면 됩니다.


먼저 빠른 빌드를 위해 CPU 코어 개수를 확인합니다.


다음의 명령어로 코어 개수를 확인해줍니다.


 $ grep -c processor /proc/cpuinfo 


해당 명령어를 입력하시면 코어 개수가 출력 됩니다. (제 PC의 코어 개수는 4 네요.)




이제 다음의 명령어로 커널 컴파일을 해주시면 됩니다.



$ sudo make-kpkg --J # --initrd --revision=1.0 kernel_image


-J# 옵션은 멀티 코어 옵션으로, #에 코어 개수를 입력해주시면 됩니다. (저의 경우는 --J 4) 코어 개수보다 더 큰 수를 입력하면 컴파일 속도가 느려 진다고 합니다.


추 후에 같은 버전의 커널을 여러 번 빌드 하게 될 경우 '--revision=' 뒤에 숫자를 올려주시면 됩니다.

'--revision=1.0' '--revision=2.0' 이런 식으로요. 단, 숫자만 입력하셔야 합니다.


커널 컴파일 작업은 상당히 오래 걸리는 작업 입니다.


PC 사양에 따라 수십분에서 많게는 수 시간 걸릴 수도 있습니다.


커널 컴파일 중에는 다음과 같은 복잡한 화면을 보실 수 있습니다.





커널 컴파일이 완료되면 다음 화면을 보실 수 있습니다.





커널 컴파일이 완료되면 소스 디렉토리의 이전 디렉토리 디렉토리에 커널 설치 이미지 파일이 생성됩니다. (본 예시에서는 /usr/src)


커널 이미지는 .deb 파일 입니다.





8. 커널 설치


커널 이미지가 있는 디렉토리(/usr/src)에서 다음 명령어를 입력해 주시면 됩니다.


$ sudo dpkg -i 커널이미지파일명





설치 후 재부팅해 주시면 바뀐 커널로 부팅 되는 걸 확인 하실 수 있습니다.

Posted by 해리팍

댓글을 달아주세요

  1. asd
    2019.09.06 10:43
    댓글 주소 수정/삭제 댓글
    블로그에 있는거 똑같이 따라하고 컴파일 까지 완료를 했는데
    컴파일이 끝나고
    drivers/scsi/csiostor/csiostor.o: final close failed: 장치에 남은 공간이 없음
    scripts/Makefile.build:461: recipe for target 'drivers/scsi/csiostor/csiostor.o' failed
    make[4]: *** [drivers/scsi/csiostor/csiostor.o] Error 1
    scripts/Makefile.build:489: recipe for target 'drivers/scsi/csiostor' failed
    make[3]: *** [drivers/scsi/csiostor] Error 2
    scripts/Makefile.build:489: recipe for target 'drivers/scsi' failed
    make[2]: *** [drivers/scsi] Error 2
    Makefile:1073: recipe for target 'drivers' failed
    make[1]: *** [drivers] Error 2
    make[1]: 디렉터리 '/usr/src/linux-5.2.11' 나감
    debian/ruleset/targets/common.mk:295: recipe for target 'debian/stamp/build/kernel' failed
    make: *** [debian/stamp/build/kernel] Error 2

    이렇게 끝나고 파일 확인해보니깐 deb파일도 없어졌습니다. 해결해주세요 ㅠㅜ
  2. asd
    2019.09.06 10:43
    댓글 주소 수정/삭제 댓글
    블로그에 있는거 똑같이 따라하고 컴파일 까지 완료를 했는데
    컴파일이 끝나고
    drivers/scsi/csiostor/csiostor.o: final close failed: 장치에 남은 공간이 없음
    scripts/Makefile.build:461: recipe for target 'drivers/scsi/csiostor/csiostor.o' failed
    make[4]: *** [drivers/scsi/csiostor/csiostor.o] Error 1
    scripts/Makefile.build:489: recipe for target 'drivers/scsi/csiostor' failed
    make[3]: *** [drivers/scsi/csiostor] Error 2
    scripts/Makefile.build:489: recipe for target 'drivers/scsi' failed
    make[2]: *** [drivers/scsi] Error 2
    Makefile:1073: recipe for target 'drivers' failed
    make[1]: *** [drivers] Error 2
    make[1]: 디렉터리 '/usr/src/linux-5.2.11' 나감
    debian/ruleset/targets/common.mk:295: recipe for target 'debian/stamp/build/kernel' failed
    make: *** [debian/stamp/build/kernel] Error 2

    이렇게 끝나고 파일 확인해보니깐 deb파일도 없어졌습니다. 해결해주세요 ㅠㅜ
    • 2019.09.06 11:54 신고
      댓글 주소 수정/삭제
      장치에 남은 공간이 없다고 되있네요...
  3. asd
    2019.09.09 10:21
    댓글 주소 수정/삭제 댓글
    장치 공간을 늘려야하나요?ㅠㅜ 어떻게 해야될까요
    • 2019.09.09 10:36 신고
      댓글 주소 수정/삭제
      장치 공간을 늘려야죠.
    • asd
      2019.09.10 10:51
      댓글 주소 수정/삭제
      장치공간은 초기설정빼고 못늘리지 않나요?
    • 2019.09.10 10:53 신고
      댓글 주소 수정/삭제
      추가로 스토리지를 달아서 마운트 시켜줘야 될 것 같네요.

<< PREV : [1] : [2] : [3] : [4] : [5] : [6] : [7] : [8] : [···] : [66] : NEXT >>

BLOG main image

Chanhyun Park (해리팍)
Software Engineer
PADI IDC Staff Instructor

Contact Info.
parkch0708@hanmail.net
chanhyun0708@gmail.com
chanhyun.park@sk.com
Kakao Talk : parkch0708

카테고리

All (792)
Park's Life (121)
Computer (194)
IT Info. (134)
Scuba Diving (123)
Traveling (161)
자격증 (18)
Pokemon Go (37)
etc... (4)