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