赞
踩
QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118
libgcc-xilinx和libgcc-xilinx-dev两个库是为了添加libgcc_s.so.1,来使用pthread_exit()函数
开发者分享 | 如何给 u-boot 的源码生成 patch 并在 Petalinux 中编译
【工程师分享】在Petalinux编译多个源文件的Linux内核模块,以及扩展Makefile功能
开发者分享|Petalinux patch生成和应用方法整理
开发者分享|U-boot下的自定义命令设计
71198 - 2017.2-2017.4 Zynq UltraScale+ MPSoC VCU: PetaLinux fails to build gstreamer using sstate cache
每个Xilinx Petalinux工具版本都会在官网有一个AR来具体说明。所有版本说明的AR的名称会按照如下格式来命名,PetaLinux XXXX.X - Product Update Release Notes and Known Issues。例如你要找2021.1版本的话,可以在官网搜索PetaLinux 2021.1 - Product Update Release Notes and Known Issues就能直接找到了。在这个AR中会有一个列表介绍当前版本下所有petalinux工具相关的版本信息。
安装依赖,
$ sudo apt install ssh make tftp-hpa tftpd-hpa dos2unix iproute2 gawk xvfb git make net-tools libncurses5-dev zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev screen pax gzip zlib1g:i386 minicom u-boot-tools mtd-utils
安装,
$ mkdir -p /opt/Xilinx/Petalinux/2019.2
$ ./petalinux-v2019.2-final-installer.run /opt/Xilinx/Petalinux/2019.2
$ sudo dpkg-reconfigure dash #选择no
建立工程,可以创建空白工程,也可以从bsp创建工程,
# 空白工程
$ petalinux-create -t project -n zynq-v2018.2 --template zynq
$ cp ~/project/fdk/pcierc-zc706/pcierc_wrapper.hdf ./zynq-v2018.2
$ cd zynq-v2018.2
$ petalinux-config --get-hw-description=.
# 从bsp创建工程
$ petalinux-create -t project -s ./zynq-v2018.2.bsp
系统配置,可配置生成的固件这些参数,Yocto相关参数配置都在这里,
$ petalinux-config
配置rootfs,
$ petalinux-config -c rootfs
配置内核,发现默认的内核路径为build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/linux-xlnx/4.14-xilinx-v2018.2+gitAUTOINC+ad4cd988ba-r0/linux-plnx_zynq7-standard-build
,
$ petalinux-config -c kernel
编译,
$ petalinux-build
生成SDK,默认的SDK安装包在<proj_proot>/images/linux/sdk.sh
,通过在rootfs中加入packagegroup-petalinux-qt
,packagegroup-petalinux-opencv
,可以制作出支持Qt和OpenCV的交叉编译工具链。
$ petalinux-build --sdk
安装SDK,默认的SDK安装路径在<proj_proot>/images/linux/sdk/
,
$ petalinux-package --sysroot
PetaLinux SDK installer version 2018.2
======================================
You are about to install the SDK to "/home/qe/project/petalinux/zynq-v2018.2/images/linux/sdk". Proceed[Y/n]? Y
Extracting SDK................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . /home/qe/project/petalinux/zynq-v2018.2/images/linux/sdk/environment-setup-cortexa9hf-neon-xilinx-linux-gnueabi
使用Yocto工具的步骤,新建工程后需要使用petalinux-config
或petalinux-config --oldconfig
,完成基本环境创建。
$ source ~/program/petalinux-v2018.2-final/components/yocto/source/arm/environment-setup-cortexa9hf-neon-xilinx-linux-gnueabi SDK environment now set up; additionally you may now run devtool to perform development tasks. Run devtool --help for further details. qe@ubuntu:~/zynq-v2018.2$ source ~/program/petalinux-v2018.2-final/components/yocto/source/arm/layers/core/oe-init-build-env ### Shell environment set up for builds. ### You can now run 'bitbake <target>' Common targets are: core-image-minimal core-image-sato meta-toolchain meta-ide-support You can also run generated qemu images with a command like 'runqemu qemux86' qe@ubuntu:~/zynq-v2018.2/build$ export PATH=~/program/petalinux-v2018.2-final/tools/hsm/bin:$PATH qe@ubuntu:~/zynq-v2018.2/build$ export BB_ENV_EXTRAWHITE="BB_ENV_EXTRAWHITE PETALINUX" # 测试bitbake命令 qe@ubuntu:~/project/petalinux/zynq-v2018.2/build$ bitbake strace Loading cache: 100% |############################################| Time: 0:00:00 Loaded 3423 entries from dependency cache. Parsing recipes: 100% |##########################################| Time: 0:00:03 Parsing of 2552 .bb files complete (2517 cached, 35 parsed). 3425 targets, 148 skipped, 0 masked, 0 errors. NOTE: Resolving any missing task queue dependencies Initialising tasks: 100% |#######################################| Time: 0:00:03 Checking sstate mirror object availability: 100% |###############| Time: 0:02:33 NOTE: Executing SetScene Tasks NOTE: Executing RunQueue Tasks NOTE: Tasks Summary: Attempted 2206 tasks of which 2181 didn't need to be rerun and all succeeded.
下面就可以愉快的使用yocto的工具来开发了,修改内核/home/qe/program/petalinux-v2018.2-final/components/yocto/source/arm/workspace/sources/linux-xlnx
测试一下,报错,找不到openamp.scc
,但是这个文件在默认的内核路径为build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/linux-xlnx/4.14-xilinx-v2018.2+gitAUTOINC+ad4cd988ba-r0
确实存在。进入这个目录来测试,还是不行,而且petalinux-config -c kernel
也不能用了。把recipe
reset之后petalinux-config -c kernel
可以用了,所以,尝试在petalinux使用外部源代码来解决这个问题吧,当然需要make mrproper
一下,刚看了官方好像是bitbake virtual/kernel -c menuconfig
,算了,不测试了。
qe@ubuntu:~/zynq-v2018.2/build$ bitbake linux-xlnx -c menuconfig Loading cache: 100% |########################################################################################################################################################################| Time: 0:00:01 Loaded 3423 entries from dependency cache. Parsing recipes: 100% |######################################################################################################################################################################| Time: 0:00:04 Parsing of 2552 .bb files complete (2516 cached, 36 parsed). 3425 targets, 148 skipped, 0 masked, 0 errors. NOTE: There are 1 recipes to be removed from sysroot plnx-zynq7, removing... NOTE: Resolving any missing task queue dependencies Initialising tasks: 100% |###################################################################################################################################################################| Time: 0:00:06 Checking sstate mirror object availability: 100% |###########################################################################################################################################| Time: 0:00:01 NOTE: Executing SetScene Tasks NOTE: Executing RunQueue Tasks ERROR: linux-xlnx-4.14-xilinx-v2018.2+git999-r0 do_kernel_metadata: Could not generate configuration queue for plnx-zynq7. ERROR: linux-xlnx-4.14-xilinx-v2018.2+git999-r0 do_kernel_metadata: Function failed: do_kernel_metadata (log file is located at /home/qe/project/petalinux/zynq-v2018.2/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/linux-xlnx/4.14-xilinx-v2018.2+git999-r0/temp/log.do_kernel_metadata.35873) ERROR: Logfile of failure stored in: /home/qe/project/petalinux/zynq-v2018.2/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/linux-xlnx/4.14-xilinx-v2018.2+git999-r0/temp/log.do_kernel_metadata.35873 Log data follows: | DEBUG: Executing python function extend_recipe_sysroot | NOTE: Direct dependencies are ['/home/qe/program/petalinux-v2018.2-final/components/yocto/source/arm/layers/core/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb:do_populate_sysroot'] | NOTE: Installed into sysroot: ['kern-tools-native'] | NOTE: Skipping as already exists in sysroot: ['quilt-native'] | DEBUG: Python function extend_recipe_sysroot finished | DEBUG: Executing shell function do_kernel_metadata | ERROR: could not find kconf openamp.cfg, included from /home/qe/program/petalinux-v2018.2-final/components/yocto/source/arm/workspace/sources/linux-xlnx/oe-local-files/openamp.scc | ERROR: could not process input files: /home/qe/project/petalinux/zynq-v2018.2/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/linux-xlnx/4.14-xilinx-v2018.2+git999-r0/defconfig /home/qe/program/petalinux-v2018.2-final/components/yocto/source/arm/workspace/sources/linux-xlnx/oe-local-files/openamp.scc /home/qe/program/petalinux-v2018.2-final/components/yocto/source/arm/workspace/sources/linux-xlnx/oe-local-files/plnx_kernel.cfg /home/qe/program/petalinux-v2018.2-final/components/yocto/source/arm/workspace/sources/linux-xlnx/oe-local-files/user_2020-11-27-10-32-00.cfg | See /tmp/tmp.tGsI3j1qT6 for details | ERROR: Could not generate configuration queue for plnx-zynq7. | WARNING: /home/qe/project/petalinux/zynq-v2018.2/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/linux-xlnx/4.14-xilinx-v2018.2+git999-r0/temp/run.do_kernel_metadata.35873:1 exit 1 from 'exit 1' | ERROR: Function failed: do_kernel_metadata (log file is located at /home/qe/project/petalinux/zynq-v2018.2/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/linux-xlnx/4.14-xilinx-v2018.2+git999-r0/temp/log.do_kernel_metadata.35873) ERROR: Task (/home/qe/program/petalinux-v2018.2-final/components/yocto/source/arm/layers/meta-xilinx/meta-xilinx-bsp/recipes-kernel/linux/linux-xlnx_2018.2.bb:do_kernel_metadata) failed with exit code '1' NOTE: Tasks Summary: Attempted 346 tasks of which 342 didn't need to be rerun and 1 failed. Summary: 1 task failed: /home/qe/program/petalinux-v2018.2-final/components/yocto/source/arm/layers/meta-xilinx/meta-xilinx-bsp/recipes-kernel/linux/linux-xlnx_2018.2.bb:do_kernel_metadata Summary: There were 2 ERROR messages shown, returning a non-zero exit code.
添加自己的固件文件到根文件系统,注意这个时候和APP不一样,你的FILES_${PN}
一定要写,
$ petalinux-create -t apps --template install --name myfw --enable
petalinux-build卡住在source bitbake很久都没动,执行一下clean才能编,
petalinux-build -x distclean
添加驱动,删除驱动除了删除模块目录之外,您还必须从<plnx-proj-root>/project-spec/meta-user/recipes-core/images/petalinux-image.bbappend
中删除行:IMAGE_INSTALL_append= "mymodule"
。删除目录但保留petalinux-image-full.bbappend
中的上述程序行将出错。
$ petalinux-create -t modules --name broadcom-wl --enableINFO: Create modules: broadcom-wl
编译,
$ petalinux-build
$ petalinux-build -c broadcom-wl
生成uImage,如果你想在zynq平台上使用jffs2,zynqmp平台不支持这个命令,
$ petalinux-package --image -c kernel --format uImage
创建BOOT.BIN,
# $ petalinux-package --boot --fsbl <FSBL_ELF> --fpga <BITSTREAM> --u-boot --pmufw <PMUFW_ELF>
# It will generate a BOOT.BIN in your working directory with:
# * specified <BITSTREAM>
# * specified <FSBL_ELF>
# * specified < PMUFW_ELF > *
# * newly built u-boot image which is <PROJECT>/images/linux/u-boot.elf
# 3合1
$ petalinux-package --boot --fpga images/linux/pcierc_wrapper_gen2_x4.bit --u-boot --force
# 2合1
$ petalinux-package --boot --u-boot --force
配置自动登录,
# Select Yocto-settings > Enable debug-tweaks
$ petalinux-config
添加自启动程序,采用install
类型的模板,只需要把自己的应用命名为myapp
部署到/usr/bin
就可以了,而petalinux的${bindir}
就代表/usr/bin
,
$ petalinux-create -t apps --template install -n myfw-init --enable $ cat project-spec/meta-user/recipes-apps/myfw-init/myfw-init.bb # # This file is the myfw-init recipe. # SUMMARY = "Simple myfw-init application" SECTION = "PETALINUX/apps" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "file://myfw-init \ " S = "${WORKDIR}" inherit update-rc.d INITSCRIPT_NAME = "myfw-init" INITSCRIPT_PARAMS = "start 99 S ." do_install() { install -d ${D}${sysconfdir}/init.d install -m 0755 ${S}/myfw-init ${D}${sysconfdir}/init.d/myfw-init } FILES_${PN} += "${sysconfdir}/*" $ cat project-spec/meta-user/recipes-apps/myfw-init/files/myfw-init #!/bin/sh DAEMON=/usr/bin/myapp start () { echo " Starting myapp" start-stop-daemon -S -o --background -x $DAEMON } stop () { echo " Stoping myapp" start-stop-daemon -K -x $DAEMON } restart() { stop start } [ -e $DAEMON ] || exit 1 case "$1" in start) start; ;; stop) stop; ;; restart) restart; ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit $?
删除自己的应用,直接删除应用的文件夹,然后注释掉IMAGE_INSTALL_append= " ***"
,
# <plnx-proj-root>/project-spec/meta-user/recipes-core/images/petalinux-image-full.bbappend
IMAGE_INSTALL_append= " ***"
发布bsp,
$ petalinux-package --bsp -o zynq-v2018.2.bsp -p .
$ petalinux-package --bsp -o zynq-v2018.2.bsp -p . --force
连着vivado工程一起打包,clean
表示把vivado工程清除后再发布,减少文件体积,
$ petalinux-package --bsp -o zynq-v2018.2.bsp -p . --hwsource <PATH_TO_HARDWARE_PROJECT> --force
$ petalinux-package --bsp -o zynq-v2018.2.bsp -p . --hwsource <PATH_TO_HARDWARE_PROJECT> --force --clean
参考AR711989,
This is a known issue in 2017.2-2017.4 PetaLinux if BB_NO_NETWORK is set to 1, and the local download directory is set to PREMIRRORS_prepend in the conf file. The PREMIRRORS variable will have SOURCE_MIRROR_URL as the first URL. This causes build to fail as network access is disabled. PREMIRRORS should be appended here so that a prepend in other layers/conf files takes precedence. To work around this issue follow the steps below: 1) Run petalinux-config ---> Yocto Settings ---> Add pre-mirror url ---> file:///opt/xilinx/petalinux/sstate-rel-v2017.4/downloads 2) Run petalinux-config ---> Yocto Settings ---> Local sstate feeds settings ---> /opt/xilinx/petalinux/sstate-rel-v2017.4/aarch64 3) Run petalinux-config ---> Yocto Settings ---> Network sstate feeds URL ---> http://petalinux.xilinx.com/sswreleases/rel-v${PETALINUX_VER}/aarch64/sstate-cache //Keep this as the default generated from PetaLinux tools 4) Run petalinux-config ---> Yocto Settings ---> [*] Enable BB NO NETWORK //This is mandatory when you do not have network access on build machines. 5) Add this content in <plnx-proj-root>/project-spec/meta-user/conf/petalinuxbsp.conf and make sure that this path matches with the pre-mirror URL path mentioned above. PREMIRRORS_prepend = " git://.*/.* file:///opt/xilinx/petalinux/sstate-rel-v2017.4/downloads \n \ ftp://.*/.* file:///opt/xilinx/petalinux/sstate-rel-v2017.4/downloads \n \ http://.*/.* file:///opt/xilinx/petalinux/sstate-rel-v2017.4/downloads \n \ https://.*/.* file:///opt/xilinx/petalinux/sstate-rel-v2017.4/downloads \n" 6) Run "petalinux-build -x mrproper && petalinux-build"
petalinux-v2018.2,开发用到的常用工具,使能如下选项,libgcc-xilinx
和libgcc-xilinx-dev
这两个软件包找不到。
Filesystem Packages → base → util-linux util-linux-mkfs Filesystem Packages → base → e2fsprogs [*] e2fsprogs [ ] e2fsprogs-dev [*] e2fsprogs-mke2fs [ ] e2fsprogs-dbg [*] e2fsprogs-resize2fs [*] e2fsprogs-tune2fs [ ] libss [ ] libcomerr [ ] libext2fs [ ] libe2p [*] e2fsprogs-e2fsck [*] e2fsprogs-badblocks Filesystem Packages → base → usbutils Filesystem Packages → base → i2c-tools Filesystem Packages → net → netcat Filesystem Packages → console → network → ethtool
关闭,
Filesystem Packages → misc → tcf-agent
默认已有,
cantools pciutils microcom
去掉不需要的image,
# project-spec/meta-user/conf/petalinuxbsp.conf
#Remove all qemu contents
IMAGE_CLASSES_remove = "image-types-xilinx-qemu qemuboot-xilinx"
IMAGE_FSTYPES_remove = "wic.qemu-sd tar.gz tar.bz2 ext3 ext3.bz2 cpio.bz2 cpio.xz cpio.lzma cpio.lz4"
petalinux采用yocto来制作跟文件系统,比如iperf3,在petalinux rootfs的menuconfig中是没有的,需要手动配置,iperf3 recipe位置在,
zc@ubuntu:~/program/petalinux-v2018.2-final/components/yocto/source/aarch64/layers/meta-openembedded/meta-oe/recipes-benchmark/iperf3$ ls -l
total 8
drwxr-xr-x 2 zc zc 4096 Jun 8 2018 iperf3
-rw-r--r-- 1 zc zc 1171 Jun 8 2018 iperf3_3.2.bb
在工程的meta-user里添加该软件包,双引号里记得加个空格,
zc@ubuntu:~/project/petalinux/zynqmp-v2018.2/project-spec/meta-user/recipes-core/images$ cat petalinux-image.bbappend
#Note: Mention Each package in individual line
# cascaded representation with line breaks are not valid in this file.
IMAGE_INSTALL_append = " peekpoke"
IMAGE_INSTALL_append = " gpio-demo"
IMAGE_INSTALL_append = " iperf3"
使能该软件包,选中iperf3,
zc@ubuntu:~/project/petalinux/zynqmp-v2018.2$ petalinux-config -c rootfs
编译,
zc@ubuntu:~/project/petalinux/zynqmp-v2018.2$ petalinux-build
对于petalinux-image-full中的recipes,有sstate locked,在project-spec/meta-user/conf/petalinuxbsp.conf文件中添加SIGGENE_UNLOCKED_RECIPES += "my-recipe"来unlock。
zc@ubuntu:~/project/petalinux/zynqmp-v2018.2$ cat project-spec/meta-user/conf/petalinuxbsp.conf #User Configuration #OE_TERMINAL = "tmux" # Add EXTRA_IMAGEDEPENDS default components EXTRA_IMAGEDEPENDS_append_zynqmp = " virtual/fsbl virtual/pmu-firmware arm-trusted-firmware" EXTRA_IMAGEDEPENDS_append_zynq = " virtual/fsbl" EXTRA_IMAGEDEPENDS_append_microblaze = " virtual/fsboot virtual/elfrealloc" #Remove all qemu contents IMAGE_CLASSES_remove = "image-types-xilinx-qemu qemuboot-xilinx" IMAGE_FSTYPES_remove = "wic.qemu-sd" EXTRA_IMAGEDEPENDS_remove = "qemu-helper-native virtual/boot-bin"
2021.1及以后的版本可以直接通过petalinux工具中的命令,把源码下载到当前的petalinux工程中然后直接按照你的需要进行修改。之后petalinux工具会按照你修改后的源码进行编译。命令格式如下:petalinux-devtool modify<recipe-name>
,例如:petalinux-devtool modify linux-xlnx
,Linux kernel的源码会被下载到<plnx-proj-root>/components/yocto/workspace/sources/<recipe-name>
文件夹下。然后就可以直接在这个位置对kernel的源码进行修改,修改完成后直接用petalinux-build就可以编译进去了。如果不知道确切的recipe的名字的话,可以使用petalinux-devtool search <key word>
来查找。例如:petalinux-devtool search xen
。另外,在2021.1版本之后,FSBL的recipe-name为fsbl-firmware,pmu的recipe-name为pmu-firmware。
2021.1之前的版本通过patch的方式实现源码的修改,利用git工具,先从上面的列表中找到对应的版本,然后先下载下来。git clone -b<version> <source link>
,下载之后修改对应的源码,修改完成后回到源码的根目录来生成patch,git add .
,把修改的内容添加到本地版本中,git diff <version old> <version new> <xxx.patch>
,生成2个版本之间的patch,版本信息可以使用git log或者git status来查看。 接下来就可以将生成的patch应用到petalinux工程中去。通常就是修改对应recipe的bbappend文件,把patch添加进去即可。
petalinux 2015.2.1驱动Makefile,可参考学习一下,
# # Makefile template for out of tree kernel modules # # PetaLinux-related stuff ifndef PETALINUX $(error You must source the petalinux/settings.sh script before working with PetaLinux) endif -include modules.common.mk ccflags-y += -Wno-error=date-time KERNEL_BUILD:=$(PROOT)/build/$(LINUX_KERNEL) LOCALPWD=$(shell pwd) obj-m += pcie_sata_ep.o all: build modules install build:modules .PHONY: build clean modules clean: make INSTANCE=$(LINUX_KERNEL) -C $(KERNEL_BUILD) M=$(LOCALPWD) clean modules: if [ ! -f "$(PROOT)/build/$(LINUX_KERNEL)/link-to-kernel-build/Module.symvers" ]; then \ echo "ERROR: Failed to build module ${INSTANCE} because kernel hasn't been built."; \ echo "ERROR: Please build kernel with petalinux-build -c kernel first."; \ exit 255; \ else \ make INSTANCE=$(LINUX_KERNEL) -C $(KERNEL_BUILD) M=$(LOCALPWD) modules_only; \ fi install: $(addprefix $(DIR),$(subst .o,.ko,$(obj-m))) if [ ! -f "$(PROOT)/build/$(LINUX_KERNEL)/link-to-kernel-build/Module.symvers" ]; then \ echo "ERROR: Failed to install module ${INSTANCE} because kernel hasn't been built."; \ echo "ERROR: Please build kernel with petalinux-build -c kernel first."; \ exit 255; \ else \ make INSTANCE=$(LINUX_KERNEL) -C $(KERNEL_BUILD) M=$(LOCALPWD) INSTALL_MOD_PATH=$(TARGETDIR) modules_install_only; \ fi help: @echo "" @echo "Quick reference for various supported build targets for $(INSTANCE)." @echo "----------------------------------------------------" @echo " clean clean out build objects" @echo " all build $(INSTANCE) and install to rootfs host copy" @echo " build build subsystem" @echo " install install built objects to rootfs host copy"
2019.1报错,
| In file included from /home/developer/project/zynq-v2019.1/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx/v2019.01-xilinx-v2019.1+gitAUTOINC+d895ac5e94-r0/git/include/configs/platform-top.h:2,
| from include/config.h:5,
| from /home/developer/project/zynq-v2019.1/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx/v2019.01-xilinx-v2019.1+gitAUTOINC+d895ac5e94-r0/git/include/common.h:17,
| from /home/developer/project/zynq-v2019.1/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx/v2019.01-xilinx-v2019.1+gitAUTOINC+d895ac5e94-r0/git/lib/asm-offsets.c:14:
| /home/developer/project/zynq-v2019.1/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx/v2019.01-xilinx-v2019.1+gitAUTOINC+d895ac5e94-r0/git/include/configs/platform-auto.h:151:2: error: expected identifier or '(' before string constant
| "bootenv=uEnv.txt\0" \
| ^~~~~~~~~~~~~~~~~~~~
| make[2]: *** [/home/developer/project/zynq-v2019.1/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx/v2019.01-xilinx-v2019.1+gitAUTOINC+d895ac5e94-r0/git/./Kbuild:44: lib/asm-offsets.s] Error 1
| make[1]: *** [/home/developer/project/zynq-v2019.1/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx/v2019.01-xilinx-v2019.1+gitAUTOINC+d895ac5e94-r0/git/Makefile:1579: prepare0] Error 2
| make[1]: *** Waiting for unfinished jobs....
发现是151行有一个空行,删掉即可,
#define CONFIG_EXTRA_ENV_SETTINGS \
SERIAL_MULTI \
CONSOLE_ARG \
DFU_ALT_INFO_RAM \
DFU_ALT_INFO_MMC \
PSSERIAL0 \
"nc=setenv stdout nc;setenv stdin nc;\0" \
"bootenv=uEnv.txt\0" \
$ cat build/build.log
FileExistsError: [Errno 17] File exists: '/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/buildtools/sysroots/x86_64-petalinux-linux/usr/bin/flock' -> '/home/qe/project/petalinux/zynqmp_vcu/build/tmp/hosttools/flock'
# 由于工程copy到另一台电脑,删掉该路径下所有错误的link
qe@ubuntu:~/project/petalinux/zynqmp_vcu$ ls -l /home/qe/project/petalinux/zynqmp_vcu/build/tmp/hosttools
total 44
...
lrwxrwxrwx 1 qe qe 128 Sep 15 15:12 find -> /home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/buildtools/sysroots/x86_64-petalinux-linux/usr/bin/find
lrwxrwxrwx 1 qe qe 117 Jul 27 10:07 flock -> /opt/Xilinx/Petalinux/2019.1/components/yocto/source/aarch64/buildtools/sysroots/x86_64-petalinux-linux/usr/bin/flock
...
安装错误,重新安装,安装路径需要先设置写权限。
执行petalinux-build -x mrproper
后就无法编译,原因是我执行了source /home/qe/project/petalinux/zynqmp_vcu/sdk/environment-setup-aarch64-xilinx-linux
,
$ petalinux-build [INFO] building project [INFO] sourcing bitbake [INFO] generating user layers INFO: bitbake petalinux-user-image ERROR: Execution of event handler 'check_sanity_eventhandler' failed Traceback (most recent call last): File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/meta/classes/sanity.bbclass", line 979, in check_sanity_eventhandler(e=<bb.event.SanityCheck object at 0x7feab5508470>): sanity_data = copy_data(e) > check_sanity(sanity_data) if e.generateevents: File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/meta/classes/sanity.bbclass", line 943, in check_sanity(sanity_data=<bb.data_smart.DataSmart object at 0x7feab4b960b8>): if last_sanity_version < sanity_version or last_nativelsbstr != nativelsbstr: > check_sanity_version_change(status, sanity_data) status.addresult(check_sanity_sstate_dir_change(sstate_dir, sanity_data)) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/meta/classes/sanity.bbclass", line 637, in check_sanity_version_change(status=<SanityStatus object at 0x7feab4adcfd0>, d=<bb.data_smart.DataSmart object at 0x7feab4b960b8>): status.addresult(check_git_version(d)) > status.addresult(check_perl_modules(d)) status.addresult(check_wsl(d)) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/meta/classes/sanity.bbclass", line 563, in check_perl_modules(sanity_data=<bb.data_smart.DataSmart object at 0x7feab4b960b8>): except subprocess.CalledProcessError as e: > errresult += e.output ret += "%s " % m TypeError: Can't convert 'bytes' object to str implicitly ERROR: Command execution failed: Traceback (most recent call last): File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/meta/classes/sanity.bbclass", line 561, in check_perl_modules subprocess.check_output(["perl", "-e", "use %s" % m]) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/buildtools/sysroots/x86_64-petalinux-linux/usr/lib/python3.5/subprocess.py", line 316, in check_output **kwargs).stdout File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/buildtools/sysroots/x86_64-petalinux-linux/usr/lib/python3.5/subprocess.py", line 398, in run output=stdout, stderr=stderr) subprocess.CalledProcessError: Command '['perl', '-e', 'use Text::ParseWords']' returned non-zero exit status 2 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/command.py", line 113, in runAsyncCommand self.cooker.updateCache() File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/cooker.py", line 1527, in updateCache bb.event.fire(bb.event.SanityCheck(False), self.databuilder.mcdata[mc]) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/event.py", line 225, in fire fire_class_handlers(event, d) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/event.py", line 134, in fire_class_handlers execute_handler(name, handler, event, d) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/event.py", line 106, in execute_handler ret = handler(event) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/meta/classes/sanity.bbclass", line 979, in check_sanity_eventhandler check_sanity(sanity_data) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/meta/classes/sanity.bbclass", line 943, in check_sanity check_sanity_version_change(status, sanity_data) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/meta/classes/sanity.bbclass", line 637, in check_sanity_version_change status.addresult(check_perl_modules(d)) File "/home/qe/program/petalinux-v2019.1-final/components/yocto/source/aarch64/layers/core/meta/classes/sanity.bbclass", line 563, in check_perl_modules errresult += e.output TypeError: Can't convert 'bytes' object to str implicitly Summary: There were 2 ERROR messages shown, returning a non-zero exit code. ERROR: Failed to build project
SRC_URI_append
多了一个空行引起的,
ERROR: ParseError at /home/qe/project/petalinux/zynqmp_vcu/project-spec/meta-user/recipes-kernel/linux/linux-xlnx_%.bbappend:20: unparsed line: 'SRC_URI_append = " file://0001-media-xilinx-TPG-Add-IOCTL-to-set-PPC.patch | ETA: --:--:-file://0002-Add-2nd-HDMI-support-by-adding-a-dummy-driver.patch file://0003-drm-xlnx_mixer-Dont-enable-primary-plane-by-default.patch file://0004-drm_atomic_helper-Supress-vblank-timeout-warning-mes.patch file://0006-drivers-misc-add-support-for-interrupt-based-PCIe-en.patch file://0006-add-xilinx-aurora-drm-and-aurora-eth.patch '
Summary: There was 1 ERROR message shown, returning a non-zero exit code.
SRC_URI_append = " \
file://0001-media-xilinx-TPG-Add-IOCTL-to-set-PPC.patch \
file://0002-Add-2nd-HDMI-support-by-adding-a-dummy-driver.patch \
file://0003-drm-xlnx_mixer-Dont-enable-primary-plane-by-default.patch \
file://0004-drm_atomic_helper-Supress-vblank-timeout-warning-mes.patch \
file://0005-drivers-misc-add-support-for-interrupt-based-PCIe-en.patch \
file://0006-add-xilinx-aurora-drm-and-aurora-eth.patch \
"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。