0
나는 태스크 릿은 다음과 같이 일정 인터럽트 핸들러 (의사 코드)를 가지고 - 커널이 다음 인쇄 후 중단하는 것이 관찰된다왜 인터럽트 핸들러에서 예약 된 태스크 릿이 아닌 실행
struct tasklet_struct mytasklet;
void my_tasklet_function(unsigned long arg1) {
...
pr_alert("Inside tasklet function\n");
...
}
int my_probe() {
....
....
tasklet_init(&mytasklet, my_tasklet_function, arg1);
....
/* Register interrupt handler my_irq_handler*/
....
}
irqreturn_t my_irq_handler(int irq, void *data) {
...
status = read_reg(base_addr, intr_status_reg_offset)
write_reg(base_addr, intr_status_reg_offset, status);
if (status & INTR_MASK_1) {
....
pr_alert("intr 1 came\n");
}
...
...
pr_alert("Schedule tasklet\n");
tasklet_schedule(&mytasklet);
pr_alert("Exit irq\n");
return IRQ_HANDLED;
}
intr 1 came
Schedule tasklet
"exit irq"인쇄가 절대로 표시되지 않습니다. 작업 표 기능의 인쇄물이 인쇄되지 않습니다.
이 태스크 릿을 예약하지 않은 이유는 무엇입니까?
커널이 멈출 수있는 원인은 무엇입니까?
'mytasklet' 객체가 초기화 (정의) 된 방법을 보여줍니다. – Tsyvarev
mytasklet 초기화를 표시하도록 코드가 업데이트되었습니다 –
tasklet이 초기화 된 후에 인터럽트 핸들러가 호출되는지 확인하십시오? (즉,'my_probe()'함수가 호출 된 후에 irq 핸들러 *를 등록하거나, 그 함수에서 *'tasklet_init' 후에 *를 등록하십시오.) – Tsyvarev