ARM Linux 如何 註冊和觸發 軟中斷

2021-06-02 14:09:36 字數 1719 閱讀 9805

1. 註冊軟中斷當然是通過open_softirq

例子如下:

void __init init_timers(void)

void open_softirq(int nr, void (*action)(struct softirq_action *))

軟中斷timer_softirq的中斷處理函式為:run_timer_softirq

之所以成為softirq,是因為這些中斷是由硬體中斷來間接觸發的,如何間接觸發的呢:

硬體中斷處理函式-->對軟中斷的相應位置位-->喚醒ksoftirqd執行緒-->執行軟中斷的中斷處理函式

2. 硬體中斷如何通過置位喚醒ksoftirqd執行緒

timer interrupt handler->

timer_tick->

update_process_times->

run_local_timers->

hrtimer_run_queues()和raise_softirq(timer_softirq)->

raise_softirq_irqoff->

__raise_softirq_irqoff

即(local_softirq_pending() |= (x))

3. 如何執行軟中斷的action《中斷處理函式》

對於timer_softirq來說,每次system clock產生中斷時,即乙個tick 到來時,在system clock的中斷處理函式中會呼叫run_local_timers來設定timer_softirq觸發條件;也就是當前cpu對應的irq_cpustat_t結構體中的__softirq_pending成員的第timer_softirq個bit被置為1。 而當這個條件滿足時,ksoftirqd執行緒(入口函式run_ksoftirqd,cpu_callback:kthread_create(run_ksoftirqd, hcpu, "ksoftirqd/%d", hotcpu);)會被喚醒,然後按照下面的流程呼叫timer_softirq在陣列softirq_vec中註冊的action,即run_timer_softirq。

run_ksoftirqd--->do_softirq--->__do_softirq--->softirq_vec[timer_softirq].action

static int run_ksoftirqd(void * __bind_cpu)

__set_current_state(task_running);

while (local_softirq_pending())

preempt_enable();

set_current_state(task_interruptible);

} __set_current_state(task_running);

return 0;

wait_to_die:

preempt_enable();

/* wait for kthread_stop */

set_current_state(task_interruptible);

while (!kthread_should_stop())

__set_current_state(task_running);

return 0;

}

ARM linux如何開啟串列埠

查詢串列埠對應核心的串口號 可以使用 ls dev tty 檢視所有和串列埠相關的裝置節點檔案 下面是各類tty的區別 1 ttys 串列埠終端 dev ttysn 串列埠終端 serial port terminal 是使用計算機串列埠連線的終端裝置。計算機把每個串列埠都看作是乙個字元裝置。有段時...

如何在arm linux平台連線ios裝置

在pc上,無論是windows還是linux都可以連線管理你的ios裝置,那麼如何去實現在arm平台下與ios通訊呢,其實你你需要把linux下的usbmuxd和libimobiledevice交叉編譯就可以了,管道就打通了,接下你也可以用ssh或ifuse。系統 linux 2.6.32 74 g...

如何註冊公司

一 選擇公司的形式 普通的有限責任公司,最低註冊資金3萬元,需要2個 或以上 股東,從06年1月起新的公司法規定,允許1 東註冊有限責任公司,這種特殊的有限責任公司又稱 一人 但公司名稱中不會有 一人 字樣,執照上會註明 自然人獨資 最低註冊資金10萬元。如果你和朋友 家人合夥投資創業,可選擇普通的...