基础步骤参考“一、SD卡启动”步骤1-10
主要步骤参考博客:ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_zynq emmc-CSDN博客
注意1:博客中Advanced bootable images命令在petalinux2019版本后被移除
注意2:qspiflash如不对内核文件进行特殊修改,只能读取前16MB的内容,所以vivado生成sdk时可按下面步骤进行压缩,对实际运行暂未发现影响。
预操作:
按“一、SD卡启动”执行步骤8-10
petalinux-config --get-hw-description <此处填写工程对应的SDK文件完整路径>
Subsystem AUTO Hardware Settings➡SD/SDIO Settings的Primary SD/SDIO设置成ps7_sd_1
Image Packaging Configuration -> Root filesystem type选择INITRAMFS
- 在虚拟机中搭建好tftp服务器:
1.1 sudo apt-get install tftp-hpa tftpd-hpa
1.2 sudo apt-get install xinetd
1.3 mkdir /home/<用户名>/Tools/tftp
若无法创建,则先创建其母文件夹
1.4 chmod 777 /home/<用户名>/Tools/tftp
1.5 sudo touch /etc/xinetd.d/tftp
若无文件夹,则先创建文件夹
-
- sudo vim /etc/xinetd.d/tftp
在弹出页面中单击i,输入以下内容后单击ESC后输入:wq退出:
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/<用户名>/Tools/tftp
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
-
- sudo service tftpd-hpa start
双击d,清除完后单击i,输入以下内容后单击ESC后输入:wq退出:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/<用户名>/Tools/tftp "
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
-
- sudo service tftpd-hpa restart
- 完成后执行petalinux-config, Image Packaging Configuration -> tftpboot directory 填入 /home/<用户名>/Tools/tftp/tftpboot
- 创建petalinux工程
2.1 petalinux-config -c kernel
Device Drivers->Network device support->PHY Device support and infrastructure使能Micrel PHYS/Xilinx GMII2RGMII converter driver
File systems -> Network File Systems -> NFS client support for NFSv4.1/NFS:Disable NFS UDP protocol support/NFS server support for NFS version 4
2.2 输入 petalinux-config -c u-boot ;配置u-boot内核启动方式,选择boot options->boot media->support for booting from qspiflash
2.3 petalinux-config -c rootfs (后面如需使用更多的配置,可参考“一、SD卡启动”11-14建立工程)
Filesystem Packages->base->util-linux->util-linux/ util-linux-blkid/ util-linux-fdisk/ util-linux-mount/ util-linux-mkfs (5个)
以及Filesystem Packages->base->e2fsprogs/e2fsprogs-mke2fs (2个)
以及Filesystem Packages->console->utils->vim->vim
以及Filesystem Packages->console->tools->parted->parted
以及Filesystem Packages->utils->dosfstools->dosfstools
2.4 petalinux-build
2.5 petalinux-package --boot --u-boot --fpga --force
2.6 将生成的BOOT.BIN 和 zynq_fsbl.elf 文件拷贝至windows主机,利用VITIS program_flash进行烧录操作(板子调至JTAG启动模式)
- 烧写EMMC
3.1 开发板设置成QSPI启动,UART连到Windows主机上,开发板网口连接路由器,打开串口助手,在倒计时结束前迅速按下回车,进入u-boot系统
3.2 在uboot命令行输入 mmc dev 1 ; mmc info,出现如图信息
3.3 接下来对开发板与电脑进行网络连接,点击编辑->虚拟网络编辑器
3.4 更改网络设置,修改VMnet0,外部连接修改为电脑对应的网口(非wifi)
3.5 关闭虚拟机,编辑虚拟机设置,添加网络适配器,网络连接修改为自定义->VMnet0 ,重启虚拟机
3.6 如出现虚拟机右上角网络图标消失,执行下面命令:
sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start
3.7 执行ifconfig,找到除ens33和lo外的条目,如 ens37
3.8 sudo vim /etc/netplan/01-network-manager-all.yaml,将内容修改为
network:
version: 2
renderer: NetworkManager
ethernets:
ens37:
dhcp4: false
addresses: [192.168.0.111/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8,114.114.114.114]
3.9 sudo netplan apply
3.10 回到串口终端,输入:
setenv serverip 192.168.0.111
setenv ipaddr 192.168.0.100
setenv gatewayip 192.168.0.255
setenv netmask 255.255.255.0
saveenv
3.11 在传输前,请先将image.ub文件放在/home/<ip>/Tools/tftp目录下,接下来在串口输入下面命令
tftpboot 0x10000000 image.ub
3.12 bootm 0x10000000(此处根据传输时具体的load address进行修改)
3.13 看到如下界面即为成功,账号默认petalinux,密码第一次自行设置
3.14 输入ls /dev/mmcblk*,如图所示即尚未分区。如果已经分区,可在3.15的Command输入d进行删除。
3.15 接下来对emmc进行分区操作
sudo fdisk /dev/mmcblk1
Command: n
Select: p
Partition number: 1
First sector: 直接回车
Last sector: +256M
Command: n
Select: p
Partition number: 2
First sector: 直接回车
Last sector: +5120M
Command: p
Command: w
3.16 sudo mkfs.vfat -F 32 /dev/mmcblk1p1
3.17 sudo mkfs.ext4 /dev/mmcblk1p2
3.18 创建挂载文件夹:
mkdir mmcp1
mkdir mmcp2
sudo mount /dev/mmcblk1p1 mmcp1
sudo mount /dev/mmcblk1p2 mmcp2
4、将文件系统转入emmc
4.1 sudo ifconfig eth0 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255
sudo route add default gw 192.168.0.1
service network restart
4.2 mkdir -p /mnt
cd /mnt
sudo tftp -g -r rootfs.tar.gz 192.168.0.111
4.3 sudo tar -zxvf rootfs.tar.gz -C /home/petalinux/mmcp2
5、重新配置Linux系统
5.1 petalinux-config 将Image Packaging Configuration->Rootfilesystem type改为EXT4,Device node of SD device改为/dev/mmcblk1p2
5.2 按2.4 2.5编译,并将生成的image.ub和system.dtb复制到tftp目录下。
5.3 串口终端cd 进入mmcp1文件夹:
sudo tftp -g -r image.ub 192.168.0.111
sudo tftp -g -r system.dtb 192.168.0.111
注意:mmcp1挂载的emmc空间有限,所以需要注意image.ub的大小
5.4 sudo umount mmcp1
sudo umount mmcp2
5.5 再次烧写BOOT.BIN进入qspiflash中