INTERRUPT

포스트: 25
Tags

Posts

25 posts

[라즈베리파이] 인터럽트 핸들러 등록(2) - #CS

Guillermo Austin Kim|2018년 5월 25일

[라즈베리파이] 인터럽트 핸들러 등록(1) - #CShttp://rousalome.egloos.com/9976901에서 계속 ... 이번에는 다른 코드를 입력해서 인터럽트 핸들러와 인터럽트 디스크립터에 대해 알아볼게요. 다음 패치는 인터럽트 핸들러를 등록한 후 바로 해당 인터럽트 번호로 인터럽트 디스크립터를 커널 함수로 읽어와 인터럽트 설정 정보를 출력합니다. 제대로 인터럽트 핸들러를 등록했는지 점검하고 싶을 때 활용하면 좋은 코드입니다. 파라미터가 인터럽트 번호이므로 인터럽트 번호만 대입하면 다른 함수에서도 호출할 수 있죠. 이제부터 코드를 어떻게 작성했는지 함께 살펴볼까요? 우선 dwc_otg_driver_probe 함수 위에 다음 코드를 입력합니다.1 static void interrupt_de

[라즈베리파이] 인터럽트 핸들러 등록(1) - #CS

Guillermo Austin Kim|2018년 5월 22일

인터럽트 핸들러를 등록하는 처리 과정을 배우기 전에 우선 핸들러란 단어의 의미를 알 필요가 있습니다. 보통 핸들러는 동적으로 바뀌는 액션을 처리하기 위한 용도로 호출합니다. 그래서 핸들러는 함수 포인터로 등록해서 처리하는 경우가 대부분입니다. 만약 어떤 시스템에 인터럽트를 36개로 설계했으면 36개의 if else 문으로 인터럽트 핸들러를 호출하면 어떻게 될까요? 만약 다른 시스템에서 40개면요? 참 리눅스 커널 코드를 유지 보수하기 어렵겠죠. 그래서 인터럽트 핸들러는 함수 포인터로 등록합니다. 인터럽트 핸들러는 해당 인터럽트를 처리하기 위한 함수들이며 보통 인터럽트 종류만큼 인터럽트 핸들러 함수들이 있습니다. 인터럽트 핸들러 등록 시 기본 파라미터해당 인터럽트가 발생하면 해당 인터럽트 핸들러 함수가 호출

[라즈베리파이][리눅스커널] 인터럽트 소개(0)

Guillermo Austin Kim|2018년 3월 2일

인터럽트란인터럽트란 단어가 여러분들은 생소하신가요? 낯설게 들리는 분도 있고 귀에 익은 분도 있을 텐데요. 평소 인터럽트를 뭐라고 하죠? 일상생활에서 인터럽트는 보통 갑자기 생긴 일이나 하던 일을 멈춘다는 의미죠. 예를 들면 책을 읽다가 전화가 와서 읽던 책을 덮어 놓고 전화를 받는 상황이죠. 임베디드 시스템 관점으로 인터럽트는 뭘 의미하죠? 우선 하드웨어 관점으로는 하드웨어 변화를 감지해서 외부 입력으로 전달되는 전기 신호로 볼 수 있습니다. 예를 들면 키보드를 손으로 입력하면 하드웨어적으로 키보드 하드웨어의 변화를 감지하고 신호를 유발하죠. 보통 하드웨어 개발자들은 종종 오실로스코프란 장비로 인터럽트가 제대로 올라오는지 측정을 하죠. 인터럽트 신호를 측정하면 아래와 같은 파형을 볼 수 있는데요. 참고

인터럽트(2) - 인터럽트 핸들러는 누가 언제 호출하나?

Guillermo Austin Kim|2018년 1월 29일

인터럽트 핸들러는 누가 언제 호출할까요? 인터럽트가 떴을 때 인터럽트 벡터가 실행되어 인터럽트 핸들러를 호출합니다.인터럽트 핸들러를 호출할 때 프로세스는 정해져 있지 않습니다. 어떤 프로세스가 돌던 인터럽트가 뜰 수 있기 때문입니다. 그럼 인터럽트 핸들러는 누가 호출한다고 대답해야 할까요? 정답은 없지만 인터럽트 벡터라고 말할 수 있습니다. 참고로 인터럽트 벡터는 ARM이 실행시킵니다. 인터럽트가 뜨면 인터럽트 벡터인 __irq_svc 심볼로 시작해서 handle_irq_event_percpu 함수까지 처리됩니다.이후 handle_irq_event_percpu 함수 내 action->handler 함수 포인터가 실행될 때 인터럽트 핸들러를 호출하죠 이 때 파라미터가 해당 인터럽트의 디스크립터와 pri