커널 모듈 개요

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

커널 모듈에는 하드웨어 제약이 없는 GKI 모듈과 하드웨어와 관련이 있는 공급업체 모듈, 두 가지 유형이 있습니다. 이 페이지에서는 두 가지 유형의 모듈을 간략히 설명합니다.

GKI 모듈

일부 GKI 커널 기능은 모듈에 제공되므로 이러한 기능이 필요하지 않은 기기에서 GKI 커널의 메모리 공간을 줄일 수 있습니다. 이 아키텍처는 KMI Freeze 주요 일정 후에 공급업체가 새 업스트림 기능을 통합할 수 있는 메커니즘도 제공합니다. GKI 모듈은 Google이 커널 빌드 시간 키 쌍을 사용하여 서명하며 함께 빌드된 GKI와만 호환됩니다. GKI 커널과 GKI 모듈 간에는 ABI 안정성이 없으므로 모듈을 런타임 중에 올바르게 로드하려면 커널과 GKI 모듈을 함께 빌드하고 업데이트해야 합니다.

GKI 모듈에는 보호되는 GKI 모듈보호되지 않은 GKI 모듈, 두 가지 논리적 유형이 있습니다.

보호되는 GKI 모듈

보호되는 GKI 모듈은 Google이 제공하며 어떠한 방식으로도 제한되지 않습니다. 또한 로드 후 커널을 사용하여 빌드된 것처럼 동작합니다. 또한 보호되는 GKI 모듈에는 다음과 같은 특성이 있습니다.

  • 보호되는 GKI 모듈은 공급업체 모듈이나 보호되지 않는 GKI 모듈에서 사용할 수 없는 KMI 커널 기호가 아닌 기호에 액세스할 수 있습니다.
  • 보호되는 GKI 모듈은 기호가 기호 목록에 인용되는 한 KMI 노출 영역의 일부가 되는 기호를 내보낼 수 있습니다.
  • 보호되는 GKI 모듈은 공급업체 모듈에서 재정의할 수 없습니다.

보호되는 GKI 모듈은 GKI 모듈의 기본 클래스입니다. 모든 GKI 모듈은 KMI Freeze 시점에 보호된 것으로 간주합니다.

보호되지 않는 GKI 모듈

보호되지 않는 GKI 모듈은 공급업체 모듈에서 재정의할 수 있습니다. KMI Freeze 후, GKI팀이 공급업체에서 업스트림 Linux의 새 기능을 포함하는 버전으로 기본 구현을 재정의해야 한다고 결정하면 보호되는 GKI 모듈은 보호되지 않는 GKI 모듈로 재분류될 수도 있습니다. 다음 GKI 버전에서 보호되지 않는 모듈은 업스트림 코드가 Android 공통 커널(ACK)에 배치된 후 보호되는 모듈로 재분류됩니다. 보호되지 않는 GKI 모듈에는 다음과 같은 특성이 있습니다.

  • 보호되지 않는 GKI 모듈은 내보낸 기호에 대해 공급업체 모듈과 동일하게 액세스할 수 있습니다.
  • 보호되지 않는 GKI 모듈은 보호된 GKI 모듈에서 내보낸 기호를 내보낼 수 없습니다.
  • 보호되지 않는 GKI 모듈은 코어 커널의 일부인 것처럼 KMI 인터페이스를 보존해야 합니다.
  • 보호되지 않는 GKI 모듈은 공급업체 모듈에서 재정의할 수 있습니다.

공급업체 모듈

공급업체 모듈은 SoC 및 기기별 기능을 구현하기 위해 파트너가 제공합니다. GKI 커널의 일부로 전달되지 않는 기존 커널 모듈은 공급업체 모듈로 제공될 수 있습니다.

GKI 프로젝트의 주요 목표 중 하나는 코어 커널의 하드웨어 관련 코드를 최소화하는 것이므로 공급업체는 GKI 커널에 자체 하드웨어를 명확하게 관리하는 모듈이 포함되지 않을 것으로 예상할 수 있습니다. 예를 들어, 공급업체 ABC Inc,는 CONFIG_ABC_SOC_SUPPORT와 같은 구성이 자체 지원 없이 내장 모듈이나 로드 가능한 GKI 모듈로 사용 설정되지 않을 것을 예상할 수 있습니다.

커널 드라이버 또는 프레임워크가 ACK에 있지만 GKI 커널의 일부로 제공되지 않는 경우 공급업체는 드라이버를 수정하여 공급업체 모듈로 제공할 수 있습니다. 향후 버전에서는 GKI 커널과 동일한 기능이 제공될 수 있으므로 공급업체별 모듈이 아닌 모듈은 이러한 수정사항을 적용하지 않는 것이 좋습니다. GKI 커널에 공급업체 모듈에서 제공하는 기능이 포함된 경우 공급업체 모듈은 로드되지 않습니다. 예를 들어, Android 11의 GKI에는 CONFIG_GREYBUS가 설정되지 않으므로 공급업체는 그레이버스 공급업체 모듈을 제공할 수 있습니다. 그러나 CONFIG_GREYBUS는 Android 12에서 GKI 내장 또는 모듈로 사용 설정될 수 있습니다. 이 경우 그레이버스 공급업체 모듈은 로드되지 않습니다. 공급업체 관련 드라이버가 아닌 드라이버가 공급업체 모듈로 제공되면 해당 드라이버의 업스트림 버전을 사용하는 것이 좋습니다.

vendor 또는 vendor_boot 이미지에서 공급업체 모듈을 제공할 수 있습니다. 부팅 프로세스 초기에 필요한 모듈은 vendor_boot에 있어야 합니다. vendor_boot에서 모듈을 로드하는 데는 부팅 시간 비용이 발생합니다.