一、从网络启动Linux
1.vivado工程导出hdf文件,拷贝到ubuntu目录如:/home/yi/hdf/M7030(hdf文件路径),根据自己的ubuntu用户目录建立一个保存hdf的文件夹。
2.petalinux创建工程
设置petalinux环境变量:source /home/yi/petalinux/v2018.3/settings.sh,或者把这个命令加到用户目录下的.bashrc文件里了,每次打开终端时会自动运行。
新建petalinux工程:
petalinux-create -t project --template zynq -n m30bit
3.petalinux硬件配置
petalinux-config --get-hw-description /home/yi/hdf/M7030
因为要从QSPI Flash启动系统,所以需要把BOOT.BIN放到QSPI Flash里。把Subsystem AUTO Hardware Settings → Advanced bootable images storage Settings → boot image settings的image storage media改成primary flash。
Linux内核和根文件系统要放在eMMC里,默认kernel image setting存储在primary sd,primary sd就是SD0,我的板卡的eMMC接在ZYNQ的SD0接口上,不用修改。
Image Packaging Configuration → Root filesystem type根文件系统类型配置成INITRAMFS,因为后面需要先从内存启动Linux系统。
板卡调试串口为UART0,Subsystem AUTO Hardware Settings → Serial Settings修改为UART0(默认UART1)。
因BOOT.BIN文件较大运行板卡设置IP地址环境变量后,保存环境变量重启无法再次进入u-boot,所以把板卡IP和TFTP服务器IP都设置成静态地址。Subsystem AUTO Hardware Settings → Ethernet Settings → Obtain IP address automatically取消自动获取地址选择,根据自己需要设置板卡IP地址(默认是192.168.0.10)。
u-boot Configuration → TFTP Server IP address修改AUTO为静态地址。netboot offset默认是0x10000000,这就是tftpboot image.ub加载到内存的地址。
4.petalinux内核配置
petalinux-config -c kernel
配置Linux内核,默认无修改。
5.petalinux根文件系统配置
petalinux-config -c rootfs
eMMC分区操作需要用到fdisk、mkfs、mount、umount,Filesystem Packages → base → util-linux 使能相应命令。
需要新增mkfs.ext4命令,后续用于格式化eMMC分区操作。Filesystem Packages→base→e2fsprogs的e2fsprogs和e2fsprogs-mke2fs使能。
配置NFS支持客户端,Filesystem Packages → console → network → nfs-utils 使能相应命令。NFS客户端开启可解决mount NFS共享文件夹时的报错如下图,/mnt:bad option;for several filesystems(e.d.nfs,cifs)you might need a /sbin/mount.
6.petalinux编译
petalinux-build
在ubuntu安装配置好tftp服务器和NFS服务,编译完成会自动将镜像文件复制到根目录tftpboot文件夹。
7.petalinux打包镜像
petalinux-package --boot --fsbl --fpga --u-boot --force
打包生成BOOT.BIN和image.ub。
8.下载BOOT.BIN到板卡Flash
9.启动u-boot
测试板卡与服务器网络联通。
10.Tftp启动Linux
tftpboot image.ub,将内核文件image.ub通过tftp加载到内存。
bootm 10000000,从内存启动Linux系统。