« HyperFADCを出荷 | トップページ | MITOUJTAG BASIC 3.4をリリースしました »

2018.10.30

UltraScale+でJTAGを挿しているとLinux起動中にハングアップする問題

UltraScale+でJTAGを挿しているとLinux起動中にハングアップする問題があると聞いて、実験してみました。

まず、@ikwzmさんのZynqMP-FPGA-Linux (https://github.com/ikwzm/ZynqMP-FPGA-Linux) で試してみました。

Vivado HLSのコマンドプロンプトで、xsdbと入力すると、デバッガ「XSDK」が起動します。

Xsdb3

ここでconnectと打つと、

Xsdb4

という画面になります。

xsdb% cInfo: Cortex-A53 #1 (target 10) Stopped at 0x0 (Cannot resume. APB AP transaction error, DAP status 30000021)
Info: Cortex-A53 #1 (target 10) Running
xsdb% Info: Cortex-A53 #2 (target 11) Stopped at 0x0 (Cannot resume. APB AP transaction error, DAP status 30000021)
Info: Cortex-A53 #2 (target 11) Running
xsdb% tInfo: Cortex-A53 #1 (target 10) Stopped at 0x0 (Cannot resume. APB AP transaction error, DAP status 30000021)
xsdb% Info: Cortex-A53 #1 (target 10) Running

上のようなメッセージが延々と表示されます。

targetコマンドで見てみると、たまに、

Xsdb5

いくつかのプロセッサが停止しているようなメッセージを出しています。

このとき、LinuxのUARTに出てくるコンソールには、SDカードのトラブルやBlueToothが初期化失敗だの、いろいろなエラーメッセージが出て不安定になっています。

Xsdb6

おそらくLinuxの起動が最後まで行かずに途中でハングすることと思われます。

解決策は、@ikwzmさんや、@marsee101のおっしゃるようにuEnv.txtのbootargsのところにcpuidle.off  =1を付ければいい https://twitter.com/nahitafu/status/1057237499980918784 ようです。

これは、Linuxのカーネルコンパイル時に

CONFIG_CPU_IDLE=y

という設定になっていると、CPUがアイドル状態になることがあり、アイドル状態のときにJTAGアクセスするからおかしくなるようです。

@hidemi_ishihara さんによるとAnswer Recordの69143にあるとのこと。

https://japan.xilinx.com/support/answers/69143.html

を見てみると、確かに、そのようなことが書いてあります。

XSDBはコアのパワーダウンをチェックしているけれども、チェック後に不意にIDLEになるからDAPがエラーを起こすようです。

これなら、CPU_IDLEをOFFにする以外に解決策はなさそうです。

cpuidle.off=1を設定すれば、xsdbのtargetコマンドでも4つのCPUが落ち着いて常にRunning状態で見えます。

Xsdb7

|

« HyperFADCを出荷 | トップページ | MITOUJTAG BASIC 3.4をリリースしました »

コメント

コメントを書く



(ウェブ上には掲載しません)




« HyperFADCを出荷 | トップページ | MITOUJTAG BASIC 3.4をリリースしました »