기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요
안드로이드의 안자도 모르면서 개발 시작했다가 여차저차 여기까지 오게되었네요
현재 제가 Android PM (Power Manager) 해서 진행하고 있는데요, Suspend 및 Resume 기능 자체는 구현이 끝났습니다.
그런데 한 가지 문제점이 Suspend 상태에서 깨어나야 하는데 깨어 났다가 바로 다시 잠드는 현상이 발생하더군요
즉 WakeUP Source를 설정해 줘서 해당 인터럽트로 깨어나긴 하지만 Wakelock 상태는 변하지가 않더라구요
깨어났을때 키를 눌러주거나 화면을 터치하고 있으면 상위 안드로이드 프레임웍에서 커널 파워 state 를 변경해 줘서 다시
suspend에 들어가지는 않습니다.
처음엔 RTC 타임이 Suspend 상태에서 흘러가지 않는 문제때문에 그런가 보다 했는데 관련된 문제를 수정해도 마찬가지더군요
제 생각에는 Android 프레임웍에서 Suspend Event를 커널에 줘서 suspend 상태로 들어가면서 커널 Power state를 바꿔주지만
커널이 깨어나서도 상위 프레임웍이 이 사실을 모르는 듯 한데.. 따로 상위로 보내야하는 Resume Notification이 있는 것인지.
아니면 RTC 타임의 변화로 suspend에서 깨어난걸 처리해서 Wakelock 상태를 바꿔버리는건지....-_-;;;
코드를 보아서는 후자 같은데..혹시 이 부분을 해보 신 분들의 의견을 듣고 싶습니다.
정말 미치겠네요 ㅠ_ㅠ
예 전 suspend/resume 관련 코드는 따로 작성해서 platform_suspend_ops 로 pm 쪽에 연결했습니다.
딴건 아니고 사용하는 칩셋에 대한 레지스터 백업 및 복원에 대한 것들입니다.
suspend /resume에 대한 기능 확인은 끝난 상태인데요.. 문제는 resume 시 wakelock 이벤트같은게 없다면 다시 suspend로 들어가버린다는 것입니다.
로그를 본다면
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.12 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
Suspending console(s) (use no_console_suspend to debug)
PM: suspend devices took 0.040 seconds
wakeup wake lock: alarm_rtc
soc-audio soc-audio: scheduling resume work
PM: resume devices took 0.560 seconds
Restarting tasks ... <6>soc-audio soc-audio: starting resume work
soc-audio soc-audio: resume work completed
done.
suspend: exit suspend, ret = 0 (2009-09-08 14:22:09.564768000 UTC)
이고 말씀드린 이벤트들.(키입력, 터치)등으로 wakelock 이벤트를 걸어주면
done. --> 이전에 request_suspend_state: wakeup (3->0) at 49717403000 (2009-09-08 14:22:20.600834000 UTC)
와 같이 커널의 power state를 바꿔줘서 suspend 재진입은 안됩니다.
Resume 시 thaw_processes()와 같이 윗단의 프로세스들을 깨워주는 데 문제가 있는 것인지 정확한 포인트를 잡질 못하고 있네요 ...에혀..
저도 그쪽 하는데 같이 이야기 해보시죠^6
제가 Android PM (Power Manager) 해서 진행하고 있는데요, Suspend 및 Resume 기능 자체는 구현이 끝났습니다.
-> 따로 구현 하신건가요..저도 6410할때 보긴했는데 suspend/resume은 원래 커널에 들어있어서 전 특별히 구현해 준
부분은 없었습니다. 구현 하셨다는게 어떤건지 궁금합니다~
제가 6410할때 suspend/resume은 잘 동작했구요 키쪽 인터럽트가 왜 그런지 suspend/resume하면 인터럽트가 동작을 안해서 타이머 방식으로 바꿔준 기억은 납니다.
커널단에서 한번 찍으 보시죠...printk넣어서 실제로 suspend까지 들어가는지요..