Difference between revisions of "BELK-TN-006: Using PetaLinux to Build BELK/BXELK Software Components"

From DAVE Developer's Wiki
Jump to: navigation, search
(Building the Linux kernel)
(Building the Linux kernel)
Line 175: Line 175:
 
</pre>
 
</pre>
 
kernel directory
 
kernel directory
 +
${TOPDIR}/../components/ext_sources/linux-xlnx
 +
  
 
Configure the build system in order to use a custom directory for device tree include files:
 
Configure the build system in order to use a custom directory for device tree include files:

Revision as of 15:16, 21 September 2018

Info Box
Bora5-small.jpg Applies to Bora
BORA Xpress.png Applies to BORA Xpress

History[edit | edit source]

Version Date Notes
1.0.0 September 2018 First public release

Introduction[edit | edit source]

As explained here, BELK/BXELK structure is not based on PetaLinux build system. Instead, BELK/BXELK make use of a standardized Yocto-based build system to build all the software components—U-Boot, Linux kernel, and root filesystem—that run on the Processing System (PS). This choice is more flexible and more modularized but it requires a little bit more knowledge of embedded Linux systems.

That being said, there are cases in which it can be convenient to build such components with PetaLinux build system, however. This technical note shows how to build the Linux kernel image released with BELK/BXELK with PetaLinux build system.

The procedure was tested with the following configuration.

Component Version
PetaLinux 2017.2
BELK/BXELK 4.0.0
Host operating system Ubuntu 14.04.5 LTS

Building the Linux kernel[edit | edit source]

First of all, set up the PetaLinux environment:

dvdk@osboxes:~/devel/bora/prj$ source /opt/petalinux/settings.sh
PetaLinux environment set to '/opt/petalinux'
INFO: Checking free disk space
INFO: Checking installed tools
INFO: Checking installed development libraries
INFO: Checking network and other services

Then, create a project from the zynq template:

dvdk@osboxes:~/devel/bora/prj$ petalinux-create --type project --template zynq --name bora_1
INFO: Create project: bora_1
INFO: New project successfully created in /home/dvdk/devel/bora/prj/bora_1

Import the hardware specification file (.hdf) generated by your Vivado project. This step will open automatically the text-based configuration menu of PetaLinux build system: when it shows up, just exit and save the configuration without changing anything.

dvdk@osboxes:~/devel/bora/prj/bora_1$ petalinux-config --get-hw-description=/home/dvdk/devel/bora/bora-minimal/bora-minimal.sdk/
INFO: Getting hardware description...
INFO: Rename bora_wrapper.hdf to system.hdf
[INFO] generating Kconfig for project
                                                                                                                                                          
[INFO] menuconfig project
/home/dvdk/devel/bora/prj/bora_1/build/misc/config/Kconfig.syshw:30:warning: defaults for choice values not supported
/home/dvdk/devel/bora/prj/bora_1/build/misc/config/Kconfig:574:warning: config symbol defined without type
configuration written to /home/dvdk/devel/bora/prj/bora_1/project-spec/configs/config

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

[INFO] sourcing bitbake
[INFO] generating plnxtool conf
[INFO] generating meta-plnx-generated layer
~/devel/bora/prj/bora_1/build/misc/plnx-generated ~/devel/bora/prj/bora_1
~/devel/bora/prj/bora_1
[INFO] generating machine configuration
[INFO] generating bbappends for project . This may take time ! 
~/devel/bora/prj/bora_1/build/misc/plnx-generated ~/devel/bora/prj/bora_1
~/devel/bora/prj/bora_1
[INFO] generating u-boot configuration files
                                                                                                                                                          
[INFO] generating kernel configuration files
[INFO] generating kconfig for Rootfs
Generate rootfs kconfig
[INFO] oldconfig rootfs
[INFO] generating petalinux-user-image.bb
caption

Your project tree should look like this at this point:

dvdk@osboxes:~/devel/bora/prj/bora_1$ tree -d
.
├── build
│   ├── cache
│   ├── conf
│   ├── misc
│   │   ├── config
│   │   │   ├── data
│   │   │   └── hw-description
│   │   ├── plnx-generated
│   │   └── rootfs_config
│   └── tmp
│       └── cache
│           └── linaro-glibc
│               └── plnx_arm
│                   └── x86_64
├── components
│   └── plnx_workspace
└── project-spec
    ├── configs
    ├── hw-description
    ├── meta-plnx-generated
    │   ├── conf
    │   │   └── machine
    │   ├── recipes-bsp
    │   │   ├── device-tree
    │   │   ├── fsbl
    │   │   ├── hdf
    │   │   └── u-boot
    │   │       └── configs
    │   ├── recipes-core
    │   │   ├── busybox
    │   │   │   └── files
    │   │   └── images
    │   └── recipes-kernel
    │       └── linux
    │           └── configs
    └── meta-user
        ├── conf
        ├── recipes-apps
        │   ├── gpio-demo
        │   │   └── files
        │   └── peekpoke
        │       └── files
        ├── recipes-bsp
        │   ├── device-tree
        │   │   └── files
        │   └── u-boot
        │       └── files
        └── recipes-core
            └── images

