製品情報>Artix-7評価ボード>MicroblazeでLinux>U-Bootを作る

U-Bootを作る

U-Bootのソースを取得する

まず、U-Bootのソースコード一式をXILINXのgithubから取得します。

そのためには、Linux上で

git clone git://github.com/Xilinx/u-boot-xlnx.git

と打ちます。XILINX版U-Bootのソースコード一式がu-boot-xlnxディレクトリにダウンロードされます。約2分くらいでできると思います。

 

このU-Bootは、UART、EMAC、パラレルFlashROM、EMAC Lite、TEMACなどがサポートされています。残念ながらMMCカード(SDカード)はサポートされていないようです。

 

U-Bootを作るまえに、U-Boot BSPを作る

XILINX Wikiから、uboot_bsp.tar.gz(10KB)をダウンロードします。

このファイルを展開すると、uboot_bsp\bsp\uboot_v4_00_c\dataというディレクトリに

  • uboot_v2_1_0.mld
  • uboot_v2_1_0.tcl

という2つのファイルができます。

 

U-Boot BSPのインストール

このファイルをSDKにインストールします。

U-Boot BSPをインストールするためには、uboot_v4_00_cというフォルダを、C:\xilinx.5\ISE_DS\EDK\sw\lib\bsp\にフォルダごとコピーします。

 

C:\xilinx.5\ISE_DS\EDK\sw\lib\bsp\uboot_v4_00_c\data\というフォルダに上記の2つのファイルが入ればインストールは完了です。

uboot_v2_1_0.tclの修正

実は、このuboot_v2_1_0.tclにはバグがあるので、そのままではU-Bootのmakeの際に止まってしまいます。uboot_v2_1_0.tclをテキストエディタで開き、673行目と713行目に2か所ある

global flash_memory_bank
puts $config_file "#define XILINX_SPI_FLASH_CS\t$flash_memory_bank" 

となっている行をコメントアウトし、下記の1行を追加します。

#global flash_memory_bank
#puts $config_file "#define XILINX_SPI_FLASH_CS\t$flash_memory_bank" 
puts $config_file "#define XILINX_SPI_FLASH_CS\t0" 

 

こうしないと、U-boot BSPの生成や、Makeで止まってしまいます。

U-Boot BSPの作成

XILINX SDK(Eclipse)のメインメニューで、File→New→Board Support Packageとします。ubootが追加されているのがわかります。Finishを押します。

 

すると、次のような設定画面が開きます。

 

このダイアログでは、U-Bootが使うUARTのポートやメモリなどを設定します。とりあえず、stdoutとstdinをRS232Cに設定し、main_memoryをddr3_sdram_*に設定します。

また、ethernetとtimerも設定します。

FlashMemoryは、axi_spi_0に設定します。途中で'flash_memory_bank'というエラーが出て止まってしまう場合は、上で書いたuboot_v2_1_0.tclの修正を行ってください。

 

OKを押すとビルドが始まります。ビルドが成功すると(ワークスペース)\uboot_bsp_0\microblaze_0\libsrc\uboot_v4_00_c のディレクトリにconfig.mkxparameters.hという2つのファイルが出来上がっています。

 

これらのファイルにMicroBlazeのペリフェラルのアドレスや、ボードで使用するペリフェラルの設定が書かれています。この2つのファイルを、本章の最初でgitからダウンロードしてきたu-boot-xlnxフォルダの中の、/board/xilinx/microblaze-generic/フォルダにコピーします。

 

CONFIG_SYS_FLASH_BASEの設定

gitから取得したU-Bootをビルドするためには、CONFIG_SYS_FLASH_BASEというマクロが設定されている必要があります。

CONFIG_SYS_FLASH_BASEというのは、Linuxのイメージ等が書かれているNOR Flashのアドレスなのですが、特電Artix-7ボードではNOR Flashは使っていないので、この値は使いません。

デフォルトではCONFIG_SYS_FLASH_BASEが設定されていないので、このままではmakeをしたときにエラーで止まってしまいます。

そこで、先のxparameters.hの末尾に、ダミーのアドレスを書いておきます。

