zynq7000-Uboot

更新时间:
2024-03-14
下载文档

zynq7000-Uboot

Uboot 简介

Uboot 是德国 DENX 小组开发的用于多种嵌入式 CPU 的 BootLoader 程序。Uboot 不仅支持嵌入式 Linux 系统的引导,还支持 SylixOS、VxWorks 等多种嵌入式操作系统。

本文适用于采用 Uboot 引导系统启动方式的硬件设备。以 zynq7000 开发板为例,介绍如何在开发板上启动并运行 SylixOS 系统。

准备工作

zynq7000 开发板启动固化 SylixOS ,需要准备以下软硬件环境:

  • 1 台有以太网口的电脑,并具备以下环境:

  • windows操作系统环境。

  • TFTP 功能,可安装 RealEvo-IDE 或者 Tftp32 软件。

  • FTP功能,可安装 RealEvo-IDE 或者 FileZilla。

  • 串口调试工具(如 PuTTY),可以从IDE安装包 Tools 文件夹获取。解压 PuTTY 压缩包,不需要安装,直接双击 PUTTY.EXE 即可使用。

  • zynq7000 开发板的启动镜像 bspzynq7000_zturn.binBOOT.bin

  • 1 个 zynq7000 开发板。

  • 1 条网线、1 条串口线。分别将串口线、网线,连接开发板和 Windows 电脑,这样就可以通过电脑访问开发板,并对开发板进行串口连接、网络启动、SD 卡格式化等操作了。

  • 查看串口号

    通过 Windows 电脑的 设备管理器, 查看串口的端口号。如下图所示, 串口号COM3 。如果无法识别串口,可能是没有安装此串口的驱动程序,需要下载并安装驱动。

串口连接

  1. 打开串口调试工具 PuTTY。找到 PuTTY 工具路径,然后双击 PUTTY.EXE。

  2. 配置连接。在 Session 页面,设置串口端口(要与准备工作查到的端口号保持一致)和波特率参数。

  3. 选择 Serial ,配置串口 Flow control 参数为 None

  4. 单击 Open。

  5. 单击开发板上的 RESET 按键,重新启动开发板。

注意:
务必在提示‘Hit any key to stop autoboot: 0‘ 之前,在键盘上按一下任意键, 进入 Uboot 命令行。您可以使用命令行与开发板进行交互。

网络启动

准备工作

  • 启动 TFTP 服务:将 zynq7000 开发板与上位机通过网线连接,启动 TFTP 服务器,服务器传输目录指向 bspzynq7000_zturn.bin 所在的目录下。
  • 关闭防火墙:如果 Windows 防火墙未关闭,则可能会阻止开发板与电脑之间的通信。但是,在关闭 Windows 防火墙之前,请确保您已经采取其他必要的安全措施来确保计算机的安全性和网络的安全性。特别是如果您正在连接到公共网络(如互联网),请始终注意安全问题,以避免潜在的安全风险。

操作步骤

通过以下步骤和指令进行 SylixOS 系统镜像的加载及启动。

