ZYNQMPのBoot.binでXFSBL_ERROR_ADDRESSが出る原因
2日前からZynqMPのBoot.binを作っていて、
XFSBL_ERROR_ADDRESS: FFFC0000
Partition 3 Load Failed, 0x2E
というエラーで止まってしまって困っていました。
ZynqMPのBoot.binを作る際にセカンドステージのブートローダであるU-bootを組み込んだり、テスト用であればペリフェラルテストやメモリテストを組み込んだBoot.binを作ることになると思います。
このとき、メモリテストやU-bootなどの少し大きなものを組み込むと、前述のXFSBL_ERROR_ADDRESS: FFFC0000が出て止まってしまします。
今日はこの原因を究明しました。
まず、Partition 3 Load Failed, 0x2Eの「2E」というのはXFSBL_ERROR_ADDRESSの意味なので、U-Bootが読み込まれるアドレスが異常だと言っているのです。
デフォルトのFSBLではXFSBL_OCMというマクロが定義されていて、BOOT.BINに含まれたアプリのロードアドレスがOCMの範囲(0xFFFEA000~0xFFFFFFFF)外だと、XFSBL_ERROR_ADDRESSを出すからです。
一方、Trenz社が作ったboot.binを起動してみると、0x8000000にu-boot.elfを読み込んでいるようです。
0x8000000はDDR4 SDRAMの範囲なので、OCMを外れていてもDDRメモリにロードするのはOKなのでしょう。
それでは、どこでU-bootをFFFC0000にロードしようとする不届きな設定があるのかというと、U-bootを作るときにひな形にしたxilinx_zynqmp_mini_defconfig でした。
この中に
CONFIG_SYS_TEXT_BASE=0xFFFC0000
と書かれているからこのアドレスにロードしようとしてクラッシュします。
これを
CONFIG_SYS_TEXT_BASE=0x8000000
にすればロードできて起動できるようになります。
そうしたら今度はSDカードがどうのというエラーを出してきます。
一つ問題を解決すると次から次へと問題が出てきますね。
それがLinux構築の楽しみでもありますが。
| 固定リンク
コメント