[Android][kernel]

2023년 2월 기준으로 wakelock 코드는 여전히 Android 커널의 메인라인에 존재합니다. 관련 소스의 위치는

aosp/kernel/common/kernel/power/wakelock.c 파일의 내용을 확인합니다.

Linux 커널 소스 코드와 Android 커널 소스 코드 모두 동일한 내용이 존재합니다.

Embedded Android 책에 따르면 이것은 전원 관리 관련 기능입니다.

Linux 전원 관리의 인기 있는 사용 사례는 노트북입니다. Linux를 실행하는 랩톱을 닫으면 절전 모드로 들어갑니다. 절전 모드에서 시스템 상태는 RAM에 보존되지만 다른 모든 하드웨어 구성 요소는 중지됩니다. 이것은 컴퓨터의 배터리 소모를 최소화합니다. 노트북 화면이 다시 열리면 노트북이 깨어나고 사용자는 이전과 동일한 상태로 즉시 작업을 시작할 수 있습니다.

이 방법은 랩톱 및 데스크톱과 같은 장치에 적합하지만 스마트폰과 같은 모바일 장치에는 적합하지 않습니다.

사용자의 명령에 따라 절전 모드로 전환하는 대신 Android 커널은 가능한 한 자주 그리고 신속하게 절전 모드로 전환됩니다. 앱이 중요한 작업을 수행하거나 사용자 입력을 기다리는 경우 Wakelock은 시스템이 절전 모드로 전환되지 않도록 깨어 있는 상태로 유지합니다.

Wakelock 및 조기 절전 기능은 Linux의 전원 관리 기능을 기반으로 합니다. 그러나 중요한 작업을 수행하거나 사용자 입력을 기다리는 경우 앱 및 드라이버 개발자는 명시적으로 wakelock을 요청해야 합니다. 그래서 Android 팀은 다른 개발 모델을 도입했습니다. 대부분의 경우 앱 개발자는 wakelock을 직접 처리할 필요가 없습니다. 필요한 잠금을 자동으로 수행하기 때문입니다. 그럼에도 불구하고 Power Manager 서비스를 사용하여 명시적으로 wakelock을 얻을 수 있습니다. 반면 드라이버 개발자는 기본 wakelock을 호출할 수 있으며 이는 wakelock을 설정하고 해제할 때 커널에 추가됩니다.

wakelock 관련 설명입니다. 이런 것들을 함께 알아가시면 좋을 것 같습니다.

  • Wakelocks 및 임베디드 문제(http://lwn.net/Articles/318611)
  • Wakelock에서 실제 솔루션으로(http://lwn.net/Articles/319860)
  • 차단 일시 중지(https://lwn.net/Articles/385103)
  • 일시 중단 차단기 차단(http://lwn.net/Articles/388131)
  • 정지 차단기 다음에 오는 것(http://lwn.net/Articles/390369)
  • 일시 중단 차단기의 대안(http://lwn.net/Articles/416690)
  • Android를 메인라인에 더 가깝게 만들기(http://lwn.net/Articles/472984)
  • Autosleep 및 wakelocks(http://lwn.net/Articles/?? 다음에 문서를 볼 때 재설정해야 합니까? 그렇지 않을 것 같습니다..)

wakelock에서 실제 솔루션으로

위의 문서를 읽어보니 위의 글에서 설명한 것처럼 리눅스 전원 관리 시스템의 경우 웨이크록이 모든 하드웨어를 멈추게 하여 특정 하드웨어가 잘 동작하지 않는 경우가 있습니다. 따라서 개별 하드웨어의 전원 관리가 필요하다고 합니다. 예를 들어 노키아 태블릿의 경우도 약 1주일 동안 완전 정지 모드로 들어가지 않은 것으로 알려졌다.

결국 리눅스 커널은 이를 긍정적으로 받아들이고, 좀 더 리눅스 중심적인 방식으로 리눅스 커널에 통합하는 방법을 논의한 것으로 보인다.

잠시 금지 차단기 대안의 내용을 살펴보면, https://static.lwn.net/images/pdf/suspend_blockers.pdf 의 링크에 무언가가 연결되었습니다. 영어로 읽어야 하는데… DeepL이 잘 번역할 때까지 기다리세요. 그런데 영어를 배우려면 영어로 읽어야 하나…

위의 PDF 내용을 살펴보겠습니다.