49 directories

Clone the Linux kernel sources from DAVE's git repisitory in the :

git clone http://gitlab.lan.dave.eu/bora/linux-xlnx.git -b bora-4.x.x
Cloning into 'linux-xlnx'...
...

Replace the file xilinx_zynq_defconfig with a symbolic link to bora_defconfig:

dvdk@osboxes:~/devel/bora/prj/bora_1/components/ext_sources$ cd linux-xlnx/arch/arm/configs/
dvdk@osboxes:~/devel/bora/prj/bora_1/components/ext_sources/linux-xlnx/arch/arm/configs$ rm xilinx_zynq_defconfig
dvdk@osboxes:~/devel/bora/prj/bora_1/components/ext_sources/linux-xlnx/arch/arm/configs$ ln -s bora_defconfig xilinx_zynq_defconfig
dvdk@osboxes:~/devel/bora/prj/bora_1/components/ext_sources/linux-xlnx/arch/arm/configs$ ll xilinx_zynq_defconfig 
lrwxrwxrwx 1 dvdk dvdk 14 set 21 14:30 xilinx_zynq_defconfig -> bora_defconfig

Open the PetaLinux configuration menu and set up the kernel source

petalinux-config


Configure the build system in order to use an external kernel:


kernel directory ${TOPDIR}/../components/ext_sources/linux-xlnx


Configure the build system in order to use a custom directory for device tree include files: DTS include directory



Add in project-spec/meta-user/conf/petalinuxbsp.conf

LINUX_VERSION_EXTENSION = "-belk-4.0.0"
KERNEL_DEVICETREE = "bora.dtb"


Build the kernel:

dvdk@osboxes:~/devel/bora/prj/bora1$ petalinux-build -v -c kernel
[INFO] building kernel
[INFO] sourcing bitbake
INFO: bitbake virtual/kernel
Parsing recipes: 100% |####################################################################################################################| Time: 0:02:14
Parsing of 2446 .bb files complete (0 cached, 2446 parsed). 3236 targets, 224 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |#################################################################################################################| Time: 0:00:22
Checking sstate mirror object availability: 100% |#########################################################################################| Time: 0:00:13
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
linux-xlnx-4.9-belk-4.0.0+git999-r0 do_compile: NOTE: linux-xlnx: compiling from external source tree /home/dvdk/devel/bora/prj/bora1/build/../components/ext_sources/linux-xlnx
NOTE: Tasks Summary: Attempted 2410 tasks of which 2349 didn't need to be rerun and all succeeded.
INFO: Copying Images from deploy to images
INFO: Creating images/linux directory
[INFO] successfully built kernel

Create the uImage file:

dvdk@osboxes:~/devel/bora/prj/bora1$ petalinux-package --image -c kernel --format uImage
SDK environment now set up; additionally you may now run devtool to perform development tasks.
Run devtool --help for further details.

### 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'
INFO: Adding user layer: /home/dvdk/devel/bora/prj/bora1/project-spec/meta-user
INFO: generating uImage
INFO: bitbake -R /home/dvdk/devel/bora/prj/bora1/build/conf/kerneltype.conf virtual/kernel 
Parsing recipes: 100% |####################################################################################################################| Time: 0:01:56
Parsing of 2446 .bb files complete (0 cached, 2446 parsed). 3236 targets, 224 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |#################################################################################################################| Time: 0:00:16
Checking sstate mirror object availability: 100% |#########################################################################################| Time: 0:00:12
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
linux-xlnx-4.9-belk-4.0.0+git999-r0 do_compile: NOTE: linux-xlnx: compiling from external source tree /home/dvdk/devel/bora/prj/bora1/build/../components/ext_sources/linux-xlnx
NOTE: Tasks Summary: Attempted 2410 tasks of which 2374 didn't need to be rerun and all succeeded.

After the build is completed, the uImage file and the device tree blob are located in the images/linux directory.