컴파일을 해보자 7 (커널 컴파일1)

우분투를 사용 하는 이 누구나 쉽게 컴파일을 배울 수 있도록 쉽게 적어 나갈 생각이며
시간 날때마다 계속 아래 순서대로 적어 볼 계획 입니다.
[list:78lk8wih]1. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=1527:78lk8wih][color=#4000FF:78lk8wih]기존 패키지 컴파일 (MC)[/color:78lk8wih][/url:78lk8wih]
2. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=1538:78lk8wih][color=#4000FF:78lk8wih]다운 받은 소스 컴파일 (dh_make)[/color:78lk8wih][/url:78lk8wih]
3. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=1543:78lk8wih][color=#4000FF:78lk8wih]GPG키 (개인키)[/color:78lk8wih][/url:78lk8wih]
4. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=1550:78lk8wih][color=#4000FF:78lk8wih]다운 받은 소스 컴파일 (네이트온)[/color:78lk8wih][/url:78lk8wih]
5. 재미로 하는 컴파일 1 (
6. 재미로 하는 컴파일 2
7. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=4543:78lk8wih]커널 컴파일 1[/url:78lk8wih]
8. 커널 컴파일 2 (커널 설치 후 설정들)
9. 개인 저장소와 우분투코리아 저장소 이용하기[/list:u:78lk8wih]

[size=150:78lk8wih]데비안/우분투 방식의 커널 컴파일[/size:78lk8wih]

[color=#408040:78lk8wih]요즘 커널 컴파일에 관심 있으신 분들이 있어 제가 아는 것을 적어 봅니다.[/color:78lk8wih]
컴파일 이야기 쓰다가 중간에 멈춤 이유는 apt-get 이 있는데… 우분투에서 머리 아프게 컴파일 왜 합니까 ;)
그러나 커널 꼭 컴파일 하겠다는 웹테러님에게 이 글을 전합니다.

[b:78lk8wih]커널 컴파일을 위한 패키지 설치[/b:78lk8wih]

[code:78lk8wih]sudo apt-get install build-essential bin86 kernel-package libqt3-headers libqt3-mt-dev wget libncurses5 libncurses5-dev[/code:78lk8wih]
[color=#FF0000:78lk8wih]* 추가 4월3일 오후 2시[/color:78lk8wih] : 위에서 libqt3-headers libqt3-mt-dev 는 make xconfig 를 위한 건데… 현재 8.10 이면 qt4도 필요할수 있습니다. 전 우분투는 그놈인지라 qt용 xconfig 비추입니다.
따라서 menuconfig를 이용하실분은 그냥

[code:78lk8wih]sudo apt-get install build-essential bin86 kernel-package wget libncurses5 libncurses5-dev [/code:78lk8wih]만 설치하셔도 됩니다.

[code:78lk8wih]sudo -i (루트 변신)
cd /usr/src 디렉이동[/code:78lk8wih]

[b:78lk8wih]커널 다운로드 및 압축 풀기[/b:78lk8wih]

http://kernel.org

[code:78lk8wih]wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.tar.bz2 (wget 이용하여 다운)
tar -xvjf linux-2.6.29.tar.bz2 (압축풀기 옵션을 보면 j가 들어가는데 tgz파일과 bz2파일의 차이가 압축 풀시에 z와 j 옵션 입니다.)[/code:78lk8wih]

[b:78lk8wih]심볼릭링크[/b:78lk8wih]

[code:78lk8wih]ln -s /usr/src/linux-2.6.29 linux && cd /usr/src/linux[/code:78lk8wih]

[b:78lk8wih]커널 패치[/b:78lk8wih]

[code:78lk8wih]패치 파일 다운로드 wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.29.1.bz2
패치 bzcat patch-2.6.29.1.bz2| patch -p1[/code:78lk8wih]
*커널 패치란 버그픽스 한 새 커널이 패치로 제공되어 새로 2.6.29.1커널을 전부 받을 필요 없이
패치된 파일만 받아 적용시키는 것인데…
만약 2.6.29.2 가 나오면 linux-2.6.29.tar.bz2 을 다시 압축 풀고 patch-2.6.29.2.bz2 를 다운 받아 패치하면
소스가 2.6.29.2 가 되줍니다.

[b:78lk8wih]커널 컴파일 설정[/b:78lk8wih]

① 커널 설정 가져오기

[code:78lk8wih]cp /boot/config-uname -r .config [/code:78lk8wih]

② 또는 커널 기본설정 파일 생성하기

[code:78lk8wih] make i386_defconfig [/code:78lk8wih]
(이명령어로 32비트 커널 컴파일 설정파일 .config가 기본 값을 지니고 만들어 지는데
64비트 에서는 make x86_64_defconfig 로 한다 하는데 못해 보았습니다.)

[b:78lk8wih]예전 설정들 적용하기[/b:78lk8wih] (cp /boot/config-uname -r .config로 설정 가져왔을 경우)

[code:78lk8wih]make oldconfig[/code:78lk8wih]

[b:78lk8wih]커널 옵션 조절[/b:78lk8wih]

[code:78lk8wih]make menuconfig[/code:78lk8wih] 또는 make xconfig (여기서 커널 설정을 하면서 자신에게 필요 없는것은 제거 해 나갑니다.)
[attachment=1:78lk8wih]screenshot1.png[/attachment:78lk8wih]
저는 menuconfig를 이용하는데… 메뉴에서 키워드 검색은 / 입니다.
설정하며 주의점은
커널해킹에 커널 디버깅을 체크 해제 하십시요 (커널 용량이 무척 커집니다)
사운드카드 (디바이스 드라이버 /사운드카드 서포트) 쪽 살펴 자신이 쓰는 사운트 카드 잘 체크하시기 바랍니다.
모르면 기본값으로 그냥 ^^
[color=#FF0000:78lk8wih]※[/color:78lk8wih] [color=#BFBFBF:78lk8wih]바로 메뉴콘피그에서 커널이 어떻게 다양한 파일시스탬을 지원하며 디바이스 드라이버에 어떤 하드웨어를 지원하는지 보고 느끼시는게 중요합니다.[/color:78lk8wih]

[b:78lk8wih]청소[/b:78lk8wih]

[code:78lk8wih]make-kpkg clean[/code:78lk8wih]

[b:78lk8wih]컴파일과 deb 파일 만들기[/b:78lk8wih]

[code:78lk8wih]make-kpkg --initrd --revision=386 kernel_image modules_image[/code:78lk8wih]

커널 헤더, 커널소스도 만드려면

[code:78lk8wih]make-kpkg --initrd --revision=386 kernel_image kernel_headers linux_source modules_image[/code:78lk8wih]

리비전 부분을 저는 --revision=386 이라고만 주는데 이유는 제가 32비트이고 그냥 깔끔한 커널 네임 때문입니다. (vmlinuz-2.6.29)[attachment=0:78lk8wih]screenshot2.png[/attachment:78lk8wih]

[b:78lk8wih]새커널 설치[/b:78lk8wih]

[code:78lk8wih]cd .. && dpkg -i linux-image-2.6.29*.deb [/code:78lk8wih]

커널 설치가 안될경우 dpkg -i --force-all linux-image-2.6.29*.deb 로 ( --force-all 강제옵션 주고 설치 하시기 바랍니다.)
firmware 드라이버 파일 중복으로 일반적 옵션으로는 설치 안될 수 있습니다.

커널 설치 후 nvidia나 ATI는 그래픽 드라이버가 새로 설치 되야 하는데
제조사에서 다운 받아 설치 해야 합니다.
이제 새커널에서 기존 우분투에서 패키지로 제공하는 드라이버는 사용이 불가 합니다.
dkms를 이용하면 커널DEB 설치 동시에 그래픽 모듈 컴파일 가능한데… 전 그냥 제조사 홈피서 다운받아 설치합니다.

virtualbox 사용시엔 마찬가지로 버추어박스 커널 모듈 새로 올려야 합니다.

[code:78lk8wih]sudo /etc/init.d/vboxdrv setup[/code:78lk8wih]

커널 컴파일을 처음에 성공하는 분은 정말 운이 좋으신 겁니다.
5번 만에 성공 해도 운이 좋다고 생각합니다.
그러나 성공하고 실패하고가 중요치 않고 해보는게 중요합니다.
특히 테탑 커널 패키징은 쉽지는 않습니다.

그러나 10번 정도 해보면서 커널 옵션도 살피고 하다 보면
그 이후로 쉽게 자신만의 커널 컴파일 노하우가 생기실 것입니다.

[i:78lk8wih]설명을 더 달아 볼까 했는데 댓글 질문에 따라 더 추가 해보겠습니다.[/i:78lk8wih]

ㅇ,.ㅇ 음…조만간에 테마를 벗어나서 커널컴파일에 도전을 한번 해봐야겠습니다.

우선 좋운 정보 감사드립니다.
분도님의 글들 항상 많은 도움이 됩니다.

저도 이번에 커널 컴파일을 한번 해볼까 합니다.

make-kpkg --initrd --revision=386 kernel_image kernel_headers linux_source modules_image
여기서 revision에서 64bit는 어떻게 설정해야 하나요???

전 그냥

2.6.29 커널 컴파일시…
make menuconfig
make
make modules_install install
update-initramfs -c -k 2.6.29

그리고 menu.lst 편집해주고…

위 방법과 뭐가 틀린건가요?

그리고 커널 컴파일 하고, 사용하다가 커널 컴파일 한 것에다가 옵션 몇개 추가
하고 재컴파일시 그냥 make 해주면 추가된 것만 알아서 컴파일해주어서
금방 끝나네요. 근데 옵션을 몇개 제거하고 make 하면 처음부터 다시 하는것 같다는…

[quote="bandman159":133tkczm]
위 방법과 뭐가 틀린건가요?
[/quote:133tkczm]

deb 패키지를 만들어서 설치하는 것과 막바로 설치하는 것의 차이지요. 패키지로 만들어서 하는 것이 아무래도 나중에 지우기, 업그레이드하기 등등이 편하니까요.

설정할 때 디스크 파티션 관련 옵션은 반드시 잡아줘야 되는 모양이더군요.

그거 안 잡아주고 그냥 설치했더니 부팅할 때 커널 패닉이(먼산)

그리고 No1.Linux에서 커널 빌드하는 경우 텍스트 편집기로 모 파일을 수정해 줘야 됩니다.
(무슨 파일인지는 정확히 기억이 -)

감사합니다.
커널 컴파일은 꼭해보고 싶었는데 이글이 많은 도움이 될듯합니다.

[quote="asakkum":24biubwk]우선 좋운 정보 감사드립니다.
분도님의 글들 항상 많은 도움이 됩니다.

저도 이번에 커널 컴파일을 한번 해볼까 합니다.

make-kpkg --initrd --revision=386 kernel_image kernel_headers linux_source modules_image
여기서 revision에서 64bit는 어떻게 설정해야 하나요???[/quote:24biubwk] 우선 저는 64비트 리눅스를 사용해 보지 않았습니다.
revision은 그냥 커널 중간 이름 주는 것입니다.
이는 Makefile에서 줄 수도 있습니다.
[attachment=0:24biubwk]screenshot2.png[/attachment:24biubwk]
예전에 우분투에선 amd64 란 이름을 주었는데 요즘은 구분없는거 같습니다 32비트나 64비트나 데탑은 (generic) 으로…
단 자신의 우분투가 64비트이면 64비트 커널로 컴파일 할것입니다.
구분으로 x64 정도가 어떠한지요 [quote="bandman159":24biubwk]2.6.29 커널 컴파일시…
make menuconfig
make
make modules_install install
update-initramfs -c -k 2.6.29

그리고 menu.lst 편집해주고…

위 방법과 뭐가 틀린건가요?

그리고 커널 컴파일 하고, 사용하다가 커널 컴파일 한 것에다가 옵션 몇개 추가
하고 재컴파일시 그냥 make 해주면 추가된 것만 알아서 컴파일해주어서
금방 끝나네요. 근데 옵션을 몇개 제거하고 make 하면 처음부터 다시 하는것 같다는…[/quote:24biubwk] 우리가 deb 패키지로 만드는 것은
본인에겐 설치 제거도 용이 하지만
보편적 옵션으로 컴파일 패키징 한경우 패키지를 남에게 줄수도 있기 때문입니다.
위 상단 제목 처럼 "[b:24biubwk]데비안/우분투 방식의 커널 컴파일[/b:24biubwk]" 입니다

\(˚∀˚)/ 야호 !

드디어 커널 컴파일 팁이 나왔네요 !

제가 어줍잖게 컴파일 하던 것과 차원이 다르군요.
(어쩐지 파일 크기가 엄청나게 크더라니…)

패치 방법도 다르고… 음…
공부 많이 됬습니다. 고맙습니다.

[b:1s6buf1f]컴터야 고생좀 해야겠다 ![/b:1s6buf1f]

64비트입니다.

make x86_64_defconfig 하면 잘됩니다.

dkms 설정에 대해서 삽질좀 해야겟군요 ^^.

커널을 분도님 글보고 컴파일까지 깨끗하게 끝마치고 설치까지 했는데요.

일단 그 커널로 부팅하니 GDM 진입시 온갖 색깔이 다 깨져서 아무렇게가 화면을 뒤덮어서 다른커널로 들가 다시 여쭈어보니 글픽 드라이버 재설치 하라 하셔서 2.26.29.1 ( 새커널 ) recovery 모드로 들가서 그래픽 드라이버 재설치도 해봤고 다시 그 커널로 재부팅후 들가니 다시 화면이 개판이어서 TTY1 로 우회한후 다시 재설치했습니다. 그다음 xstart 를 했는데 명령어가 없다는군요. X.org 가 혹시 없는건가?? 아닌데 ㅡㅡ;; 이거 이상한데. 다른커널에서 되는데 말입니다.

도와주세용!

[quote="hanbin973":3abtrmjs]커널을 분도님 글보고 컴파일까지 깨끗하게 끝마치고 설치까지 했는데요.

일단 그 커널로 부팅하니 GDM 진입시 온갖 색깔이 다 깨져서 아무렇게가 화면을 뒤덮어서 다른커널로 들가 다시 여쭈어보니 글픽 드라이버 재설치 하라 하셔서 2.26.29.1 ( 새커널 ) recovery 모드로 들가서 그래픽 드라이버 재설치도 해봤고 다시 그 커널로 재부팅후 들가니 다시 화면이 개판이어서 TTY1 로 우회한후 다시 재설치했습니다. 그다음 xstart 를 했는데 명령어가 없다는군요. X.org 가 혹시 없는건가?? 아닌데 ㅡㅡ;; 이거 이상한데. 다른커널에서 되는데 말입니다.

도와주세용![/quote:3abtrmjs] 본인 그래픽 드라이버가 커널과 xorg 와 어찌 맞물러 돌아가는지 정확히 이해 못하면
엔디비아나 ati 사용자는 데탑 커널 컴파일 힙듭니다.
우분투 제공이 아닌 ATI 제공 드라이버 설치법과
그리고 아마도 현재 ATI 제공 최신 드라이버가 커널 2.6.28-11 잔티 베타에도 잘 붙지 않을 것입니다.
그러니 2.6.29 커널 모듈을 잘만들던가요 ?

이런 좋은 글을 이제야 보게되네요.
실행 후 후기라도 한번 써봐야겠습니다.

커널 컴파일 중에 다른일을 안하신다면
우선순위를 높게 줘서 좀더 빨리 끝낼수도 있습니다

다만 이때 컴파일하는 작업 제외하고는 무지 느려터지니 손 안대시는게 좋아요

nice --20 make -j8

make 하실때 앞에 nice --20 뒤에 -j8을 추가하시면 됩니다

덕분에 저도 커널 컴파일에 도전을 해볼 수 있겠네요. ^^*

감사합니다.

좋은 글 잘 읽었습니다. 여러글 참조하면서 커널 컴파일을 성공하였습니다.

그런데 ati의 fglrx 모듈이 적재가 안되더군요. ati에서 제공하는 독점 드라이버에 문제가 있는가 봅니다.

저는 [url:1sw0lj2r]http://ubuntuforums.org/showthread.php?t=1615594[/url:1sw0lj2r] 를 참조해서 10.12드라이버로 적재하는데 성공했습니다.

혹시라도 저처럼 헤매시는 분들 있을까봐 씁니다.

그나저나 하고나니 기분은 좋은데…또 하고 싶네요;;

예전에 아주오래전 데비안 쓸데 컴파일 해보고는 한번도 안해봤는데,

급 궁금한것이, 커널을 작게 만들면 작게 만들수록 더 성능이 좋아지는 걸까요??

[quote="atto":19kg57g2]예전에 아주오래전 데비안 쓸데 컴파일 해보고는 한번도 안해봤는데,

급 궁금한것이, 커널을 작게 만들면 작게 만들수록 더 성능이 좋아지는 걸까요??[/quote:19kg57g2]
요즘은 커널 따로 컴파일 해서 쓰지 않지만
전에 컴파일해서 쓸 때 보면 우분투 로그인 후 2%정도의 메모리 절감이 되더군요
1기가 메모리 사용중인데… 17% : 19%
부팅속도야 10.04 이후 너무 빠르니 비교 필요 없고요

P.S. : 본 글타래는 예전 글입니다 ^^

컴파일시 C언어 문법 관련 에러나는 소스면 중단하는 것이 제일 현명합니다.