안녕하세요.
S5PV210 Samsung Processor 기반 단말에 Power Management 기능을 구현 중에 있습니다.
리눅스는 2.6.32 버전입니다.
문제점 현상은. Power Sleep과 Resume을 Power Key로 반복하다면 Resume이 어느 순간 되지 않는 문제입니다.
단말이 Sleep에 빠져서 Resume하다가 문제 생기면 디버깅이 정말 어렵네요.
Sleep시에 Cortex-A8 coere가 죽기 땜시.. 디버깅 자체가 많은 어려움이 있는 것 같아요.
1. JTAG 활용할 수 없지. (문제점 재현될 때 JTAG Attach로 붙일 수 없음. Bus Error Generated by CPU)
2. Uart Serial Log Message 확인 불가. (Sleep 전까지 로그 확인 가능,)
- 이거는 소스를 수정해서 디버깅 할 수 있는 유일한 수단으로 보임.
하지만 Kernel Printk가 아닌 별도로 바로 Uart로 log 내보도록 구현해야 함. 안따갑게 내 능력 밖.
3. LED로 동작 확인
3번의 경우로 난해한 현상이 나오네요. 우선 Power Key ISR(Interrupt Service Routine)에 LED을 켰다 끄는 루틴 삽입하여 문제점 재현 될때 관찰하면 켜지고 꺼집니다. 문제점 재현 될 때 ISR이 가동 되는 걸로 봐서..... 특정 Process에 무한 루프에 빠진 것 아닐까라는 생각도 했지만, 찾기가 어렵네요. 리눅스는 Watchdog를 어떻게 사용하나요? 짧은 리눅스 경험으로 관련 코드를 봐서는 제가 가지고 있는 소스는 Watchdog Disable 되어 있더라구요. 재미있는 것은 Linux Idle Process(Swapper)에 주기적으로 LED를 켰다 끄는 루틴을 삽입하여 문제점 재현 될 때 관찰하면 반응이 없다는 것이죠. 물론 문제점 재현 되기 전에는 주기적으로 LED가 꺼졋다 켜지는데요. IDLE에서는 안되고 ISR은 가동 된다. 그래서 Sleep에서 Resume시에 특정 Process에서 무한루프에 빠저 Idle Process로 Contex Switch가 이루지지 않았다고 추측되나 .. 찾기가 어렵다는 것.....
PM Resume될 때 문제로 디버깅이 대체로 난감합니다. 접근 방법도 애매하고.. 3주이상 같은 문제로 고민해도 접근 방법 조차 난감하군요.
===> 상기와 같은 문제로 경험 있으시면 조언 부탁합니다.
감사합니다.
2. 실명이 아닌게 너무 티나서, 대부분 답을 꺼려할겁니다.....쩝aesop의 유일한 규칙(?) 정도니깐요.