2013년 1월 16일 수요일

커널 컴파일

커널 컴파일 순서 - 데비안 6 기준

데비안 6의 2.6.32 커널을 현재 가장 높은 stable 버전인 3.7.2로 바꿔보자.


최초에 gcc나 make, man-dev는 깔려 있던것으로 기억한다. 아님 말고.

man-dev의 경우 상당히 유용함.
옵션 모르면 man update-initramfs 이렇게.. 참 친절하게 알려줌.


apt-get install grub - 부트로더 grub설치

make clean - 컴파일 결과물이나 .config파일을 지우는듯 하다.


make oldconfig - 기존의 설정 가져오기. 기존 설정 파일은 /boot/에 위치

make xconfig - QT기반의 config
make gconfig - GTK기반의 config
make menuconfig - 콘솔 기반의 config

- menuconfig 사용시 필요 lib -
apt-get install build-essential
apt-get install libncurses5-dev

make config - 콘솔에서 옵션 하나 하나 설정

무튼 config를 하게 되면 커널 소스 루트폴더에 .config파일 생성
참고로 아키텍쳐마다 기본적인 config이 kernelsource/arch/x86/configs 에 있다. amd64의 경우 x86/configs에 같이 있음.

그런데 저거 그대로 쓰면 커널패닉 남


make - 커널 컴파일. -jn 옵션으로 스레드 수를 지정할 수 있다. 당연히 빨라진다. 자신의 CPU 코어 수의 20%를 더하면 된다던가..? ex) make -j5

make modules-install - 모듈을 설치한다. 안해주면 커널패닉이 픽 뜨고 모듈을 찾을 수 없다는 메세지가 뜬다.
make install - kernelsoure/arch/x86_64/bzImage 파일을 /boot에 복사해주는 역할을 하는건 알겠는데 추가로 어떤 일을 더 하는진 모르겠다. x86_64/bzImage의 원본은 x86/bzImage.

update-initramfs -c -k 3.7... - 램디스크 생성
update-grub - grub업데이트. 대부분의 커널 서적에서 lilo나 grub의 스크립트를 수정하라 하는데 아무리 찾아도 없다.  grub의 버전 업에 따라(정확히는 grub2인듯?)  해당 명령어가 생겼나보다.

init 6 - 재시작

모든 명령은 root 또는 sudo를 통해 실행해야 함.

참고 - http://www.ubuntu.or.kr/viewtopic.php?f=9&t=4543