3.1. 컴파일에 앞서

커널 환경설정이 모두 끝났다면 컴파일을 시작하기 전에 이전에 생성된 오브젝트 파일 등을 지우는 청소과정을 먼저 거쳐야 합니다.

3.1.1. 청소

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

make dep : 새 커널 만들기를 시작하는 명령입니다. 컴파일을 위한 의존성 관계를 설정합니다.

make clean : 이전에 수행했던 컴파일과정에서 생성된 오브젝트 파일(*.[oas]), 커널, 임시파일(.tmp*), 설정값(configure) 등을 삭제합니다.

다음과 같이 붙여서 사용하기도 합니다. && 는 앞선 명령이 성공했을 때에만 뒤이은 명령을 실행하라는 뜻입니다:

# make dep && make clean

3.1.2. 커널 컴파일 명령

아래 명령으로 압축된 커널 이미지를 만듭니다. I(아이)를 대문자로 써야합니다:

# make bzImage

커널을 만드는 명령은 몇 가지가 있는데 그 가운데 위에서 소개한 make bzImage (big zImage)명령이 가장 많이 쓰입니다.

참고: 아래는 압축된 커널을 만들기 위해 이전에 사용하던 명령입니다:

# make zImage

make zImage 명령으로 컴파일했을 때 커널이 제한된 크기를 넘으면 "SyStem is too big"이라는 에러 메시지를 남기고 컴파일이 실패하게 됩니다. 이 경우 잘 쓰이지 않는 기능은 모듈로 설정하고, 필요 없는 기능은 제거하여 커널 규모를 줄이고 다시 컴파일해야합니다. 그러나 더 좋은 방법은 make bzImage를 이용하는 것입니다.

zImage는 1/2MB보다 큰 커널을 지원하지 않지만 bzImage(big zImage)는 1MB보다 위에 직접 커널을 로드하는 기능이 확장되어 커널 크기를 대략 2MB까지 허용합니다.

# make zdisk

명령은 커널 이미지를 플로피 디스크에 만듭니다. 플로피 디스크로 새 커널을 테스트할 때 사용합니다. 커널 이미지를 만들고 lilo 까지 수행하는 "make zlilo" 명령도 있지만 문제가 발생할 경우 부트조차 되지 않을 가능성이 있습니다.

3.1.3. 커널 이미지

커널 컴파일이 성공했다면 /usr/src/linux/arch/i386/boot/디렉토리 아래 bzImage를 찾을 수 있습니다.

3.1.4. 모듈 컴파일

모듈 컴파일을 시작하기 전에 이전 버전에서 설치한 모듈을 (커널 버전이 달라지지 않았다면) 이름을 바꾸어 두는 것이 좋습니다. 커널 버전이 다르다면 잠시 그냥 두었다가, 새 커널과 모듈이 제대로 동작하는 것을 확인하고 지웁니다.

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

make modules : 커널 환경설정에서 모듈로 설정한 기능들을 컴파일합니다.

make modules_install : 컴파일 된 모듈을 /lib/modules 아래 설치합니다.

depmod : 모듈 사이의 의존성을 검사하여 /lib/modules 디렉토리 아래 modules.dep 파일을 만듭니다.

3.1.5. 커널 컴파일에 걸린 시간 알아보기

time 명령을 사용하면 작업에 소요된 시간을 측정할 수 있습니다. 예를 들어 의존성 설정부터 모듈 설치작업까지 모두 얼마나 시간이 걸리는지 알아보려면 다음 명령을 사용합니다:

# time -v sh -c 'make dep && make clean && bzImage && modules && modules_install'

time -v : 자세한 정보를 출력합니다.

sh -c 'string..' : 명령을 뒤따르는 문자열들에서 읽어들입니다.