注意:
以下操作均是在 Uboot 指令操作界面,非 SylixOS 系统 Shell 界面。

  1. 按照上文重新启动开发板之后,按 任意键 进入 Uboot 命令行。

    U-Boot 2013.10-svn7 (Apr 20 2015 - 20:49:24)
    
    Memory: ECC disabled
    DRAM:  1 GiB
    myir_board_init
    MMC:   zynq_sdhci: 0
    SF: Detected W25Q128BV with page size 256 Bytes, erase size 4 KiB, total 16 MiB
    In:    serial
    Out:   serial
    Err:   serial
    Net:   Gem.e000b000
    Hit any key to stop autoboot:  0
    zynq-uboot> 
    
  2. bootdelay 不要设置为 0,否则将不能停止启动以进入 Uboot Shell,按照以下命令设置 bootdelay 环境变量,将暂停时间设置为 1s

    setenv bootdelay 1
    
  3. 配置系统镜像加载地址,zynq7000 开发板的镜像加载地址为 0x00200000 ,需要设置 loadaddr 环境变量参数,Uboot 会将 SylixOS 系统镜像从存储中搬运到内存的该地址中。

    setenv loadaddr 0x00200000
    
  4. 配置板卡 IP,输入以下指令(IP 需要同主机 IP 在同一网段,以下为参考),设置 ipaddr 环境变量参数。

    setenv ipaddr 10.4.0.248
    
  5. 配置 TFTP 服务器(上位机)所在的 IP,设置 serverip 环境变量参数。

    setenv serverip 10.4.0.220
    
  6. 配置传输镜像文件名,设置 bootfile 环境变量参数为 bspzynq7000_zturn.bin (获取的镜像名称,以下为参考)。

    setenv bootfile bspzynq7000_zturn.bin
    
  7. 配置 Uboot 启动命令,设置 bootcmd 环境变量参数为网络加载方式及加载内存地址。

    setenv bootcmd 'tftp; go 0x00200000'
    
  8. 输入 save 保存环境变量。

    save
    
    zynq-uboot> setenv bootdelay 1
    zynq-uboot> setenv loadaddr 0x00200000
    zynq-uboot> setenv ipaddr 10.4.0.83
    zynq-uboot> setenv serverip 10.4.0.80
    zynq-uboot> setenv bootcmd 'tftp; go 0x00200000'
    zynq-uboot> save
    Saving Environment to SPI Flash...
    SF: Detected W25Q128BV with page size 256 Bytes, erase size 4 KiB, total 16 MiB
    Erasing SPI flash...Writing to SPI flash...done
    
  9. 通过 boot 命令启动。

    boot
    

本节操作完成之后,开发板重新上电,硬件复位后 Uboot 会通过 TFTP 从主机加 bspzynq7000_zturn.bin 镜像到内存地址 0x00200000 处运行,并启动 SylixOS 系统。

Gem.e000b000 Waiting for PHY auto negotiation to complete...... done
Using Gem.e000b000 device
TFTP from server 10.4.0.80; our IP address is 10.4.0.83
Filename 'bspzynq7000_zturn.bin'.
Load address: 0x200000
Loading: #################################################################
################################################################# #################################################################
#################################################################
#################################################################
508.8 KiB/s
done
Bytes transferred = 3634672 (3775f0 hex)
Starting application at 0x00200000 ...
SylixOS starting...

SD 卡格式化

