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.bin
、BOOT.bin
。1 个 zynq7000 开发板。
1 条网线、1 条串口线。分别将串口线、网线,连接开发板和 Windows 电脑,这样就可以通过电脑访问开发板,并对开发板进行串口连接、网络启动、SD 卡格式化等操作了。
查看串口号
通过 Windows 电脑的 设备管理器, 查看串口的端口号。如下图所示, 串口号 为 COM3 。如果无法识别串口,可能是没有安装此串口的驱动程序,需要下载并安装驱动。
串口连接
打开串口调试工具 PuTTY。找到 PuTTY 工具路径,然后双击 PUTTY.EXE。
配置连接。在 Session 页面,设置串口端口(要与准备工作查到的端口号保持一致)和波特率参数。
选择 Serial ,配置串口 Flow control 参数为 None 。
单击 Open。
单击开发板上的 RESET 按键,重新启动开发板。
注意:
务必在提示‘Hit any key to stop autoboot: 0‘ 之前,在键盘上按一下任意键, 进入 Uboot 命令行。您可以使用命令行与开发板进行交互。
网络启动
准备工作
- 启动 TFTP 服务:将 zynq7000 开发板与上位机通过网线连接,启动 TFTP 服务器,服务器传输目录指向
bspzynq7000_zturn.bin
所在的目录下。 - 关闭防火墙:如果 Windows 防火墙未关闭,则可能会阻止开发板与电脑之间的通信。但是,在关闭 Windows 防火墙之前,请确保您已经采取其他必要的安全措施来确保计算机的安全性和网络的安全性。特别是如果您正在连接到公共网络(如互联网),请始终注意安全问题,以避免潜在的安全风险。
操作步骤
通过以下步骤和指令进行 SylixOS 系统镜像的加载及启动。
注意:
以下操作均是在 Uboot 指令操作界面,非 SylixOS 系统 Shell 界面。
按照上文重新启动开发板之后,按 任意键 进入 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>
bootdelay
不要设置为 0,否则将不能停止启动以进入 Uboot Shell,按照以下命令设置bootdelay
环境变量,将暂停时间设置为1s
。setenv bootdelay 1
配置系统镜像加载地址,zynq7000 开发板的镜像加载地址为
0x00200000
,需要设置loadaddr
环境变量参数,Uboot 会将 SylixOS 系统镜像从存储中搬运到内存的该地址中。setenv loadaddr 0x00200000
配置板卡 IP,输入以下指令(IP 需要同主机 IP 在同一网段,以下为参考),设置
ipaddr
环境变量参数。setenv ipaddr 10.4.0.248
配置 TFTP 服务器(上位机)所在的 IP,设置
serverip
环境变量参数。setenv serverip 10.4.0.220
配置传输镜像文件名,设置
bootfile
环境变量参数为bspzynq7000_zturn.bin
(获取的镜像名称,以下为参考)。setenv bootfile bspzynq7000_zturn.bin
配置 Uboot 启动命令,设置
bootcmd
环境变量参数为网络加载方式及加载内存地址。setenv bootcmd 'tftp; go 0x00200000'
输入
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
通过
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 操作系统。
使用
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/sdcard0
和umount /media/sdcard1
将 SD 卡分区卸载)。umount /media/sdcard0 umount /media/sdcard1
使用
ll /dev/blk
查看 SylixOS 识别的 SD 卡设备名。使用
fdsk – f /dev/blk/sdcard-0
对硬盘sdcard-0
进行分区。- 分区数设置为
2
代表两个分区(最多支持 4 个分区)。 - 第一分区对齐值为
4096
(可选为 4K、8K …,这里只能使用 4096、8192 …)。 - 第一分区设置分区大小百分比为
10
(此处为百分比)。 - 第一分区是否为激活的分区,输入
y
。 - 第一分区文件系统类型选择
1
FAT 格式。 (第一个分区作为 boot 分区因此这里选择 FAT )。 - 第二分区大小百分比为
0
(0 代表剩余的全部空间)。 - 第二分区是否为激活的分区,输入 n。
- 第二分区文件系统类型选择
2
TPSFS 格式。 - 分区完成显示分区结果。
[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
- 分区数设置为
执行
remount
命令重新挂载 SD 卡分区。(对于一个新的磁盘设备,第一次使用 SylixOS 命令进行分区时,执行remount
命令后会出现Magic number error, mount failed
的提示,这是由于分区前的文件系统与新的文件系统不兼容的提示信息,可以忽略)。remount /dev/blk/sdcard-0
通过 mkfs 对分区后的 SD 卡进行格式化,格式化的分区为
remount
执行后打印的分区名称。mkfs /media/sdcard0 mkfs /media/sdcard1
执行
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.bin
、 bspzynq7000_zturn.bin
拷贝至 SD 卡第一个分区内(因为之前的格式化操作已经将 SD 卡中的内容删除了,需要重新传输,否则重启上电无法启动)。
注意:
这里禁止重启。否则,需要重新按照网络启动部分重新引导 SylixOS 网络启动,再按照上述步骤将文件导入第一个分区。
可以使用读卡器将文件拷贝至 SD 卡第一个分区内。也可以通过IDE提供的FTP方式进行文件拷贝。具体操作如下所示。
修改开发板的 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地址
打开IDE,通过FTP的方式将文件拷贝到 SD 卡根目录
/boot
内(第一个分区内)。
操作步骤
通过以下操作,配置环境变量,实现从 SD 卡启动 UBoot, 然后进入 SylixOS 系统。
将拷贝完文件的 SD 卡插入开发板。如果采用FTP方式,则不需要此操作。
执行
sync
,然后重新上电。再次按任意键进入 Uboot 界面。设置启动等待时间,不要设置为 0,否则将不能停止启动以进入 Uboot Shell,按照以下命令设置
bootdelay
环境变量,将暂停时间设置为1s
。setenv bootdelay 1
设置 SD 卡启动环境变量,设置启动命令参数
bootcmd
,通过fatload
命令将镜像文件从 SD 卡第一个分区拷贝到内存地址0x00200000
,通过go
命令启动系统镜像。setenv bootcmd 'fatload mmc 0 0x00200000 bspzynq7000_zturn.bin; go 0x00200000'
输入
save
保存环境变量。save
通过
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
重启开发板,可自动从 SD 卡读取镜像、加载 SylixOS 系统,并进入系统 Shell 界面。