Android 12에서 DebugFS 사용

v5.4 이상의 커널 버전을 사용하여 Android 12로 출시되는 기기는 GKI 커널과 함께 제공되어야 합니다. 파트너가 GKI 커널에서 개발하는 동안 userdebug 빌드에서 DebugFS에 액세스할 수 있도록 커널 구성 CONFIG_DEBUG_FS는 GKI defconfig에서 사용 설정됩니다. Android 12로 출시되는 기기의 경우 사용자 빌드에 DebugFS를 마운트하면 안 됩니다.

Userdebug 빌드는 사용자 빌드보다 테스트 범위가 넓으며 개발 주기 내내 테스트를 많이 받습니다. 다음 계획은 DebugFS 액세스와 관련하여 두 빌드 유형 간의 차이를 최소화하고 다음과 같은 이점을 제공합니다.

  • userdebug 빌드에서 새로운 기능을 추가할 때 실수로 DebugFS에 종속되지 않도록 합니다.
  • 개발 주기 초기에 DebugFS의 부재로 인해 손상된 기존 기능이 발견되도록 합니다.

userdebug 빌드에서 Debugfs 액세스는 다음과 같이 분류됩니다.

  1. 기기 부팅 중 DebugFS 파일 초기화. 디버그 데이터 수집을 사용 설정하기 위해 DebugFS의 파일에 대한 쓰기 액세스를 예로 들 수 있습니다.
  2. 버그 신고 생성. dumpstate에서 DumpstateBoard()를 호출하면 dumpstate HAL은 DebugFS 파일을 읽습니다. 이 정보는 버그 신고의 일부가 됩니다.
  3. 기기별 테스트 및 검증

다음 표에서는 이러한 세 카테고리가 각각 Android 12에서 지원되는 방식을 설명합니다. 다음은 userdebug 빌드에만 적용됩니다. DebugFS는 사용자 빌드에 마운트할 수 없기 때문입니다.

사용 사례 Android 12 userdebug 빌드
시작 시 일회성 DebugFS 파일 초기화. 이 액세스는 부팅 시간에 한 번만 발생합니다. dumpstate HAL은 HAL 초기화 중에 이를 실행합니다. 동일하게 사용 설정하려면 init는 HAL을 초기화하기 전에 userdebug 빌드에 DebugFS를 마운트합니다. 기기 부팅이 완료되면 InitDebugFS에서 umount()를 호출합니다.
버그 신고 생성: dumpstate HAL은 버그 신고의 일부가 되는 DebugFS 파일을 읽습니다. dumpstate에서 호출할 때 DumpstateBoard() 내의 dumpstate HAL에서 실행합니다(DumpstateDevice.cpp). Android 프레임워크의 일부인 dumpstate 도구는 호출 중에 DebugFS가 마운트되도록 합니다.
기기별 테스트 및 검증 adb 루트 및 셸. 루트 액세스 권한1으로 adb 셸에서 DebugFS를 마운트합니다.

1루트 액세스 권한으로 adb shell에서 DebugFS를 마운트하려면 다음 명령어를 사용하세요.

adb shell mount -t debugfs debugfs /sys/kernel/debug

필요한 파트너 작업

파트너는 Android 12 기기의 이러한 변경사항에 따라 다음 내용을 적용해야 합니다.

  • DebugFS 노드의 모든 부팅 시간 초기화가 dumpstate HAL 초기화 중에 발생하도록 합니다. 실행 방법에 관한 예시는 DNM: DebugFS 파일의 부팅 시간 초기화 예시를 참고하세요.
  • 런타임 시 DebugFS 액세스를 허용하면 안 됩니다. 다음과 같은 예외가 적용됩니다.
    • 버그 신고 생성(dumpstate HAL에서 제공됨)
    • 테스트 및 검증(adb rootshell에서 액세스 가능하므로 DebugFS가 먼저 마운트되도록 함)

개발자는 userdebug 및 eng 빌드에서 재부팅 시 DebugFs가 마운트된 상태를 유지하도록 디버그 영구 속성 persist.dbg.keep_debugfs_mounted를 설정할 수 있습니다.

GTS 규정 준수 테스트는 DebugFS 파일 시스템이 사용자 빌드에 마운트되지 않았는지 확인합니다. Sepolicy neverallow 문을 사용하면 Android 12 이상으로 출시되는 기기에서 승인되지 않은 프로세스에 DebugFs 액세스 권한이 제공되지 않습니다.