完成以上操作,能够在 zynq7000 开发版运行 SylixOS 系统。但此时 Shell 界面显示 unknown ,标识操作系统并没有固化到具体的存储介质,需要进行文件系统格式化后才能够真正使用 SylixOS 操作系统。

  1. 使用 showmount 命令查看系统挂载 SD 卡情况, AUTO-Mount point show >> 一栏展示的是当前文件系统挂载的目录。

    [root@sylixos:/root]# showmount
    AUTO-Mount point show >>
           VOLUME                    BLK NAME
    -------------------- --------------------------------
    /media/sdcard1       /dev/blk/sdcard-0:1
    /media/sdcard0       /dev/blk/sdcard-0:0
    
    MTD-Mount point show >>
           VOLUME                    BLK NAME
    -------------------- --------------------------------
    /yaffs2/flash0       MTD:/flash0
    
    Mount point show >>
           VOLUME                    BLK NAME
    -------------------- --------------------------------
    /ram                 0
    

    说明:
    板卡第一次进行文件系统启动,默认是不会有挂载设备。
    如果出现挂载了设备,需要先执行 umount /media/xxx 将 SD 卡挂载目录卸载(需要执行 umount /media/sdcard0umount /media/sdcard1 将 SD 卡分区卸载)。

    umount /media/sdcard0
    umount /media/sdcard1
    
  2. 使用 ll /dev/blk 查看 SylixOS 识别的 SD 卡设备名。

  3. 使用 fdsk – f /dev/blk/sdcard-0 对硬盘 sdcard-0 进行分区。

    1. 分区数设置为 2 代表两个分区(最多支持 4 个分区)。
    2. 第一分区对齐值为 4096 (可选为 4K、8K …,这里只能使用 4096、8192 …)。
    3. 第一分区设置分区大小百分比为 10 (此处为百分比)。
    4. 第一分区是否为激活的分区,输入 y
    5. 第一分区文件系统类型选择 1 FAT 格式。 (第一个分区作为 boot 分区因此这里选择 FAT )。
    6. 第二分区大小百分比为 0 (0 代表剩余的全部空间)。
    7. 第二分区是否为激活的分区,输入 n。
    8. 第二分区文件系统类型选择 2 TPSFS 格式。
    9. 分区完成显示分区结果。
    [root@sylixos:/root]# fdisk -f /dev/blk/sdcard-0
    block device /dev/blk/sdcard-0 total size: 14784 (MB), reserved: 1024 (KB)
    please input how many partition(s) you want to make (1 ~ 4) : 2
    please input how many bytes align (4K 8K ...) : 4096
    please input the partition 0 size percentage(%) or capacity(M) 0 means all left space : 10
    is this partition active(y/n) : y
    please input the file system type
    1: FAT 2: TPSFS 3: LINUX 4: RESERVED
    1
    please input the partition 1 size percentage(%) or capacity(M) 0 means all left space : 0
    is this partition active(y/n) : n
    please input the file system type
    1: FAT 2: TPSFS 3: LINUX 4: RESERVED
    2
    making partition...
    block device : /dev/blk/sdcard-0
    block type : SD/MMC
    block serial : 4784D0EB
    block firmware: 2018.12, v4.9
    block product : SA16G SDHC memory card
    block media : SDHC(v2.0), 512(R) 512(W)
    
    MBR partition >>
    
    PART ACT SIZE(KB) OFFSET(KB) TYPE
    ---- --- ---------- ---------- -------------------------------------
    0 * 1513776 1024 Win95 FAT32 Partition
    1 13624016 1514800 SylixOS True Power Safe Partition
    
    total partition 2
    
  4. 执行 remount 命令重新挂载 SD 卡分区。(对于一个新的磁盘设备,第一次使用 SylixOS 命令进行分区时,执行 remount 命令后会出现 Magic number error, mount failed 的提示,这是由于分区前的文件系统与新的文件系统不兼容的提示信息,可以忽略)。

    remount /dev/blk/sdcard-0
    
  5. 通过 mkfs 对分区后的 SD 卡进行格式化,格式化的分区为 remount 执行后打印的分区名称。

    mkfs /media/sdcard0
    mkfs /media/sdcard1
    
  6. 执行 sync 命令将以上操作写入 SD 卡, sync 命令会将所有操作刷新,保障执行到位, 操作完成后请不要重启系统。

    sync
    
    [root@sylixos:/root]# remount /dev/blk/sdcard-0
    Block device /dev/blk/sdcard-0 part 0 mount to /media/sdcard0 use vfat file system.
    Magic number error, mount failed
    Block device /dev/blk/sdcard-0 part 1 mount to /media/sdcard1 use tpsfs file system.
    [ot]# mkfs /media/
    [root@sylixos:/root]# mkfs /media/sdcard0
    now format media, please wait...
    disk format ok.
    [root@sylixos:/root]# mkfs /media/sdcard1
    now format media, please wait...
    disk format ok.
    [root@sylixos:/root]# sync
    

SD 卡固化自启动

准备工作

完成 SD 卡格式化后,需要将文件 BOOT.binbspzynq7000_zturn.bin 拷贝至 SD 卡第一个分区内(因为之前的格式化操作已经将 SD 卡中的内容删除了,需要重新传输,否则重启上电无法启动)。

注意:
这里禁止重启。否则,需要重新按照网络启动部分重新引导 SylixOS 网络启动,再按照上述步骤将文件导入第一个分区。

