MPSoC Petalinux Software Development
MPSoC Petalinux Software Development
The purpose of this page is to describe how to use PetaLinux to build Linux system and boot on the ZynqMPSoC platform.Table of Contents
SOFTWARE TOOLS AND SYSTEM REQUIREMENTS
- Linux host RHEL 6 64bit
- Set up BASH as default shell
- Install 32bit libs on the Linux host
- Install the libs/tools documented in the "PetaLinux Tools Installation Requirements" section in "Reference Guide" of PetaLinux tools 2014.4.
- Download petalinux-v2015.2_ZUB2-dev-installer.run installer
Install PetaLinux Tools and Reference BSP
Download the PetaLinux installer and Install PetaLinux Tools by running the installer
$./petalinux-v2015.3-dev-installer.run
Source PetaLinux tools settings
$ source petalinux-v2015.3-dev/settings.sh
PetaLinux environment set to '/petalinux-v2015.3-dev' INFO: Checking free disk space INFO: Checking installed tools INFO: Checking installed development libraries INFO: Checking network and other services
$ petalinux-util --webtalk off
INFO: Turn off webtalk feature
To extract the reference design project within the BSP to your working directory.
$ petalinux-create -t project -s Xilinx-ZynqMP-QEMU-2015.3.bsp
INFO: Create project: INFO: Projects: INFO: * Xilinx-ZynqMP-QEMU-2015.3 INFO: has been successfully installed to /petalinux-v2015.3_0820_2/ INFO: New project successfully created in /petalinux-v2015.3_0820_2/
$ petalinux-create -t project -s Xilinx-ZynqMP-QEMU-2015.3.bsp -n <MYPROJ>
Go inside the PetaLinux project directory
$ cd Xilinx-ZynqMP-QEMU-2015.3
Boot prebuilt Linux image with QEMU
$ petalinux-boot --qemu --prebuilt 3
Sending discover... [ 18.230839] macb ff0b0000.ethernet eth0: link up (100/Full) [ 18.234414] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready Sending discover... Sending select for 10.0.2.15... Lease of 10.0.2.15 obtained, lease time 86400 /etc/udhcpc.d/50default: Adding DNS 10.0.2.3 done. Stopping Bootlog daemon: Warning unable to detect baudrate, use 115200! Use default dev ttyPS0 Running dynamic getty on ttyPS0/115200 Built with PetaLinux v2015.3 (Yocto 1.8) Xilinx-ZynqMP-QEMU-2015_3 /dev/ttyPS0 Xilinx-ZynqMP-QEMU-2015_3 login: root Password: login[1335]: root login on 'ttyPS0' root@Xilinx-ZynqMP-QEMU-2015_3:~#
To Rebuild the Whole PetaLinux Project
$ petalinux-build
INFO: Checking component... INFO: Generating make files and build linux INFO: Generating make files for the subcomponents of linux INFO: Building linux [INFO ] pre-build linux/rootfs/rpmsg_echo_test_kern_app [INFO ] pre-build linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] pre-build linux/rootfs/rpmsg_proxy_dev_driver [INFO ] pre-build linux/rootfs/rpmsg_user_dev_driver [INFO ] pre-build linux/rootfs/echo_test [INFO ] pre-build linux/rootfs/fwupgrade [INFO ] pre-build linux/rootfs/getty-baud [INFO ] pre-build linux/rootfs/gpio-demo [INFO ] pre-build linux/rootfs/mat_mul_demo [INFO ] pre-build linux/rootfs/peekpoke [INFO ] pre-build linux/rootfs/proxy_app [INFO ] pre-build linux/rootfs/xen [INFO ] build system.dtb [INFO ] build linux/kernel [INFO ] update linux/u-boot source [INFO ] generate linux/u-boot configuration files [INFO ] build linux/u-boot [INFO ] build zynqmp_fsbl [INFO ] update linux/arm-trusted-firmware source [INFO ] build linux/arm-trusted-firmware [INFO ] Setting up stage config [INFO ] Setting up rootfs config [INFO ] Updating for aarch64 [INFO ] Updating package manager [INFO ] Expanding stagefs [INFO ] build kernel in-tree modules [INFO ] modules linux/kernel [INFO ] build linux/rootfs/rpmsg_echo_test_kern_app [INFO ] modules linux/kernel [INFO ] build linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] modules linux/kernel [INFO ] build linux/rootfs/rpmsg_proxy_dev_driver [INFO ] modules linux/kernel [INFO ] build linux/rootfs/rpmsg_user_dev_driver [INFO ] modules linux/kernel [INFO ] build linux/rootfs/echo_test [INFO ] build linux/rootfs/fwupgrade [INFO ] build linux/rootfs/getty-baud [INFO ] build linux/rootfs/gpio-demo [INFO ] build linux/rootfs/mat_mul_demo [INFO ] build linux/rootfs/peekpoke [INFO ] build linux/rootfs/proxy_app [INFO ] build linux/rootfs/xen [INFO ] post-build linux/rootfs/rpmsg_echo_test_kern_app [INFO ] post-build linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] post-build linux/rootfs/rpmsg_proxy_dev_driver [INFO ] post-build linux/rootfs/rpmsg_user_dev_driver [INFO ] post-build linux/rootfs/echo_test [INFO ] post-build linux/rootfs/fwupgrade [INFO ] post-build linux/rootfs/getty-baud [INFO ] post-build linux/rootfs/gpio-demo [INFO ] post-build linux/rootfs/mat_mul_demo [INFO ] post-build linux/rootfs/peekpoke [INFO ] post-build linux/rootfs/proxy_app [INFO ] post-build linux/rootfs/xen [INFO ] pre-install linux/rootfs/rpmsg_echo_test_kern_app [INFO ] pre-install linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] pre-install linux/rootfs/rpmsg_proxy_dev_driver [INFO ] pre-install linux/rootfs/rpmsg_user_dev_driver [INFO ] pre-install linux/rootfs/echo_test [INFO ] pre-install linux/rootfs/fwupgrade [INFO ] pre-install linux/rootfs/getty-baud [INFO ] pre-install linux/rootfs/gpio-demo [INFO ] pre-install linux/rootfs/mat_mul_demo [INFO ] pre-install linux/rootfs/peekpoke [INFO ] pre-install linux/rootfs/proxy_app [INFO ] pre-install linux/rootfs/xen [INFO ] install system.dtb [INFO ] install linux/kernel [INFO ] update linux/u-boot source [INFO ] generate linux/u-boot configuration files [INFO ] build linux/u-boot [INFO ] install linux/u-boot [INFO ] install linux/arm-trusted-firmware [INFO ] Expanding rootfs [INFO ] install sys_init [INFO ] install kernel in-tree modules [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/rpmsg_echo_test_kern_app [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/rpmsg_proxy_dev_driver [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/rpmsg_user_dev_driver [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/echo_test [INFO ] install linux/rootfs/fwupgrade [INFO ] install linux/rootfs/getty-baud [INFO ] install linux/rootfs/gpio-demo [INFO ] install linux/rootfs/mat_mul_demo [INFO ] install linux/rootfs/peekpoke [INFO ] install linux/rootfs/proxy_app [INFO ] install linux/rootfs/xen [INFO ] post-install linux/rootfs/rpmsg_echo_test_kern_app [INFO ] post-install linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] post-install linux/rootfs/rpmsg_proxy_dev_driver [INFO ] post-install linux/rootfs/rpmsg_user_dev_driver [INFO ] post-install linux/rootfs/echo_test [INFO ] post-install linux/rootfs/fwupgrade [INFO ] post-install linux/rootfs/getty-baud [INFO ] post-install linux/rootfs/gpio-demo [INFO ] post-install linux/rootfs/mat_mul_demo [INFO ] post-install linux/rootfs/peekpoke [INFO ] post-install linux/rootfs/proxy_app [INFO ] post-install linux/rootfs/xen [INFO ] package rootfs.cpio to /Xilinx-ZynqMP-QEMU-2015.3/images/linux [INFO ] Update and install vmlinux image [INFO ] vmlinux linux/kernel [INFO ] install linux/kernel [INFO ] package Image [INFO ] Image linux/kernel [INFO ] install linux/kernel [INFO ] Package HDF bitstream
To build only kernel
$ petalinux-build -c kernel
INFO: Checking component... INFO: Generating make files and build linux/kernel INFO: Generating make files for the subcomponents of linux/kernel INFO: Building linux/kernel [INFO ] build linux/kernel [INFO ] install linux/kernel
To build other components
$ petalinux-build -c device-tree
INFO: Checking component... INFO: Generating make files and build linux/device-tree INFO: Generating make files for the subcomponents of linux/device-tree INFO: Building linux/device-tree [INFO ] build system.dtb [INFO ] install system.dtb
INFO: Checking component... INFO: Generating make files and build linux/bootloader INFO: Generating make files for the subcomponents of linux/bootloader INFO: Building linux/bootloader [INFO ] build zynqmp_fsbl
INFO: Checking component... INFO: Generating make files and build linux/arm-trusted-firmware INFO: Generating make files for the subcomponents of linux/arm-trusted-firmware INFO: Building linux/arm-trusted-firmware [INFO ] update linux/arm-trusted-firmware source [INFO ] build linux/arm-trusted-firmware [INFO ] install linux/arm-trusted-firmware
INFO: Checking component... INFO: Generating make files and build linux/u-boot INFO: Generating make files for the subcomponents of linux/u-boot INFO: Building linux/u-boot [INFO ] update linux/u-boot source [INFO ] generate linux/u-boot configuration files [INFO ] build linux/u-boot [INFO ] update linux/u-boot source [INFO ] generate linux/u-boot configuration files [INFO ] build linux/u-boot [INFO ] install linux/u-boot
INFO: Checking component... INFO: Generating make files and build linux/rootfs INFO: Generating make files for the subcomponents of linux/rootfs INFO: Building linux/rootfs [INFO ] pre-build linux/rootfs/rpmsg_echo_test_kern_app [INFO ] pre-build linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] pre-build linux/rootfs/rpmsg_proxy_dev_driver [INFO ] pre-build linux/rootfs/rpmsg_user_dev_driver [INFO ] pre-build linux/rootfs/echo_test [INFO ] pre-build linux/rootfs/fwupgrade [INFO ] pre-build linux/rootfs/getty-baud [INFO ] pre-build linux/rootfs/gpio-demo [INFO ] pre-build linux/rootfs/mat_mul_demo [INFO ] pre-build linux/rootfs/peekpoke [INFO ] pre-build linux/rootfs/proxy_app [INFO ] pre-build linux/rootfs/xen [INFO ] Setting up stage config [INFO ] Setting up rootfs config [INFO ] Updating for aarch64 [INFO ] Updating package manager [INFO ] Expanding stagefs [INFO ] build kernel in-tree modules [INFO ] modules linux/kernel [INFO ] build linux/rootfs/rpmsg_echo_test_kern_app [INFO ] modules linux/kernel [INFO ] build linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] modules linux/kernel [INFO ] build linux/rootfs/rpmsg_proxy_dev_driver [INFO ] modules linux/kernel [INFO ] build linux/rootfs/rpmsg_user_dev_driver [INFO ] modules linux/kernel [INFO ] build linux/rootfs/echo_test [INFO ] build linux/rootfs/fwupgrade [INFO ] build linux/rootfs/getty-baud [INFO ] build linux/rootfs/gpio-demo [INFO ] build linux/rootfs/mat_mul_demo [INFO ] build linux/rootfs/peekpoke [INFO ] build linux/rootfs/proxy_app [INFO ] build linux/rootfs/xen [INFO ] post-build linux/rootfs/rpmsg_echo_test_kern_app [INFO ] post-build linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] post-build linux/rootfs/rpmsg_proxy_dev_driver [INFO ] post-build linux/rootfs/rpmsg_user_dev_driver [INFO ] post-build linux/rootfs/echo_test [INFO ] post-build linux/rootfs/fwupgrade [INFO ] post-build linux/rootfs/getty-baud [INFO ] post-build linux/rootfs/gpio-demo [INFO ] post-build linux/rootfs/mat_mul_demo [INFO ] post-build linux/rootfs/peekpoke [INFO ] post-build linux/rootfs/proxy_app [INFO ] post-build linux/rootfs/xen [INFO ] pre-install linux/rootfs/rpmsg_echo_test_kern_app [INFO ] pre-install linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] pre-install linux/rootfs/rpmsg_proxy_dev_driver [INFO ] pre-install linux/rootfs/rpmsg_user_dev_driver [INFO ] pre-install linux/rootfs/echo_test [INFO ] pre-install linux/rootfs/fwupgrade [INFO ] pre-install linux/rootfs/getty-baud [INFO ] pre-install linux/rootfs/gpio-demo [INFO ] pre-install linux/rootfs/mat_mul_demo [INFO ] pre-install linux/rootfs/peekpoke [INFO ] pre-install linux/rootfs/proxy_app [INFO ] pre-install linux/rootfs/xen [INFO ] Expanding rootfs [INFO ] install sys_init [INFO ] install kernel in-tree modules [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/rpmsg_echo_test_kern_app [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/rpmsg_mat_mul_kern_app [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/rpmsg_proxy_dev_driver [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/rpmsg_user_dev_driver [INFO ] modules_install linux/kernel [INFO ] install linux/rootfs/echo_test [INFO ] install linux/rootfs/fwupgrade [INFO ] install linux/rootfs/getty-baud [INFO ] install linux/rootfs/gpio-demo [INFO ] install linux/rootfs/mat_mul_demo [INFO ] install linux/rootfs/peekpoke [INFO ] install linux/rootfs/proxy_app [INFO ] install linux/rootfs/xen
$ petalinux-build -x package
INFO: Checking component... INFO: Generating make files and build linux INFO: Generating make files for the subcomponents of linux INFO: Building linux [INFO ] package rootfs.cpio to /Xilinx-ZynqMP-QEMU-2015.3/images/linux [INFO ] Update and install vmlinux image [INFO ] vmlinux linux/kernel [INFO ] install linux/kernel [INFO ] package Image [INFO ] Image linux/kernel [INFO ] install linux/kernel [INFO ] Package HDF bitstream
$ petalinux-build -c device-tree -x mrproper
INFO: Checking component... INFO: Generating make files and build linux/device-tree
$ petalinux-package --boot --u-boot
To generate BOOT.BIN with fsbl
$ petalinux-package --boot
Reconfigure Linux Components
To reconfigure kernel
$ petalinux-config -c kernel
It will show you the kernel configuration menu
INFO: Checking component... INFO: Config linux/kernel [INFO ] config linux/kernel *** End of the configuration. *** Execute 'make' to start the build or try 'make help'.
To reconfigure rootfs
$ petalinux-config -c rootfs
It will show you the rootfs configuration menu
INFO: Checking component... INFO: Config linux/rootfs [INFO ] config linux/rootfs *** End of the configuration. *** Execute 'make' to start the build or try 'make help'.
First create the application
$ petalinux-create -t apps -n myapp --enable
The above command will create a Linux application "myapp" in "components/apps/myapp" from "C" template, and it will be enabled to the rootfs.
If you want to create different type of Linux application, such as C++, autoconf, install-only binary, you can run "petalinux-create -t apps --help", it will shows you all the available options.
hello is the application
INFO: Create apps: hello INFO: New apps successfully created in /Xilinx-ZynqMP-QEMU-2015.3/components/apps/hello INFO: Enabling created component... INFO: It has been enabled to linux/rootfs
Rebuild PetaLinux project for the Linux application
You can rebuild the whole project,rootfs or just the application
$ petalinux-build
$ petalinux-build -c rootfs
$ petalinux-build -c rootfs/myapp
hello is myapp
INFO: Checking component... INFO: Generating make files and build linux/rootfs/hello INFO: Generating make files for the subcomponents of linux/rootfs/hello INFO: Building linux/rootfs/hello [INFO ] pre-build linux/rootfs/hello [INFO ] build linux/rootfs/hello [INFO ] post-build linux/rootfs/hello [INFO ] pre-install linux/rootfs/hello [INFO ] install linux/rootfs/hello
To add Linux user libraries to your rootfs.
$ petalinux-create -t libs -n mylib --enable
The above command will create a Linux user library "mylib" in "components/libs/mylib"
hello_lib is the mylib
INFO: Create libs: hello_lib INFO: New libs successfully created in /Xilinx-ZynqMP-QEMU-2015.3/components/libs/hello_lib INFO: Enabling created component... INFO: It has been enabled to linux/rootfs
Again rebuild the whole project,rootfs or just the library
$ petalinux-build -c rootfs/mylib
INFO: Checking component... INFO: Generating make files and build linux/rootfs/hello_lib INFO: Generating make files for the subcomponents of linux/rootfs/hello_lib INFO: Building linux/rootfs/hello_lib [INFO ] pre-build linux/rootfs/hello_lib [INFO ] build linux/rootfs/hello_lib [INFO ] post-build linux/rootfs/hello_lib [INFO ] pre-install linux/rootfs/hello_lib [INFO ] install linux/rootfs/hello_lib
PetaLinux uses library priorities to decide the compilation sequence of the user libraries.
To specify the priority of you library
$ petalinux-create -t libs -n mylib --enable --priority X
X is the priority of your library."1" has the highest priority which will be built first.
Please find the available priorities from with the "--help" of "petalinux-create -t libs".
Test Your Rebuilt Images on QEMU
Boot u-boot on QEMU
$ petalinux-boot --qemu --u-boot
In: serial Out: serial Err: serial SCSI: SATA link 0 timeout. AHCI 0001.0000 32 slots 2 ports 1.5 Gbps 0x3 impl SATA mode flags: ncq only scanning bus for devices... Found 0 device(s). Net: Gem.ff0b0000 Hit any key to stop autoboot: 0 ZynqMP>
Boot kernel with QEMU
$ petalinux-boot --qemu --kernel
Sending discover... Sending select for 10.0.2.15... Lease of 10.0.2.15 obtained, lease time 86400 /etc/udhcpc.d/50default: Adding DNS 10.0.2.3 done. Stopping Bootlog daemon: Warning unable to detect baudrate, use 115200! Use default dev ttyPS0 Running dynamic getty on ttyPS0/115200 Built with PetaLinux v2015.3 (Yocto 1.8) Xilinx-ZynqMP-QEMU-2015_3 /dev/ttyPS0 Xilinx-ZynqMP-QEMU-2015_3 login: root Password: login[1337]: root login on 'ttyPS0' root@Xilinx-ZynqMP-QEMU-2015_3:~#
Related Links
- Title 1 & Link 1
- Title 1 & Link 1
© Copyright 2019 - 2022 Xilinx Inc. Privacy Policy