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

TECHブログ

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

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

以前のブログでは、ZYNQ® UltraScale+™ MPSoCのeMMCデバイスからPetaLinuxをBOOTするとき、U-bootを使ってeMMCデバイスを書き込む方法を JTAG編TFTP編 にわけて紹介しました。

JTAGとTFTP使用する場合、Vivado® Design Suite などの開発環境が必要になりますが、今回は書き込み時に、開発環境に依存しないSD Card経由のeMMC書き込み方法を紹介したいと思います。

前提条件

ボードにSD Card SLOTが存在すること。
*Vivado®のFPGA設計方法及びPetaLinuxのBuild方法はここでは割愛し、eMMCデバイスの書き込み手順を説明します。


目次

必要機材

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

  • ・Zynq® UltraScale+™ MPSoC搭載基板一式
  • ・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でSD boot用 BOOT.bin、BOOT.scr と Image.ubを生成します。
このSTEPは前提条件として、詳しい説明はここでは割愛いたします。
手順は

 

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が生成されます。
*emmc.imgファイルをSD cardのbootパーティションにCOPYします

 

STEP 3 Programming the emmc.img on the eMMC device

3-1) PCと基板間Uart cableを接続して、Tera Termなどの端末を立ち上げます
#Tera Termは基板とPCの環境に合わせて設定します

3-2) Boot in SD boot mode (Mode Pins[3:0] = 0x5)

3-3) SD Cardを挿入します

3-4) 電源を投入し、SDからbootします


以下のように、Tera Term の画面に Hit any key to stop autoboot:が表示されたら、PCの任意のキーを押しAUTOBOOTを止めて、U-bootに入ります

Hit any key to stop autoboot:  0
ZynqMP>

3-5) mmc listコマンドでmmcデバイスを確認します

ZynqMP> mmc list
mmc@ff160000: 0 (SD)
mmc@ff170000: 1 (eMMC)

 

3-6) mmc devコマンドでmmcデバイスとしてSDを選択します

ZynqMP> mmc dev 0
switch to partitions #0, OK
mmc0 is current device

 

3-7) fatlsコマンドでファイルを確認します

ZynqMP> fatls mmc 0:1
 xxxx   image.ub
 xxxx   boot.scr
 xxxx   emmc.img
 xxxx   BOOT.BIN

#xxxx sizeはデザイン依存します。


3-8) fatloadコマンドでファイルをDDRに転送します。

ZynqMP> fatload mmc 0:1 8000 BOOT_QSPI.BIN
xxxx bytes read in 4195 ms (14.9 MiB/s)

 

3-9) mmc devコマンドでmmcデバイスとしてemmcを選択します

ZynqMP> mmc dev 1
switch to partitions #1, OK
mmc1 is current device

 

3-10) mmc writeコマンドでmmcデバイスを書き込みします

mmc write 8000 0 10000      
Note: The First entry is the address, the last entry is $filesize/512

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します

#SD Card SLOTがあるボードなら、この方法をおすすめします。
#SD Cardがないボードの場合、前に紹介したxsdb経由もしくは (TFTP経由) の方法でeMMCの書き込みは可能です。


おわりに

いかがでしたでしょうか?
これで、基板のeMMC bootができるようになります。
今まで3つの方法を紹介しました。上記手順のSD cardの方法は一番環境依存の少ないシンプルな方法になります。


最後までご覧いただきましてありがとうございました。

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