참고
KLDP - ganadist(차영호)님의 커널 2.6 Intro
이번 놀고 있는 연구실 컴퓨터에 있는 Cent OS에 있는 커널 버전이 낮은 관계에다 평소에 많은 자원들을 사용하지 않기때문에 커널 컴파일을 하게 되었다.
현재, 이 글을 쓰고 있는 시점에서 Cent OS 5.5 커널 버전은 2.6.18대이다. (현재 커널 버전과 차이가 많이 남)
[root@localhost ~]$ cat /proc/version
Linux version 2.6.18-194.8.1.el5 (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Thu Jul 1 19:07:06 EDT 2010
[root@localhost ~]$
또는 uname -a 로 현재 커널 버전을 알 수 있다.
[root@localhost linux-2.6.35]# uname -a
Linux localhost 2.6.18-194.8.1.el5 #1 SMP Thu Jul 1 19:07:06 EDT 2010 i686 i686 i386 GNU/Linux
[root@localhost ~]$
현재, 리눅스 커널 정보를 알아보려면 finger @ftp.kernel.org 로 알수 있다.
[studioego@localhost ~]$ finger @ftp.kernel.org
The latest linux-next version of the Linux kernel is: next-20100816
The latest mainline 2.6 version of the Linux kernel is: 2.6.36-rc1
The latest snapshot 2.6 version of the Linux kernel is: 2.6.35-git17
The latest stable 2.6.35 version of the Linux kernel is: 2.6.35.2
The latest stable 2.6.34 version of the Linux kernel is: 2.6.34.4
The latest stable 2.6.33 version of the Linux kernel is: 2.6.33.7
The latest stable 2.6.32 version of the Linux kernel is: 2.6.32.19
The latest stable 2.6.31 version of the Linux kernel is: 2.6.31.14
The latest stable 2.6.27 version of the Linux kernel is: 2.6.27.51
[studioego@localhost ~]$
저는 위에서 안정화된 버전중에서 최신버전인 2.6.35.2 를 받아 설치하게 되었습니다.
커널은 git을 받아 설치하게 되었다.
[root@localhost src]# pwd
/usr/src
[root@localhost src]# git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.35.y.git linux-2.6.35
커널을 받고 나선 make menuconfig && make modules && make modules_install && make headers_install && make install 로 설치를 하였습니다.
아래와같이 make install을 하고 나서 아래와 같이 bzImage를 /boot 로 복사를 하고 grub에 이미지를 생성합니다. 이제 커널 컴파일이 끝나고 컴파일된 커널을 사용하게 되었습니다.
[root@localhost linux-2.6.35]# make install
sh /usr/src/linux-2.6.35/arch/x86/boot/install.sh 2.6.35.2 arch/x86/boot/bzImage \
System.map "/boot"
[root@localhost linux-2.6.35]#
그러나 재부팅후에 아래와 같은 커널 패닉이 생겼다.
insmod: error inserting '/lib/dm-region-hash.ko': -1 File exists
Reading all physical volumes. This may take a while....
Volume group "VolGroup00" not found
mount: Could not find filesystem '/dev/root"
setuproot: moving /dev failed
setuproot: error mounting /proc failed
setuproot: error mounting /sys failed
kernel panic - not syncing Attemped to kill init!
Pid:1, comm: init not tained 2.6.35.2 #1
(...)
커널 패닉이 일어나서 멸망하였습니다.
참고: CentOS 5.4: installing new kernel 2.6.32.9 guide http://funky-dennis.livejournal.com/3290.html
[root@localhost linux-2.6.35]# make clean
[root@localhost linux-2.6.35]# make mrproper
[root@localhost linux-2.6.35]# cp /boot/config-현재커널 버전 ./.config
[root@localhost linux-2.6.35]# make menuconfig
현재 구동중인 커널의 환경정보를 기준으로 커널을 컴파일 하기 위하여 cp /boot/config-현재커널 버전 ./.config 를 함
메뉴 하단에 Load an Al ternate Configuration File을 선택하였다.
.config 파일이 입력되어 있는데, 이를 선택하여 현재 커널 환경을 불러들였음.
이후 General Setup ---> enable deprecated sysfs features which may confuse old usersp 를 Y키를 눌러 *로 활성화 시킨다.
이후 저장하여 메뉴 환경 설정 메뉴에서 저장하고 나왔음
컴파일 완료 재부팅을 하니 좋은 결과가 나왔음.
[root@localhost src]# cat /proc/version
Linux version 2.6.35.2 (root@localhost) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Tue Aug 17 02:26:27 KST 2010
[root@localhost src]# uname -a
Linux localhost 2.6.35.2 #1 SMP Tue Aug 17 02:26:27 KST 2010 i686 i686 i386 GNU/Linux
[root@localhost src]#
그러나 문제가 생김. 2.6.35에서 kernel BUG at arch/x86/mm/highmem_32.c:45
highmem_32.c 의 45번째줄에서 메모리를 잘못 참조하는 에러가 나옵니다.
2.6.35.2를 사용하다 보니 아래와 같은 메시지가 뜨면서 Kernel Panic이 일어납니다.
Message from syslogd@ at Tue Aug 17 15:04:27 2010 ...
localhost kernel: ------------[ cut here ]------------
Message from syslogd@ at Tue Aug 17 15:04:27 2010 ...
localhost kernel: invalid opcode: 0000 [#2] SMP
Message from syslogd@ at Tue Aug 17 15:04:27 2010 ...
localhost kernel: last sysfs file: /sys/devices/pci0000:00/0000:00:1c.3/0000:02:00.0/irq
Message from syslogd@ at Tue Aug 17 15:04:28 2010 ...
localhost kernel: Process sh (pid: 3941, ti=f51c8000 task=f6b936c0 task.ti=f51c8000)
Message from syslogd@ at Tue Aug 17 15:04:28 2010 ...
localhost kernel: Stack:
Message from syslogd@ at Tue Aug 17 15:04:28 2010 ...
localhost kernel: Call Trace:
Message from syslogd@ at Tue Aug 17 15:04:28 2010 ...
localhost kernel: Code: e8 57 98 06 00 8b 0d 00 b0 8c c0 64 a1 a4 ef 8a c0 6b c0 29 8b 15 ac 62 81 c0 8d 2c 30 8d 04 ad 00 00 00 00 29 c1 83 39 00 74 04 <0f> 0b eb fe 89 f8 83 e7 01 8b 35 00 31 92 c0 74 13 23 05 ac 4a
Message from syslogd@ at Tue Aug 17 15:04:28 2010 ...
localhost kernel: EIP: [<c0420638>] kmap_atomic_prot+0x6e/0xad SS:ESP 0068:f51c8ea8
Broadcast message from root (pts/1) (Tue Aug 17 15:21:20 2010):
The system is going down for reboot NOW!
결국은 이 문제가 해결 못한것을 알고, 이전 커널 버전인 2.6.27로 다시 컴파일 해서 설치하였습니다.
다시 2.6.27을 받아 설치
[root@localhost src]# git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.27.y.git linux-2.6.27
위와 같이
[root@localhost linux-2.6.27]# cp /boot/config-현재커널 버전 ./.config
[root@localhost linux-2.6.27]# make menuconfig
그리고 나서 .config파일 불러들여 저장후
[root@localhost linux-2.6.27]# CONCURRENCY_LEVEL=3 make && make modules && make modules_install && make headers_install && make install
컴파일을 하였습니다.
(...)
sh /usr/src/linux-2.6.27/arch/x86/boot/install.sh 2.6.27.51 arch/x86/boot/bzImage System.map "/boot"
이 나오고 Linux 2.6.27의 컴파일이 완료하였습니다. 이후 재부팅을 하였습니다.
[root@localhost linux-2.6.27]# reboot
결과, 성공!
[root@localhost ~]# uname -a
Linux localhost 2.6.27.51 #1 SMP Tue Aug 17 17:32:26 KST 2010 i686 i686 i386 GNU/Linux
[root@localhost ~]# cat /proc/version
Linux version 2.6.27.51 (root@localhost) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Tue Aug 17 17:32:26 KST 2010
[root@localhost ~]#
'컴퓨터 > Linux' 카테고리의 다른 글
Ubuntu 10.04에서 외부 서버의 xterm 출력 하는 방법 (0) | 2010.09.22 |
---|---|
Autoconf로 컴파일과 빌드를 자동적으로 만들기 예제. (0) | 2010.09.21 |
자기전에 노트북에 Linux Kernel 2.6.34 컴파일중. (0) | 2010.08.19 |
한국 우분투 사무실 가보았습니다. 경의선 전철도 타봤습니다. #ubuntu (2) | 2010.07.21 |
git cheat sheet (git 명령어 요약정리) (0) | 2010.07.04 |