본문 바로가기
LOG/둔대1기(00-03)

2001-01-09 드디어 성공한 커널컴파일 ...절반의 성공

by Anakii 2001. 1. 9.
날씨: 하루종일 눈 그렇지만 비와 동일. 내리자 마자 녹음..

오늘, 큰 맘먹고 내 PC-linux 박스의 커널에 손을 댔다. 막강 2.4 커널이 나와 있는 판에 내 리눅은 2.2.17이니... 배포판 버전 7.0 이건만 커널은 어찌하여 2.2 였던고.
큰 맘먹고 2.4 커널을 다운로드했다. 22MB 의 큰 덩치. 만반의 준비를 위해 커널컴파일 하우투 문서들도 몇 종 준비했고. 
일단 커널 컴파일에는 현재 디렉토리 위치가 중요하다길래 /etc/bashrc 파일에서 프롬프트 옵션사항을 W 에서 w 로 바꾸었다. (대문자는 현재디렉, 소문자는 풀패쓰)
가져온 커널을 /usr/src 에 복사하고 필요한 디렉토리를 만든 뒤  링크를 걸고 압축을 푸니 linux 라는 디렉토리가 새로 생기며 압축이 풀린다.

# /usr/src/>mkdir linux-2.4.0
# /usr/src/>ln -s linux-2.4.0 linux
# /usr/src/>tar zxvf linux-2.4.0.tar.gz
# /usr/src/>cd linux

컴파일시 먼저 해야 하는 명령은 make mrproper 이다. 이 명령은 이전 커널을 컴파일할 때 만들어진 오브젝트 파일(*.o)과 의존성 설정, 컴파일 환경 설정값, 버전 정보 등 새로 시작하는 컴파일에 영향을 주는 이전 정보들을 삭제하는 명령이다.

# /usr/src/linux>make mrproper

두 번째의 과정이 menuconfig 다. 이야말로 새 커널의 환경설정 유틸리티인데, 요놈이 바로 리눅스의 최고 강점이 되는 모듈을 설정한다.
이 과정에서 커널에 기본적으로 넣을 기능과 필요한 경우 적용시키기 위해 모듈만 만들 기능, 그리고 빼 버릴 기능을 결정한다.

윈도그와 비견해 가장 빛나는 기능이다. 여기서 나만의 리눅스 박스를 꾸밀 수 있는 거다. 내가 쓰는 하드웨어가 바뀔 이유가 없다면 다른 하드웨어를 아예 지원하지 않게 할 수도 있다. 또한 내게 usb 장치가 없다면 지원 기능을 아예 빼버리면 된다.

이런 이유로 리눅스 커널은 커 봤자 1MB이지만, 윈도그는 온갖 잡다한 기능을 몽땅 넣기 때문에 커널만 100MB 가 넘는거다. 핵심부위인 커널이 이렇게 공룡이어서야 에러가 안날래도 안 날수 없다.
# /usr/src/linux>make menuconfig

이런 저런 기능 넣고 빼고 나서 저장하고 종료를 했다.
다음 해야 할 일은 의존성 검사와 소스 청소다.

# /usr/src/linux>make dep 
# /usr/src/linux>make clean

모두 끝났군. 이제 바이너리를 만들어야 한다. 예전엔 make bzImage 라고 알고 있었는데, 이렇게 하니 바이너리가 생성되지 않았다. (보통 / 에 vmlinuz 라는 바이너리가 만들어진다)
그래서 linux.co.kr 의 문서에 따라 make bzlilo 라고 쳤다.

# /usr/src/linux>make bzlilo

뭔가 좌르륵 지나간다. 컴파일 할 때마다 느끼는 거지만, 이 좌르륵 내려가게 만든 사람은 또 누굴까? 생각한다. 난 setup.exe 실행하는 것처럼 간단히 make하건만,

다 끝나고 나니 / 에 vmlinuz 와 System.map 두 파일이 생긴다. 소중한 2.4 커널..

이 두개를 /boot 디렉토리로 옮겼다. 하지만 그냥 옮기는 게 아니라 이전의 커널 이미지도 보존하기 위해 아래와 같이 쳤다.

# />mv vmlinuz /boot/vmlinuz-2.4.0
# />mv System.map /boot/System-2.4.0.map

다 끝난 뒤엔 /etc/lilo.conf 파일에 아래와 같이 넣어 주었다. 물론 이전 것도 보존하면서. 새로운 커널의 라벨을 linux24로 했다.

image=/boot/vmlinuz-2.4.0
        label=linux24
        append="mem=254M"
        read-only
        root=/dev/hda6

(내 / 파티션은 /dev/hda6 이다..마스터를 둘로 나누어 윈독과 리눅을 쓰기 땜에..)

그리고 나서 재부팅해보니 lilo에 linux24 가 생겼다..이걸로 부팅.

부팅하다가 뭔가 에러 메세지가 지나간다. modules 의존성 파일이 없대나 뭐래나..어쨌건 부팅은 된다.

아까 그말이 무슨 말인가 하고 modprobe 명령을 내려보니 아뿔싸, /lib/modules/2.4.0/modules.def 가 없다는 말이군.. 컴파일시에 뭘 빼먹었네!

다시 kldp.org 로 가서 확인해 보니 모듈 컴파일을 빼먹었다는 걸 발견했다.

다시 시도. 이것은 커널 컴파일이 아니라서 단지 컴팔, 인스톨만 해 주면 된다.

# /usr/src/linux>make modules
# /usr/src/linux>make modules_install

이렇게 하니 /lib/modules/2.4.0/ 디렉토리가 생기고 필요한 파일들이 복사가 되었다. 야호! 재 부팅했다................이상 무!!

바뜨! X를 띄워놓고 윈독 하드디스크를 읽어보니 한글이 다 깨져 보이는 사태가 발생한다.. 으으윽... 윈독과 같이 사용할 때는 한글 패치를 해 주었어야 하는데...

http://sparcs.kaist.ac.kr/~gangster/NTFS_FAT32/ 홈페이지에서 필요한 파일과 설치방법은 찾을 수 있었지만.....커널 2.4 용이 없다...

결국 포기.. 그래서 절반의 성공...

어쨌건 작년에 첨 시도한 커널 컴파일에서 한번 쓴 잔을 마시고 난 뒤 (컴파일 뒤 커널 패닉 -_-;) 그래도 좀 더 배웠다고 한번에 성공을 하고 나니 기분 캡이다.

좀 더 해보고 나서 (내 리눅박스는 순전히 연습용..인터넷도 안됨. 헤헤..) 우리 서버도 커널 업을 해 줘야겠다. 2.4는 엔터프라이즈 유닉스 급이라는데..