介绍
使用eMMC启动时,可以参考Xilinx的AR 67157烧写,也可以直接使用Vitis烧写。Vitis 2020.2 可以直接烧写eMMC设备。
烧写完成后,最好通过JTAG启动到U-Boot,在U-Boot里验证SD/eMMC的分区表、文件系统、启动文件正常。
测试命令
检查SD/eMMC设备
命令mmcinfo可以打印SD/eMMC设备的设备信息,比如大小等。
ZynqMP> mmcinfo
Device: mmc@ff170000
Manufacturer ID: 3
OEM: 5344
Name: SD08G
Bus Speed: 25000000
Mode: SD Legacy
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.4 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
检查SD/eMMC分区
命令mmc part可以打印SD/eMMC设备的分区表。
ZynqMP> mmc part
Partition Map for MMC device 0 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 2048 4096000 01bdb37b-01 0c
2 4098048 11425792 01bdb37b-02 06
检查SD/eMMC的文件系统
命令fatinfo mmc可以打印SD/eMMC设备的文件系统信息。
ZynqMP> fatinfo mmc 0
Interface: MMC
Device 0: Vendor: Man 000003 Snr cb70de00 Rev: 1.14 Prod: SD08G▒
Type: Removable Hard Disk
Capacity: 7580.0 MB = 7.4 GB (15523840 x 512)
Filesystem: FAT32 "NO NAME "
检查SD/eMMC的启动文件
命令fatls可以列出SD/eMMC设备中的文件系统的文件信息。
命令fatload可以将SD/eMMC设备中的文件系统的文件的内容,读入到内存。
ZynqMP> fatls mmc 0
System Volume Information/
59919 system.dtb.dts
1718 boot.scr
vcu/
config/
68916 system.dtb
455 autostart.sh
40048 xyavta
20621764 BOOT.BIN
123220436 image.ub
23 file(s), 4 dir(s)
ZynqMP> fatload mmc 0 0x800000 BOOT.BIN 0x100000
1048576 bytes read in 115 ms (8.7 MiB/s)
ZynqMP> md.b 0x800000
00800000: 00 00 00 14 00 00 00 14 00 00 00 14 00 00 00 14 ................
00800010: 00 00 00 14 00 00 00 14 00 00 00 14 00 00 00 14 ................
00800020: 66 55 99 aa 58 4e 4c 58 00 00 00 00 00 00 fc ff fU..XNLX........
00800030: 00 28 00 00 e0 fa 01 00 e0 fa 01 00 10 02 02 00 .(..............
eMMC Card Initialize
eMMC的初始化流程请参考 UG1085的Table 26‐23: eMMC Card Initialize。简要描述如下:
- Send CMD0 to card with no response expected (see Table 26-17).
- Send CMD1 while card is still busy with power up (perform the following two steps).
- Send command (CMD1) with options to host high-capacity support and high-voltage window (see Table 26-17).
- Read response 0.
- Send CMD2 for CARD ID (see Table 26-17).
- Send CMD3. Save relative card address in response 0.
- Read card specific data in response.
- Read card specific data in response.
- Read card specific data in response.
- Read card specific data in response.
- Send CMD9 with relative card address saved in CMD3 response.
- Read card specific data in response.
- Read card specific data in response.
- Read card specific data in response.
检查SD/eMMC的文件读写
命令fatmkdir可以在SD/eMMC设备中的文件系统的中创建文件夹。
命令fatwrite可以将内存内容写入SD/eMMC设备中的文件系统的文件。
ZynqMP> fatmkdir mmc 0 ubootdir
ZynqMP> fatls mmc 0
System Volume Information/
59919 system.dtb.dts
1718 boot.scr
vcu/
config/
68916 system.dtb
455 autostart.sh
40048 xyavta
20621764 BOOT.BIN
123220436 image.ub
ubootdir/
23 file(s), 5 dir(s)
ZynqMP> fatwrite mmc 0 0x100000 uboot-mem.bin 0x100000
1048576 bytes written
ZynqMP> fatload mmc 0 0x800000 uboot-mem.bin 0x100000
1048576 bytes read in 115 ms (8.7 MiB/s)
ZynqMP> cmp.b 0x100000 0x800000 0x100000
Total of 1048576 byte(s) were the same
完整记录
下面是完整记录,有删减。
Xilinx Zynq MP First Stage Boot Loader
Release 2020.1 Dec 15 2020 - 09:29:14
NOTICE: ATF running on XCZU7EV/silicon v4/RTL5.1 at 0xfffea000
NOTICE: BL31: v2.2(release):v1.1-5588-g5918e656e
NOTICE: BL31: Built : 09:27:00, Dec 15 2020
U-Boot 2020.01 (Dec 15 2020 - 09:27:30 +0000)
Model: ZynqMP ZCU106 RevA
Board: Xilinx ZynqMP
DRAM: 4 GiB
PMUFW: v1.1
EL Level: EL2
Chip ID: zu7ev
NAND: 0 MiB
MMC: mmc@ff170000: 0
In: serial@ff000000
Out: serial@ff000000
Err: serial@ff000000
Bootmode: LVL_SHFT_SD_MODE1
Reset reason: EXTERNAL
Net:
ZYNQ GEM: ff0e0000, mdio bus ff0e0000, phyaddr 12, interface rgmii-id
Warning: ethernet@ff0e0000 using MAC address from ROM
eth0: ethernet@ff0e0000
Hit any key to stop autoboot: 0
ZynqMP> help
? - alias for 'help'
base - print or set address offset
bdinfo - print Board Info structure
bind - Bind a device to a driver
blkcache - block cache diagnostics and control
boot - boot default, i.e., run 'bootcmd'
bootd - boot default, i.e., run 'bootcmd'
bootefi - Boots an EFI payload from memory
bootelf - Boot from an ELF image in memory
booti - boot Linux kernel 'Image' format from memory
bootm - boot application image from memory
bootmenu - ANSI terminal bootmenu
bootp - boot image via network using BOOTP/TFTP protocol
bootvx - Boot vxWorks from an ELF image
clk - CLK sub-system
cmp - memory compare
coninfo - print console devices and information
cp - memory copy
cpu - Multiprocessor CPU boot manipulation and release
crc32 - checksum calculation
dfu - Device Firmware Upgrade
dhcp - boot image via network using DHCP/TFTP protocol
dm - Driver model low level access
echo - echo args to console
editenv - edit environment variable
env - environment handling commands
erase - erase FLASH memory
exit - exit script
ext2load - load binary file from a Ext2 filesystem
ext2ls - list files in a directory (default /)
ext4load - load binary file from a Ext4 filesystem
ext4ls - list files in a directory (default /)
ext4size - determine a file's size
ext4write - create a file in the root directory
false - do nothing, unsuccessfully
fastboot - run as a fastboot usb or udp device
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls - list files in a directory (default /)
fatmkdir - create a directory
fatrm - delete a file
fatsize - determine a file's size
fatwrite - write file into a dos filesystem
fdt - flattened device tree utility commands
flinfo - print FLASH memory information
fpga - loadable FPGA image support
fstype - Look up a filesystem type
go - start application at address 'addr'
gpio - query and control gpio pins
gpt - GUID Partition Table
gzwrite - unzip and write memory to block device
help - print command description/usage
i2c - I2C sub-system
iminfo - print header information for application image
imxtract - extract a part of a multi-image
itest - return true/false on integer compare
led - manage LEDs
ln - Create a symbolic link
load - load binary file from a filesystem
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loadx - load binary file over serial line (xmodem mode)
loady - load binary file over serial line (ymodem mode)
loop - infinite loop on address range
ls - list files in a directory (default /)
lzmadec - lzma uncompress a memory region
md - memory display
mdio - MDIO utility commands
mii - MII utility commands
mm - memory modify (auto-incrementing address)
mmc - MMC sub system
mmcinfo - display MMC info
mtest - simple RAM read/write test
mw - memory write (fill)
nand - NAND sub-system
nboot - boot from NAND device
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
part - disk partition related commands
ping - send ICMP ECHO_REQUEST to network host
poweroff - Perform POWEROFF of the device
printenv - print environment variables
protect - enable or disable FLASH write protection
pxe - commands to get and boot from pxe files
random - fill memory with random pattern
reset - Perform RESET of the CPU
run - run commands in an environment variable
save - save file to a filesystem
scsi - SCSI sub-system
scsiboot - boot from SCSI device
setenv - set environment variables
setexpr - set environment variable as the result of eval expression
sf - SPI flash sub-system
showvar - print local hushshell variables
size - determine a file's size
sleep - delay execution for some time
source - run script from memory
sspi - SPI utility command
sysboot - command to get and boot from syslinux files
test - minimal test like /bin/sh
tftpboot - boot image via network using TFTP protocol
tftpput - TFTP put command, for uploading files to a server
thordown - TIZEN "THOR" downloader
time - run commands and summarize execution time
timer - access the system timer
true - do nothing, successfully
ums - Use the UMS [USB Mass Storage]
unbind - Unbind a device from a driver
unzip - unzip a memory region
usb - USB sub-system
usbboot - boot from USB device
version - print monitor, compiler and linker version
zynqmp - ZynqMP sub-system
ZynqMP> mmcinfo
Device: mmc@ff170000
Manufacturer ID: 3
OEM: 5344
Name: SD08G
Bus Speed: 25000000
Mode: SD Legacy
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.4 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
ZynqMP> help mmc
mmc - MMC sub system
Usage:
mmc info - display info of the current MMC device
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
mmc part - lists available partition on current mmc device
mmc dev [dev] [part] - show or set current mmc device [partition]
mmc list - lists available devices
mmc hwpartition [args...] - does hardware partitioning
arguments (sizes in 512-byte blocks):
[user [enh start cnt] [wrrel {on|off}]] - sets user data area attributes
[gp1|gp2|gp3|gp4 cnt [enh] [wrrel {on|off}]] - general purpose partition
[check|set|complete] - mode, complete set partitioning completed
WARNING: Partitioning is a write-once setting once it is set to complete.
Power cycling is required to initialize partitions after set to complete.
mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode
- Set the BOOT_BUS_WIDTH field of the specified device
mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>
- Change sizes of boot and RPMB partitions of specified device
mmc partconf dev [boot_ack boot_partition partition_access]
- Show or change the bits of the PARTITION_CONFIG field of the specified device
mmc rst-function dev value
- Change the RST_n_FUNCTION field of the specified device
WARNING: This is a write-once field and 0 / 1 / 2 are the only valid values.
mmc setdsr <value> - set DSR register value
ZynqMP> mmc part
Partition Map for MMC device 0 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 2048 4096000 01bdb37b-01 0c
2 4098048 11425792 01bdb37b-02 06
ZynqMP> fatinfo mmc 0
Interface: MMC
Device 0: Vendor: Man 000003 Snr cb70de00 Rev: 1.14 Prod: SD08G▒
Type: Removable Hard Disk
Capacity: 7580.0 MB = 7.4 GB (15523840 x 512)
Filesystem: FAT32 "NO NAME "
ZynqMP> fatls mmc 0
System Volume Information/
59919 system.dtb.dts
1718 boot.scr
vcu/
config/
68916 system.dtb
455 autostart.sh
40048 xyavta
20621764 BOOT.BIN
123220436 image.ub
23 file(s), 4 dir(s)
ZynqMP> fatmkdir mmc 0 ubootdir
ZynqMP> fatls mmc 0
System Volume Information/
59919 system.dtb.dts
1718 boot.scr
vcu/
config/
68916 system.dtb
455 autostart.sh
40048 xyavta
20621764 BOOT.BIN
123220436 image.ub
ubootdir/
23 file(s), 5 dir(s)
ZynqMP> fatload mmc 0 0x800000 BOOT.BIN 0x100000
1048576 bytes read in 115 ms (8.7 MiB/s)
ZynqMP> md.l 0x800000
00800000: 14000000 14000000 14000000 14000000 ................
00800010: 14000000 14000000 14000000 14000000 ................
00800020: aa995566 584c4e58 00000000 fffc0000 fU..XNLX........
00800030: 00002800 0001fae0 0001fae0 00020210 .(..............
00800040: 00020210 00000800 fd163261 00000000 ........a2......
00800050: 00000000 00000000 00000000 00000000 ................
00800060: 00000000 00000000 00000000 01000020 ............ ...
00800070: 00000000 00000000 00000000 00000000 ................
00800080: 00000000 00000000 00000000 00000000 ................
00800090: 00000000 00000000 000008c0 00001100 ................
008000a0: 00000000 00000000 00000000 00000000 ................
008000b0: 00000000 00000000 ffffffff 00000000 ................
008000c0: ffffffff 00000000 ffffffff 00000000 ................
008000d0: ffffffff 00000000 ffffffff 00000000 ................
008000e0: ffffffff 00000000 ffffffff 00000000 ................
008000f0: ffffffff 00000000 ffffffff 00000000 ................
ZynqMP> md.b 0x800000
00800000: 00 00 00 14 00 00 00 14 00 00 00 14 00 00 00 14 ................
00800010: 00 00 00 14 00 00 00 14 00 00 00 14 00 00 00 14 ................
00800020: 66 55 99 aa 58 4e 4c 58 00 00 00 00 00 00 fc ff fU..XNLX........
00800030: 00 28 00 00 e0 fa 01 00 e0 fa 01 00 10 02 02 00 .(..............
ZynqMP> fatwrite mmc 0 0x100000 uboot-mem.bin 0x100000
1048576 bytes written
ZynqMP> help fatload
fatload - load binary file from a dos filesystem
Usage:
fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
- Load binary file 'filename' from 'dev' on 'interface'
to address 'addr' from dos filesystem.
'pos' gives the file position to start loading from.
If 'pos' is omitted, 0 is used. 'pos' requires 'bytes'.
'bytes' gives the size to load. If 'bytes' is 0 or omitted,
the load stops on end of file.
If either 'pos' or 'bytes' are not aligned to
ARCH_DMA_MINALIGN then a misaligned buffer warning will
be printed and performance will suffer for the load.
ZynqMP> fatload mmc 0 0x800000 uboot-mem.bin 0x100000
1048576 bytes read in 115 ms (8.7 MiB/s)
ZynqMP> cmp.b 0x100000 0x800000 0x100000
Total of 1048576 byte(s) were the same