Xilinx zynq zynqMP Petalinux安装和使用
常用命令zc@ubuntu:~/project/mwm165$ petalinux-package --boot --fsbl ./images/linux/zynqmp_fsbl.elf --u-boot --pmufw ./images/linux/pmufw.elf --forcezc@ubuntu:~/project/mwm165$ cp BOOT.BIN /mnt/hgfs/F/x...
作者
QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118
安装
petalinux升级了安装方式变化,2015.2.1会自动新建子文件夹,而2018.2需要手动设置,每次都折腾一下,记录一下。
$ cd ~/program
/mnt/hgfs/F/petalinux-v2018.2-final-installer.run petalinux-v2018.2-final
$ /mnt/hgfs/F/petalinux-v2015.2.1-final-installer.run .
ubuntu切换到bash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jun 21 2019 /bin/sh -> dash
$ sudo dpkg-reconfigure dash
[sudo] password for qe:
Removing 'diversion of /bin/sh to /bin/sh.distrib by dash'
Adding 'diversion of /bin/sh to /bin/sh.distrib by bash'
Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'
Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash'
配置参数
配置镜像在flash或sd,对应u-boot环境变量变化,
default_bootcmd=run cp_kernel2ram && bootm ${netstart}
# flash
cp_kernel2ram=sf probe 0 && sf read ${netstart} ${kernelstart} ${kernelsize}
# sd
cp_kernel2ram=mmcinfo && fatload mmc ${sdbootdev} ${netstart} ${kernel_img}
Petalinux给内核打补丁
-
Copy the patch to project file
<plnx-proj-root>/project-spec/meta-user/recipes-kernel/linux/linux-xlnx
directory. -
Modify project file
<plnx-proj-root>/project-spec/meta-user/recipes-kernel/linux/linux-xlnx_%.bbappend
to use the patch file by adding the patch file name to the SRC_URI_append variable. If the variable does not exist in the file then add a new line with
SRC_URI_append = " file://0001-linux-driver-fix.patch"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
- Make sure the priority for the meta-user layer is 7 in the project file
<plnx-proj-root>/project-spec/meta-user/conf/layer.conf
.
Petalinux给fsbl打补丁
注意:此方法不能用于2016.4版本打补丁,2016.4使用外部源代码编译fsbl,Yocto不支持对外部源代码打补丁。
在meta-user层创建fsbl文件夹
$ mkdir -p project-spec/meta-user/recipes-bsp/fsbl/files
拷贝补丁文件到plnx-proj-root/project-spec/meta-user/recipes-bsp/fsbl/files
$ cp /mnt/hgfs/F/xilinxlinux/doc/xapp1305-ps-pl-based-ethernet-solution/software/patches/0001-fsbl-si570-clk-config-on-A53.patch project-spec/meta-user/recipes-bsp/fsbl/files/
创建fsbl_%.bbappend文件,
$ gedit project-spec/meta-user/recipes-bsp/fsbl/fsbl_%.bbapend
添加如下内容到文件中,
# Patch for FSBL
do_configure_prepend() {
if [ -d "${S}/patches" ]; then
rm -rf ${S}/patches
fi
if [ -d "${S}/.pc" ]; then
rm -rf ${S}/.pc
fi
}
SRC_URI_append = " \
file://00001-fsbl-si570-clk-config-on-A53.patch \
"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
#Add debug for FSBL(optional)
#XSCTH_BUILD_DEBUG = "1"
#Enable appropriate FSBL debug flags
#YAML_COMPILER_FLAGS_append = " -DXPS_BOARD_ZCU102"
# Note: This is not required if you are using Yocto
# EXTERNALXSCTSRC = ""
# EXTERNALXSCTSRC_BUILD = ""
删除plnx-proj-root/components/plnx_workspace,清除工程
$ petalinux-build -x mrproper
$ rm -rf components/plnx_workspace
重新编译FSBL
$ petalinux-build
$ petalinux-build -c bootloader
Xilinx对FSBL打补丁需要使用SDK新建FSBL工程,你看。。。还不如自己在SDK里建FSBL工程搞算了,Petalinux编译太慢,安装SDK,下载Windows或Linux下的web installer,运行之后选择下载到本地安装,这里选择下载Linux系统安装包。下载完之后安装,我这里安装命令行工具就算了,我不需要图形界面。
下面编译就可以通过了,打印会有输出:
fsbl-2017.4+gitAUTOINC+77448ae629-r0 do_compile:
NOTE: fsbl: compiling from external source tree /home/zc/program/petalinux-v2017.4-final/tools/hsm/data/embeddedsw
pmu-firmware-2017.4+gitAUTOINC+77448ae629-r0 do_compile:
NOTE: pmu-firmware: compiling from external source tree /home/zc/program/petalinux-v2017.4-final/tools/hsm/data/embeddedsw
编译
新建的petalinux工程必须先编译,再改platform.h之类的,否则warning: backslash and newline separated by space,而且一旦坏掉就必须重建工程。编译完的镜像在images/linux
下,zynqmp的linux编译出的原始镜像位于,
/home/qe/project/petalinux/zynqmp_vcu/build/tmp/work/plnx_zynqmp-xilinx-linux/linux-xlnx/4.19-xilinx-v2019.1+gitAUTOINC+9811303824-r0/image/boot/Image
# or
/home/qe/project/petalinux/zynqmp_vcu/build/tmp/work/plnx_zynqmp-xilinx-linux/linux-xlnx/4.19-xilinx-v2019.1+gitAUTOINC+9811303824-r0/package/boot/Image
打包BOOT镜像
包括fsbl,uboot等。
$ petalinux-package --boot --fsbl ./images/linux/zynqmp_fsbl.elf --u-boot --pmufw ./images/linux/pmufw.elf --force
$ cp BOOT.BIN /mnt/hgfs/F/xilinxlinux/boot/mwm165/
$ cp images/linux/zynqmp_fsbl.elf /mnt/hgfs/F/xilinxlinux/boot/mwm165/
$ cp images/linux/image.ub /mnt/hgfs/F/xilinxlinux/boot/mwm165/
编译驱动
PetaLinux 使用TMP目录来存放阶段文件,TMP目录可以通过petalinux-config查看,但此处不希望移除这些文件,因此需要在 build/conf/local.conf 中注释掉以下行,编译后,找到内核编译输出目录,编译自己的驱动即可,
# INHERIT += "rm_work"
添加已有驱动
如上图所示,"install"的操作需要修改以使得8812au.ko被包含在跟文件系统中/lib/modules/的合适子目录中。 -S是告诉打包工具不要做stripe操作。
内核单独编译
将2018.2 copy换了位置,编译zynqmp,设备树编译时出现错误,
arch/arm64/boot/dts/xilinx/zynqmp-zc1751-xm015-dc1.dts:14:10: fatal error: dt-bindings/phy/phy.h: No such file or directory
#include <dt-bindings/phy/phy.h>
^~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
解决办法,注释arch/arm64/boot/dts/xilinx/Makefile
# SPDX-License-Identifier: GPL-2.0
# dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1232-revA.dtb
dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1254-revA.dtb
dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1275-revA.dtb
dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1275-revB.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1751-xm015-dc1.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1751-xm016-dc2.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1751-xm017-dc3.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1751-xm018-dc4.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1751-xm019-dc5.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zcu100-revC.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zcu102-revA.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zcu102-revB.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zcu102-rev1.0.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zcu104-revA.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zcu104-revC.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zcu106-revA.dtb
#dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zcu111-revA.dtb
always := $(dtb-y)
subdir-y := $(dts-dirs)
clean-files := *.dtb
解决petalinux-build慢
build之前断网,则Checking sstate mirror object availability瞬间完成,推测肯定是联网,网速很慢导致吃屎,生命不可贵吗,熬夜到凌晨,现在编译时间可以控制到2min。如果我不熬夜,我估计也不会想着要快点,总之真的恶心。
常见问题
- device-tree串口需要匹配,否则没有输出很慌乱哦
- device-tree phy地址需要匹配,否则没有输出很慌乱哦
- device-tree不需要加compatible = “atheros, at803x”;,这样由驱动自己匹配phy驱动,否则没有网卡很慌乱哦
- uboot配置中的环境变量出现不明字符导致编译错误
用notepad打开之后,发现,
删掉图中的字符,但是没有解决问题,陷入死结,全部删光,一点点重来,换下面这两种写法,
#ifndef CONFIG_ZYNQ_GPIO
#define CONFIG_ZYNQ_GPIO
#endif
#ifdef CONFIG_BOOTDELAY
#undef CONFIG_BOOTDELAY
#endif
#define CONFIG_BOOTDELAY 1
编译成功,另外添加环境变量字符串一定要复制粘贴来搞,不要自己敲空格回车编辑,之前应该是这里引入了未知的字符。下面的也会引入上面的错误,很无语啊
#ifndef CONFIG_BOOTARGS
//#define CONFIG_BOOTARGS "earlycon clk_ignore_unused noinitrd console=ttyPS0,115200 root=/dev/mmcblk0 rw"
#endif
增加新软件包
更改<plnx-proj-root>/project-spec/meta-user/recipes-core/images/petalinux-image.bbappend
,
IMAGE_INSTALL_append = " iperf3"
IMAGE_INSTALL_append = " nginx_1.13.5"
在rootfs配置中选中,
USB启动
如何使用 Vivado 2022.1 版本工具链实现 ZCU102 USB 启动(上)
如何使用2022.1版本工具链实现ZCU102 USB启动(下)
Qt
更多推荐
所有评论(0)