커널 모듈 개요

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

커널 모듈에는 하드웨어에 구애받지 않는 GKI 모듈 과 하드웨어별 공급업체 모듈 의 두 가지 유형이 있습니다. 이 페이지에서는 두 가지 유형의 모듈에 대한 개요를 제공합니다.

GKI 모듈

일반 커널 이미지(GKI) 모듈은 일반 코어 커널과 별도로 부팅이 필요하지 않은 커널 기능을 제공하는 데 사용됩니다. GKI 모듈을 사용하면 사용할 특정 커널 기능을 선택하여 커널 이미지 크기와 런타임 메모리 소비를 줄일 수 있습니다. 크기가 줄어들어 GKI는 Android Go 기기 및 기타 리소스 제한 폼 팩터에 적합합니다.

GKI 모듈은 공급업체가 KMI 동결 이정표 이후 새로운 업스트림 기능을 통합할 수 있는 메커니즘도 제공합니다. 기본 제공 코드는 다른 이미지를 빌드하지 않고 대체할 수 없지만 모듈로 제공되는 코드는 다른 모듈로 대체할 수 있습니다.

GKI 모듈은 런타임에 GKI와 다른 모듈을 구별하기 위해 커널의 빌드 시 서명 인프라를 사용합니다. 서명되지 않은 모듈은 허용 목록에 나타나거나 다른 서명되지 않은 모듈에서 제공하는 기호만 사용하는 한 로드할 수 있습니다.

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

보호된 GKI 모듈

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

  • 보호된 GKI 모듈은 공급업체 모듈 또는 보호되지 않은 GKI 모듈에서 사용할 수 없는 비 KMI 커널 기호에 액세스할 수 있습니다.
  • 보호된 GKI 모듈은 해당 기호가 기호 목록에 인용되어 있는 한 KMI 표면의 일부가 되는 기호를 내보낼 수 있습니다.
  • 보호된 GKI 모듈은 공급업체 모듈로 재정의할 수 없습니다.

보호된 GKI 모듈은 GKI 모듈의 기본 클래스입니다. 모든 GKI 모듈은 KMI 동결 시점에 보호된 것으로 간주됩니다.

보호되지 않은 GKI 모듈

보호되지 않는 GKI 모듈은 공급업체 모듈에 의해 재정의될 수 있습니다. KMI 동결 후 GKI 팀이 벤더가 업스트림 Linux의 새 기능을 포함하는 버전으로 기본 구현을 재정의해야 한다고 결정하는 경우 보호된 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 커널에 공급업체 모듈에서 제공하는 기능이 포함되어 있으면 공급업체 모듈이 로드되지 않습니다. 예를 들어 CONFIG_GREYBUS 는 Android 11에서 GKI에 대해 설정되지 않았으므로 공급업체가 greybus 공급업체 모듈을 제공할 수 있습니다. 그러나 CONFIG_GREYBUS 는 Android 12에서 GKI 내장 또는 모듈로 사용 설정될 수 있으며 이 경우에는 greybus 공급업체 모듈이 로드되지 않습니다. 벤더 모듈로 제공되는 경우 비벤더 특정 드라이버의 업스트림 버전을 사용하는 것이 가장 좋습니다.

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