우분투 ubuntu2010/05/08 20:32
우분투 10.04 Lucid로 업그레이드를 하고 건드릴 곳이 너무 없어서 심심했어요.
그래서 오랜만에 커널 컴파일이나 해볼까하고 새로운 커널에 대한 정보를 조금 알아보던 중에 커널 버전 2.6.32에 커널 컴파일을 보다 간단하게 해주는 기능이 들어갔다는 정보를 얻었습니다.
바로 localmodconfig라는 것으로, 현재 쓰고 있는 커널의 모듈만 적재시켜 최적화해준다고 하더군요.
즉, make menuconfig (또는 xconfig) 에서 어떤 모듈을 포함할까 선택하는 과정이 간단해진다는 것.

그럼 localmodconfig를 이용해서 커널을 컴파일하는 방법에 대해 간략히 이야기해보겠습니다.
커널 소스 파일을 /usr/src/에 풀고 작업 디렉토리로 이동.

$ sudo su
# cd /usr/src/
# tar xjvf linux-source-2.6.32.tar.bz2
# ln -s linux-source-2.6.32 linux
# cd linux
이전엔 보통 /boot 에서 config 파일을 복사해왔죠.
이 과정을 생략하고 바로 아래 명령을 실행합니다.

# make localmodconfig
그러면 앞서 말씀드렸듯이 현재 사용중인 모듈만 선택해서 .config 파일을 만들어줍니다. 여기서 한가지 아주 중요한 주의점!!
위 명령을 실행하기 전에 가지고 있는 장치들(USB 메모리, 카드 리더기, 블루투스 장치, 프린터 등등)을 컴퓨터에 연결하는 것이 좋습니다. CD-ROM 드라이브에 CD디스크도 넣어주시고요.
이렇게 하지 않으면 그런 장치들을 사용하지 않는 것으로 보고 모듈에 올려주지를 않는다네요.

자, 이제 .config 파일도 생성되었으니 바로 컴파일에 돌입하면 될까요?
그러면 얼마나 좋겠습니까마는, 그래도 제대로 되었는지 확인하는 작업은 꼭 필요할 듯합니다.

# make menuconfig (또는xconfig)
위와 같이 전통적인 방식으로 커널의 옵션 선택이 제대로 되었는지 확인해봅니다.
이 과정에서 컴파일에 자신이 있는 분은 물론 좀 더 세부적인 설정을 할 수 있겠지요. 제 경우에 미루어보건대 localmodconfig가 완벽하지는 않은 듯합니다.
현재 사용중이 아닌 것, 제가 갖고있지 않는 장치들 등 필요없는 것이 꽤 많이 선택되었더라고요.
그래픽 카드나 사운드 카드도 여러가지 기종이 포함되어있었고, 터치패드나 조이스틱 따위의 장치도 역시 선택이 되었습니다. 결국 꼼꼼히 살펴서 다시 선택에서 제외해줘야 했습니다. 그래도 menuconfig만 했을 때에 비해서 커널 옵션 선택하는 시간이 아주 많이 줄어든 것은 분명합니다. 많이 편해졌어요.
또한 빼면 안되는 것을 빼버리는 실수를 할 가능성이 이전에 비해서 많이 줄어들었다고 여겨집니다.

아무튼 이제 아래 명령으로 커널 컴파일을 시작합니다.

# make-kpkg --initrd kernel_image kernel_headers modules_image
에러 없이 컴파일 과정이 끝났다면 만들어진 deb 파일을 설치해줍니다.

# dpkg -i ../*.deb
재부팅하고 새로만든 커널이 제대로 동작하는지, 사운드 카드며 USB 등의 주변 장치들을 잘 인식하는지 확인해보고 모두 정상이라면 마침내 커널 컴파일이라는 작업이 마무리되는 것이겠지요. 저는 운이 좋았는지 한번만에 성공... 그래픽카드 드라이버까지 모듈에 잘 올라와서 새로 설치해주지 않았으니 결과는 아주 만족스럽다고 할 수 있겠습니다.
 
사용자 삽입 이미지

덧붙임 1:
localmodconfig 관련 참조 링크
우분투 커널 컴파일 참조 링크

덧붙임 2:
우분투 10.04 Lucid에선 /boot 디렉토리에 initrd.img 파일을 자동으로 생성하지 않는다고 합니다. 버그인지 어쩐지는 잘 모르겠고요. 아무튼 우분투 10.04에서 커스텀 커널을 설치하려면 아래 명령어를 설치 이전에 실행해주세요.

$ sudo cp /usr/share/kernel-package/examples/etc/kernel/postinst.d/initramfs  /etc/kernel/postinst.d/
$ sudo mkdir /etc/kernel/postrm.d/ (postrm.d 디렉토리가 없다면..)
$ sudo cp /usr/share/kernel-package/examples/etc/kernel/postrm.d/initramfs /etc/kernel/postrm.d/
관련 참조 링크

 


TRACKBACK http://mojolog.net/trackback/419 관련글 쓰기

댓글을 달아 주세요