可以使用读卡器将文件拷贝至 SD 卡第一个分区内。也可以通过IDE提供的FTP方式进行文件拷贝。具体操作如下所示。

  1. 修改开发板的 SylixOS 系统的 IP 地址。需要此 IP 地址与 Windows 电脑为同一网段,否则无法正常通信。

    [root@sylixos:/root]# ifconfig                            #查看SyixOS系统的IP地址
    en1       Link encap: Ethernet HWaddr: 00:0a:35:00:01:28
              Dev: zynq0 Ifidx: 2 DHCP: D4 D6 Spd: 1000 Mbps
              inet addr: 192.168.1.28 netmask: 255.255.255.0
              gateway: 192.168.1.1 broadcast: 192.168.1.255
              inet6 addr: fe80::20a:35ff:fe00:128 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              collisions:0 txqueue:0 tcpaf:1 tcpwnd:65535
              RX ucast packets:0 nucast packets:201 dropped:0
              TX ucast packets:0 nucast packets:19 dropped:0
              RX bytes:13673 (13.3 KB)  TX bytes:1042 (1.0 KB)
    
    lo0       Link encap: Local Loopback
              Dev: N/A Ifidx: 1 DHCP: D4 D6 Spd: N/A
              inet addr: 127.0.0.1 netmask: 255.0.0.0
              P-to-P: 127.0.0.1 broadcast: N/A
              inet6 addr: ::1 Scope:Loopback
              UP LOOPBACK RUNNING  MTU:0  Metric:1
              collisions:0 txqueue:0 tcpaf:2 tcpwnd:262140
              RX ucast packets:3 nucast packets:0 dropped:0
              TX ucast packets:3 nucast packets:0 dropped:0
              RX bytes:168 (168.0 B)  TX bytes:168 (168.0 B)
    
    dns0: 0.0.0.0
    dns1: 0.0.0.0
    dns2: 0.0.0.0
    dns3: 0.0.0.0
    default device is: en1
    list net interface: 2
    [root@sylixos:/root]# ifconfig en1 inet 10.4.0.248    # 重新配置SyixOS系统的IP地址
    
  2. 打开IDE,通过FTP的方式将文件拷贝到 SD 卡根目录 /boot 内(第一个分区内)。

操作步骤

通过以下操作,配置环境变量,实现从 SD 卡启动 UBoot, 然后进入 SylixOS 系统。

  1. 将拷贝完文件的 SD 卡插入开发板。如果采用FTP方式,则不需要此操作。

  2. 执行 sync ,然后重新上电。再次按任意键进入 Uboot 界面。

  3. 设置启动等待时间,不要设置为 0,否则将不能停止启动以进入 Uboot Shell,按照以下命令设置 bootdelay 环境变量,将暂停时间设置为 1s

    setenv bootdelay 1
    
  4. 设置 SD 卡启动环境变量,设置启动命令参数 bootcmd ,通过 fatload 命令将镜像文件从 SD 卡第一个分区拷贝到内存地址 0x00200000 ,通过 go 命令启动系统镜像。

    setenv bootcmd 'fatload mmc 0 0x00200000 bspzynq7000_zturn.bin; go 0x00200000'
    
  5. 输入 save 保存环境变量。

    save
    
  6. 通过 boot 命令启动。完成固化。

    boot
    
    zynq-uboot> setenv bootdelay
    zynq-uboot> setenv bootcmd 'fatload mmc 0 0x00200000 bspzynq7000_zturn.bin; go 0x00200000'
    zynq-uboot> save
    Saving Environment to SPI Flash...
    SF: Detected W25Q128BV with page size 256 Bytes, erase size 4 KiB, total 16 MiB
    Erasing SPI flash...Writing to SPI flash...done
    
  7. 重启开发板,可自动从 SD 卡读取镜像、加载 SylixOS 系统,并进入系统 Shell 界面。

文档内容是否对您有所帮助?
有帮助
没帮助