1. 註冊軟中斷當然是通過open_softirq
例子如下:
軟中斷timer_softirq的中斷處理函式為:run_timer_softirqvoid __init init_timers(void)
void open_softirq(int nr, void (*action)(struct softirq_action *))
之所以成為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萬元。如果你和朋友 家人合夥投資創業,可選擇普通的...