향후 Android 버전

현재 Android 출시에서는 기기에서 모든 보드 관련 코드를 커널 모듈로 빌드한 후 제공할 것을 권장합니다. 나머지 커널은 Android에 관해 모놀리식으로 처리됩니다(모놀리식 커널이든 일부가 커널 모듈로 컴파일되든 상관없이 모놀리식으로 처리됨).

모놀리식 커널은 SoC 공급업체의 참조 하드웨어에서 부팅할 수 있는 SoC 커널로, 그 외 특별한 점은 없습니다. 오늘날 SoC 커널은 일반 커널과 유사하게 취급되며, 보드 관련 저장소에서 대량 복제됩니다. 이 배포 모델에서 커널은 각 분기에서 같은 버그에 관해 다르게 수정되어 서로 다른 시간에 선별되거나 동일한 버그를 다르게 수정하기 때문에 커널의 향후 업데이트가 지연됩니다. 이 문제를 해결하기 위해 SoC를 사용하는 모든 사용자가 동일한 SoC 커널에 기여할 수 있도록 SoC 커널은 별도의 결과물이어야 합니다.

모놀리식 커널 조각화

SoC 커널은 시간이 지남에 따라 Android 출시 및 ODM 전반에서 조각화됩니다.

그림 1. 기기 커널 복제

이 예는 다음을 보여줍니다.

  1. 보드 관련 분기/태그를 교차 병합하려면 상당한 노력과 시간이 필요합니다.
  2. 교차 병합을 기다리는 동안 Android 기기 제조업체에서는 버그/보안 수정을 위해 자체 커널을 패치합니다.
  3. 이전 버전과의 차이는 향후 업그레이드/병합을 어렵게 만듭니다.

일반 SoC 커널

일반 SoC 커널을 위해 제안된 모델은 SoC 관련 버그 수정, LTS 업그레이드 및 보안 수정 등의 변경사항으로 인해 생긴 문제를 해결합니다. 예를 들어 이상적인 unified-per-SoC-kernel 시나리오의 워크플로는 다음과 같습니다.

그림 2. Android 8.x 이상 기기 커널

이 워크플로는 기기 제조업체와 협력하여 일반 SoC 커널을 최신 상태로 유지해 조각화된 커널 저장소의 문제를 해결하기 위해 마련되었습니다. Android 8.x 이상에서는 ODM에 가능한 모든 옵션을 제공하여 ODM에서 자체 SoC 커널을 유지하는 대신 LTS 업그레이드, 버그 수정, 보안 패치 등의 업그레이드에 일반 SoC 커널을 사용하도록 합니다.

우선 모든 ODM/공급업체가 SoC에 단일 커널 소스를 사용하도록 장려하고자 하며, 앞으로는 SoC당 커널의 단일 바이너리를 배포하는 방향으로 나아갈 것입니다.

커널 변경사항 업스트림

최신 커널 버전으로 보다 쉽게 자동으로 업데이트하고, 제품을 빌드할 수 있는 더욱 안전하고 신뢰할 수 있는 플랫폼을 ODM에 제공하기 위해 SoC 공급업체는 커널 변경사항을 업스트림하고 이러한 변경사항이 기본 kernel.org 저장소에서 수락되도록 노력하는 것이 좋습니다. 처음에는 추가 작업과 엔지니어링이 필요하겠지만 장기적으로는 시간과 비용을 절약할 수 있습니다. 병합된 코드는 커뮤니티의 검토를 거치지 않은 코드보다 버그 및 보안 문제가 적고 품질이 훨씬 우수합니다.

내부 커널 API가 시간이 흐름에 따라 진화하므로 SoC 전체 지원이 업스트림으로 병합되면 커뮤니티에서는 필요한 API를 변경할 수 있어 플랫폼의 수명이 연장됩니다. 커뮤니티에서 관리하는 많은 커널 테스트 플랫폼(예: kernelci.org) 중 하나에 하드웨어 플랫폼을 추가하여 개발 출시 및 안정화 출시에서 회귀가 발생했는지 자동으로 커널을 테스트할 수 있습니다.

코드를 업스트림하기 위해 Linux 커널 커뮤니티와 협력하는 데 도움을 얻으려면 다음 리소스를 참조하세요.

  • Documentation/process(4.9 이하 버전의 Documentation/development-process)
  • Documentation/CodingStyle
  • Documentation/SubmittingPatches

커뮤니티는 최소한의 검토 프로세스를 거쳐 커널의 스테이징 부분에 독립형 드라이버와 파일 시스템이 적용될 수 있도록 합니다. 여기서 커뮤니티는 코드 품질을 개선하고자 노력합니다.