반응형
디바이스 드라이버를 작성하다 보면 하드웨어를 주기적으로 감시하거나 하드웨어를 제어한 이후에
정상적으로 동작하는지 감시하기 위해 정해진 시간이 초과되면 특정 함수를 수행히는 기능이 필요할 때가 많다
이를 위해 리녹스 커널은 커널 타이머라는 기능을 제공하고 있음.
커널 타이머를 디바이스 드라이버에서 사용하기 위해서는 아래의 구조체와 함수를 이용해야함.
구조체
• struct timer_list: 커널 타이머 구조체
함수
• init_timer(): 커널 타이머 구조체를 초기화한다 .
• add_timer(): 커널 타이머에 수행될 함수를 등록한다
• del_timer(): 커널 타이머 목록에서 등록된 것을 제거한다.
타이머 동작
timer 구조체를 선언해주고
1) init_timer를 통해 해당 구조체를 초기화 해준다. 이 때, 타이머의 시간과 호출할 핸들러 함수를 지정해줌.
2) add_timer 함수를 통해 timer를 timer_list에 등록해주고
일정 시간이 지나면 커널이 handler 함수를 3) 호출 후 4)list에서 제거 (1회성임, 계속 호출하고 싶으면 다시 등록해줘야됨.)
5) 다 쓰고 나면 항상 timer list에서 제거를 해줘야함.
반응형
'Linux BSP' 카테고리의 다른 글
[Linux Device Driver] Interrupt 처리 (0) | 2024.02.27 |
---|---|
[Linux Device Driver] Timer Interrupt (0) | 2024.02.27 |
[Device Driver] 어플리케이션 없이 insmod만으로 동작하는 모듈 프로그램으로 커널 타이머 GPIO제어 (0) | 2024.02.26 |
[Device Driver] 어플리케이션 없이 insmod만으로 동작하는 모듈 프로그램으로 커널 타이머 인터럽트 구현 (0) | 2024.02.26 |
[Device Driver] ioctl 함수 (1) | 2024.02.26 |