커널 컴파일관련된 내용은 구글링하면 많이 나오지만 개인적으로 팁등과 함께 정리해본다. 먼저 기존 리눅스가 있을때 새로운 커널소스를 받아 컴파일하고 설치하면 재부팅시 부트로더가 기존커널과 새로운 커널중 어떤것으로 부팅할지 선택할 수 있게된다.


1. kernel.org 에서 원하는 커널소스버전 다운로드



2. make menuconfig 로 커널컴파일 옵션을 설정한뒤에 make 

참고로 make 시 ARCH=x86 등 컴파일시간을 줄이기위해 원하는 ARCH 옵션만 주는게 좋음

이 과정이 징그럽게 오래걸림... 특히 drivers 밑에 있는것들을 모두 컴파일하는데 엄청난 시간이 소요되는데, 그부분을 선택적으로 컴파일하는 요령이 있는지 잘 모르겠음


3. make modules_install install

ko 파일들을 모두 인스톨하고 마지막에 생성된 커널이미지(bzImage) 를 알아서 /boot 에 넣어주고 grub.cfg 자동설정해주고 초기 램디스크까지 모두 자동으로 설정해줌.


4. update-grub

grub 부트로더 설정을 업데이트해줘서 새로 컴파일한 커널과 기존커널을 모두 인식하게 해줌.


참고로 initrd 는 그대로 두고 vmlinuz 만 다른곳에서 컴파일한 결과물로 바꿔치기하고 재부팅을 해보면 바꿔친 커널이미지로 부팅이 되긴 된다.  하지만 busybox 쉘로만 부팅되고 GUI OS 가 뜨지를 않는다.  원인은 아무래도 바꿔친 커널 이미지가 다른 ko 드라이버들과 같은 컴파일 옵션과 같은 컴파일러로 컴파일되지 않았기때문에 호환되지 않는것 때문인것 같다.



'Programming' 카테고리의 다른 글

IDA/gdb Debugging After Attaching  (0) 2014.03.03
Building KVM from source in Ubuntu  (1) 2014.02.13
Linux Kernel compile and update  (0) 2014.01.07
QEMU Internals  (0) 2014.01.02
Secret of SET_FS and KERNEL_DS in Linux Kernel  (0) 2013.12.31
Apache2 SSL Configuration  (0) 2013.11.28
Posted by daehee87

댓글을 달아 주세요