アフィニティのIRQ設定問題割り込みハースHi3559AV100プロセッサ

      元の記事、「によりハスHi3559AV100プラットフォームウィーガンド受信プログラム」という質問を投げかけ、これはとても詳細の資料を開くには、専用のその記事に書かれていますが、より多くのコンテンツとして一つの比較的独立しているべきです。

      受信ウィーガンドハスのプラットフォーム上でプログラムを実行しながら分析は、外部GPIOウィーガンドに影響を与えるMPPモジュールの多くを実行するためにハスチップによるものであるとき発見する前に、それは、失われた割り込みが発生していますが、中断中で使用される手順を受け取ります。

      さらなる分析は、一度判決を確認した(下記参照)猫の/ proc /割り込みが得られた知見をコマンドを実行した結果によると、大半はCPU0、ウィーガンドで中断されている上記が生成されますCPU0に割り当てられた割り込みも使用します問題。

////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////

           CPU0 CPU1 CPU2 CPU3       
  1:0 0 0 0 GIC-0 arch_timer 29レベル
  2:arch_timer 9156822 9156735 9156532 9156650 GIC-0 30レベル
  3:0 0 0 0 GIC-0 243レベルIPCM
  9:157 0 0 GIC-0 38レベルUART-PL011
 14:0 0 0 0 GIC-0 63レベルはPL022
 0 0 0 0 GIC-0 64レベルはPL022:15
 16:0 0 0 0 GIC-0 65レベルはPL022
 17:0 0 0 0 GIC-0 66レベルPL022
 18:0 0 0 0 0 GIC-PL022 67レベル
 19:0 0 0 0 GIC-0 192レベル12140000.gpio_chip
 20:0 0 0 0 GIC-0 193レベル12141000.gpio_chip
 21:0 0 0 0 GIC-0 194レベル12142000.gpio_chip
 22:0 0 0 0 GIC-0 195レベル12143000.gpio_chip
 23:0 0 0 0 GIC-0 196レベル12144000.gpio_chip
 24:0 0 0 0 GIC-0 197レベル12145000.gpio_chip
 25:0 0 0 0 GIC-0 198レベル12146000.gpio_chip
 26:0 0 0 0 GIC-0 199レベル12147000.gpio_chip
 27:0 0 0 0 GIC-0 200レベル12148000.gpio_chip
 28:0 0 0 0 GIC-0 201レベル12149000.gpio_chip
 29:0 0 0 0 GIC- 0 202レベル1214a000.gpio_chip
 30:0 0 0 0 GIC-0 203レベル1214b000.gpio_chip
 31:2 0 0 GIC-0 204レベル1214c000.gpio_chip
 32:0 0 0 0 GIC-0 205レベル1214d000.gpio_chip
 33: 0 0 0 0 GIC-0 206レベル1214e000.gpio_chip
 34:0 0 0 0 GIC-0 207レベル1214f000.gpio_chip
 35:0 0 0 0 GIC-0 208レベル12150000.gpio_chip
 36:0 0 0 0 GIC-0 209レベル12151000.gpio_chip
 37:0 0 0 0 GIC- 0 210レベル12152000.gpio_chip
 38:0 0 0 0 GIC-0 215レベル180d3000.shub_gpio
 39:0 0 0 0 0 GIC-43レベル180b0000.rtc
 40:5588734 0 0 GIC-0 68レベル101c0000.ethernet
 42: 212 0 0 0 GIC-0 116レベルxhci-HCD:USB1
 43:0 0 0 0 GIC-0 117レベルxhci-HCD:USB3
 44:2314 0 0 GIC-0 58レベルmmc0
 45:0 0 0 0 GIC-0 106レベルMMC1
 46:0 0 0 0 GIC-0 107レベルMMC2
 53:0 0 0 0 GIC-0 113レベルhiedmacv310
 55:0 0 0 0 GIC-0 92レベルVI_CAP0
 56:0 0 0 0 GIC-0 93レベルVI_PROC0
 57:0 0 0 0 GIC-0 94レベルVI_PROC1
 58:0 0 0 0 GIC-0 118レベルSLVS_EC0
 59:0 0 0 0 GIC-0 120レベルMIPI0
 60:796266 0 0 GIC-0 77レベルVPSS0
 61:43022 0 0 GIC-0 78レベルVPSS1
 62:690722 0 0 GIC-0 75レベルVGS0
 63: 222459 0 0 GIC-0 76レベルVGS1
 64:0 0 0 0 GIC-0 79レベルGDC0
 65:0 0 0 0 GIC-0 80レベルGDC1
 66:0 0 0 0 GIC-0 83レベルDIS
 67:0 0 0 GIC-0 184レベルAVS
 68:0 0 0 0 GIC-0 99レベルVOのInt
 69:0 0 0 0 GIC-0 100レベルHIFBのInt
 70:0 0 0 0 GIC-0 95レベルMIPI_TX
 72:0 0 0 0 GIC-0 71レベルVEDU_0
 73:0 0 0 0 GIC-0 72レベルVEDU_1
 74:0 0 0 0 GIC-0 73レベルVEDU_2
 75:652 0 0 GIC-0 81レベルJPGE_0
 76:0 0 0 0 GIC-0 123レベルvdh_bd
 77: 912964 0 0 GIC-0 124レベルvdh_pd
 78:861008 0 0 GIC-0 126レベルvdh_scd
 79:0 0 0 0 GIC-0 84レベルJPEGD_0
 80:484599 0 0 GIC-0 90レベルnnie0
 81:484821 0 0 GIC-0 91レベルnnie1
 82: 0 0 0 0 GIC-0 240レベルDPU RECT
 83:0 0 0 0 GIC-0 241レベルDPU MATCH
 84:326 0 0 GIC-0 88レベルIVE
 86:0 0 0 0 GIC-0 101レベルAIO割り込み
 87 :1 0 0 0 GIC-0 134レベル11c00000.gpu
 88:3 0 0 0 GIC-0 tde_osr_isr 85レベル
 89:1 0 0 0 GIC-0 135レベル11c00000.gpu
 90:1 0 0 0 GIC-0 133レベル11c00000.gpu
 97:0 0 0 0 PL061 2エッジRST
