FreeBSD 핸드북 : 새로운 커널 설정 옵션 추가하기 : 어쨌든, 커널 옵션이란 무엇입니까?
Previous: 새로운 커널 설정 옵션 추가하기
Next: 이제 무엇을 해야 합니까?

21.1. 어쨌든, 커널 옵션이란 무엇입니까?

커널 옵션의 사용은 기본적으로 커널 설정절에서 설명하였습니다. 또한 전통적인 방법과 새로운 방법에 대한 설명도 그곳에 있습니다. 최종적인 목표는 모든 옵션을 새로운 방법으로 바꾸는데 있습니다. 그러면 빌드 프로세스는 config(8)을 실행한 후 커널 컴파일 디렉토리에서 올바르게 make depend를 한 사람을 위하여 수정된 옵션을 자동적으로 찾고, 그 옵션에 관계된 파일들만 다시 컴파일합니다. 매 config(8)실행할 때마다 지난 컴파일 디렉토리를 지우는 것은 이미 지워져 있으므로 또 한번 지우는 것입니다.

기본적으로 커널 옵션은 커널 컴파일 과정에서 C언어의 전처리 과정(preprocessing) 정의의 불과합니다. 빌드를 선택적이게 하려면 커널 소스의 해당하는 부분 (또는 커널의 .h 파일)이 반드시 옵션이라고 생각을 하고 작성하여야 합니다. 다시 말하면 기본값은 커널 옵션에 의해서 무시되어야 합니다. 일반적으로 다음과 같이 씁니다.

#ifndef THIS_OPTION
#define THIS_OPTION (some_default_option)
#endif /* THIS_OPTION */

이와 같은 방법으로, 관리자는 설정 파일(config file)에 새로운 옵션 값을 적음으로써 기본값을 무시하고 새로운 값을 적용 시킬수 있습니다. 분명히 새로운 값은, 전처리 과정에서 소스 코드로 대체되므로, 반드시 기본 값이 사용된 어떠한 구문에서도 유효한 C언어 표현이어야 합니다.

값이 없는 옵션을 사용하여 특정한 코드를 포함시키거나 포함시키지 않게 하기 위해서는 다음과 하면 됩니다.

#ifdef THAT_OPTION
[your code here]
#endif

단순히 설정 파일에서 값이 있거나 없거나 상관없이 THAT_OPTION을 써 줌으로써 해당하는 부분이 작동 할 것입니다.

C언어에 익숙한 분들은 적어도 하나의 #ifdef가 참조하는 모든 것은 ``커널 설정''이라는 것을 알 수 있을 것입니다... 하여간 설정 파일에

	options notyet,notdef

라고 써 놓고, 커널 컴파일이 왜 실패했는지 의아해 하실분은 없으시겠죠. :-)

분명히 임의적인 옵션 이름은 커널 소스 트리에서 사용법을 찾기 힘들게 합니다. 각각의 설정이 커널 컴파일 디렉토리 안에 opt_foo.h로 약속된 이름으로 분리된 어느 .h에 속하느냐는 새로운 설정 방법에서의 원리입니다. 이와 같은 방법은 일반적인 Makefile의 의존성을 적용할 수 있게 해주며, 설정이 바뀌었을 경우 make가 다시 컴파일 해 주어야 할 것을 결정할 수 있도록 해줍니다.

이전의 설정 방식은 수명이 짧을 거라 예상되는 국소적 옵션이나 실험적인 옵션에서는 여전히 한가지 장점은 있습니다. 그러나 커널 소스에 #ifdef를 첨가하기는 쉬우므로 위의 옵션은 이미 설정 옵션이 되어있습니다. 이와 같은 경우, 위의 옵션 같은 것을 사용하는 관리자는 그 옵션에서 예상되는 결과에 대해서 알아야 합니다 (그리고 아마도 직접 강제적으로 커널의 일부분을 다시 컴파일하여야 겠지요). 지원되는 모든 옵션을 변경 했다면, config(8)는 설정 파일에서 지원되지 않는 옵션을 볼 때마다 경고할 것입니다. 그러나 지원되지 않는 옵션도 커널의 Makefile에는 포함됩니다.


FreeBSD 핸드북 : 새로운 커널 설정 옵션 추가하기 : 어쨌든, 커널 옵션이란 무엇입니까?
Previous: 새로운 커널 설정 옵션 추가하기
Next: 이제 무엇을 해야 합니까?