강좌 & 팁
커널 3.4 에 릴리즈된 주요 내용중 아키텍쳐에 의존적인 패치중에 암에 관련된 내용입니다.
원문은 아래와 같습니다.
S3C64XX: Add basic cpuidle driver (commit)
s3c64xx 에서 cpuidle 에 대한 지원이 추가되었다, 라는 건데요.
커널쪽에서 이 부분에 대한 통합된 드라이버 형태를 갖고 있습니다.
119 /****************************
120 * CPUIDLE DRIVER INTERFACE *
121 ****************************/
122
123 struct cpuidle_driver {
124 const char *name;
125 struct module *owner;
126
127 unsigned int power_specified:1;
128 /* set to 1 to use the core cpuidle time keeping (for all states). */
129 unsigned int en_core_tk_irqen:1;
130 struct cpuidle_state states[CPUIDLE_STATE_MAX];
131 int state_count;
132 int safe_state_index;
133 };
모습은 위와 같구요. struct cpuidle_state 자료 구조 안에 진입하는 enter 함수가 선언됩니다.
s3c64xx 에서는 아이들 진입시 PWRCFG 레지스터에서 WFI 에 대햇서만 마스크를 살려주고 cpu_do_idle 를 호출합니다.
이 함수는 아키텍쳐 함수로 이어지는 데요.
armv6 와 armv7 은 다른 모습을 갖고 있습니다.
armv6 에서는 코프로세서에 통해서 해당 기능이 구현되는데 반하여
armv7 에서는 직접 해당 명령어가 있습니다. wfi 명령이죠.
armv7 에서는 dsb, wfi 를 통해서 간단히 해결합니다.
참고로 wfi 는 wait for interrupt 의 약자인데 쉽게 얘기하면 cpu 가 저전력 모드로 진입해서
인터럽트가 발생할 때까지 기다린다는 것입니다.
간단하죠?
전체 원문은 아래 링크를 참조하세요
http://kernelnewbies.org/LinuxChanges