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評価ボードです。
https://www.paltek.co.jp/design/original/so-one/index.html
書き込み手順
下記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を使用する場合のやり方を紹介いたします。
このブログは「FPGA設計ブログ一覧」の
5. プログラミング(FPGAへの書き込み)の
ひとつです。