모듈로 빌드하기 위해 3상태 커널 구성 옵션을 설정했지만 런타임에 해당 커널 모듈을 로드하지 않고 자동으로 로드하지 않는다고 가정해 보겠습니다. 결과 커널은 옵션을 완전히 비활성화한 것처럼 동일하게 작동합니까? 아니면 언로드된 모듈과 비활성화된 커널 옵션 사이에 차이점이 있습니까?
가끔 젠투 시스템에 패키지를 설치하는 동안 다음과 같은 경고 메시지가 나타납니다.
CONFIG_FLUX_CAPACITOR는 설정되어서는 안되는데 설정되었습니다.
일반적으로 이 옵션은 실제로 모듈로 빌드되도록 설정되어 로드되지 않습니다. 지금까지 소프트웨어는 내가 겪은 모든 상황에서 잘 작동하는 것 같지만, 이것이 일반적으로 기대할 수 있는 것인지 궁금합니다.
답변1
컴파일 타임 옵션을 비활성화하면 코드가 컴파일되지 않습니다.
모듈 언로드는 코드가 모듈로 컴파일되지만 메모리에 로드되지 않으므로 실행되지 않음을 의미합니다. 때로는 모듈이 자동으로 로드될 수 있으므로 무언가를 비활성화해야 하는 경우 안전한 옵션은 컴파일 타임에 비활성화하거나 블랙리스트에 추가하는 것 /etc/modprobe.conf
입니다 /etc/modprobe.d/*
. 또는 파일 시스템에서 모듈 파일을 제거하십시오. depmod
나중에 이를 실행하고 이에 의존하는 다른 모듈이 있을 수 있음을 참고하십시오(나중에 문제가 발생할 수 있음).
즉, 능력치는 동일합니다. 비활성화(비)한 모듈을 사용하거나 사용하지 않고 실행하는 데 적합한 코드는 약간 다를 수 있습니다. 함수 A를 모듈의 커널로 컴파일할 수 있다고 가정합니다. 기능 B가 기능 A를 사용할 수 있지만 필요하지 않은 경우 생성된 코드가 다를 수 있습니다. A를 활성화하면(모듈로 또는 컴파일되어) B에 기능 A가 있는지 확인하는 선택적 검사가 포함될 수 있습니다. A가 비활성화된 경우컴파일 타임에, B의 이러한 검사는 관련이 없으며 완전히 건너뛸 수 있습니다. 그러나 이는 코드 자체에 명시적으로 명시되어야 하며(예: C #ifdef
명령어를 통해) 컴파일러만으로는 이를 결정할 수 없습니다. 따라서 기능 A를 선택적 종속성으로 만드는 부분의 작성자에 따라 다릅니다. 기능적으로 다르게 호출해야 하는지 여부는 의심스럽습니다. 기능은 변경되지 않지만 실행 시간이 변경될 가능성이 높습니다(조금이라도 - 그러나 일부 특수한 경우에는 이것이 중요할 수 있음).