Search

'커널컴파일'에 해당되는 글 1건

  1. 2009.06.03 [Linux] 도전! 커널 컴파일 2

[Linux] 도전! 커널 컴파일

TechNote/Linux 2009. 6. 3. 10:46 Posted by harim~♥
리눅스를 꾸준히는 아니지만 그래도 참 오래썼다.. 처음 샀던 책의 부록인 슬랙웨어 2.3으로 시작해서, 알짜, 레뎃, 칼데라, 파란, 데비안 외 이름모를 듣보잡에서 우분투에 이르기 까지.. 흠

도대체 커널컴파일을 왜하는걸까? 이런 삽질을.. 어제 대화를 하다가 "윈도는 커널 컴파일 안해요." 완전 이 말 ㅈㅈ.. 그래도 좀 더 나은, 최적화된 성능을 위해 컴파일을 도전하는 사람들이 있다. 때론 문제를 해결하기 위해 하기도 한다..

나도 그런 사람중 하나다.. =_=.. 솔직히 두번째다.

8.10에서 9.04로 업하고 SD 카드리더 인식을 못해서 최신 테스트버전인 2.6.30-rc6를 받아설치했다. 사실 이틀전에 rc7를 패키지로 받았다가 =_= 그래픽 작살나고 소리 안나고.. 그래서 결국 / 파티션 다 밀고 코분투로 새로 설치했다.. 커널을 어떻게 받는지도 몰라서 patch를 받았다가.. -_- 엄한 파일 받고 막 헤맸다.

rc7으로 컴파일을 하다보니 그래픽 관련 옵션이 없더라.. 다른분이 스샷 보여주면서 왜 없냐고.. 양치기소년됐는데, 확인해보니.. 테스트버전은 테스트 버전인가부다.. rc6에는 있는데, rc7에서 없애(?)버렸다.

컴파일 과정은 대부분 우분투포럼(www.ubuntu.or.kr)에서 참조 했으며, 본문은 아래와 같다.

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

다행히 컴파일하고 이전에 일으켰던 문제는 일어나지 않았다. 커널컴파일을 처음에 성공하면 운이 아주 좋은거라고 하던데... 훗. =_= 난 실력으로 ..(퍽).. 물론, 컴파일의 원인이 되었던 SD 카드리더도 해결되지 않았다..(-_-.. 뭘한거지)

아무튼 그렇게 컴파일을 시작한다.


[Linux] 도전! 리눅스 커널 컴파일



1. 자신의 컴퓨터에 설치된 하드웨어 확인
컴파일시 가장 많이 변경되는 부분중 하나가 장치(Device)에 대한 부분이 아닐까 한다. 세계 PC의 표준이 되다시피한 M$의 경우야 지원하는 장치도 많고, 하드웨어 제조 업체에서 조차 이미 알아서 드라이버를 제공하고 있지만, 비주류인 리눅스나 기타 운영체제는 그렇지 않다. 그리하여 꾸준한 기능개선과 더불어 장치지원을 늘려가고 있는 듯 하다. 우분투의 경우, 들은 이야기이지만 커널을 업하면서 그래픽카드의 지원을 끊는(?) 경우가 있단다. 구닥다리 카드는 지원 안한다는 말이다.. 뭐 아무튼 그러한 이유로 커널 선택에 신중을 기할 필요도, 먼저 내 컴퓨터의 하드웨어 정보를 확인하는것도 필요하다.

윈도우에서라면 장치관리자를 보면 되지만.. 리눅스에서는 다음과 같이 확인한다

readytoact@readytoact-ubuntu:~$ lspci

00:00.0 Host bridge: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 03)
00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #4 (rev 03)
..
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 03)
..
00:1d.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 03)
..
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev f3)
00:1f.0 ISA bridge: Intel Corporation 82801HEM (ICH8M) LPC Interface Controller (rev 03)
..
02:00.0 Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection (rev 61)
08:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)
0c:07.0 FLASH memory: ENE Technology Inc ENE PCI Memory Stick Card Reader Controller
0c:07.1 SD Host controller: ENE Technology Inc ENE PCI SmartMedia / xD Card Reader Controller
0c:07.3 FLASH memory: ENE Technology Inc ENE PCI Secure Digital / MMC Card Reader Controller
위에서 보면 각각의 장치명과 모델을 확인할 수 있다. 본인의 경우 이 내용으로 컴파일 할 때 장치를 찾는데 사용했다.
문제의 장치인 ENE Tehc 의 카드리더도 보인다 (젠장)

2. 컴파일 관련 패키지 설치

컴파일 작업을 위한 패키지를 설치한다
sudo apt-get install build-essential bin86 kernel-package wget libncurses5-dev
컴파일 작업을 위해 root 계정이 필요하다
readytoact@readytoact-ubuntu:~$ su -
Password:
root@readytoact-ubuntu:~# id
uid=0(root) gid=0(root) 그룹들=0(root)
root@readytoact-ubuntu:~# cd /usr/src
root@readytoact-ubuntu:/usr/src# ls
linux-2.6.30-rc6         linux-headers-2.6.28-11-generic        vboxdrv-2.2.4
linux-headers-2.6.28-11    vboxnetflt-2.2.4

root@readytoact-ubuntu:/usr/src#

2. 커널 다운로드
http://kernel.org

사용자 삽입 이미지

