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

TECHブログ

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

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

はじめに

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

*前回のTECHブログは コチラからご覧いただけます。


前回の方法はJTAG経由でIMGファイルを転送するために、時間がかかりました。(約20Mのファイルは、30分以上かかりました。)
さて、今回は高速のTFTPを利用する方法を紹介したいと思います。

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

必要機材

  • Zynq® UltraScale+™ MPSoC搭載基板一式
  • LINUX HOST PC
  • プラットフォーム ケーブル USB II(Xilinx社)
  • Uart cable
  • LAN cable(必要に応じて、SWICH HUBやDHCP環境)

 

Zynq® UltraScale+™ MPSoC搭載基板

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

TFTPサーバーの構築手順(例)

sudo mkdir /tftpboot
sudo chmod -R 777 /tftpboot
sudo chown -R nobody /tftpboot

sudo nano /etc/xinetd.d/tftp
下記の内容をtftpファイルにcopyして保存します。
**********************
service tftp 
    {
    protocol = udp 
    port = 69 
    socket_type = dgram 
    wait = yes 
    user = nobody 
    server = /usr/sbin/in.tftpd 
    server_args = /tftpboot 
    disable = no
    }
**********************

$ sudo yum install -y tftp-server
$ sudo firewall-cmd --add-service=tftp --permanent
$ sudo firewall-cmd --reload
$ sudo systemctl enable tftp
$ sudo systemctl restart tftp

これでTFTPサーバーの構築が完了です。

書き込み手順

下記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.を生成します。
このSTEPは前提条件として、詳しい説明はここでは割愛いたします。
手順は (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)Xilinx🄬 Platform cable USB と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
con

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


3-4) Programming steps from u-boot prompt:

u-boot promptで下記のコマンドを実行します。

setenv ipaddr 192.168.0.3  (環境依存)
setenv netmask 255.255.255.0 setenv serverip 192.168.0.2 (環境依存)
tftpb 8000 emmc.img 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ができるようになります。
上記手順の
メリットはimgファイルの転送速度がはやいです。
(数十Mなら数秒で転送完了)
#ETH portがあるボードなら、この方法を推奨します。
#ETH portがないボードでしたら、前回紹介した、xsdb経由の方法で転送可能です。

 

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

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