一、清理并创建自定义目录
Clear the build area of the PetaLinux project for archiving as a BSP or for revision control. This example retains the images directory of the project.
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-build -x distclean
[INFO] building project
[INFO] sourcing bitbake
[INFO] generating user layers
[INFO] generating workspace directory
INFO: bitbake petalinux-user-image -c cleansstate
Loading cache: 100%
...
NOTE: Executing RunQueue Tasks
NOTE: Tasks Summary: Attempted 2 tasks of which 0 didn't need to be rerun and all succeeded.
[INFO] successfully built project
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-create -t apps -n one-wire-app --enable
zzz@ubuntu-GCP1820-SS:xilinx$ # 其中one-wire-app是笔者应用程序的名字。而--enable参数则是使能对应用程序的编译,这样就不用再次去rootfs下再次启动配置。
zzz@ubuntu-GCP1820-SS:xilinx$ # 打开目录<工程根目录>/project-spec/meta-user/recipes-apps/myapp,可以看到file下存放着你的源码,可以根据自己的需求,直接替换
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-create -t modules --name one-wire --enable
zzz@ubuntu-GCP1820-SS:xilinx$ # 创建并使能自定义驱动模块 one-wire 的编译
zzz@ubuntu-GCP1820-SS:xilinx$ # 打开目录<工程根目录>/project-spec/meta-user/recipes-bsp/device-tree/files, 修改设备树文件 system-user.dtsi
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$ cat system-user.dtsi
/include/ "system-conf.dtsi"
/ {
model = "ZynqMP ZU19EG ShireA Rev0.0.9";
aliases {
serial0 = &uart0;
spi0 = &qspi;
mmc0=&sdhci0;
};
...
one_wire: onewire@80001000 {
compatible = "xxx,one-wire-1.0.0";
reg = <0x0 0x80001000 0x0 0x1000>;
};
...
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
二、编译内核模块和用户程序
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-build -c one-wire #only for one-wire moudule
[INFO] building one-wire
[INFO] generating Kconfig for project
[INFO] silentconfig project
[INFO] sourcing bitbake
[INFO] generating plnxtool conf
[INFO] generating meta-plnx-generated layer
[INFO] generating machine configuration
[INFO] generating bbappends for project . This may take time !
[INFO] generating u-boot configuration files
[INFO] generating kernel configuration files
[INFO] generating user layers
[INFO] generating workspace directory
[INFO] generating kconfig for Rootfs
[INFO] silentconfig rootfs
[INFO] generating petalinux-user-image.bb
INFO: bitbake one-wire
...
NOTE: Successfully copied built images to tftp dir: /tftpboot
[INFO] successfully built one-wire
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$ find . -name "one-wire.ko" #已找到 one-wire 模块
./build/tmp/sysroots-components/plnx_zynqmp/one-wire/lib/modules/4.19.0-xilinx-v2019.2/extra/one-wire.ko
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$ ll ./build/tmp/sysroots-components/plnx_zynqmp/one-wire/lib/modules/4.19.0-xilinx-v2019.2/extra/one-wire.ko
-rw-r--r-- 1 zzz zzz 12880 4月 3 12:16 ./build/tmp/sysroots-components/plnx_zynqmp/one-wire/lib/modules/4.19.0-xilinx-v2019.2/extra/one-wire.ko
zzz@ubuntu-GCP1820-SS:xilinx$ # 当前是最新编译出来的 one-wire 模块
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$ # 编译 one-wire-app 应用程序, 并将应用程序安装到系统中
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-build -c one-wire-app -x do_install
[INFO] building one-wire-app
[INFO] sourcing bitbake
[INFO] generating user layers
...
Time: 0:00:00
Sstate summary: Wanted 4 Found 0 Missed 8 Current 32 (0% match, 88% complete)
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
NOTE: Tasks Summary: Attempted 267 tasks of which 267 didn't need to be rerun and all succeeded.
INFO: Copying Images from deploy to images
[Errno 13] Permission denied: '/tftpboot/Image'
NOTE: Successfully copied built images to tftp dir: /tftpboot
[INFO] successfully built one-wire-app
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-build -c rootfs
[INFO] building rootfs
[INFO] sourcing bitbake
[INFO] generating user layers
[INFO] generating workspace directory
...
NOTE: Successfully copied built images to tftp dir: /tftpboot
[INFO] successfully built rootfs
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-build -x package
[INFO] building project
[INFO] sourcing bitbake
[INFO] generating user layers
[INFO] generating workspace directory
INFO: bitbake virtual/kernel
...
NOTE: Successfully copied built images to tftp dir: /tftpboot
[INFO] successfully built project
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
三、编译设备树和整个工程
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-build -c device-tree #only for device-tree
[INFO] building device-tree
[INFO] sourcing bitbake
[INFO] generating user layers
[INFO] generating workspace directory
...
[INFO] successfully built device-tree
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-build #for all
[INFO] building project
[INFO] sourcing bitbake
[INFO] generating user layers
[INFO] generating workspace directory
INFO: bitbake petalinux-user-image
Loading cache: 100%
...
[Errno 13] Permission denied: '/tftpboot/Image'
NOTE: Successfully copied built images to tftp dir: /tftpboot
[INFO] successfully built project
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
四、制作 BOOT.BIN 文件
zzz@ubuntu-GCP1820-SS:xilinx$ petalinux-package --boot --format BIN --fsbl --pmufw --fpga --u-boot --output BOOT.BIN --force
INFO: File in BOOT BIN: "/home/zzz/petalinux/xilinx/images/linux/zynqmp_fsbl.elf"
INFO: File in BOOT BIN: "/home/zzz/petalinux/xilinx/images/linux/pmufw.elf"
INFO: File in BOOT BIN: "/home/zzz/petalinux/xilinx/project-spec/hw-description/evt2_shireA_V11_000017.bit"
INFO: File in BOOT BIN: "/home/zzz/petalinux/xilinx/images/linux/bl31.elf"
INFO: File in BOOT BIN: "/home/zzz/petalinux/xilinx/images/linux/u-boot.elf"
INFO: Generating zynqmp binary package BOOT.BIN...
****** Xilinx Bootgen v2019.2
**** Build date : Oct 23 2019-22:59:42
** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
INFO: Binary is ready.
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$
zzz@ubuntu-GCP1820-SS:xilinx$ ll images/linux/ -htr
total 714M
-rw-r--r-- 1 zzz zzz 20M 12月 5 2020 system.bit
drwxrwxr-x 2 zzz zzz 4.0K 3月 22 15:11 pxelinux.cfg/
drwxrwxr-x 3 zzz zzz 4.0K 3月 22 15:11 ../
-rwxr-xr-x 1 zzz zzz 176M 3月 26 18:54 sdk.sh*
drwxr-xr-x 17 zzz zzz 4.0K 3月 29 11:44 rootfs/
drwxrwxr-x 5 zzz zzz 4.0K 3月 29 14:30 .Xil/
-rw-rw-r-- 1 zzz zzz 21M 4月 3 11:50 boot.bin
-rw-r--r-- 1 zzz zzz 66M 4月 3 12:33 Image
-rw-r--r-- 1 zzz zzz 303M 4月 3 12:33 vmlinux
-rw-r--r-- 1 zzz zzz 3.3M 4月 3 12:33 System.map.linux
-rw-r--r-- 1 zzz zzz 25M 4月 3 12:33 image.ub
-rw-r--r-- 1 zzz zzz 130K 4月 3 12:33 zynqmp_fsbl.elf
-rw-r--r-- 1 zzz zzz 665K 4月 3 12:33 u-boot.elf
-rw-r--r-- 1 zzz zzz 600K 4月 3 12:33 u-boot.bin
-rw-r--r-- 1 zzz zzz 598K 4月 3 13:03 rootfs.testdata.json
-rw-r--r-- 1 zzz zzz 9.2K 4月 3 13:03 rootfs.manifest
-rw-r--r-- 1 zzz zzz 6.9M 4月 3 13:03 rootfs.tar.gz
-rw-r--r-- 1 zzz zzz 49M 4月 3 13:03 rootfs.cpio
-rw-r--r-- 1 zzz zzz 6.9M 4月 3 13:03 rootfs.cpio.gz
-rw-r--r-- 1 zzz zzz 6.9M 4月 3 13:03 rootfs.cpio.gz.u-boot
-rw-r--r-- 1 zzz zzz 12M 4月 3 13:03 rootfs.jffs2
drwxrwxr-x 5 zzz zzz 4.0K 4月 3 13:07 ./
-rw-rw-r-- 1 zzz zzz 21M 4月 3 14:45 BOOT.BIN
zzz@ubuntu-GCP1820-SS:xilinx$