현재 최신 안정화 커널은 2.6.29.4이다. 하지만 본인은 현재 계속 빌드업이 되고 있는 2.9.30 버전을 쓸 예정이다. 홈페이지 링크를 통해 www, ftp등으로 다운로드 할 수 있다

커널 다운로드 :

wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.30-rc6.tar.bz2
뭐 전통적으로 홀수커널은 재수가 없다(?)하여 안받는듯하다.. rc버전에도 해당하느 말인지는 모르겠ㅈ만, rc7을 설치했다 망했으니.. rc6을 받았다

압축해제 :

tar xvfj linux-2.6.30-rc6.tar.bz2
tar.gz의 경우 tar xvfz, tar.bz2의 경우 tar xvfj 옵션을 사용한다

3. 컴파일 환경설정
root@readytoact-ubuntu:/usr/src/# cd linux-2.6.30-rc6
root@readytoact-ubuntu:/usr/src/linux-2.6.30-rc6# cp /boot/config-`uname -r` .config
위 명령은 현재 설치되어 있는 커널버전의 환경설정을 기반으로 새로 컴파일 될 커널의 환경설정을 구성하는 것이다. 현재 본인이 사용중인 커널은 2.6.28-11-generic 이며 실제 /boot 안에는 config-2.6.28-11-generic 파일이 존재하는것을 확인할 수 있다. 만약 기존 환경설정이 아닌 기본 설정파일을 생성하여 컴파일을 하고 싶다면..(정말 그렇게 하고 싶은가;;)
 
make i386_defconfig                     # 32비트용
make x86_64_defconfig                 # 64비트용
로 기본 설정파일을 생성한다

3-1 설정적용
위에서 이전 커널의 설정을 가져왔다면

make oldconfig
위와 같이하면 기존 2.6.28-11에서 2.6.30-rc6사이에 변경된 설정에 대한 적용을 할 것인지에 대해 질문을 하는데, 본인은 그냥 다 기본(엔터)로 진행했다.

새로이 환경설정 파일을 설정하는(32/64비트) 경우에도 make oldconfig와 유사한 화면이 나타난다

3-2. 커널 옵션 설정

make menuconfig

사용자 삽입 이미지

원래 커널 옵션설정 방법에는
 - 커맨드라인(콘솔에 명령이 한줄씩 튀어나오는)
 - 위와 같은 메뉴 설정 방식(menuconfig)
 - X-Window 상에서 설정하는 GUI방식(xconfig)
가 있는데, 커맨드라인은 사용하기 너무 어렵고, GUI방식의 xconfig는 설치할 패키지가 너무 많고 해서 menuconfig 방식을 사용하였다.

사실, 커널 컴파일 과정중에 가장 어려운 부분이 이 부분이다. 모든 옵션을 다 알 수도 없고 자칫 잘못하다간 시스템이 엉망이 되거나, 부팅이 되지 않는 경우도 있었다(경험상) 본인도 잘 알지못하고 설명하기도 난해하지만, 본인의 경우

- 컴파일시 문제가 된다는 그래픽과 사운드 우선설정
  : 본인의 노트북에 설치된 장치를 제외하고 전부 제거했다
- 노트북에 설치되어 있지 않는 장치 제거(모뎀 등)
  : 그래픽 카드가 대표적인데 Intel GM965를 제외하고 다 제거
- 사용하지 않는 기능 제거
  : ISDN이나 ppp등과 같이 더 이상 사용하지 않는(사용빈도가 극히 낮은) 기능들

위주로 제거하고 체크하였다. 관심이 있다면 인터넷을 통해 문서를 찾아 각각의 항목을 조목조목 보라. 사실 은근히 재밌다. :)


4. 커널 패키지 생성

make-kpkg clean
make-kpkg --initrd --revision=386 kernel_image modules_image


커널헤더 및 소스 생성 - 옵션이다. 생성하지 않아도 된다
make-kpkg --initrd --revision=386 kernel_image kernel_headers linux_source modules_image

컴파일과 패키지 생성에는 약 두시간정도 소요되는 듯 하다..(휴.. 오늘 이걸 다시해야하다니 ;;)

컴파일 완료되면 /usr/src 에 deb 패키지 파일이 생성된다

root@readytoact-ubuntu:/usr/src# ls
linux-2.6.30-rc6                       linux-image-2.6.30-rc6_386_i386.deb
linux-headers-2.6.28-11                linux-source-2.6.30-rc6_386_all.deb
linux-headers-2.6.28-11-generic        vboxdrv-2.2.4
linux-headers-2.6.30-rc6_386_i386.deb  vboxnetflt-2.2.4

5. 새 커널 설치
dpkg -i linux-image-2.6.30-rc6_386_i386.deb

설치 후 재부팅하면 새로운 커널로 부팅이 가능하다.

컴파일을 마친 현재 네트워크, 비디오, 사운드 등은 이상없이 작동하지만, 역시 SD카드리더는 작동하지 않는다..

오늘은 다시 컴파일을 도전할 예정이다. 훗..

무한삽질- 삽질은 멈추지 않는다.

ps : 노트북에 달린 웹캠이 있었는데.. 기존 우분투에서 지원되지 않아 LCD위에 달린놈임에도 불구하고 잊고 있었는데.. 된다 +_+ 우오오오옷!!!

ps 2 : ... 원래 코분투에서도 된다.. 젠장