#define CONFIG_SYS_FLASH_BASE  (0xA0000000)

これでビルドが通るようになります。

U-Bootのカスタマイズ

MicroBlaze用U-BootはSDカードが使えません。したがって、デバッグ用などでLinuxを動作させるには、ネットワークブートを行うのが一番です。TFTPサーバ上にLinuxのカーネルイメージ等を置いておいて、ネットワーク経由でブートイメージを取ってくるというものです。この動作を自動的に行わせるために、U-Bootの設定をいくつか書き換える必要があります。

まず、上記のフォルダ、u-boot-xlnx\include\configs\microblaze-generic.hを開きます。

コンフィグすべき個所は、293行目付近にあります。その箇所を赤で示します。

#define CONFIG_BOOTCOMMAND "tftpboot 0xb8000000 linux.bin.ub;tftpboot 0xb4000000 uramdisk.image.gz;tftpboot 0xb2000000 xil_intc.dtb;fdt addr b2000000 00100000;fdt resize;bootm b8000000 b4000000 b2000000"

/* architecture dependent code */
#define CONFIG_SYS_USR_EXCEP /* user exception */
#define CONFIG_SYS_HZ 1000

#define CONFIG_ENV_OVERWRITE /* Allow to overwrite the u-boot environment variables */
#define CONFIG_IPADDR  192.168.1.99
#define CONFIG_SERVERIP  192.168.1.7
#define CONFIG_ETHADDR  02:00:00:00:10:64
#define CONFIG_BOOTP_SERVERIP
  • CONFIG_BOOTCOMMAND … U-Bootが自動的に実行するコマンドです。詳しいことは後述します。
  • CONFIG_IPADDR … 自身のIPアドレス。
  • CONFIG_SERVERIP … LinuxイメージをロードしてくるTFTPサーバのIPアドレス。
  • CONFIG_ETHADDR … 自身のMACアドレスです。

U-Bootのビルド

以上の手順でu-boot-xlnx\include\configs\フォルダにconfig.mkとxparameters.hをコピーして、microblaze-generic.hを書き換えたら

cd u-boot-xlnx
export BUILD_DIR=$PWD/build
make microblaze-generic_config
make

と打ちます。

 

 

これでビルドが行われ、U-Bootが生成されます。

できあがったファイルは、u-boot-xlnx\buildにu-boot.srecというファイル名で格納されています。

 

このu-boot.srecをu-boot.txtにリネームしてください。

次のSPI ROMへの書き込みのステップで、拡張子がsrecのままだとうまく書き込めません。
※SRECのままだと、HEXファイル中に書かれたアドレスを解釈してSPI ROMの当該番地に書き込もうとしてしまう。

これで完成です。

 

まとめ

  • SDKにU-Boot BSPをインストールするには、C:\xilinx.5\ISE_DS\EDK\sw\lib\
    bsp\uboot_v4_00_c\data\にuboot_v4_00_cフォルダをコピーする。
  • uboot_v2_1_0.tclを修正する
  • U-Boot BSPをSDKでビルドすると、(ワークスペース)\uboot_bsp_0\microblaze_0\libsrc\uboot_v4_00_c のディレクトリにconfig.mkxparameters.hという2つのファイルが出来上がるので、これをu-boot-xlnx/board/xilinx/microblaze-generic/フォルダにコピーする。
  • xparameters.hの末尾にダミーのCONFIG_SYS_FLASH_BASEを追加する
  • microblaze-generic.hをカスタマイズし、CONFIG_BOOTCOMMANDと、CONFIG_IPADDRなどを設定する
  • 以下のコマンドでビルドする
cd u-boot-xlnx
export BUILD_DIR=$PWD/build
make microblaze-generic_config
make
  • 目的のファイルは、u-boot-xlnx\build\u-boot.srecに出来上がっている
  • u-boot.srecをu-boot.txtにリネームする

 

修正済みのconfig.mkと、xparameters.h、および出来上がったu-boot.srecは下記のリンクからダウンロードできます。

http://www.tokudenkairo.co.jp/art7/uboot-config.zip

 


© 2017 TokushuDenshiKairo Inc. All rights reserved