summaryrefslogtreecommitdiffstats
path: root/meta-xilinx-pynq
diff options
context:
space:
mode:
authorManjukumar Matha <manjukumar.harthikote-matha@xilinx.com>2019-09-09 12:13:21 -0700
committerSai Hari Chandana Kalluri <chandana.kalluri@xilinx.com>2019-12-09 11:03:47 -0800
commitc7ec582fbf118b29f21141b1ca41ea902fc8d256 (patch)
tree801cacddc63d510c958c2b269a0c0899acbae142 /meta-xilinx-pynq
parent954f0edb632b525f4dd8f20539531d714fa51a6e (diff)
downloadmeta-xilinx-c7ec582fbf118b29f21141b1ca41ea902fc8d256.tar.gz
meta-xilinx-pynq: Add layer to support PYNQ
This layer collects Yocto recipes required to build and run PYNQ based examples using jupyter-notebooks on Zynq and ZU+ SoC's. PYNQ is an open-source project from Xilinx that makes it easy to design embedded systems with Zynq All Programmable Systems on Chips (APSoCs). Using the Python language and libraries, designers can exploit the benefits of programmable logic and microprocessors in Zynq to build more capable and exciting embedded systems. See https://github.com/Xilinx/PYNQ for more details and examples Signed-off-by: Sai Hari Chandana Kalluri <chandana.kalluri@xilinx.com> Signed-off-by: Peter Ogden <ogden@xilinx.com> Signed-off-by: Manjukumar Matha <manjukumar.harthikote-matha@xilinx.com>
Diffstat (limited to 'meta-xilinx-pynq')
-rw-r--r--meta-xilinx-pynq/COPYING.MIT17
-rw-r--r--meta-xilinx-pynq/README.md30
-rw-r--r--meta-xilinx-pynq/classes/xilinx-pynq.bbclass17
-rw-r--r--meta-xilinx-pynq/conf/layer.conf15
-rw-r--r--meta-xilinx-pynq/recipes-devtool/python/python-pynq.inc53
-rw-r--r--meta-xilinx-pynq/recipes-devtool/python/python3-pynq/pl_server_init109
-rw-r--r--meta-xilinx-pynq/recipes-devtool/python/python3-pynq_2.4.bb3
-rw-r--r--meta-xilinx-pynq/recipes-support/libcma/libcma_1.0.bb33
-rw-r--r--meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/LICENSE23
-rw-r--r--meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/generic-uio.conf1
-rw-r--r--meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynq.dtsi16
-rw-r--r--meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynq_symbols.dtsi15
-rw-r--r--meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynqmp.dtsi17
-rw-r--r--meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynqmp_symbols.dtsi15
-rw-r--r--meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay_1.0.bb45
15 files changed, 409 insertions, 0 deletions
diff --git a/meta-xilinx-pynq/COPYING.MIT b/meta-xilinx-pynq/COPYING.MIT
new file mode 100644
index 00000000..89de3547
--- /dev/null
+++ b/meta-xilinx-pynq/COPYING.MIT
@@ -0,0 +1,17 @@
1Permission is hereby granted, free of charge, to any person obtaining a copy
2of this software and associated documentation files (the "Software"), to deal
3in the Software without restriction, including without limitation the rights
4to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
5copies of the Software, and to permit persons to whom the Software is
6furnished to do so, subject to the following conditions:
7
8The above copyright notice and this permission notice shall be included in
9all copies or substantial portions of the Software.
10
11THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
17THE SOFTWARE.
diff --git a/meta-xilinx-pynq/README.md b/meta-xilinx-pynq/README.md
new file mode 100644
index 00000000..99e388fa
--- /dev/null
+++ b/meta-xilinx-pynq/README.md
@@ -0,0 +1,30 @@
1# meta-xilinx-pynq
2
3================================
4
5Introduction
6-------------------------
7
8This layer collects recipes required to build and run PYNQ based examples using jupyter-notebooks on yocto
9
10Maintainers, Patches/Submissions, Community
11===========================================
12Please open pull requests for any changes.
13
14Maintainers:
15
16 Manjukumar Harthikote Matha (manjukumar.harthikote-matha@xilinx.com)
17
18 Peter Ogden (ogden@xilinx.com)
19
20 Sai Hari Chandana Kalluri (chandana.kalluri@xilinx.com)
21
22
23Layer dependencies
24=====================
25
26URI: git://git.openembedded.org/bitbake
27
28URI: git://git.openembedded.org/openembedded-core
29
30URI: git://git.openembedded.org/meta-openembedded
diff --git a/meta-xilinx-pynq/classes/xilinx-pynq.bbclass b/meta-xilinx-pynq/classes/xilinx-pynq.bbclass
new file mode 100644
index 00000000..a571f150
--- /dev/null
+++ b/meta-xilinx-pynq/classes/xilinx-pynq.bbclass
@@ -0,0 +1,17 @@
1PYNQ_NOTEBOOK_DIR ?= "${datadir}/notebooks"
2
3PYNQ_ARCH_arm = "armv7l"
4PYNQ_ARCH_aarch64 = "aarch64"
5
6CMA_ARCH_arm = "32"
7CMA_ARCH_aarch64 = "64"
8
9PYNQ_BUILD_ARCH="${PYNQ_ARCH_${TARGET_ARCH}}"
10PYNQ_BUILD_ROOT="${STAGING_DIR_TARGET}"
11BBCLASSEXTEND = "native nativesdk"
12
13FILES_${PN}-notebooks += "${PYNQ_NOTEBOOK_DIR}"
14PACKAGES += "${PN}-notebooks"
15
16# Used for setup.py on PYNQ
17BOARD_NAME_ultra96-zynqmp = "Ultra96"
diff --git a/meta-xilinx-pynq/conf/layer.conf b/meta-xilinx-pynq/conf/layer.conf
new file mode 100644
index 00000000..045897e3
--- /dev/null
+++ b/meta-xilinx-pynq/conf/layer.conf
@@ -0,0 +1,15 @@
1# We have a conf and classes directory, add to BBPATH
2BBPATH .= ":${LAYERDIR}"
3
4# We have a packages directory, add to BBFILES
5BBFILES += "${LAYERDIR}/recipes-*/*/*.bb"
6BBFILES += "${LAYERDIR}/recipes-*/*/*.bbappend"
7
8BBFILE_COLLECTIONS += "xilinx-pynq"
9BBFILE_PATTERN_xilinx-pynq = "^${LAYERDIR}/"
10BBFILE_PRIORITY_xilinx-pynq = "5"
11
12LAYERDEPENDS_xilinx-pynq = "core xilinx"
13
14LAYERSERIES_COMPAT_xilinx-pynq = "zeus"
15
diff --git a/meta-xilinx-pynq/recipes-devtool/python/python-pynq.inc b/meta-xilinx-pynq/recipes-devtool/python/python-pynq.inc
new file mode 100644
index 00000000..fa717f45
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-devtool/python/python-pynq.inc
@@ -0,0 +1,53 @@
1SUMMARY = "Xilinx PYNQ Library"
2HOMEPAGE = "http://pynq.io"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=b42e39ad2ddbad7e8ad47f3eee6feff5"
5
6RDEPENDS_${PN} += "\
7 ${PYTHON_PN}-core \
8 ${PYTHON_PN}-asyncio \
9 ${PYTHON_PN}-cffi \
10 ${PYTHON_PN}-json \
11 ${PYTHON_PN}-math \
12 ${PYTHON_PN}-mmap \
13 ${PYTHON_PN}-multiprocessing \
14 ${PYTHON_PN}-numpy \
15 ${PYTHON_PN}-pycparser \
16 ${PYTHON_PN}-resource \
17 ${PYTHON_PN}-setuptools \
18 ${PYTHON_PN}-threading \
19 ${PYTHON_PN}-xml \
20 lmsensors-libsensors \
21 libdrm \
22 libcma \
23 pynq-overlay \
24 "
25
26inherit update-rc.d xilinx-pynq
27
28DEPENDS += " libdrm boost libcma"
29
30PYNQBRANCH ?= "image_v2.4"
31SRCBRANCHARG = "${@['nobranch=1', 'branch=${PYNQBRANCH}'][d.getVar('PYNQBRANCH', True) != '']}"
32PYNQURI ?= "git://github.com/Xilinx/PYNQ.git;protocol=https"
33
34SRC_URI = "${PYNQURI};${SRCBRANCHARG} \
35 file://pl_server_init \
36 "
37SRCREV ?= "3d659d374701b7c34fa702e7aa23f71f9113f826"
38
39FILESEXTRAPATHS_prepend := "${THISDIR}:"
40S = "${WORKDIR}/git"
41
42INSANE_SKIP_${PN} = "staticdev"
43
44INITSCRIPT_PACKAGES = "${PN}"
45INITSCRIPT_NAME = "pl_server_init"
46INITSCRIPT_PARAMS = "start 99 S ."
47
48do_install_append() {
49 install -d ${D}${INIT_D_DIR}
50 install -m 755 ${WORKDIR}/pl_server_init ${D}${INIT_D_DIR}/pl_server_init
51}
52
53FILES_${PN} += " ${INIT_D_DIR}/pl_server_init "
diff --git a/meta-xilinx-pynq/recipes-devtool/python/python3-pynq/pl_server_init b/meta-xilinx-pynq/recipes-devtool/python/python3-pynq/pl_server_init
new file mode 100644
index 00000000..8b13ae1f
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-devtool/python/python3-pynq/pl_server_init
@@ -0,0 +1,109 @@
1#!/bin/sh
2### BEGIN INIT INFO
3# Provides:
4# Required-Start: $remote_fs $syslog
5# Required-Stop: $remote_fs $syslog
6# Default-Start: 2 3 4 5
7# Default-Stop: 0 1 6
8# Short-Description: Start daemon at boot time
9# Description: Enable service provided by daemon.
10### END INIT INFO
11
12dir=""
13cmd="start_pl_server.py"
14user=""
15
16name="pl_server"
17pid_file="/var/run/$name.pid"
18stdout_log="/var/log/$name.log"
19stderr_log="/var/log/$name.err"
20
21get_pid() {
22 cat "$pid_file"
23}
24
25is_running() {
26 [ -f "$pid_file" ] && (ps -o"pid" | grep '^ '`get_pid`'$') > /dev/null 2>&1
27}
28
29install_overlay() {
30if [ ! -e '/sys/kernel/config/device-tree/overlays/pynq' ]; then
31 modprobe uio_pdrv_genirq
32 if [ ! -e /proc/device-tree/__symbols__ ]; then
33 mkdir /sys/kernel/config/device-tree/overlays/pynq-symbols
34 cat /lib/firmware/pynq-symbols.dtbo > /sys/kernel/config/device-tree/overlays/pynq-symbols/dtbo
35 fi
36 mkdir /sys/kernel/config/device-tree/overlays/pynq
37 cat /lib/firmware/pynq.dtbo > /sys/kernel/config/device-tree/overlays/pynq/dtbo
38fi
39}
40
41case "$1" in
42 start)
43 if is_running; then
44 echo "Already started"
45 else
46 echo "Starting $name"
47 cd "$dir"
48 install_overlay
49 $cmd >> "$stdout_log" 2>> "$stderr_log" &
50 echo $! > "$pid_file"
51 if ! is_running; then
52 echo "Unable to start, see $stdout_log and $stderr_log"
53 exit 1
54 fi
55 fi
56 ;;
57 stop)
58 if is_running; then
59 echo -n "Stopping $name.."
60 kill `get_pid`
61 for i in 1 2 3 4 5 6 7 8 9 10
62 # for i in `seq 10`
63 do
64 if ! is_running; then
65 break
66 fi
67
68 echo -n "."
69 sleep 1
70 done
71 echo
72
73 if is_running; then
74 echo "Not stopped; may still be shutting down or shutdown may have failed"
75 exit 1
76 else
77 echo "Stopped"
78 if [ -f "$pid_file" ]; then
79 rm "$pid_file"
80 fi
81 fi
82 else
83 echo "Not running"
84 fi
85 ;;
86 restart)
87 $0 stop
88 if is_running; then
89 echo "Unable to stop, will not attempt to start"
90 exit 1
91 fi
92 $0 start
93 ;;
94 status)
95 if is_running; then
96 echo "Running"
97 else
98 echo "Stopped"
99 exit 1
100 fi
101 ;;
102 *)
103 echo "Usage: $0 {start|stop|restart|status}"
104 exit 1
105 ;;
106esac
107
108exit 0
109
diff --git a/meta-xilinx-pynq/recipes-devtool/python/python3-pynq_2.4.bb b/meta-xilinx-pynq/recipes-devtool/python/python3-pynq_2.4.bb
new file mode 100644
index 00000000..5a904c8f
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-devtool/python/python3-pynq_2.4.bb
@@ -0,0 +1,3 @@
1inherit pypi setuptools3
2require python-pynq.inc
3
diff --git a/meta-xilinx-pynq/recipes-support/libcma/libcma_1.0.bb b/meta-xilinx-pynq/recipes-support/libcma/libcma_1.0.bb
new file mode 100644
index 00000000..44857256
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-support/libcma/libcma_1.0.bb
@@ -0,0 +1,33 @@
1SUMMARY = "Recompile libcma against pynqlib c"
2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://LICENSE;md5=b42e39ad2ddbad7e8ad47f3eee6feff5"
4
5CMA_ARCH_arm = "32"
6CMA_ARCH_aarch64 = "64"
7
8PYNQBRANCH ?= "image_v2.4"
9SRCBRANCHARG = "${@['nobranch=1', 'branch=${PYNQBRANCH}'][d.getVar('PYNQBRANCH', True) != '']}"
10PYNQURI ?= "git://github.com/Xilinx/PYNQ.git;protocol=https"
11
12SRC_URI ?= "${PYNQURI};${SRCBRANCHARG}"
13
14SRCREV ?= "3d659d374701b7c34fa702e7aa23f71f9113f826"
15
16S="${WORKDIR}/git"
17
18CMA_ARCH_arm = "32"
19CMA_ARCH_aarch64 = "64"
20
21do_install() {
22
23 install -d ${D}/usr/lib/
24 install -d ${D}/usr/include/
25
26 cd ${S}/sdbuild/packages/libsds/libcma
27 CMA_ARCH=${CMA_ARCH_${TARGET_ARCH}} make install DESTDIR=${D}
28}
29
30SOLIBS = ".so"
31FILES_SOLIBSDEV = ""
32FILES_${PN} += "/usr/lib/libcma.so /usr/include"
33
diff --git a/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/LICENSE b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/LICENSE
new file mode 100644
index 00000000..e1e09ab5
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/LICENSE
@@ -0,0 +1,23 @@
1#*******************************************************************************
2#
3# Copyright (C) 2019 Xilinx, Inc. All rights reserved.
4#
5# Permission is hereby granted, free of charge, to any person obtaining a copy of
6# this software and associated documentation files (the "Software"), to deal in
7# the Software without restriction, including without limitation the rights to
8# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9# of the Software, and to permit persons to whom the Software is furnished to do
10# so, subject to the following conditions:
11#
12# The above copyright notice and this permission notice shall be included in all
13# copies or substantial portions of the Software.
14#
15# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21# SOFTWARE.
22#
23# ******************************************************************************
diff --git a/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/generic-uio.conf b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/generic-uio.conf
new file mode 100644
index 00000000..84d06c84
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/generic-uio.conf
@@ -0,0 +1 @@
options uio_pdrv_genirq of_id=generic-uio
diff --git a/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynq.dtsi b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynq.dtsi
new file mode 100644
index 00000000..8c20cdd5
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynq.dtsi
@@ -0,0 +1,16 @@
1/dts-v1/;
2/plugin/;
3
4&{/amba} {
5 xlnk {
6 compatible = "xlnx,xlnk-1.0";
7 };
8 fabric@40000000 {
9 compatible = "generic-uio";
10 reg = <0x40001000 0x1000>;
11 status = "okay";
12 interrupt-parent = <&intc>;
13 interrupts = <0 0x1d 4>;
14 };
15
16};
diff --git a/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynq_symbols.dtsi b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynq_symbols.dtsi
new file mode 100644
index 00000000..69cbdb65
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynq_symbols.dtsi
@@ -0,0 +1,15 @@
1/dts-v1/;
2/plugin/;
3
4/ {
5
6 fragment@0 {
7 target-path = "/";
8 __overlay__ {
9 __symbols__ {
10 intc = "/amba/interrupt-controller@f8f01000";
11 };
12 };
13 };
14
15};
diff --git a/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynqmp.dtsi b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynqmp.dtsi
new file mode 100644
index 00000000..4c389dae
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynqmp.dtsi
@@ -0,0 +1,17 @@
1/dts-v1/;
2/plugin/;
3
4&{/amba} {
5 xlnk {
6 compatible = "xlnx,xlnk-1.0";
7 };
8 fabric@A0000000 {
9 compatible = "generic-uio";
10 reg = <0x0 0xA0001000 0x0 0x1000>;
11 status = "okay";
12 interrupt-parent = <&gic>;
13 interrupts = <0 89 4>;
14 };
15
16};
17
diff --git a/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynqmp_symbols.dtsi b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynqmp_symbols.dtsi
new file mode 100644
index 00000000..2e8ea882
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay/pynq_zynqmp_symbols.dtsi
@@ -0,0 +1,15 @@
1/dts-v1/;
2/plugin/;
3
4/ {
5
6 fragment@0 {
7 target-path = "/";
8 __overlay__ {
9 __symbols__ {
10 gic = "/amba_apu@0/interrupt-controller@f9010000";
11 };
12 };
13 };
14
15};
diff --git a/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay_1.0.bb b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay_1.0.bb
new file mode 100644
index 00000000..fb8d7012
--- /dev/null
+++ b/meta-xilinx-pynq/recipes-support/pynq-overlay/pynq-overlay_1.0.bb
@@ -0,0 +1,45 @@
1SUMMARY = "Xilinx PYNQ overlay"
2HOMEPAGE = "http://pynq.io"
3LICENSE = "Proprietary"
4LIC_FILES_CHKSUM = "file://LICENSE;beginline=1;endline=23;md5=04c57e41ad93d4d6b6ca3d766372b0fa"
5
6DEPENDS += "dtc-native"
7
8SRC_URI = " \
9 file://pynq_zynqmp.dtsi \
10 file://pynq_zynq.dtsi \
11 file://pynq_zynqmp_symbols.dtsi \
12 file://pynq_zynq_symbols.dtsi \
13 file://generic-uio.conf \
14 file://LICENSE \
15 "
16
17S="${WORKDIR}"
18
19PYNQ_DTSI ??= "pynq_zynqmp.dtsi"
20PYNQ_DTSI_zynqmp ?= "pynq_zynqmp.dtsi"
21PYNQ_DTSI_zynq ?= "pynq_zynq.dtsi"
22PYNQ_SYMBOL_DTSI_zynqmp ?= "pynq_zynqmp_symbols.dtsi"
23PYNQ_SYMBOL_DTSI_zynq ?= "pynq_zynq_symbols.dtsi"
24PYNQ_DTBO ?= "pynq.dtbo"
25PYNQ_SYMBOL_DTBO ?= "pynq-symbols.dtbo"
26
27do_compile() {
28
29 dtc -I dts -O dtb -@ ${WORKDIR}/${PYNQ_DTSI} -o ${S}/${PYNQ_DTBO}
30 dtc -I dts -O dtb -@ ${WORKDIR}/${PYNQ_SYMBOL_DTSI} -o ${S}/${PYNQ_SYMBOL_DTBO}
31}
32
33
34do_install() {
35
36 install -d ${D}/lib/firmware
37 install -m 755 ${S}/${PYNQ_DTBO} ${D}/lib/firmware/${PYNQ_DTBO}
38 install -m 755 ${S}/${PYNQ_SYMBOL_DTBO} ${D}/lib/firmware/${PYNQ_SYMBOL_DTBO}
39
40 install -d ${D}/etc/modprobe.d
41 install -m 644 ${WORKDIR}/generic-uio.conf ${D}${sysconfdir}/modprobe.d/generic-uio.conf
42
43}
44
45FILES_${PN} += "/lib/firmware/pynq.dtbo /lib/firmware/pynq-symbols.dtbo ${sysconfdir}/modprobe.d/generic-uio.conf"