우분투 커널 컴파일(2,.6.28 기준)
먼저 http://kernel.org 에서 원하는 리눅스 커널을 내려받습니다. (이번 포스팅에서는 2.6.28을 기준으로 합니다.)
리눅스 커널 해커들의 불문율이랄까, 암묵적인 룰로써 커널 소스는 /usr/src/에 위치하게 한다고 합니다. 다운 받은 파일을 복사해서 /usr/src/에 위치시킨 후 압축을 풉니다.
#tar -xvzf linux2.6.28.tar.gz
압축을 푸셨으면 linux라는 이름으로 소프트 링크를 겁니다. 차후의 작업을 원할히 하기 위한 이유도 있고, 몇몇 라이브러리는 이 링크를 참조하기도 한다고 합니다.
링크를 따라 이동합니다. 그 후 현재 잘 돌아가고 있는 커널에서 설정을 복사해 옵니다.
#cp /boot/config-현재 돌아가고 있는 커널의 이름(uname -r의 결과와 동일) ./.config
설정파일의 복사가 문제 없이 되었다면 자신의 시스템에 맞게 커널의 설정을 바꿔주는 과정을 거치게 됩니다. 여기에서 세가지 인터페이스를 선택할 수 있는데, 프롬프트 상에서 선택하는 방법과 간단한 메뉴 구조로 선택하는 방법, 혹은 GUI적인 인터페이스를 사용할 수 있습니다. 각각 명령어는 다음과 같습니다.
#make menuconfig -> 예전 도스 프로그램들이 많이 사용하던 형태의 메뉴로 구성된 방식
#make xconfig -> Gnome이나 KDE를 이용한 GUI를 사용해서 설정
개인적으로는 마우스를 사용해서 편하게 할 수 있고, 또 각 모듈에 대한 설명을 간략하게나마 볼 수 있는 xconfig를 추천합니다. 만약 우분투를 막 까신 유저들이라면 이 단계에서 아마 에러 메시지를 보실 수 있을 겁니다. 이건 우분투가 크기를 작게 만들면서 대부분의 개발 도구둘이 빠지게 되어서 일어난 현상으로, 현재 없다고 나오는 패키지를 다운 받아서 설치하시면 됩니다. 아래의 명령어를 치시면 별 문제 없이 차후과정까지 되실 거라고 생각됩니다. 만약 또 없다고 나오면 없다고 나오는 패키지를 찾아서 깔아주시면 됩니다.
#apt-get install libncurses5-dev libqt3-mt-dev
자신이 원하는대로 하드웨어에 맞게 설정해 주셨으면 이제 커널 이미지를 만들 차례입니다. 먼저 예전의 설정(정확하게 설정인지 이미지인지 모르겠습니다만)을 지우고 그 후 새로운 이미지를 만듭니다.
#make-kpkg --initrd kernel_image kernel_headers modules_image -append-to-version=.test
'-append-to-version='이라고 적고 그 뒤에 무언가를 적으면 kernel의 버전 뒤에 덧붙혀집니다. 이제 정상적으로 모든 설정이 완료되었고 다른 문제가 없다면 공포의 커널 컴파일 시간입니다. c파일들이 쭉쭉쭉 올라가면서 컴파일 되는 것을 보실 수 있을 겁니다. 최소 3~40분에서 길게는 4시간까지 걸리는 사람도 보았습니다만...제 생각에 4시간은 쓰잘데기 없는 장치를 너무 많이 커널에 로드한 게 아닌가 싶습니다-_-); 넉넉잡아 한 시간 반정도면 되고 저는 쓸모 없는 걸 빼고 많이 줄였더니 40분정도로도 끝나더군요. VMware를 쓰시는 분들은 좀 더 오래 걸리는 것 같기도 합니다. 모든 과정이 오류없이 끝나면 현재 폴더의 상위 폴더에 이미지가 만들어집니다. 자, 이제는 만들어진 이미지를 인스톨할 시간입니다.
# dpkg -i kernel-headers-linux-2.6.28.test.deb
파일 이름은 다를 수 있습니다. ls로 확인하시고 나서 명령어를 실행해 주세요. 이제 모든 과정이 끝났다면 vi /grub/menu.lst를 치셔서 grub부트 로더의 메뉴에 자신이 컴파일한 커널이 정상적으로 등록되었는지 확인해 보시고 우분투를 재부팅하시면 되겠습니다.
이제 두근거리는 마음으로 우분투를 부팅하시고 ESC를 한 번 눌러서 자신이 만든 커널이 정상적으로 등록되었는지 한 번 더 확인하신 후, 커널로 부팅하시면 됩니다. 여기서 커널패닉이 뜨지 않고 정상적으로 우분투가 부팅이 되면 성공입니다.^^ 커널 패닉이 뜨신 경우 필수 모듈 중 일부를 빼버리셨다거나, 혹은 컴파일 과정 중에 문제가 있을 수도 있으므로 전 버전 커널로 부팅 후 다시 작업을 수행해 주세요. 저도 명확하게 이유를 모르므로, 안되면 재시도가 상책이라고 생각합니다.(먼산)
커널을 언인스톨 하고 싶으실 때에는 시냅틱 꾸러미 관리자를 이용하시는 것이 편할 겁니다. 자신이 만든 커널 버전을 검색하면 바로 뜹니다. 그걸 시스템에서 제거하시면 OK. 그리고 만약 현재 있는 커널과 동일한 커널을 컴파일하셔서 인스톨 하셨다면 동일한 파일이 있다고 에러를 뱉으며 이미지가 인스톨이 안될 수도 있습니다. 그럴 때는 dpkg 명령어에 -force-overwrite 옵션을 주셔서 강제로 덮어씌워버리면 됩니다. 단, 문제가 있을 수도 있다고 합니다(...)
휴, 수업 중에 배운 걸 제 기억을 토대로 다시 한 번 정리해 보았습니다. 워낙 중간중간 삽질을 많이 해서 그렇지 사실 이 작업 자체는 그리 어렵지 않은 것 같습니다. 컴퓨터에 장비들이 워낙 많다보니 뭘 넣고 빼야 할지 애매한 것이 많아서 그것 때문에 삽질을 좀 하게 되더군요. 그리고 컴파일 하는 동안 기다리는 것도 인내심이 많지 않다면 금새 때려 치우게 될 것 같습니다^^; 여하튼 하고 나니 저만의 커널을 가진 OS를 만들었다는 점에서 좀 뿌듯하더군요^^



















댓글을 달아 주세요