1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0 3 4# 5# buildtar 0.0.5 6# 7# (C) 2004-2006 by Jan-Benedict Glaw <jbglaw@lug-owl.de> 8# 9# This script is used to compile a tarball from the currently 10# prepared kernel. Based upon the builddeb script from 11# Wichert Akkerman <wichert@wiggy.net>. 12# 13 14set -e 15 16# 17# Some variables and settings used throughout the script 18# 19tmpdir="${objtree}/tar-install" 20tarball="${objtree}/linux-${KERNELRELEASE}-${ARCH}.tar" 21 22 23# 24# Figure out how to compress, if requested at all 25# 26case "${1}" in 27 dir-pkg|tar-pkg) 28 opts= 29 ;; 30 targz-pkg) 31 opts="-I ${KGZIP}" 32 tarball=${tarball}.gz 33 ;; 34 tarbz2-pkg) 35 opts="-I ${KBZIP2}" 36 tarball=${tarball}.bz2 37 ;; 38 tarxz-pkg) 39 opts="-I ${XZ}" 40 tarball=${tarball}.xz 41 ;; 42 tarzst-pkg) 43 opts="-I ${ZSTD}" 44 tarball=${tarball}.zst 45 ;; 46 *) 47 echo "Unknown tarball target \"${1}\" requested, please add it to ${0}." >&2 48 exit 1 49 ;; 50esac 51 52 53# 54# Clean-up and re-create the temporary directory 55# 56rm -rf -- "${tmpdir}" 57mkdir -p -- "${tmpdir}/boot" 58dirs=boot 59 60 61# 62# Try to install dtbs 63# 64if grep -q '^CONFIG_OF_EARLY_FLATTREE=y' include/config/auto.conf; then 65 # Only some architectures with OF support have this target 66 if [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then 67 $MAKE ARCH="${ARCH}" -f ${srctree}/Makefile INSTALL_DTBS_PATH="${tmpdir}/boot/dtbs/${KERNELRELEASE}" dtbs_install 68 fi 69fi 70 71 72# 73# Try to install modules 74# 75if grep -q '^CONFIG_MODULES=y' include/config/auto.conf; then 76 make ARCH="${ARCH}" -f ${srctree}/Makefile INSTALL_MOD_PATH="${tmpdir}" modules_install 77 dirs="$dirs lib" 78fi 79 80 81# 82# Install basic kernel files 83# 84cp -v -- "${objtree}/System.map" "${tmpdir}/boot/System.map-${KERNELRELEASE}" 85cp -v -- "${KCONFIG_CONFIG}" "${tmpdir}/boot/config-${KERNELRELEASE}" 86cp -v -- "${objtree}/vmlinux" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}" 87 88 89# 90# Install arch-specific kernel image(s) 91# 92case "${ARCH}" in 93 x86|i386|x86_64) 94 [ -f "${objtree}/arch/x86/boot/bzImage" ] && cp -v -- "${objtree}/arch/x86/boot/bzImage" "${tmpdir}/boot/vmlinuz-${KERNELRELEASE}" 95 ;; 96 alpha) 97 [ -f "${objtree}/arch/alpha/boot/vmlinux.gz" ] && cp -v -- "${objtree}/arch/alpha/boot/vmlinux.gz" "${tmpdir}/boot/vmlinuz-${KERNELRELEASE}" 98 ;; 99 parisc*) 100 [ -f "${KBUILD_IMAGE}" ] && cp -v -- "${KBUILD_IMAGE}" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}" 101 [ -f "${objtree}/lifimage" ] && cp -v -- "${objtree}/lifimage" "${tmpdir}/boot/lifimage-${KERNELRELEASE}" 102 ;; 103 mips) 104 if [ -f "${objtree}/arch/mips/boot/compressed/vmlinux.bin" ]; then 105 cp -v -- "${objtree}/arch/mips/boot/compressed/vmlinux.bin" "${tmpdir}/boot/vmlinuz-${KERNELRELEASE}" 106 elif [ -f "${objtree}/arch/mips/boot/compressed/vmlinux.ecoff" ]; then 107 cp -v -- "${objtree}/arch/mips/boot/compressed/vmlinux.ecoff" "${tmpdir}/boot/vmlinuz-${KERNELRELEASE}" 108 elif [ -f "${objtree}/arch/mips/boot/compressed/vmlinux.srec" ]; then 109 cp -v -- "${objtree}/arch/mips/boot/compressed/vmlinux.srec" "${tmpdir}/boot/vmlinuz-${KERNELRELEASE}" 110 elif [ -f "${objtree}/vmlinux.32" ]; then 111 cp -v -- "${objtree}/vmlinux.32" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}" 112 elif [ -f "${objtree}/vmlinux.64" ]; then 113 cp -v -- "${objtree}/vmlinux.64" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}" 114 elif [ -f "${objtree}/arch/mips/boot/vmlinux.bin" ]; then 115 cp -v -- "${objtree}/arch/mips/boot/vmlinux.bin" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}" 116 elif [ -f "${objtree}/arch/mips/boot/vmlinux.ecoff" ]; then 117 cp -v -- "${objtree}/arch/mips/boot/vmlinux.ecoff" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}" 118 elif [ -f "${objtree}/arch/mips/boot/vmlinux.srec" ]; then 119 cp -v -- "${objtree}/arch/mips/boot/vmlinux.srec" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}" 120 elif [ -f "${objtree}/vmlinux" ]; then 121 cp -v -- "${objtree}/vmlinux" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}" 122 fi 123 ;; 124 arm64) 125 for i in Image.bz2 Image.gz Image.lz4 Image.lzma Image.lzo vmlinuz.efi ; do 126 if [ -f "${objtree}/arch/arm64/boot/${i}" ] ; then 127 cp -v -- "${objtree}/arch/arm64/boot/${i}" "${tmpdir}/boot/vmlinuz-${KERNELRELEASE}" 128 break 129 fi 130 done 131 ;; 132 riscv) 133 for i in Image.bz2 Image.gz Image; do 134 if [ -f "${objtree}/arch/riscv/boot/${i}" ] ; then 135 cp -v -- "${objtree}/arch/riscv/boot/${i}" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}" 136 break 137 fi 138 done 139 ;; 140 *) 141 [ -f "${KBUILD_IMAGE}" ] && cp -v -- "${KBUILD_IMAGE}" "${tmpdir}/boot/vmlinux-kbuild-${KERNELRELEASE}" 142 echo "" >&2 143 echo '** ** ** WARNING ** ** **' >&2 144 echo "" >&2 145 echo "Your architecture did not define any architecture-dependent files" >&2 146 echo "to be placed into the tarball. Please add those to ${0} ..." >&2 147 echo "" >&2 148 sleep 5 149 ;; 150esac 151 152if [ "${1}" = dir-pkg ]; then 153 echo "Kernel tree successfully created in $tmpdir" 154 exit 0 155fi 156 157# 158# Create the tarball 159# 160if tar --owner=root --group=root --help >/dev/null 2>&1; then 161 opts="$opts --owner=root --group=root" 162fi 163 164tar cf $tarball -C $tmpdir $opts $dirs 165 166echo "Tarball successfully created in $tarball" 167 168exit 0 169