1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. Zynq® UltraScale+™ MPSoCにおける U-bootを使ってeMMCデバイスを書き込む方法(JTAG編)

TECHブログ

Zynq® UltraScale+™ MPSoCにおける U-bootを使ってeMMCデバイスを書き込む方法(JTAG編)

Zynq® UltraScale+™ MPSoCにおける U-bootを使ってeMMCデバイスを書き込む方法(JTAG編)

はじめに

皆さんこんにちは。
今日は、Zynq® UltraScale+™ MPSoCにおいて、eMMCデバイスからPetaLinuxツールをBOOTするとき、U-bootを使ってeMMCデバイスを書き込む方法を紹介します。

eMMCデバイスは、フラッシュメモリーを基本としたストレージのことでembedded MultiMediaCardの略です。

前提条件
Vivado® Design Suite のFPGA設計方法およびPetaLinuxツールのBuild方法はここでは割愛し、eMMCデバイスの書き込み手順を説明します。

必要機材

必要機材は以下のとおりです。

  • Zynq® UltraScale+™ MPSoC搭載基板一式
  • LINUX HOST PC
  • プラットフォーム ケーブル USB II(XILINX社)
  • Uart cable

 

Zynq® UltraScale+™ MPSoC搭載基板

例:「So-One KIT
So-One KITは、Carrier BoardにPALTEKで開発した組み込みFPGAエッジコンピューティング「So-Oneモジュール」を搭載した2段構成となっているオリジナルFPGA評価ボードです。

書き込み手順

下記4つのSTEPになります。

STEP 1Creating a Xilinx bootable image

STEP 2Creating the emmc.img

STEP 3Programming the emmc.img on the eMMC device

STEP 4Boot Linux from the eMMC device

 

書き込みの詳細コマンド:

各STEPの手順、特にeMMCデバイスの書き込み詳細手順は下記の通りになります。

STEP 1 Creating a Xilinx bootable image(前提条件)

Vivado® Design Suite とPetaLinuxツールを使って、BOOT.bin と Image.ubを生成します。この作業については前提条件として、詳しい説明はここでは割愛します。

手順については(UG1137) Zynq® UltraScale+™ MPSoC Software Developer Guideをご参照ください。


STEP 2 Creating the emmc.img

LINUX HOST PCを用いて、STEP1で生成したBOOT.bin と Image.ubから、eMMCデバイス書き込みIMGを生成し、LINUX HOSTから下記のコマンドを実行します。

dd if=/dev/zero of=emmc.img bs=512 count=65536
sudo parted emmc.img mktable msdos
sudo parted emmc.img mkpart p fat32 0% 100%
sudo kpartx -a emmc.img
sudo mkfs.vfat /dev/mapper/loop0p1
sudo mount /dev/mapper/loop0p1 /mnt/sata/
sudo cp BOOT.bin /mnt/sata/BOOT.bin
sudo umount /dev/mapper/loop0p1
sudo kpartx -d emmc.img


これで、eMMCデバイスの書き込みIMGファイル、emmc.imgが生成されます。


STEP 3 Programming the emmc.img on the eMMC device

3-1)プラットフォーム ケーブル USB II とUart cableを接続します。
3-2)Boot in JTAG boot mode (Mode Pins[3:0] = 0x0)
3-3)Using XSDB to download u-boot and emmc.img
XSDBで下記のコマンドを実行します。

connect
exec sleep 4
targets -set -filter {name =~ "PSU"}
# write bootloop and release A53-0 reset
mwr 0xffff0000 0x14000000
mwr 0xFD1A0104 0x380E
exec sleep 1
# download and run FSBL
targets -set -filter {name =~ "Cortex-A53 #0"}
# downloading FSBL
dow zynqmp_fsbl.elf
con
exec sleep 4
stop
exec sleep 1
mwr 0xFF18031C 0x64406440
mwr 0xFF180314 0x01150000
mwr 0xFF180318 0x00450043
exec sleep 1
dow u-boot.elf
dow bl31.elf
dow -data emmc.img 0x8000                 
con

#ここまではXSDBで実行する、下記3-4)はUart(u-boot prompt)で実行します。

 

3-4)Programming steps from u-boot prompt:
u-boot promptで下記のコマンドを実行します。

mmcinfo
mmc write 8000 0 10000

Note: The First entry is the address, the last entry is $filesize/512

 

3-5)Verification steps from the u-boot prompt:

mmc rescan
mmc part

************* Output Example ******************
Partition Map for MMC device 0 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 1 65535 000cbbb0-01 0c

 

STEP 4 Boot Linux from the eMMC device

4-1)基板の電源をOFFにし。基板の起動モードをeMMC起動に設定します。

#SWの位置は基板依存ですが、Zynq® UltraScale+™ MPSoCデバイスのboot mode は(Mode Pins[3:0] = 0x6))になるよう設定します。

4-2)基板の電源をONにしeMMCからbootします。

 

おわりに

いかがでしたでしょうか?これで、基板のeMMC bootができるようになります。

上記手順のメリットは、TFTPを使わない、ETHポートがない基板にも有効などの点からシンプルであること。デメリットについては、JTAG経由でeMMC イメージファイルの転送は時間がかかること、でしょうか。

最後までご覧いただきましてありがとうございました。
次回はファイル転送の速いTFTPを使用する場合のやり方を紹介いたします。

 

デザインサービスお問合せ