193:1 0 0 0 PL061 2エッジwiegand_data1
195:1 0 0 0 PL061 4エッジwiegand_data0

IPI0:1297810 2253123 4008151 9711865再スケジュール割り込み
IPI1:割り込み21 10 25 10ファンクションコール
IPI2:0 0 0 0 CPU停止割り込み
IPI3:0 0 0 0タイマ放送割り込み
IPI4:0 0 0 0 IRQ仕事割り込み
IPI5:0 0 0 0 CPUのウェイクアップ割り込み
エラー:0

////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////////////////////////////////

      どのように私はこの問題を解決することができますか?インターネット上で解決策を見つけます。

      1. echoコマンドのCPUのマスク描画の/ proc / IRQ /割り込みID / smp_affinityドキュメントの使用は、CPUへの割り込みの変更親和性を達成することができます。

      動作この方法によれば4> / procの/ IRQ / 193 / smp_affinityエコーを、結果が次のエラーをお勧め:

      エコー:書き込みエラー:入力/出力エラー

      この問題に対する別の解決法によれば、答えは残念です、これは、何の解決策ハードウェアまたはオペレーティング・システム上の意思決定ではありません!

      方法1が失敗します。

      2.解決策を見つけるために、コア層に焦点を当て、アプリケーション層から分離しません。そのようなカーネル関数:irq_set_affinity(clock_event_device-> IRQ、cpumask)、CPUのIRQは、一つまたはどのサービスCPUのIRQを示すいくつかに関連付けられます。

       コードの修正モジュールのこの方法によれば、次のステートメントを追加します。

////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////

      構造体cpumaskのcpumask。

      cpumask.bits [0] =(unsigned long型)0×02;
      irq_set_affinity_hint(wiegand_in_devp-> d0_irq、&cpumask)。
      irq_set_affinity_hint(wiegand_in_devp-> d1_irq、&cpumask)。

////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////

      irq_set_affinity_hint機能は、カーネル/ IRQ / manage.cに順番に機能irq_set_affinityを呼び出すこと__irq_set_affinity関数呼び出し、です。

      この方法は、根本的に問題を解決していないようにみえますが、実際にウィガン2 GPIO割り込み、またはCPU0に割り当てられた後、モジュールが観察されたコンパイルして実行、CAT / procの/ IRQ / 193 / smp_affinity結果、まだF、何の変化。それはなぜでしょうか?カーネルコードの印刷問題のデバッグに参加し続ける(赤色の太字で以下を参照)、ここで見つかりました:

////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////

INT irq_set_affinity_locked(構造体irq_data *データ、CONST構造体cpumask *マスク、
                BOOL力)
{
    構造体irq_chip *チップ= irq_data_get_irq_chip(データ)。
    構造体irq_desc * DESC = irq_data_to_desc(データ)。
    int型RET = 0;
printk( "111 \ n");
    (!チップはチップボード||> irq_set_affinity)であれば
        、戻り-EINVAL。
printk( "222 \ n");

    (irq_can_move_pcntxt(データ)){もし
        RET = irq_do_set_affinity(データ、マスク、力)。
    }他{
        irqd_set_move_pending(データ)。
        irq_copy_pending(DESC、マスク)。
    }

    IF(desc-> affinity_notify){
        kref_get(&desc-> affinity_notify-> KREF)。
        schedule_work(&desc-> affinity_notify->仕事);
    }
    irqd_set(データ、IRQD_AFFINITY_SET)。

    右を返します。
}

////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////////////////////////////////////////

      実際にダウンを実行しませんでした、これはチップボード> irq_set_affinity空のリードによるものである必要がありますが、更なる研究が設定する方法に必要とされる場所は空である理由の特定には、設定する必要があります......

 

 

 

公開された35元の記事 ウォン称賛12 ビュー80000 +

おすすめ

転載: blog.csdn.net/phmatthaus/article/details/104652480