2013/08/20

[FPGA][MicroBlaze]MicroBlaze用u-bootのコンパイルと実行

,
 Xilinxの組み込みIPコアの一つであるCPU、MicroBlaze上でu-bootを実行するお話です。悲しいかなネットにある大量の情報の海に溺れかけ、ここまで2日かかりました。かなりいろいろとややこしいのでメモしておきます。Linuxが起動できればいいなあ(というかその前座)。

 まず、開発環境をメモしておきます。
・Xilinx ISE 14.5
・Xilinx Platform Studio 14.5
・Xilinx Software Development Kit Release Version: Release 14.5 Build SDK_P.58f
・ターゲットボードは、Xilinxの評価ボードSP605
・後UbuntuとTeraTermが必要。


 基本的な開発の流れは、XilinxのWikiであるところのこのページに従います。

MicroBlazeのハードウェア層を、XPSで設計する(ISE使わずともいけるっぽい)。

SDKの方で、u-bootの設定をする(u-bootのコンパイルに必要な、config.mkとxparameters.hを生成する)。

SDKで、.bmmと.bit(と後.elf?)を統合し、download.bitを生成しておく。

Ubuntuで、u-bootのコンパイルをする(上記2ファイルが必要。これでu-bootファイル(拡張子なし)を生成する)

必要なファイル(download.bit、u-boot)がそろったので書き込みする


1)とりあえず、最初に、Xilinxのページから、SP605用MicroBlazeのサンプルプロジェクトをダウンロードします。

2)旧バージョンのファイルを新しくする。

 展開したらsp605_bistというフォルダが出来たと思います(多分)。そしたら、XilinxのSDKの方を立ち上げ、[File]→[Open File]でsp605_bist/system.xmpを開きます。すると、XPSが立ち上がり「旧バージョンのファイルを新しくするよ」的なダイアログが出るので、Nextをペペペと押していきます。
※system.xmpをXPSで開いても、ただ中身を表示するだけで、ダイアログが出ない故のSDKからの起動であります。

3)MicroBlazeにMMUを載せる

 まずやることは、MMUをのっけることです。なぜならば、u-bootにはMMUが必要ですが、リファレンスデザインのデフォルト設定のまま書き込んでxmdからconnect mb mdmすると、No-MMUと見えたので…
(2013/09/06)MMU無しでも普通に動くらしいです。動きました。

 XPS上で、Bus Interfaceタブにあるmicroblaze_0をダブルクリックします。

 Configuration Wizardが立ち上がりますので、左のSelect configuration:からLinux with MMUを選びます。(Low-end Linux with MMUでも大丈夫なのかもしれない。uCLinux向け?)
 [Next]ボタンを押して設定を一通り見てもいいですが、別に見なくてもよかったような気がします。[OK]ボタンを押して、Wizardを閉じます。

4)MicroBlazeのBitStreamを生成し、XPSでやることを終わらせる。

 左のNavigatorから、Run DRCs、Generate Netlist、Generate BitStreamを順にやっていきます。多分エラーは出ません、出てもちょっとどうにもならないです…(無い場合は[View]→[Toolbars]→[Navigator]?)。ちなみにこの作業は結構時間がかかります。までもNavigatorがやることをわかりやすくリストアップしてくれてるので、めっちゃいいですねこれ。

5)SDKへの開発に移る

 Export Designを押し、ダイアログが出たら[Export & Launch SDK]をクリックします。すると、SDKのWindowが表示されるかと思います。ここからは、Eclipseの操作に慣れた方ならすいすい行くと思うんですが、とりあえずWelcome的なウィンドウを閉じます。

 えっと、ここで追加のプラグインみたいなものが必要になります。u-boot-xlnxです。Xilinxのgitにあるので、Ubuntuマシンの方でgit cloneしてDLしておきます。
※Eclipseへの追加から先は、このページによくまとめられています。めっちゃ参考にしました
 このページからuboot_bsp.tar.gzをDLします。どうにかして展開します。したらXilinx\14.5\ISE_DS\EDK\sw\lib\bsp以下に放り込みます。結果として、
Xilinx\14.5\ISE_DS\EDK\sw\lib\bsp\uboot_v4_00_c\data\uboot_v2_1_0.mld
Xilinx\14.5\ISE_DS\EDK\sw\lib\bsp\uboot_v4_00_c\data\uboot_v2_1_0.tcl
の様になってればオッケーっぽいです。

