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 .
qe@ubuntu:~/program$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jun 21 2019 /bin/sh -> dash
qe@ubuntu:~/program$
qe@ubuntu:~/program$ 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'
参考 PetaLinux Yocto Tips
Copy the patch to project file
directory.
Modify project file
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}:"
/project-spec/meta-user/conf/layer.conf
.参考 PetaLinux Yocto Tips
注意:此方法不能用于2016.4版本打补丁,2016.4使用外部源代码编译fsbl,Yocto不支持对外部源代码打补丁。
在meta-user层创建fsbl文件夹
zc@ubuntu:~/project/mwm165$ mkdir -p project-spec/meta-user/recipes-bsp/fsbl/files
拷贝补丁文件到plnx-proj-root/project-spec/meta-user/recipes-bsp/fsbl/files
zc@ubuntu:~/project/mwm165$ 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文件,
zc@ubuntu:~/project/mwm165$ 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,清除工程
zc@ubuntu:~/project/mwm165$ petalinux-build -x mrproper
zc@ubuntu:~/project/mwm165$ rm -rf components/plnx_workspace
重新编译FSBL
zc@ubuntu:~/project/mwm165$ petalinux-build
zc@ubuntu:~/project/mwm165$ 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,而且一旦坏掉就必须重建工程。
包括fsbl,uboot等。
zc@ubuntu:~/project/mwm165$ petalinux-package --boot --fsbl ./images/linux/zynqmp_fsbl.elf --u-boot --pmufw ./images/linux/pmufw.elf --force
zc@ubuntu:~/project/mwm165$ cp BOOT.BIN /mnt/hgfs/F/xilinxlinux/boot/mwm165/
zc@ubuntu:~/project/mwm165$ cp images/linux/zynqmp_fsbl.elf /mnt/hgfs/F/xilinxlinux/boot/mwm165/
zc@ubuntu:~/project/mwm165$ cp images/linux/image.ub /mnt/hgfs/F/xilinxlinux/boot/mwm165/
如上图所示,"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
^~~~~~~~~~~~~~~~~~~~~~~
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
build之前断网,则Checking sstate mirror object availability瞬间完成,推测肯定是联网,网速很慢导致吃屎,生命不可贵吗,熬夜到凌晨,fuck,现在编译时间可以控制到2min。如果我不熬夜,我估计也不会想着要快点,总之真的恶心。
#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
更改
,
IMAGE_INSTALL_append = " iperf3"
IMAGE_INSTALL_append = " nginx_1.13.5"