최근 나를 괴롭히는 질문이 있다.
거의 모든 독점 모듈은 트리 외부에 있으므로(따라서 커널 버전에 대해 컴파일되지 않음), 해당 모듈이 정확히 어떻게 컴파일되고 로드되는지 알고 싶습니다.
많은 주요 조직에서는 단일 또는 무엇이든 다운로드를 허용하며 .tar.gz
여러 .deb
커널 버전에서 작동합니다.
다운로드한 모듈이 대상 시스템에 구축되어 있습니까?
소스 코드를 배포합니까?
소스 코드는 어떤 커널 모듈 버전을 구축하고 있는지 알고 있습니까?
아니면 드라이버가 강제로 커널에 로드되거나 finit_module
버전 init_module
무시 매직 플래그를 사용합니까?
아니면 뒤에서 무슨 일이 벌어지고 있는 걸까요?
미리 감사드립니다.
답변1
일반적인 접근 방식은 독점 코드와 소스 코드로 제공되는 "shim"을 포함하는 개체 파일을 제공하는 것입니다. 필요한 경우 적절한 커널에 맞게 다시 빌드할 수 있습니다. 인터페이스 코드는 버전 문자열을 사용한 기호 가져오기 등을 포함하여 커널의 모든 모듈 인터페이스를 처리합니다.
예를 들어, NVIDIA 드라이버는 nv-kernel.o
바이너리 형식으로만 사용할 수 있고 궁극적으로 커널 모듈에 래핑되는 파일로 구성됩니다.