UltraScale+でJTAGを挿しているとLinux起動中にハングアップする問題
UltraScale+でJTAGを挿しているとLinux起動中にハングアップする問題があると聞いて、実験してみました。
まず、@ikwzmさんのZynqMP-FPGA-Linux (https://github.com/ikwzm/ZynqMP-FPGA-Linux) で試してみました。
Vivado HLSのコマンドプロンプトで、xsdbと入力すると、デバッガ「XSDK」が起動します。
ここでconnectと打つと、
という画面になります。
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コマンドで見てみると、たまに、
いくつかのプロセッサが停止しているようなメッセージを出しています。
このとき、LinuxのUARTに出てくるコンソールには、SDカードのトラブルやBlueToothが初期化失敗だの、いろいろなエラーメッセージが出て不安定になっています。
おそらく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状態で見えます。
| 固定リンク







コメント