summaryrefslogtreecommitdiff
path: root/meta-raspberrypi
diff options
context:
space:
mode:
Diffstat (limited to 'meta-raspberrypi')
-rw-r--r--meta-raspberrypi/.github/actions/docker-build/action.yml47
-rw-r--r--meta-raspberrypi/.github/actions/docker-clean-dangling/action.yml18
-rw-r--r--meta-raspberrypi/.github/actions/docker-clean-image/action.yml19
-rw-r--r--meta-raspberrypi/.github/workflows/cancel-redundant-workflows.yml23
-rw-r--r--meta-raspberrypi/.github/workflows/compliance.yml47
-rw-r--r--meta-raspberrypi/.github/workflows/docker-images/README.md21
-rw-r--r--meta-raspberrypi/.github/workflows/docker-images/dco-check/Dockerfile13
-rw-r--r--meta-raspberrypi/.github/workflows/docker-images/dco-check/README.md16
-rwxr-xr-xmeta-raspberrypi/.github/workflows/docker-images/dco-check/entrypoint.sh21
-rw-r--r--meta-raspberrypi/.github/workflows/docker-images/utils.sh28
-rw-r--r--meta-raspberrypi/.github/workflows/docker-images/yocto-builder/Dockerfile39
-rw-r--r--meta-raspberrypi/.github/workflows/docker-images/yocto-builder/README.md16
-rwxr-xr-xmeta-raspberrypi/.github/workflows/docker-images/yocto-builder/entrypoint-build.sh61
-rwxr-xr-xmeta-raspberrypi/.github/workflows/docker-images/yocto-builder/entrypoint-yocto-check-layer.sh33
-rw-r--r--meta-raspberrypi/.github/workflows/mirror.yml22
-rw-r--r--meta-raspberrypi/.github/workflows/yocto-builds.yml66
-rw-r--r--meta-raspberrypi/.github/workflows/yocto-layer.yml37
-rw-r--r--meta-raspberrypi/README.md12
-rw-r--r--meta-raspberrypi/classes/sdcard_image-rpi.bbclass8
-rw-r--r--meta-raspberrypi/conf/layer.conf2
-rw-r--r--meta-raspberrypi/conf/machine/include/rpi-base.inc4
-rw-r--r--meta-raspberrypi/conf/machine/include/rpi-default-versions.inc2
-rw-r--r--meta-raspberrypi/conf/machine/raspberrypi0-2w.conf17
-rw-r--r--meta-raspberrypi/conf/machine/raspberrypi4-64.conf2
-rw-r--r--meta-raspberrypi/docs/contributing.md4
-rw-r--r--meta-raspberrypi/docs/extra-apps.md2
-rw-r--r--meta-raspberrypi/docs/extra-build-config.md18
-rw-r--r--meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-blinka_6.2.2.bb (renamed from meta-raspberrypi/recipes-devtools/python/python3-adafruit-blinka_6.2.2.bb)3
-rw-r--r--meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-busdevice_5.0.5.bb (renamed from meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-busdevice_5.0.5.bb)1
-rw-r--r--meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-motor_3.2.6.bb (renamed from meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-motor_3.2.6.bb)1
-rw-r--r--meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-motorkit_1.6.1.bb (renamed from meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-motorkit_1.6.1.bb)1
-rw-r--r--meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-pca9685_3.3.4.bb (renamed from meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-pca9685_3.3.4.bb)1
-rw-r--r--meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb18
-rw-r--r--meta-raspberrypi/recipes-bsp/gpio-shutdown/files/bind_gpio_shutdown.tab2
-rw-r--r--meta-raspberrypi/recipes-bsp/gpio-shutdown/files/gpio-shutdown-keymap.sh13
-rw-r--r--meta-raspberrypi/recipes-bsp/gpio-shutdown/gpio-shutdown.bb31
-rw-r--r--meta-raspberrypi/recipes-devtools/bcm2835/bcm2835_1.52.bb2
-rw-r--r--meta-raspberrypi/recipes-devtools/python/rpi-gpio_0.7.0.bb2
-rw-r--r--meta-raspberrypi/recipes-devtools/python/rpio_0.10.0.bb2
-rw-r--r--meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend2
-rw-r--r--meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc2
-rw-r--r--meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bb4
-rw-r--r--meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.15.bb19
-rw-r--r--meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend4
-rw-r--r--meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend (renamed from meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend)0
-rw-r--r--meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb2
-rw-r--r--meta-raspberrypi/recipes-multimedia/picamera-libs/picamera-libs.bb26
-rw-r--r--meta-raspberrypi/recipes-multimedia/python3-picamera/python3-picamera_git.bb22
48 files changed, 734 insertions, 22 deletions
diff --git a/meta-raspberrypi/.github/actions/docker-build/action.yml b/meta-raspberrypi/.github/actions/docker-build/action.yml
new file mode 100644
index 0000000000..35fac92c24
--- /dev/null
+++ b/meta-raspberrypi/.github/actions/docker-build/action.yml
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+name: "Build a docker image"
+
+inputs:
+ docker_image:
+ required: true
+ description: "The name of the docker image"
+ id:
+ required: true
+ description: "Namespace for the image"
+
+runs:
+ using: "composite"
+ steps:
+ - name: Build the ${{ inputs.docker_image }} docker image
+ shell: bash
+ # We run this unconditinally even if the change doesn't touch the
+ # relevant docker files because there is a chance that another PR (or
+ # something else) rebuilt the local image. For example if the first
+ # version of the PR included change for the relevant docker image but a
+ # subsequent push to the PR branch dropped them. In this way we rebuild
+ # the image to avoid using the changes from the previous push.
+ run: |
+ cd .github/workflows/docker-images/
+ # We build a temporary image namespaced by the PR number so we can
+ # handle multiple runners on the same host using the same docker
+ # storage.
+ tries=3
+ n=1
+ until [ "$n" -gt "$tries" ]; do
+ echo "Building the docker image ${{ inputs.docker_image }}-${{ inputs.id }}... try $n..."
+ if docker build . -f "${{ inputs.docker_image }}/Dockerfile" -t "${{ inputs.docker_image }}-${{ inputs.id }}"; then
+ # This can fail if a dangling images cleaning job runs in
+ # parallel. So we try this a couple of times to minimize
+ # conflict. This is because while building, docker creates a
+ # untagged image first (dangling) before tagging it at the end.
+ # If between these two operations a dangling cleanup happens,
+ # build fails.
+ break
+ fi
+ n=$((n+1))
+ done
+ [ "$n" -lt "$tries" ]
+ echo "Temporary image built in ${{ inputs.docker_image }}."
diff --git a/meta-raspberrypi/.github/actions/docker-clean-dangling/action.yml b/meta-raspberrypi/.github/actions/docker-clean-dangling/action.yml
new file mode 100644
index 0000000000..90595c864d
--- /dev/null
+++ b/meta-raspberrypi/.github/actions/docker-clean-dangling/action.yml
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+name: "Cleanup dangling docker images"
+
+runs:
+ using: "composite"
+ steps:
+ - name: Cleanup dangling images
+ shell: bash
+ run: |
+ echo -n "Cleanup dangling images... "
+ if ! docker rmi $(docker images --filter "dangling=true" -q --no-trunc) > /dev/null 2>&1; then
+ echo "no dangling images found."
+ else
+ echo "done."
+ fi
diff --git a/meta-raspberrypi/.github/actions/docker-clean-image/action.yml b/meta-raspberrypi/.github/actions/docker-clean-image/action.yml
new file mode 100644
index 0000000000..dfc18d97ef
--- /dev/null
+++ b/meta-raspberrypi/.github/actions/docker-clean-image/action.yml
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+name: "Cleanup docker storage"
+
+inputs:
+ docker_image:
+ required: true
+ description: "The name of the docker image"
+
+runs:
+ using: "composite"
+ steps:
+ - name: Cleanup temporary image
+ shell: bash
+ run: |
+ echo "Cleanup ${{ inputs.docker_image }} image..."
+ docker rmi "${{ inputs.docker_image }}" || true
diff --git a/meta-raspberrypi/.github/workflows/cancel-redundant-workflows.yml b/meta-raspberrypi/.github/workflows/cancel-redundant-workflows.yml
new file mode 100644
index 0000000000..45a74436a2
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/cancel-redundant-workflows.yml
@@ -0,0 +1,23 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+name: Cancel redundant workflows
+
+on:
+ workflow_run:
+ workflows:
+ - "Builds"
+ - "Compliance"
+ - "Yocto Compatible"
+ types:
+ - requested
+
+jobs:
+ cancel-redundant-workflows:
+ runs-on: [self-hosted, Linux]
+ steps:
+ - uses: styfle/cancel-workflow-action@0.9.1
+ with:
+ all_but_latest: true
+ workflow_id: ${{ github.event.workflow.id }}
diff --git a/meta-raspberrypi/.github/workflows/compliance.yml b/meta-raspberrypi/.github/workflows/compliance.yml
new file mode 100644
index 0000000000..35e47310a0
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/compliance.yml
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+name: Compliance
+
+on:
+ pull_request:
+
+jobs:
+ dco:
+ name: DCO
+ runs-on: [self-hosted, Linux]
+ steps:
+ - name: Checkout the code
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Build a temporary DCO image
+ uses: ./.github/actions/docker-build
+ with:
+ docker_image: dco-check
+ id: ${{ github.event.number }}
+ - name: Do DCO check
+ run: |
+ docker run --rm -v "$GITHUB_WORKSPACE:/work:ro" \
+ --env "BASE_REF=$GITHUB_BASE_REF" \
+ "dco-check-${{ github.event.number }}"
+ - name: Cleanup temporary docker image
+ uses: ./.github/actions/docker-clean-image
+ with:
+ docker_image: dco-check-${{ github.event.number }}
+ if: always()
+ - name: Cleanup dangling docker images
+ uses: ./.github/actions/docker-clean-dangling
+ if: always()
+ reuse:
+ name: reuse
+ runs-on: [self-hosted, Linux]
+ steps:
+ - name: Checkout the code
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Do reuse check
+ continue-on-error: true
+ uses: fsfe/reuse-action@v1
diff --git a/meta-raspberrypi/.github/workflows/docker-images/README.md b/meta-raspberrypi/.github/workflows/docker-images/README.md
new file mode 100644
index 0000000000..86cfddc191
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/docker-images/README.md
@@ -0,0 +1,21 @@
+<!--
+SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+
+SPDX-License-Identifier: MIT
+-->
+
+# Docker images for CI
+
+Each directory contains the files for a docker image.
+
+## Building an image
+
+When building a docker image, the build context is expected to be where this
+`README.md` file resides. This means that building the images will require
+passing the appropriate `-f` argument.
+
+Here is an example for building the `dco-check` image:
+
+```
+docker build . -f dco-check/Dockerfile -t dco-check
+```
diff --git a/meta-raspberrypi/.github/workflows/docker-images/dco-check/Dockerfile b/meta-raspberrypi/.github/workflows/docker-images/dco-check/Dockerfile
new file mode 100644
index 0000000000..89901ae6ed
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/docker-images/dco-check/Dockerfile
@@ -0,0 +1,13 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+FROM christophebedard/dco-check:latest
+
+# Run under normal user called 'ci'
+RUN useradd --create-home --uid 1000 --shell /usr/bin/bash ci
+USER ci
+
+COPY ./dco-check/entrypoint.sh /
+COPY ./utils.sh /
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/meta-raspberrypi/.github/workflows/docker-images/dco-check/README.md b/meta-raspberrypi/.github/workflows/docker-images/dco-check/README.md
new file mode 100644
index 0000000000..bf5324170a
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/docker-images/dco-check/README.md
@@ -0,0 +1,16 @@
+<!--
+SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+
+SPDX-License-Identifier: MIT
+-->
+
+# Docker image for DCO checks
+
+This image provides the environment and the logic of running a DCO check
+against a repository.
+
+## Configuration
+
+The `entrypoint.sh` script assumes at runtime that the repository to be checked
+is available under `/work`. This path is to be populated via bind mounts when
+running the container.
diff --git a/meta-raspberrypi/.github/workflows/docker-images/dco-check/entrypoint.sh b/meta-raspberrypi/.github/workflows/docker-images/dco-check/entrypoint.sh
new file mode 100755
index 0000000000..135d410c6e
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/docker-images/dco-check/entrypoint.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+set -e
+
+# shellcheck disable=SC1091
+. /utils.sh
+
+GIT_REPO_PATH="/work"
+
+[ -n "$BASE_REF" ] ||
+ error "DCO checks needs to know the target branch. Make sure that is set in BASE_REF."
+[ -d "$GIT_REPO_PATH/.git" ] ||
+ error "Can't find a git checkout under $GIT_REPO_PATH ."
+cd "$GIT_REPO_PATH"
+dco-check \
+ --verbose \
+ --default-branch "origin/$BASE_REF"
diff --git a/meta-raspberrypi/.github/workflows/docker-images/utils.sh b/meta-raspberrypi/.github/workflows/docker-images/utils.sh
new file mode 100644
index 0000000000..66bdb09f39
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/docker-images/utils.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+_log() {
+ _level="$1"
+ _msg="$2"
+ echo "[$_level] $_msg"
+}
+
+error() {
+ _msg="$1"
+ _log "ERR" "$1"
+ exit 1
+}
+
+warn() {
+ _msg="$1"
+ _log "WRN" "$1"
+ exit 1
+}
+
+log() {
+ _msg="$1"
+ _log "LOG" "$1"
+}
diff --git a/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/Dockerfile b/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/Dockerfile
new file mode 100644
index 0000000000..87221b9e79
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/Dockerfile
@@ -0,0 +1,39 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+FROM ubuntu:20.04
+
+ARG DEBIAN_FRONTEND="noninteractive"
+RUN apt-get update -qq
+RUN apt-get install -y eatmydata
+
+# Yocto/OE build host dependencies
+# Keep this in sync with
+# https://git.yoctoproject.org/poky/tree/documentation/poky.yaml
+RUN eatmydata apt-get install -qq -y \
+ gawk wget git diffstat unzip texinfo gcc build-essential chrpath \
+ socat cpio python3 python3-pip python3-pexpect xz-utils debianutils \
+ iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
+ pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool
+
+# en_US.UTF-8 is required by the build system
+RUN eatmydata apt-get install -qq -y locales \
+ && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
+ && locale-gen
+ENV LANG en_US.utf8
+
+RUN eatmydata apt-get clean && rm -rf /var/lib/apt/lists/*
+
+# Have bash as shell
+RUN echo "dash dash/sh boolean false" | debconf-set-selections \
+ && dpkg-reconfigure dash
+
+# Run under normal user called 'ci'
+RUN useradd --create-home --uid 1000 --shell /usr/bin/bash ci
+USER ci
+WORKDIR /home/ci
+
+COPY ./yocto-builder/entrypoint-yocto-check-layer.sh /
+COPY ./yocto-builder/entrypoint-build.sh /
+COPY ./utils.sh /
diff --git a/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/README.md b/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/README.md
new file mode 100644
index 0000000000..6336fb88af
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/README.md
@@ -0,0 +1,16 @@
+<!--
+SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+
+SPDX-License-Identifier: MIT
+-->
+
+# Docker image for builds
+
+This defines the docker image for running Yocto/OE based operations/builds. It
+privides multiple scripts for driving different operations.
+
+## Configuration
+
+The `entrypoint` scripts assumes at runtime that the repository to drive the
+operation against is available under `/work`. This path is to be populated via
+bind mounts when running the container.
diff --git a/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/entrypoint-build.sh b/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/entrypoint-build.sh
new file mode 100755
index 0000000000..a98fa2a190
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/entrypoint-build.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+set -ex
+
+# shellcheck disable=SC1091
+. /utils.sh
+
+META_RASPBERRYPI_PATH="/work"
+
+[ -n "$BASE_REF" ] ||
+ error "Target branch is needed. Make sure that is set in BASE_REF."
+[ -d "$META_RASPBERRYPI_PATH/.git" ] ||
+ error "Can't find a git checkout under $META_RASPBERRYPI_PATH ."
+[ -n "$MACHINE" ] ||
+ error "Machine to be used for build not provided."
+[ -n "$IMAGE" ] ||
+ error "Image to build not provided."
+
+TEMP_DIR="$(mktemp -d)"
+cd "$TEMP_DIR"
+
+REPOS=" \
+ git://git.yoctoproject.org/poky.git \
+"
+for repo in $REPOS; do
+ log "Cloning $repo on branch $BASE_REF..."
+ git clone --depth 1 --branch "$BASE_REF" "$repo"
+done
+
+# shellcheck disable=SC1091,SC2240
+. ./poky/oe-init-build-env build
+
+# Build configuration
+printf "\n# ------ ci ------\n" >> conf/local.conf
+[ -z "$SSTATE_DIR" ] || echo SSTATE_DIR = \""$SSTATE_DIR"\" >> conf/local.conf
+[ -z "$DL_DIR" ] || echo DL_DIR = \""$DL_DIR"\" >> conf/local.conf
+[ -z "$DISTRO" ] || echo DISTRO = \""$DISTRO"\" >> conf/local.conf
+cat <<EOCONF >>conf/local.conf
+BB_NUMBER_THREADS = "6"
+PARALLEL_MAKE = "-j 6"
+DISTRO_FEATURES:append = " systemd"
+VIRTUAL-RUNTIME_init_manager = "systemd"
+DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
+VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
+EOCONF
+
+# Add the BSP layer
+bitbake-layers add-layer "$META_RASPBERRYPI_PATH"
+
+# Log configs for debugging purposes
+for f in 'conf/local.conf' 'conf/bblayers.conf'; do
+ printf "\n------ %s ------\n" "$f"
+ cat "$f"
+done
+
+# Fire!
+MACHINE="$MACHINE" bitbake "$IMAGE"
diff --git a/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/entrypoint-yocto-check-layer.sh b/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/entrypoint-yocto-check-layer.sh
new file mode 100755
index 0000000000..474a24ed2f
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/docker-images/yocto-builder/entrypoint-yocto-check-layer.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+set -ex
+
+# shellcheck disable=SC1091
+. /utils.sh
+
+GIT_REPO_PATH="/work"
+
+[ -n "$BASE_REF" ] ||
+ error "Target branch is needed. Make sure that is set in BASE_REF."
+[ -d "$GIT_REPO_PATH/.git" ] ||
+ error "Can't find a git checkout under $GIT_REPO_PATH ."
+
+TEMP_DIR="$(mktemp -d)"
+cd "$TEMP_DIR"
+
+REPOS=" \
+ git://git.yoctoproject.org/poky.git \
+"
+for repo in $REPOS; do
+ log "Cloning $repo on branch $BASE_REF..."
+ git clone --depth 1 --branch "$BASE_REF" "$repo"
+done
+
+# shellcheck disable=SC1091,SC2240
+. ./poky/oe-init-build-env build
+yocto-check-layer --with-software-layer-signature-check --debug \
+ "$GIT_REPO_PATH"
diff --git a/meta-raspberrypi/.github/workflows/mirror.yml b/meta-raspberrypi/.github/workflows/mirror.yml
new file mode 100644
index 0000000000..11bb185c15
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/mirror.yml
@@ -0,0 +1,22 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+name: Mirrors
+
+on: [ push, delete, create ]
+
+concurrency:
+ group: git-mirror-me
+
+jobs:
+ yocto-mirror:
+ name: Yocto Git Mirror
+ runs-on: [self-hosted, Linux]
+ steps:
+ - uses: agherzan/git-mirror-me-action@v1.0.0
+ env:
+ SSH_PRIVATE_KEY: ${{ secrets.YOCTO_META_RASPBERRYPI_SSH_PRIVATE_KEY }}
+ SSH_KNOWN_HOSTS: ${{ secrets.YOCTO_META_RASPBERRYPI_SSH_KNOWN_HOSTS }}
+ with:
+ destination-repository: "git@push.yoctoproject.org:meta-raspberrypi"
diff --git a/meta-raspberrypi/.github/workflows/yocto-builds.yml b/meta-raspberrypi/.github/workflows/yocto-builds.yml
new file mode 100644
index 0000000000..2d35b9f781
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/yocto-builds.yml
@@ -0,0 +1,66 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+name: Builds
+
+on:
+ pull_request:
+
+jobs:
+ build:
+ strategy:
+ fail-fast: true
+ matrix:
+ machine:
+ - raspberrypi
+ - raspberrypi0-2w-64
+ - raspberrypi0-2w
+ - raspberrypi0
+ - raspberrypi0-wifi
+ - raspberrypi2
+ - raspberrypi3-64
+ - raspberrypi3
+ - raspberrypi4-64
+ - raspberrypi4
+ - raspberrypi-cm3
+ - raspberrypi-cm
+ image: [core-image-base]
+ distro: [poky]
+ runs-on: [self-hosted, Linux]
+ name: ${{ matrix.machine }}/${{ matrix.image }}/poky/systemd
+ env:
+ DL_DIR: /var/lib/ci/yocto/downloads
+ SSTATE_DIR: /var/lib/ci/yocto/sstate
+ steps:
+ - name: Checkout the code
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Build a temporary yocto-builder image
+ uses: ./.github/actions/docker-build
+ with:
+ docker_image: yocto-builder
+ id: ${{ github.event.number }}
+ - name: Build the image
+ run: |
+ docker run --rm \
+ -v "$GITHUB_WORKSPACE:/work:ro" \
+ -v "$DL_DIR:$DL_DIR:rw" \
+ -v "$SSTATE_DIR:$SSTATE_DIR:rw" \
+ --env "BASE_REF=$GITHUB_BASE_REF" \
+ --env "MACHINE=${{ matrix.machine }}" \
+ --env "DISTRO=${{ matrix.distro }}" \
+ --env "IMAGE=${{ matrix.image }}" \
+ --env "DL_DIR=$DL_DIR" \
+ --env "SSTATE_DIR=$SSTATE_DIR" \
+ "yocto-builder-${{ github.event.number }}" \
+ /entrypoint-build.sh
+ - name: Cleanup temporary docker image
+ uses: ./.github/actions/docker-clean-image
+ with:
+ docker_image: yocto-builder-${{ github.event.number }}
+ if: always()
+ - name: Cleanup dangling docker images
+ uses: ./.github/actions/docker-clean-dangling
+ if: always()
diff --git a/meta-raspberrypi/.github/workflows/yocto-layer.yml b/meta-raspberrypi/.github/workflows/yocto-layer.yml
new file mode 100644
index 0000000000..3d5baf8397
--- /dev/null
+++ b/meta-raspberrypi/.github/workflows/yocto-layer.yml
@@ -0,0 +1,37 @@
+# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
+#
+# SPDX-License-Identifier: MIT
+
+name: Yocto Compatible
+
+on:
+ pull_request:
+
+jobs:
+ yocto-check-layer:
+ name: Validate with yocto-check-layer
+ runs-on: [self-hosted, Linux]
+ steps:
+ - name: Checkout the code
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Build a temporary yocto-builder image
+ uses: ./.github/actions/docker-build
+ with:
+ docker_image: yocto-builder
+ id: ${{ github.event.number }}
+ - name: Run yocto-check-layer
+ run: |
+ docker run --rm -v "$GITHUB_WORKSPACE:/work:ro" \
+ --env "BASE_REF=$GITHUB_BASE_REF" \
+ "yocto-builder-${{ github.event.number }}" \
+ /entrypoint-yocto-check-layer.sh
+ - name: Cleanup temporary docker image
+ uses: ./.github/actions/docker-clean-image
+ with:
+ docker_image: yocto-builder-${{ github.event.number }}
+ if: always()
+ - name: Cleanup dangling docker images
+ uses: ./.github/actions/docker-clean-dangling
+ if: always()
diff --git a/meta-raspberrypi/README.md b/meta-raspberrypi/README.md
index c6d6392a31..a7a04b49f6 100644
--- a/meta-raspberrypi/README.md
+++ b/meta-raspberrypi/README.md
@@ -39,11 +39,6 @@ This layer depends on:
* branch: master
* revision: HEAD
-* URI: git://git.openembedded.org/meta-openembedded
- * layers: meta-oe, meta-multimedia, meta-networking, meta-python
- * branch: master
- * revision: HEAD
-
## Quick Start
1. source poky/oe-init-build-env rpi-build
@@ -75,6 +70,13 @@ And the same for the `distro`.
For further information, you can read more at <https://kas.readthedocs.io/en/1.0/index.html>
+## Contributing
+
+You can send patches using the GitHub pull request process or/and through the
+Yocto mailing list. Refer to the
+[documentation](https://meta-raspberrypi.readthedocs.io/en/latest/contributing.html)
+for more information.
+
## Maintainers
* Andrei Gherzan `<andrei at gherzan.com>`
diff --git a/meta-raspberrypi/classes/sdcard_image-rpi.bbclass b/meta-raspberrypi/classes/sdcard_image-rpi.bbclass
index a3a693960a..1389720346 100644
--- a/meta-raspberrypi/classes/sdcard_image-rpi.bbclass
+++ b/meta-raspberrypi/classes/sdcard_image-rpi.bbclass
@@ -79,11 +79,11 @@ def split_overlays(d, out, ver=None):
dts = d.getVar("KERNEL_DEVICETREE")
# Device Tree Overlays are assumed to be suffixed by '-overlay.dtb' (4.1.x) or by '.dtbo' (4.4.9+) string and will be put in a dedicated folder
if out:
- overlays = oe.utils.str_filter_out('\S+\-overlay\.dtb$', dts, d)
- overlays = oe.utils.str_filter_out('\S+\.dtbo$', overlays, d)
+ overlays = oe.utils.str_filter_out(r'\S+\-overlay\.dtb$', dts, d)
+ overlays = oe.utils.str_filter_out(r'\S+\.dtbo$', overlays, d)
else:
- overlays = oe.utils.str_filter('\S+\-overlay\.dtb$', dts, d) + \
- " " + oe.utils.str_filter('\S+\.dtbo$', dts, d)
+ overlays = oe.utils.str_filter(r'\S+\-overlay\.dtb$', dts, d) + \
+ " " + oe.utils.str_filter(r'\S+\.dtbo$', dts, d)
return overlays
diff --git a/meta-raspberrypi/conf/layer.conf b/meta-raspberrypi/conf/layer.conf
index 7f634aeae7..d7ad4ed2a2 100644
--- a/meta-raspberrypi/conf/layer.conf
+++ b/meta-raspberrypi/conf/layer.conf
@@ -9,7 +9,7 @@ BBFILE_COLLECTIONS += "raspberrypi"
BBFILE_PATTERN_raspberrypi := "^${LAYERDIR}/"
BBFILE_PRIORITY_raspberrypi = "9"
-LAYERSERIES_COMPAT_raspberrypi = "honister"
+LAYERSERIES_COMPAT_raspberrypi = "kirkstone"
LAYERDEPENDS_raspberrypi = "core"
# Additional license directories.
diff --git a/meta-raspberrypi/conf/machine/include/rpi-base.inc b/meta-raspberrypi/conf/machine/include/rpi-base.inc
index 0e65d00349..a7a762cd0d 100644
--- a/meta-raspberrypi/conf/machine/include/rpi-base.inc
+++ b/meta-raspberrypi/conf/machine/include/rpi-base.inc
@@ -23,6 +23,7 @@ RPI_KERNEL_DEVICETREE_OVERLAYS ?= " \
overlays/gpio-ir-tx.dtbo \
overlays/gpio-key.dtbo \
overlays/gpio-poweroff.dtbo \
+ overlays/gpio-shutdown.dtbo \
overlays/hifiberry-amp.dtbo \
overlays/hifiberry-dac.dtbo \
overlays/hifiberry-dacplus.dtbo \
@@ -30,6 +31,7 @@ RPI_KERNEL_DEVICETREE_OVERLAYS ?= " \
overlays/justboom-both.dtbo \
overlays/justboom-dac.dtbo \
overlays/justboom-digi.dtbo \
+ overlays/i2c-gpio.dtbo \
overlays/i2c-rtc.dtbo \
overlays/imx219.dtbo \
overlays/imx477.dtbo \
@@ -46,6 +48,7 @@ RPI_KERNEL_DEVICETREE_OVERLAYS ?= " \
overlays/rpi-ft5406.dtbo \
overlays/rpi-poe.dtbo \
overlays/vc4-fkms-v3d.dtbo \
+ overlays/vc4-fkms-v3d-pi4.dtbo \
overlays/vc4-kms-v3d.dtbo \
overlays/vc4-kms-v3d-pi4.dtbo \
overlays/vc4-kms-dsi-7inch.dtbo \
@@ -97,6 +100,7 @@ MACHINE_FEATURES_BACKFILL_CONSIDERED = "rtc"
MACHINE_EXTRA_RRECOMMENDS += "kernel-modules udev-rules-rpi"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "${@oe.utils.conditional('ENABLE_I2C', '1', 'kernel-module-i2c-dev kernel-module-i2c-bcm2708', '', d)}"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "${@oe.utils.conditional('ENABLE_IR', '1', 'kernel-module-gpio-ir kernel-module-gpio-ir-tx', '', d)}"
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "${@oe.utils.conditional('ENABLE_GPIO_SHUTDOWN', '1', 'gpio-shutdown kernel-module-gpio-keys', '', d)}"
SERIAL_CONSOLES_CHECK ??= "${SERIAL_CONSOLES}"
diff --git a/meta-raspberrypi/conf/machine/include/rpi-default-versions.inc b/meta-raspberrypi/conf/machine/include/rpi-default-versions.inc
index 17d5bd6d59..8ff283936f 100644
--- a/meta-raspberrypi/conf/machine/include/rpi-default-versions.inc
+++ b/meta-raspberrypi/conf/machine/include/rpi-default-versions.inc
@@ -1,3 +1,3 @@
# RaspberryPi BSP default versions
-PREFERRED_VERSION_linux-raspberrypi ??= "5.10.%"
+PREFERRED_VERSION_linux-raspberrypi ??= "5.15.%"
diff --git a/meta-raspberrypi/conf/machine/raspberrypi0-2w.conf b/meta-raspberrypi/conf/machine/raspberrypi0-2w.conf
new file mode 100644
index 0000000000..c360d90ff9
--- /dev/null
+++ b/meta-raspberrypi/conf/machine/raspberrypi0-2w.conf
@@ -0,0 +1,17 @@
+#@TYPE: Machine
+#@NAME: RaspberryPi0 2 Wifi Development Board
+#@DESCRIPTION: Machine configuration for the RaspberryPi0 2 Wifi in 32 bits mode
+
+include conf/machine/raspberrypi3.conf
+
+MACHINEOVERRIDES := "${@'${MACHINEOVERRIDES}'.replace(':${MACHINE}',':raspberrypi3:${MACHINE}')}"
+
+MACHINE_EXTRA_RRECOMMENDS += "\
+ linux-firmware-rpidistro-bcm43436 \
+ linux-firmware-rpidistro-bcm43436s \
+ bluez-firmware-rpidistro-bcm43430b0-hcd \
+"
+
+RPI_KERNEL_DEVICETREE = " \
+ bcm2710-rpi-zero-2.dtb \
+ "
diff --git a/meta-raspberrypi/conf/machine/raspberrypi4-64.conf b/meta-raspberrypi/conf/machine/raspberrypi4-64.conf
index 4255431086..0cf7d512bd 100644
--- a/meta-raspberrypi/conf/machine/raspberrypi4-64.conf
+++ b/meta-raspberrypi/conf/machine/raspberrypi4-64.conf
@@ -12,6 +12,8 @@ MACHINE_EXTRA_RRECOMMENDS += "\
bluez-firmware-rpidistro-bcm4345c5-hcd \
"
+DEFAULTTUNE = "cortexa72"
+
require conf/machine/include/arm/armv8a/tune-cortexa72.inc
include conf/machine/include/rpi-base.inc
diff --git a/meta-raspberrypi/docs/contributing.md b/meta-raspberrypi/docs/contributing.md
index 5b712ae08e..9ecb6cb896 100644
--- a/meta-raspberrypi/docs/contributing.md
+++ b/meta-raspberrypi/docs/contributing.md
@@ -86,6 +86,10 @@ Then, for sending patches to the mailing list, you may use this command:
git send-email --to yocto@lists.yoctoproject.org <generated patch>
+When patches are sent through the mailing list, the maintainer will include
+them in a GitHub pull request that will take the patches through the CI
+workflows. This process happens periodically.
+
## GitHub issues
In order to manage and track the layer issues more efficiently, the
diff --git a/meta-raspberrypi/docs/extra-apps.md b/meta-raspberrypi/docs/extra-apps.md
index 53007dc1f0..dbbfb8ddb1 100644
--- a/meta-raspberrypi/docs/extra-apps.md
+++ b/meta-raspberrypi/docs/extra-apps.md
@@ -6,4 +6,4 @@ omxplayer depends on libav which has a commercial license. So in order to be
able to compile omxplayer you will need to whiteflag the commercial
license in your local.conf:
- LICENSE_FLAGS_WHITELIST = "commercial"
+ LICENSE_FLAGS_ACCEPTED = "commercial"
diff --git a/meta-raspberrypi/docs/extra-build-config.md b/meta-raspberrypi/docs/extra-build-config.md
index 82ec3c0f16..81eff0742c 100644
--- a/meta-raspberrypi/docs/extra-build-config.md
+++ b/meta-raspberrypi/docs/extra-build-config.md
@@ -320,6 +320,24 @@ Appropriate kernel modules will be also included in the image. By default the
GPIO pin for gpio-ir is set to 18 and the pin for gpio-ir-tx is 17. Both pins
can be easily changed by modifying variables `GPIO_IR` and `GPIO_IR_TX`.
+## Enable gpio-shutdown
+
+When using device tree kernels, set this variable to enable gpio-shutdown:
+
+ ENABLE_GPIO_SHUTDOWN = "1"
+
+This will add the corresponding device tree overlay to config.txt and include
+the gpio-keys kernel module in the image. If System V init is used, additional
+mapping is applied to bind the button event to shutdown command. Systemd init
+should handle the event out of the box.
+
+By default the feature uses gpio pin 3 (except RPi 1 Model B rev 1 enumerates
+the pin as gpio 1). This conflicts with the I2C bus. If you set `ENABLE_I2C`
+to `1` or enabled `PiTFT` support, or otherwise want to use another pin, use
+`GPIO_SHUTDOWN_PIN` to assign another pin. Example using gpio pin 25:
+
+ GPIO_SHUTDOWN_PIN = "25"
+
## Manual additions to config.txt
The `RPI_EXTRA_CONFIG` variable can be used to manually add additional lines to
diff --git a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-blinka_6.2.2.bb b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-blinka_6.2.2.bb
index b9fb9153c6..9e1e357a8b 100644
--- a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-blinka_6.2.2.bb
+++ b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-blinka_6.2.2.bb
@@ -28,3 +28,6 @@ RDEPENDS:${PN} += " \
"
RDEPENDS:${PN}:append:rpi = " rpi-gpio"
+
+COMPATIBLE_HOST:libc-musl:class-target = "null"
+
diff --git a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-busdevice_5.0.5.bb b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-busdevice_5.0.5.bb
index 2cf8afddf9..93491d43cc 100644
--- a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-busdevice_5.0.5.bb
+++ b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-busdevice_5.0.5.bb
@@ -16,3 +16,4 @@ RDEPENDS:${PN} += " \
python3-adafruit-blinka \
python3-core \
"
+COMPATIBLE_HOST:libc-musl:class-target = "null"
diff --git a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-motor_3.2.6.bb b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-motor_3.2.6.bb
index d572cab17d..3233c8f2bc 100644
--- a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-motor_3.2.6.bb
+++ b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-motor_3.2.6.bb
@@ -16,3 +16,4 @@ RDEPENDS:${PN} += " \
python3-adafruit-blinka \
python3-core \
"
+COMPATIBLE_HOST:libc-musl:class-target = "null"
diff --git a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-motorkit_1.6.1.bb b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-motorkit_1.6.1.bb
index 94eed3e48e..39fe76aab7 100644
--- a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-motorkit_1.6.1.bb
+++ b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-motorkit_1.6.1.bb
@@ -20,3 +20,4 @@ RDEPENDS:${PN} += " \
python3-adafruit-circuitpython-register \
python3-core \
"
+COMPATIBLE_HOST:libc-musl:class-target = "null"
diff --git a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-pca9685_3.3.4.bb b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-pca9685_3.3.4.bb
index 8656d75c79..f7f0ff162b 100644
--- a/meta-raspberrypi/recipes-devtools/python/python3-adafruit-circuitpython-pca9685_3.3.4.bb
+++ b/meta-raspberrypi/dynamic-layers/openembedded-layer/recipes-devtools/python3-adafruit-circuitpython-pca9685_3.3.4.bb
@@ -18,3 +18,4 @@ RDEPENDS:${PN} += " \
python3-adafruit-circuitpython-register \
python3-core \
"
+COMPATIBLE_HOST:libc-musl:class-target = "null"
diff --git a/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb b/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
index f78c6d7f98..d9d8bb05ac 100644
--- a/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
+++ b/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
@@ -34,6 +34,8 @@ ENABLE_UART ??= ""
WM8960="${@bb.utils.contains("MACHINE_FEATURES", "wm8960", "1", "0", d)}"
+GPIO_SHUTDOWN_PIN ??= ""
+
inherit deploy nopackages
do_deploy() {
@@ -253,6 +255,22 @@ do_deploy() {
echo "dtoverlay=mcp2515-can0,oscillator=${CAN_OSCILLATOR},interrupt=25" >>$CONFIG
fi
+
+ if [ "${ENABLE_GPIO_SHUTDOWN}" = "1" ]; then
+ if ([ "${ENABLE_I2C}" = "1" ] || [ "${PITFT}" = "1" ]) && [ -z "${GPIO_SHUTDOWN_PIN}" ]; then
+ # By default GPIO shutdown uses the same pin as the (master) I2C SCL.
+ # If I2C is configured and an alternative pin is not configured for
+ # gpio-shutdown, there is a configuration conflict.
+ bbfatal "I2C and gpio-shutdown are both enabled and using the same pins!"
+ fi
+ echo "# Enable gpio-shutdown" >> $CONFIG
+ if [ -z "${GPIO_SHUTDOWN_PIN}" ]; then
+ echo "dtoverlay=gpio-shutdown" >> $CONFIG
+ else
+ echo "dtoverlay=gpio-shutdown,gpio_pin=${GPIO_SHUTDOWN_PIN}" >> $CONFIG
+ fi
+ fi
+
# Append extra config if the user has provided any
printf "${RPI_EXTRA_CONFIG}\n" >> $CONFIG
diff --git a/meta-raspberrypi/recipes-bsp/gpio-shutdown/files/bind_gpio_shutdown.tab b/meta-raspberrypi/recipes-bsp/gpio-shutdown/files/bind_gpio_shutdown.tab
new file mode 100644
index 0000000000..00cc4857d8
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/gpio-shutdown/files/bind_gpio_shutdown.tab
@@ -0,0 +1,2 @@
+# Action on special keypress (Key Power)
+kb::kbrequest:/sbin/shutdown -t1 -a -h -P now
diff --git a/meta-raspberrypi/recipes-bsp/gpio-shutdown/files/gpio-shutdown-keymap.sh b/meta-raspberrypi/recipes-bsp/gpio-shutdown/files/gpio-shutdown-keymap.sh
new file mode 100644
index 0000000000..bae50daf14
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/gpio-shutdown/files/gpio-shutdown-keymap.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+##
+# Bind the gpio-shutdown keycode as Keyboard signal and load it to the
+# keymap during startup.
+##
+case "$1" in
+ start)
+ # Inject the gpio keycode to keymap
+ echo "keycode 116 = KeyboardSignal" | loadkeys
+ ;;
+ *)
+ ;;
+esac
diff --git a/meta-raspberrypi/recipes-bsp/gpio-shutdown/gpio-shutdown.bb b/meta-raspberrypi/recipes-bsp/gpio-shutdown/gpio-shutdown.bb
new file mode 100644
index 0000000000..d6908400bd
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/gpio-shutdown/gpio-shutdown.bb
@@ -0,0 +1,31 @@
+SUMMARY = "GPIO shutdown bindings for SysV init"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
+
+SRC_URI = "file://bind_gpio_shutdown.tab \
+ file://gpio-shutdown-keymap.sh \
+"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "gpio-shutdown-keymap.sh"
+# Run only once during startup
+INITSCRIPT_PARAMS = "start 99 S ."
+
+do_install() {
+ # The files are only needed if using SysV init.
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir} \
+ ${D}${sysconfdir}/inittab.d \
+ ${D}${sysconfdir}/init.d
+
+ install -m 0755 ${WORKDIR}/gpio-shutdown-keymap.sh ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/bind_gpio_shutdown.tab ${D}${sysconfdir}/inittab.d/
+ elif ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ # Systemd init does not require any configuration.
+ # Note: cannot have an empty branch, hence the redundant dir install.
+ install -d ${D}${sysconfdir}
+ else
+ bbwarn "Not using sysvinit or systemd. The gpio-shutdown may require additional configuration."
+ fi
+}
diff --git a/meta-raspberrypi/recipes-devtools/bcm2835/bcm2835_1.52.bb b/meta-raspberrypi/recipes-devtools/bcm2835/bcm2835_1.52.bb
index 87252bb131..6538f6a03b 100644
--- a/meta-raspberrypi/recipes-devtools/bcm2835/bcm2835_1.52.bb
+++ b/meta-raspberrypi/recipes-devtools/bcm2835/bcm2835_1.52.bb
@@ -5,7 +5,7 @@ SECTION = "base"
HOMEPAGE = "http://www.open.com.au/mikem/bcm2835"
AUTHOR = "Mike McCauley (mikem@open.com.au)"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
COMPATIBLE_MACHINE = "^rpi$"
diff --git a/meta-raspberrypi/recipes-devtools/python/rpi-gpio_0.7.0.bb b/meta-raspberrypi/recipes-devtools/python/rpi-gpio_0.7.0.bb
index 8b13d53a60..574021ec41 100644
--- a/meta-raspberrypi/recipes-devtools/python/rpi-gpio_0.7.0.bb
+++ b/meta-raspberrypi/recipes-devtools/python/rpi-gpio_0.7.0.bb
@@ -5,7 +5,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENCE.txt;md5=9b95630a648966b142f1a0dcea001cb7"
PYPI_PACKAGE = "RPi.GPIO"
-inherit pypi distutils3
+inherit pypi setuptools3
SRC_URI += "file://0001-Remove-nested-functions.patch"
SRC_URI[md5sum] = "777617f9dea9a1680f9af43db0cf150e"
diff --git a/meta-raspberrypi/recipes-devtools/python/rpio_0.10.0.bb b/meta-raspberrypi/recipes-devtools/python/rpio_0.10.0.bb
index 1c8075f3e2..f75806e3f6 100644
--- a/meta-raspberrypi/recipes-devtools/python/rpio_0.10.0.bb
+++ b/meta-raspberrypi/recipes-devtools/python/rpio_0.10.0.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Advanced GPIO for the Raspberry Pi. Extends RPi.GPIO with PWM, \
GPIO interrups, TCP socket interrupts, command line tools and more"
HOMEPAGE = "https://github.com/metachris/RPIO"
SECTION = "devel/python"
-LICENSE = "LGPLv3+"
+LICENSE = "LGPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://README.rst;beginline=41;endline=53;md5=d5d95d7486a4d98c999675c23196b25a"
PYPI_PACKAGE = "RPIO"
diff --git a/meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend b/meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend
index 25829c26b0..ee4812fce7 100644
--- a/meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend
+++ b/meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend
@@ -1,4 +1,4 @@
-OPENGL_PKGCONFIGS:rpi = "dri glx ${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', 'dri3 xshmfence glamor', '', d)}"
+OPENGL_PKGCONFIGS:rpi = "dri glx ${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', 'dri3 glamor', '', d)}"
# when using userland graphic KHR/khrplatform.h is provided by userland but virtual/libgl is provided by mesa-gl where
# we explicitly delete KHR/khrplatform.h since its already coming from userland package
diff --git a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc
index ea47b5643b..f790c3c5d2 100644
--- a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc
+++ b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc
@@ -1,6 +1,6 @@
DESCRIPTION = "Linux Kernel for Raspberry Pi"
SECTION = "kernel"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
COMPATIBLE_MACHINE = "^rpi$"
diff --git a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bb b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bb
index c28968cbd0..b3122e5d2c 100644
--- a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bb
+++ b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bb
@@ -1,8 +1,8 @@
-LINUX_VERSION ?= "5.10.81"
+LINUX_VERSION ?= "5.10.83"
LINUX_RPI_BRANCH ?= "rpi-5.10.y"
LINUX_RPI_KMETA_BRANCH ?= "yocto-5.10"
-SRCREV_machine = "f9bd396cd0f5f8c2026473f1e570deed3d08d350"
+SRCREV_machine = "111a297d94e361de88d04b574acbca1bd5858cdb"
SRCREV_meta = "e1979ceb171bc91ef2cb71cfcde548a101dab687"
KMETA = "kernel-meta"
diff --git a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.15.bb b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.15.bb
new file mode 100644
index 0000000000..699a31fd10
--- /dev/null
+++ b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.15.bb
@@ -0,0 +1,19 @@
+LINUX_VERSION ?= "5.15.24"
+LINUX_RPI_BRANCH ?= "rpi-5.15.y"
+LINUX_RPI_KMETA_BRANCH ?= "yocto-5.15"
+
+SRCREV_machine = "770d94882ac145c81af72e9a37180806c3f70bbd"
+SRCREV_meta = "e1b976ee4fb5af517cf01a9f2dd4a32f560ca894"
+
+KMETA = "kernel-meta"
+
+SRC_URI = " \
+ git://github.com/raspberrypi/linux.git;name=machine;branch=${LINUX_RPI_BRANCH};protocol=https \
+ git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=${LINUX_RPI_KMETA_BRANCH};destsuffix=${KMETA} \
+ file://powersave.cfg \
+ file://android-drivers.cfg \
+ "
+
+require linux-raspberrypi.inc
+
+KERNEL_DTC_FLAGS += "-@ -H epapr"
diff --git a/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend b/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
index 4a815abf2c..2bf628134c 100644
--- a/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
+++ b/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
@@ -1,2 +1,2 @@
-PACKAGECONFIG:append:rpi = " hls libmms \
- ${@bb.utils.contains('LICENSE_FLAGS_WHITELIST', 'commercial', 'faad', '', d)}"
+PACKAGECONFIG:append:rpi = " hls \
+ ${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'gpl faad', '', d)}"
diff --git a/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend b/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend
index f3fb1441d1..f3fb1441d1 100644
--- a/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend
+++ b/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend
diff --git a/meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb b/meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb
index 64233b3b57..25196929f5 100644
--- a/meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb
+++ b/meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb
@@ -4,7 +4,7 @@ Raspberry PI implementation and is quite handy to use standalone"
HOMEPAGE = "https://github.com/popcornmix/omxplayer"
SECTION = "console/utils"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=00a27da7ac0f9bcd17320ec29ef4bbf6"
DEPENDS = "libpcre libav virtual/egl boost freetype dbus openssl libssh virtual/libomxil coreutils-native curl-native userland"
diff --git a/meta-raspberrypi/recipes-multimedia/picamera-libs/picamera-libs.bb b/meta-raspberrypi/recipes-multimedia/picamera-libs/picamera-libs.bb
new file mode 100644
index 0000000000..c1356f00ae
--- /dev/null
+++ b/meta-raspberrypi/recipes-multimedia/picamera-libs/picamera-libs.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Raspberrypi firmware libraries which are required by picamera library"
+DESCRIPTION = "Raspberrypi firmware libraries required by picamera library"
+LICENSE = "Broadcom-RPi"
+
+LIC_FILES_CHKSUM = "file://opt/vc/LICENCE;md5=86e53f5f5909ee66900418028de11780"
+
+include recipes-bsp/common/raspberrypi-firmware.inc
+
+S = "${WORKDIR}/firmware-${SRCREV}"
+
+do_install(){
+ install -m 0755 -d ${D}${libdir}
+ install -m 0755 ${S}/opt/vc/lib/*.so ${D}${libdir}
+}
+
+FILES:${PN} = "${libdir}"
+
+#skipping the QA error since we are directly copying precompiled binaries
+INSANE_SKIP:${PN} = "ldflags"
+INHIBIT_PACKAGE_STRIP = "1"
+INHIBIT_SYSROOT_STRIP = "1"
+SOLIBS = ".so"
+FILES_SOLIBSDEV = ""
+
+COMPATIBLE_HOST = "null"
+COMPATIBLE_HOST:rpi:libc-glibc = "(arm.*)-linux"
diff --git a/meta-raspberrypi/recipes-multimedia/python3-picamera/python3-picamera_git.bb b/meta-raspberrypi/recipes-multimedia/python3-picamera/python3-picamera_git.bb
new file mode 100644
index 0000000000..f14941b823
--- /dev/null
+++ b/meta-raspberrypi/recipes-multimedia/python3-picamera/python3-picamera_git.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Python interface to the Raspberry Pi camera module"
+DESCRIPTION = "This package provides a pure Python interface to the Raspberry Pi camera module for Python 2.7 (or above) or Python 3.2 (or above)."
+HOMEPAGE = "https://github.com/waveform80/picamera"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4de8aab427192e4a8322a71375d20e21"
+
+RDEPENDS:${PN} = "python3-numbers \
+ python3-ctypes \
+ python3-colorzero \
+ picamera-libs \
+"
+
+SRC_URI = "git://git@github.com/waveform80/picamera.git;protocol=ssh;branch=master"
+SRCREV = "7e4f1d379d698c44501fb84b886fadf3fc164b70"
+
+S = "${WORKDIR}/git"
+
+inherit setuptools3
+
+COMPATIBLE_HOST = "null"
+COMPATIBLE_HOST:rpi:libc-glibc = "(arm.*)-linux"