Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

커널 구성

다음 구성 설정을 Android 커널 구성의 기본으로 사용합니다. 설정은 android-base, android-base-ARCH, android-recommended 관련 .cfg 파일로 분류됩니다.

  • android-base 옵션은 핵심 Android 기능을 사용 설정하고 모든 기기에서 지정한 대로 구성해야 합니다.
  • android-base-ARCH 옵션은 핵심 Android 기능을 사용 설정하며 ARCH 아키텍처의 모든 기기에서 지정한 대로 구성되어야 합니다. 모든 아키텍처에 아키텍처별 필수 옵션과 관련된 파일이 있는 것은 아닙니다. 아키텍처에 파일이 없으면 Android의 추가 아키텍처 관련 커널 구성 요구사항도 없습니다.
  • android-recommended. 이 옵션은 고급 Android 기능을 사용 설정하며 기기에 선택사항으로 적용할 수 있습니다.

이러한 구성 파일은 kernel/configs repo에 있습니다. 사용 중인 커널 버전과 일치하는 구성 파일 세트를 사용하세요.

기기에서 커널을 강화하기 위해 이미 실행된 제어에 관한 자세한 내용은 시스템 및 커널 보안을 참조하세요. 필수 설정에 관한 자세한 내용은 Android 호환성 정의 문서(Android CDD)를 참조하세요.

커널 구성 생성

최소화된 defconfig 형식을 사용하는 기기는 커널 트리에서 merge_config.sh 스크립트를 사용하여 옵션을 사용 설정합니다.

ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg

이렇게 하면 새 defconfig 파일을 저장하거나 사용 설정된 Android 기능으로 새 커널을 컴파일하는 데 사용할 수 있는 .config 파일이 생성됩니다.

추가 커널 구성 요구사항

경우에 따라 Android 종속 항목을 충족하기 위해 플랫폼 운영자가 여러 커널 기능 중에서 선택할 수 있습니다. 위에서 설명한 커널 구성 프래그먼트 파일의 형식은 논리 표현식을 지원하지 않기 때문에 이러한 파일에서는 이와 같은 종속 항목을 표현할 수 없습니다. Android 9 이상에서 CTS(호환성 테스트 도구 모음)VTS(공급업체 테스트 도구 모음)는 다음 요구사항이 충족되는지 확인합니다.

  • CONFIG_OF=y 또는 CONFIG_ACPI=y
  • 4.4 및 4.9 커널에 CONFIG_ANDROID_LOW_MEMORY_KILLER=y가 있거나 CONFIG_MEMCG=yCONFIG_MEMCG_SWAP=y가 둘 다 있습니다.
  • CONFIG_DEBUG_RODATA=y 또는 CONFIG_STRICT_KERNEL_RWX=y
  • CONFIG_DEBUG_SET_MODULE_RONX=y 또는 CONFIG_STRICT_MODULE_RWX=y
  • ARM64 전용: CONFIG_ARM64_SW_TTBR0_PAN=y 또는 CONFIG_ARM64_PAN=y

또한 Android 9 이상에서 4.9 커널에는 CONFIG_INET_UDP_DIAG 옵션을 y로 설정해야 합니다.

USB 호스트 모드 옵션 사용 설정

USB 호스트 모드 오디오의 경우 다음 옵션을 사용 설정합니다.

CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=y
# CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver

USB 호스트 모드 MIDI의 경우 다음 옵션을 사용 설정합니다.

CONFIG_SND_USB_MIDI=y

TSYNC와 Seccomp BPF

Seccomp BPF(Secure Computing Berkeley Packet Filter)는 프로세스가 시스템 호출을 실행할 수 있는 컨텍스트를 정의하는 샌드박스를 생성하도록 하는 커널 보안 기술입니다. 스레드 동기화(TSYNC) 기능은 다중 스레드 프로그램에서 Seccomp BPF 사용을 설정합니다. 이 기능은 Seccomp 지원 업스트림이 있는 아키텍처(ARM, ARM64, x86 및 x86_64)로 제한됩니다.

Android Live-Lock 데몬

Android 10에는 커널 교착 상태를 포착하고 완화하도록 설계된 Android Live-Lock 데몬(llkd)이 포함되어 있습니다. llkd 사용에 관한 자세한 내용은 Android Live-Lock 데몬을 참조하세요.

ARM64에서 vDSO32 사용

vDSO(Virtual Dynamic Shared Object)는 시스템 호출을 대체하고 올바르게 구성해 사용하면 주기 비용을 줄일 수 있습니다. Android 10은 64비트 커널에서 vDSO32 지원을 추가합니다. Android에서는 64비트 커널에서 vDSO64를, 32비트 커널에서 vDSO32를 이미 지원하고 있습니다. ARM64 아키텍처에서 vDSO32(CONFIG_VDSO_COMPAT)를 사용하면 배터리 수명이 0.4% 증가하고 다른 성능이 향상됩니다.

Linux 커뮤니티는 아키텍처 간에 vDSO를 통합하기 위해 노력하고 있습니다. arm32 컴파일러 triplet과 함께 CONFIG_COMPATCONFIG_CROSS_COMPILE_COMPAT_VDSO를 사용하여 vDSO32를 사용 설정하여 Linux 커널에서 vDSO를 설정할 수 있습니다. Android 커널 팀은 vDSO 패치 시리즈의 이전 버전을 Pixel 기기로 백포팅했으므로 Pixel 커널 빌드에서 LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN 경로, CROSS_COMPILE_ARM32 참조, CONFIG_CROSS_COMPILE_ARM32 구성 등의 예를 찾을 수 있습니다.