したら、SDKから[File]→[New]→[Board Support Package]を選択します。図のようなダイアログが出ると思うので、左下をubootに変えて[Finish]を押します。
ubootのためにconfigファイルを作ります。
次に、よくわからないセッティングをします。下のようなウィンドウが出ると思うので(このSSはすべて設定し終えたときのもの)、Valueのところをデフォルトのnoneから繋ぎたいものに変えていきます。
セッティング
 終わったらOKを押すと、自動的にmakeが始まります。ここで結構エラー出ること多いです。MicroBlazeのピン接続が少しでも違うとダメっぽいです(Enable Debugにしたままデバッグポート繋げないとかするとエラーでた)。
 Can't find variable 'flash_memory_bank'みたいなエラーもでます。よくわからないので、出てきた解決策の通りに0固定にします。(これやるとu-bootのビルド時にgpioあたりでundefined referenceで落ちる?)
バンクってなんだよ…

ログ:
17:58:59 **** Build of project uboot_bsp_0 ****
make -k all 
libgen -hw ../sp605_bist_hw_platform/system.xml\
      \
      -pe microblaze_0 \
      -log libgen.log \
      system.mss
libgen
Xilinx EDK 14.5 Build EDK_P.58f
Copyright (c) 1995-2012 Xilinx, Inc.  All rights reserved.

Command Line: libgen -hw ../sp605_bist_hw_platform/system.xml -pe microblaze_0
-log libgen.log system.mss 


Staging source files.
Running DRCs.
#--------------------------------------

# uboot BSP DRC...

#--------------------------------------

Running generate.
#--------------------------------------

# uboot BSP generate...

#--------------------------------------

/* Main Memory is ddr3_sdram */

INFO automatic U-BOOT position = 0x57c00000

Running post_generate.
Running execs_generate.
'Finished building libraries'

17:59:03 Build Finished (took 3s.431ms)

 もしコンパイルがうまくいったならば、projectのuboot_bsp_0\microblaze_0\libsrc\uboot_v4_00_cあたりにconfig.mkとxparameters.hが出来てると思います。これをつかってu-bootをビルドします。

7)
 最後に、[Xilinx Tools]→[Program FPGA]を選択し、[OK]を押します。ここら辺の参考

6)書き込む

 ファイルが出来たら、いよいよ書き込みです。わけのわからない難解なジャンパの設定をしたら、電源を入れます。
 書き込みには、iMPACTではなくxmdというツールをCUIで使います。多分スタートメニューの[Xilinx Design Tools]→[ISE Design Suite 14.5]→[Accessories]に"ISE Design Tools 64bit Command Prompt"みたいなものがあります。それを選択します。
 コマンドラインが表示されたら、まずはdownload.bitとu-bootのあるフォルダに移動します。そうしたら
C:\***\***\***\>xmd
と打ちます。Xilinx Microprocessor Debugger (XMD) Engineだなどと表示されたかと思います。続いて、
XMD% fpga -f download.bit
XMD% connect mb mdm
XMD% dow u-boot
XMD% run
します。
xmdを使ってFPGAに書き込みする。
もしTeraTermなどのシリアルモニタを繋いでいれば(ボーレート115200)、u-bootが起動したメッセージが流れてきます。
u-bootの動作確認
ここら辺はこのページを参考にしました。

 ここまでXilinxのWiki通りに進めてきたわけですが、Xilinxに買収されたらしいPetaLinuxの話は一度も出てきませんでした。ネットにある僅かな情報によれば、それなりにコンパイルから書き込みまでが楽に行えるらしいのですが、一体どこに行ったんでしょう…

 後、実際に使うにあたってはFSBL(First Step Boot Loader)が無いと、起動してもu-bootすら読み込んでくれなくなりそうなんですが、どうすればいいんでしょう。SDKでApplication Projectを作成しようとすると、ExampleにSREC Bootloaderなるものが出てくるのですが、これなんでしょうかね…
SREC Bootloaderとは
ちなみになんでこんなことをやっているかというと、仕事でやることになったからです…Xilinx触ったことなかったんですが、仕事なのでそうも言ってられず。かといって初心者なので情報を端から端までいちいち眺めるわけです。とても覚えてられたもんじゃないので、Blogにまとめざるをえない…ですよねえ…

MicroBlazeを作りこむところからは、このpdfも参考になる。

おまけ:Xilinxの書き込みツールだけど、これで低価格品だと銘打っちゃうんだから、庶民には手の届かない世界のままなんだなあ…

0 コメント to “[FPGA][MicroBlaze]MicroBlaze用u-bootのコンパイルと実行”

コメントを投稿