aboutsummaryrefslogtreecommitdiff
path: root/bootstrap.d/13-kernel.sh
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap.d/13-kernel.sh')
-rw-r--r--bootstrap.d/13-kernel.sh45
1 files changed, 34 insertions, 11 deletions
diff --git a/bootstrap.d/13-kernel.sh b/bootstrap.d/13-kernel.sh
index 8ec8856..5163f0d 100644
--- a/bootstrap.d/13-kernel.sh
+++ b/bootstrap.d/13-kernel.sh
@@ -7,32 +7,55 @@
# Fetch and build latest raspberry kernel
if [ "$BUILD_KERNEL" = true ] ; then
- # Fetch current raspberrypi kernel sources
- git -C $R/usr/src clone --depth=1 https://github.com/raspberrypi/linux
+ # Setup source directory
+ mkdir -p $R/usr/src
- # Load default raspberry kernel configuration
- make -C $R/usr/src/linux ARCH=${KERNEL_ARCH} CROSS_COMPILE=${CROSS_COMPILE} bcm2709_defconfig
+ # Copy existing kernel sources into chroot directory
+ if [ -n "$KERNEL_SRCDIR" ] && [ -d "$KERNEL_SRCDIR" ] ; then
+ # Copy kernel sources
+ cp -r "${KERNEL_SRCDIR}" "${R}/usr/src"
+
+ # Clean the kernel sources
+ if [ "$KERNEL_CLEANSRC" = true ] ; then
+ make -C $R/usr/src/linux ARCH=${KERNEL_ARCH} CROSS_COMPILE=${CROSS_COMPILE} mrproper
+ fi
+ else # KERNEL_SRCDIR=""
+ # Fetch current raspberrypi kernel sources
+ git -C $R/usr/src clone --depth=1 https://github.com/raspberrypi/linux
+ fi
# Calculate optimal number of kernel building threads
- if [ "$KERNEL_THREADS" = 1 ] ; then
- if [ -f /proc/cpuinfo ] ; then
+ if [ "$KERNEL_THREADS" = "1" ] ; then
+ if [ -r /proc/cpuinfo ] ; then
KERNEL_THREADS=$(grep -c processor /proc/cpuinfo)
fi
fi
- # Start menu-driven kernel configuration (interactive)
- if [ "$KERNEL_MENUCONFIG" = true ] ; then
- make -C $R/usr/src/linux ARCH=${KERNEL_ARCH} CROSS_COMPILE=${CROSS_COMPILE} menuconfig
+ if [ "$KERNEL_CONFIGSRC" = true ] ; then
+ # Load default raspberry kernel configuration
+ make -C $R/usr/src/linux ARCH=${KERNEL_ARCH} CROSS_COMPILE=${CROSS_COMPILE} ${KERNEL_DEFCONFIG}
+
+ # Start menu-driven kernel configuration (interactive)
+ if [ "$KERNEL_MENUCONFIG" = true ] ; then
+ make -C $R/usr/src/linux ARCH=${KERNEL_ARCH} CROSS_COMPILE=${CROSS_COMPILE} menuconfig
+ fi
fi
# Cross compile kernel and modules
make -C $R/usr/src/linux -j${KERNEL_THREADS} ARCH=${KERNEL_ARCH} CROSS_COMPILE=${CROSS_COMPILE} zImage modules dtbs
+ # Check if kernel compilation was successful
+ if [ ! -r $R/usr/src/linux/arch/${KERNEL_ARCH}/boot/zImage ] ; then
+ echo "error: kernel compilation failed!"
+ cleanup
+ exit 1
+ fi
+
# Install kernel modules
make -C $R/usr/src/linux ARCH=${KERNEL_ARCH} CROSS_COMPILE=${CROSS_COMPILE} INSTALL_MOD_PATH=../../.. modules_install
# Install kernel headers
- if [ "$KERNEL_HEADERS" = true ]; then
+ if [ "$KERNEL_HEADERS" = true ] ; then
make -C $R/usr/src/linux ARCH=${KERNEL_ARCH} CROSS_COMPILE=${CROSS_COMPILE} INSTALL_HDR_PATH=../.. headers_install
fi
@@ -47,7 +70,7 @@ if [ "$BUILD_KERNEL" = true ] ; then
cp $R/usr/src/linux/arch/${KERNEL_ARCH}/boot/dts/overlays/README $R/boot/firmware/overlays/
# Remove kernel sources
- if [ "$KERNEL_RMSRC" = true ]; then
+ if [ "$KERNEL_RMSRC" = true ] ; then
rm -fr $R/usr/src/linux
fi