#!/bin/sh # vim:ts=2:sw=2:et # see also: # https://kernel-handbook.alioth.debian.org/ch-update-hooks.html#s-kernel-hooks set -e # Play nice when run under debconf. exec &2 eval set -- "$DEB_MAINT_PARAMS" # Only run on configure and remove to avoid unnecessary work. case "$1" in configure|remove) ;; *) exit 0 ;; esac if ischroot ; then true # chroot detected - skip mount point check elif test -e /usr/bin/systemd-detect-virt && systemd-detect-virt -q ; then true # virtualization detected - skip mount point check elif ! mountpoint -q /boot/firmware; then echo "raspi3-firmware: missing /boot/firmware, did you forget to mount it?" >&2 exit 1 fi # Ensure the target directory exists. See https://bugs.debian.org/887062 mkdir -p /boot/firmware latest_kernel=$(ls -1 /boot/vmlinuz-* | grep -v '\.dpkg-bak$' | sort -V -r | head -1) if [ -z "$latest_kernel" ]; then echo "raspi3-firmware: no kernel found in /boot/vmlinuz-*, cannot populate /boot/firmware" exit 0 fi latest_initrd=$(ls -1 /boot/initrd.img-* | grep -v '\.dpkg-bak$' | sort -V -r | head -1) if [ -z "$latest_initrd" ]; then echo "raspi3-firmware: no initrd found in /boot/initrd.img-*, cannot populate /boot/firmware" exit 0 fi # Default configurations, overridable at /etc/default/raspi3-firmware CMA=64M ROOTPART=/dev/mmcblk0p2 KERNEL="auto" INITRAMFS="auto" if [ -r /etc/default/raspi3-firmware ]; then . /etc/default/raspi3-firmware fi # copy and rename the available device tree binaries # the bootloader will pick the right device tree binary # if it is named according to the system on chip family name arch=$(dpkg --print-architecture) if [ "arm64" = "$arch" ]; then dtb_path="/usr/lib/linux-image-${latest_kernel#/boot/vmlinuz-}/broadcom" else # there is no vendor subdirectory for armhf dtb_path="/usr/lib/linux-image-${latest_kernel#/boot/vmlinuz-}" fi if [ "$KERNEL" = "auto" ]; then for dtb in ${dtb_path}/bcm*.dtb; do [ -e "${dtb}" ] && cp "${dtb}" /boot/firmware/ done latest_kernel_basename=$(basename "$latest_kernel") latest_initrd_basename=$(basename "$latest_initrd") KERNEL=${latest_kernel_basename} cp "$latest_kernel" /boot/firmware/ cp "$latest_initrd" /boot/firmware/ serial="ttyAMA0,115200" kernelmajmin=$(($(echo $latest_kernel_basename | sed -n \ 's/^vmlinu.-\([0-9]*\)\.\([0-9]*\)\..*$/\1*1000+\2/p'))) if [ $kernelmajmin -ge 4014 ]; then # Since Linux 4.14, /dev/ttyS1 is the UART on the pinheader. serial="ttyS1,115200" fi fi # Truncate the config.txt file so that we start with a blank slate echo >/boot/firmware/config.txt if [ "$arch" = "arm64" ]; then cat >/boot/firmware/config.txt <>/boot/firmware/config.txt <>/boot/firmware/config.txt </boot/firmware/cmdline.txt <