7

Linux カーネルで独自の softirq を作成したいと考えています。それを行う正しい方法ですか:

initからトリガーしたいモジュールの に、softirq次の呼び出しを追加します。

394 void open_softirq(int nr, void (*action)(struct softirq_action *))
395 {
396         softirq_vec[nr].action = action;
397 }

そして、スニペットでは、softirq を上げたいので、raise_softirq関数への呼び出しを追加します。

379 void raise_softirq(unsigned int nr)
380 {
381         unsigned long flags;
382 
383         local_irq_save(flags);
384         raise_softirq_irqoff(nr);
385         local_irq_restore(flags);
386 }

そして、私の新しいものを追加softirqしてください:

411 /* PLEASE, avoid to allocate new softirqs, if you need not _really_ high
412    frequency threaded job scheduling. For almost all the purposes
413    tasklets are more than enough. F.e. all serial device BHs et
414    al. should be converted to tasklets, not to softirqs.
415  */
416 
417 enum
418 {
419         HI_SOFTIRQ=0,
420         TIMER_SOFTIRQ,
421         NET_TX_SOFTIRQ,
422         NET_RX_SOFTIRQ,
423         BLOCK_SOFTIRQ,
424         BLOCK_IOPOLL_SOFTIRQ,
425         TASKLET_SOFTIRQ,
426         SCHED_SOFTIRQ,
427         HRTIMER_SOFTIRQ,
428         RCU_SOFTIRQ,    /* Preferable RCU should always be the last softirq */
429         MY_NEW_SOFTIRQ
430         NR_SOFTIRQS
431 };

そしてここで:

 60 char *softirq_to_name[NR_SOFTIRQS] = {
 61         "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "BLOCK_IOPOLL",
 62         "TASKLET", "SCHED", "HRTIMER", "RCU", "MY_NEW_SOFTIRQ"
 63 };

質問:

  • 私は正しいですか、それとも何かを見逃しましたか?
  • それは正しい方法ですか?他のオプションはありますか?
4

2 に答える 2

1

カーネルにパッチを当てて再コンパイルしたい場合は、おそらく正しいことをしています (ただし、RCU_SOFTIRQ の前に移動する必要があります)。

それ以外の場合、IOW をカーネル モジュールで実行する場合は、SoftIRQ コンテキストで何かを実行するために、SoftIRQ に基づく tasklet を使用する必要があります。

tasklet_init()フックを初期化するために使用されます。

tasklet_schedule()登録したタスクレットをスケジュールします。

于 2013-01-14T14:32:22.157 に答える
0

Softirq を静的に宣言する

andMY_NEW_SOFTIRQに追加して、softirq( ) を静的に宣言します。カーネルを再コンパイルします。enum
char *softirq_to_name[NR_SOFTIRQS]

その場で Softirq を登録する

静的に宣言されたら、独自の softirq を実行時にカーネル モジュールで .xml を使用して登録する必要がありますopen_softirq()。経由で割り込みハンドラの終了パスで発生させraise_softirq()ます。

于 2015-05-21T07:27:37.887 に答える