다음 이전 차례

4. 설정은 어떻게 하는가?

먼저 필요한 것들을 구한다: 적당한 버전의 커널과 최신 버전의 modules-utilities. 그리고 modules-utilities를 인스톨해야 한다. 이 작업은 매우 간단하다. 소스를 푼 다음 make install을 실행한다. 이것은 genksysm, insmod, lsmod, modprobe, depmod, kerneld 들을 컴파일하여 /sbin에 인스톨한다. 그리고 사용자가 리눅스를 부팅할때 필요한 작업을 이루어지도록 스타트업 스크립트에 필요한 내용을 추가하는 것이 좋다. 다음과 같은 내용을 /etc/rc.d/rc.S파일 (슬랙웨어의 경우) 이나 /etc/rc.d/rc.sysinit (데비안, 레드햇, 칼데라와 같은 SysVinit를 사용하는 경우)에 추가한다.

        # Start kerneld - this should happen very early in the
        # boot process, certainly BEFORE you run fsck on filesystems
        # that might need to have disk drivers autoloaded
        if [ -x /sbin/kerneld ]
        then
                /sbin/kerneld
        fi
        # Your standard fsck commands go here
        # And you mount command to mount the root fs read-write
        # Update kernel-module dependencies file
        # Your root-fs MUST be mounted read-write by now
        if [ -x /sbin/depmod ]
        then
                /sbin/depmod -a
        fi
첫번째 부분은 kerneld 자신을 실행시키는 것이다. 두번째 부분은 시작할때 'depmod -a'를 호출한다. depmod 프로그램은 사용 가능한 모든 모듈의 리스트를 만들고 그것들 간의 의존성을 분석하여 한 모듈이 로드되기 전에 어떤 모듈이 로드되어야 하는지 알게 해준다.

주의 : 최근 버전의 kerneld는 GNU dbm 라이브러리, libgdbm과 링크하는 것을 옵션으로 갖는다. 만일 module-utilites를 컴파일할때 이 기능을 활성화시킨 경우 libgdbm이 없으면 kerneld는 동작하지 않는다. 예를 들면 /usr가 다른 파티션 에 존재하고 /usr이 마운트되기 전에 kerneld가 동작하는 경우이다. 이런 경우 /usr/lib의 libgdbm을 /lib로 옮기거나 kerneld를 정적으로 링크할 것을 권장한다.

다음, 커널 소스를 풀고 configure를 하고 커널을 만든다. 만일 이러한 과정을 이전에 한 적이 없다면 Linux 커널 소스의 루트 디렉토리에 있는 README를 반드시 읽어봐야 한다. make config를 할 때는 다음과 같은 질문에 대해 관심을 기울여야 한다.

Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y Loadable module support를 선택하지 않으면 kerneld가 로드할 모듈이 없게 된다. 그러므로 Yes를 선택해야 한다.

Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y 이것 역시 반드시 필요한 것이다. 이제는 커널에서 모듈로 설정할 수 있는 다양한 것들이 제시될 것이다. 예를 들면

Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?] 여기서 M을 선택하면 해당 기능이 모듈로 컴파일된다. 일반적인 시스템을 부트할때 필요한 디바이스 - 하드디스크 드라이버, 루트 파일 시스템을 위한 드라이버만 커널에 포함하면 된다. 나머지는 모드 모듈로 사용할 수 있다.

'make config'를 끝내면 'make dep', 'make clean', 'make zImage' 혹은 'make zlilo', 'make modules' 그리고 'make modules_install'를 차례로 실행한다. 'make zImage'는 새로운 커널 이미지를 arch/i386/boot/zImage 디렉토리에 둘 것이다. 이것을 부트 이미지를 두는 곳이나 LILO에서 설치하는 곳에 복사 하면 된다.

커널을 설정하고 빌드하는 방법에 대해 좀 덜 알고 싶으면 comp.os.linux.answers에 주기적으로 포스트되고 sunsite.unc.edu의 /pub/Linux/docs/HOWTO의 Kernel-HOWTO를 참고한다.


<bf/kerneld 시험해 보기/
   이제 새로운 커널로 리부트한다. 시스템이 부트되면 'ps -ax'를 사용하여
   다음과 같은 내용이 있는 지 확인해 본다.

    PID TTY STAT  TIME COMMAND
     59  ?  S     0:01 /sbin/kerneld

   kerneld를 사용해서 좋은 점 한가지는 한번 사용자가 커널을 만들고 데몬을
   설치한 다음에는 환경설정하는데 별다른 작업이 필요하지 않는다는 것이다.
   시험삼아 모듈로 빌드하려고 하는 드라이버중 하나를 사용해 본다. 아마도
   추가 설정 없이도 잘 동작할 것이다.  플로피 드라이버를 모듈로 빌드하고
   DOS 플로피 디스크를 드라이브에 넣었다.

   osiris:~ $ mdir a:
   Volume in drive A has no label
   Volume Serial Number is 2E2B-1102
   Directory for A:/
   binuti~1 gz       1942 02-14-1996  11:35a binutils-2.6.0.6-2.6.0.7.diff.gz
   libc-5~1 gz      24747 02-14-1996  11:35a libc-5.3.4-5.3.5.diff.gz
          2 file(s)        26689 bytes

   플로피 드라이버가 동작한다. 이것은 매번 플로피 디스크를 사용할 때마다
   kerneld에 의해 자동으로 로드된다.
   실제로 플로피 모듈이 로드되었는지 알아보기 위해 /sbin/lsmod를 실행해보면
   현재 로드된 모듈들을 볼 수 있다.

   osiris:~ $ /sbin/lsmod
   Module:        #pages:  Used by:
   floppy            11    0 (autoclean)

   "(autoclean)"은 모듈이 일 분이상 사용되지 않으면 자동적으로 kerneld에
   의해 제거된다는 것을 의미한다. 그러므로 11 페이지만큼의 메모리(한
   페이지가 4kB이므로 총 44kB)가 오직 내가 플로피 드라이브를 사용할때만
   사용된다는 것을 의미한다. 만일 내가 일 분이상 플로피를 사용하지 않으면
   플로피 드라이브 모듈에 할당된 메모리는 해제된다. 이러한 기능은 사용자
   어플리케이션이 메모리 부족으로 고생할 때 매우 유용하다.


다음 이전 차례