Masterthesis/home/lucifer/RPi/make-virtio-kernel
2021-11-09 15:34:37 +01:00

175 lines
5.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Usage: ./make-virtio-kernel
# or
# bash make-virtio-kernel
# Description: Crossbuild four (4) RPi-kernels from given releases
# of the raspberrypi kernel (github).
# Author: Patrick Neumann (patrick@neumannsland.de)
# Platform: Debian GNU/Linux (tested: 10.x)
# Version: 1.00
# Date: 23.09.2020
# Link: https://git.neumannsland.de/casualscripter/Masterthesis/src/branch/master/home/lucifer/RPi/make-virtio-kernel
# License: GPL3
# Warranty: This program is distributed WITHOUT ANY WARRANTY
# mapping archive to linux kernel version:
# - 1.20211029 = 5.10.63 (https://github.com/raspberrypi/linux/archive/refs/tags/1.20211029.tar.gz)
# - 1.20210831 = 5.10.60
# - 1.20210805 = 5.10.52
# - 1.20210527 = 5.10.17 (https://github.com/raspberrypi/linux/archive/refs/tags/raspberrypi-kernel_1.20210527-1.tar.gz)
# - 1.20210201 = 5.10.11
# - 1.20210111.master = 5.10.5 (https://github.com/raspberrypi/linux/archive/refs/tags/raspberrypi-kernel_1.20210111.master-1.tar.gz)
# - 1.20210107.master = 5.10.4
# - 1.20210108 = 5.4.83 (https://github.com/raspberrypi/linux/archive/refs/tags/raspberrypi-kernel_1.20210108-1.tar.gz)
# - 1.20201201 = 5.4.79
# - 1.20201022 = 5.4.72
# - 1.20200902-1 = 5.4.51 (https://github.com/raspberrypi/linux/archive/refs/tags/raspberrypi-kernel_1.20200902-1.tar.gz)
# - 1.20200601+amd64-1 = 5.4.42 (https://github.com/raspberrypi/linux/archive/refs/tags/raspberrypi-kernel_1.20200601+arm64-1.tar.gz)
# - 1.20200212-1 = 4.19.97 (https://github.com/raspberrypi/linux/archive/refs/tags/raspberrypi-kernel_1.20200212-1.tar.gz)
# - 1.20200114-1 = 4.19.93
# - 1.20190925-1 = 4.19.75
# - 1.20190819-1 = 4.19.66
# - 1.20190718-1 = 4.19.58
# - 1.20190709-1 = 4.19.57
# - 1.20190620-1 = 4.19.50 (32-Bit only!?)
# - 1.20190517-1 = 4.19.42 (32-Bit only!?)
# - 1.20190401-1 = 4.14.98 (32-Bit only!?)
# check os:
readonly OS="Debian GNU/Linux 10"
if ! grep --fixed-strings "${OS}" /usr/lib/os-release > /dev/null 2>&1 ; then
echo "Only ${OS} is supported!"
exit 1
fi
# check and install deps if necessary:
readonly PACKAGES="git
bc
bison
flex
libssl-dev
make
libc6dev
libncurses5-dev
crossbuild-essential-armhf
crossbuild-essential-arm64"
for package in ${PACKAGES} ; do
if ! dpkg -s "${package}" > /dev/null 2>&1 ; then
sudo apt install "${package}" --assume-yes
fi
done
# check and generate config fragment file if necessary:
if ! [ -r ./.config-virtio ] ; then
cat <<EOF > ./.config-virtio
CONFIG_BLK_MQ_VIRTIO=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_BLK_SCSI=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_DRM_VIRTIO_GPU=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_VIRTIO_INPUT=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
EOF
fi
# adjust number of jobs to cores (+ hypter threading):
readonly CPUS="$( lscpu | awk '/^CPU\(s\):/ { print $NF; }' )"
readonly JOBS="$( echo "12 * 1.5 / 1" | bc )"
readonly RELEASES="1.20211029
1.20210831
1.20210805
raspberrypi-kernel_1.20210527-1
raspberrypi-kernel_1.20210201-1
raspberrypi-kernel_1.20210111.master-1
raspberrypi-kernel_1.20210107.master-1
raspberrypi-kernel_1.20210108-1
raspberrypi-kernel_1.20211201-1
raspberrypi-kernel_1.20211022-1"
#raspberrypi-kernel_1.20200902-1
#1.20200601+amd64-1
#raspberrypi-kernel_1.20200212-1
#raspberrypi-kernel_1.20200114-1
#raspberrypi-kernel_1.20190925-1
#raspberrypi-kernel_1.20190819-1
#raspberrypi-kernel_1.20190718-1
#raspberrypi-kernel_1.20190709-1
#raspberrypi-kernel_1.20190620-1
#raspberrypi-kernel_1.20190517-1
#raspberrypi-kernel_1.20190401-1
#raspberrypi-kernel_1.20190709-1
#raspberrypi-kernel_1.20190620-1
#raspberrypi-kernel_1.20190517-1
#raspberrypi-kernel_1.20190401-1"
for release in ${RELEASES} ; do
# download, extract, version,...
# archive="raspberrypi-kernel_${release}.tar.gz"
# wget --timestamping "https://github.com/raspberrypi/linux/archive/${archive}"
archive="${release}.tar.gz"
wget --timestamping "https://github.com/raspberrypi/linux/archive/refs/tags/${archive}"
[ -r "${archive}" ] || continue
tar xzf "${archive}"
rm "${archive}"
mv "./linux-${archive%.tar.gz}" ./linux
cd ./linux
version="$( awk '/^VERSION =/ { print $NF; }' ./Makefile )"
patchlevel="$( awk '/^PATCHLEVEL =/ { print $NF; }' ./Makefile )"
sublevel="$( awk '/^SUBLEVEL =/ { print $NF; }' Makefile )"
target="${HOME}/RPi/Kernels/${version}.${patchlevel}.${sublevel}"
[ -d "${target}" ] || mkdir -p "${target}"
# RPi1...
export KERNEL="kernel"
export ARCH="arm"
export CROSS_COMPILE="arm-linux-gnueabihf-"
make bcmrpi_defconfig
./scripts/kconfig/merge_config.sh .config ../.config-virtio
make --jobs="${JOBS}" zImage
cp ./arch/arm/boot/zImage "${target}/RPi1-${KERNEL}-virtio"
make clean
# RPi2-3...
export KERNEL="kernel7"
make bcm2709_defconfig
./scripts/kconfig/merge_config.sh .config ../.config-virtio
make --jobs="${JOBS}" zImage
cp ./arch/arm/boot/zImage "${target}/RPi2-${KERNEL}-virtio"
make clean
# RPi4 (32 Bit)...
export KERNEL="kernel7l"
make bcm2711_defconfig
./scripts/kconfig/merge_config.sh .config ../.config-virtio
make --jobs="${JOBS}" zImage
cp ./arch/arm/boot/zImage "${target}/RPi4-${KERNEL}-virtio"
make clean
# RPi4 (64 Bit)...
export KERNEL="kernel8"
export ARCH="arm64"
export CROSS_COMPILE="aarch64-linux-gnu-"
make bcm2711_defconfig
./scripts/kconfig/merge_config.sh .config ../.config-virtio
make --jobs="${JOBS}" Image
cp ./arch/arm64/boot/Image "${target}/RPi4-${KERNEL}-virtio"
# cleanup:
cd ..
rm -rf ./linux
done
exit 0