Chapter 21. 새로운 커널 설정 옵션 추가하기

Table of Contents
21.1. 그럼, 커널 옵션이란 무엇일까요?
21.2. 그럼 이제 어떠한 일을 해야 할까요?

Jörg Wunsch 작성

장연욱 번역

Note: 이 장을 읽기 전에 커널 설정에 대해서 익숙해 있어야 합니다.

21.1. 그럼, 커널 옵션이란 무엇일까요?

커널 옵션의 기본적인 사용에 대해서는커널 설정장에서 기술하고 있습니다. 또한, 그 장에서는 "기존의" 옵션과 "새로운 스타일의" 옵션에 대해서도 기술하고 있습니다. 궁극적으로는 커널에서 지원되는 모든 옵션을 새로운 스타일로 바꾸어서 사용자들이 config(8) 을 실행시키고 커널 디렉토리에서 make depend 명령을 실행시켰을 때 커널 생성 작업에서 자동적으로 변경된 사항만을 골라내고 필요한 파일만을 컴파일하도록 하는 것입니다.지금과 같이 매번 config(8) 을 수행할 때마다 기존의 컴파일 디렉토리를 삭제하는 작업은 이제(다시?) 없어질 수도 있습니다.

기본적으로 커널 옵션이라는 것은 커널을 컴파일하는 과정에 필요한 C 전처리기 매크로를 정의하는 것에 불과합니다. 빌드를 진정 선택적으로 만들기 위해서는 대응되는 커널의 소스 부분 ( 또는 커널의 .h )이 옵션이라는 개념으로 다시 작성되어야 합니다. 다시 말하자면, 설정 옵션에 기본값이 중첩될 수 있어야 하는 것이라 할 수 있습니다. 이는 다음과 같이 지정될 수 있겠죠.

    #ifndef THIS_OPTION
    #define THIS_OPTION (어떤 기본값(default value))
    #endif /* THIS_OPTION */

이러한 방법으로 자신의 설정 파일 내에 있는 옵션에 새로운 값을 부여하고자 하는 관리자는 기본값이 미치는 영향을 없애고, 새로운 값을 부여하게 됩니다. 전처리기가 수행되면서 소스는 새로운 값으로 대체됩니다. 그러므로 그것은 기본값이 어떠한 것이었든지 간에 유효한(valid) C 구문이어야 합니다. .

또한 코드를 다음과 같은 블럭 내에 위치시킴으로써 단순히 켜고 끄기만 하는 옵션을 만들어 낼 수도 있습니다.

    #ifdef THAT_OPTION
    
    [여기에 여러분의 코드가 들어갑니다.]
    
    #endif

단순히 THAT_OPTION 을 설정 파일에 선언함으로써(어떤 값을 지정하든지, 아니면 아무 값도 지정하지 않든지 간에) 해당 부분의 코드를 포한시킬지 여부를 결정하게 되는 것입니다.

만약 여러분이 C 언어에 익숙하다면, 참조하는 하나의 #ifdef만 있어도 바로 "설정 옵션"으로 인식할 수도 있습니다. 하지만, 많은 사람들은 설정 파일에 다음과 같이 입력하고

    options		notyet,notdef

왜 계속 커널 컴파일에 실패하는지 의아해 할 일은 없겠지요 :-)

확실히, 옵션에 대해서 임의의 이름을 사용하면, 커널 소스 트리 내에서 그 이름들을 찾아내기는 어려워집니다. 새로운 스타일 에서의 근본 논리는 각 옵션이 커널 컴파일 디렉토리 내에 있는 각각의 분리된 .h 내에 들어가게 된다는 것입니다. 이러한 각각의 파일은 opt_foo.h과 같이 명명됩니다. 이렇게 함으로써 통상적인 Makefile에 대한 의존성이 적용될 수 있으며, make명령은 한번 변경된 옵션에 대해서 어떤 것들이 새로 컴파일되어야 하는지를 파악할 수 있게 됩니다.

이전 스타일의 옵션 구조는 빨리 사라지게 될 로컬 옵션이나 실험적인 옵션에 대해서는 한가지 장점을 가지고 있습니다. 커널 소스에 #ifdef만 추가하면 쉽게 추가할 수 있으며, 이미 커널 설정 옵션으로 만들어지기 때문입니다. 이러한 경우, 그 옵션을 사용하고자 하는 관리자는 그 옵션에 대한 암묵적인 사실들에 대한 지식을 가지고 있어야 합니다. (그리고 아마도 그 자신의 커널 내에서 어떤 부분을 직접 재컴파일해 주어야 할 것입니다. ) 일단 지원되는 모든 옵션에 대한 지정 작업이 끝나면, config(8)는 지원되지 않는 옵션을 선택하였다고 경고를 보낼 것입니다. 그렇지만, 커널의 Makefile에는 그 옵션이 지정될 것입니다.