| b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | #!/bin/sh | 
|  | 2 | # | 
|  | 3 | # Copyright 2003 Wichert Akkerman <wichert@wiggy.net> | 
|  | 4 | # | 
|  | 5 | # Simple script to generate a debian/ directory for a Linux kernel. | 
|  | 6 |  | 
|  | 7 | set -e | 
|  | 8 |  | 
|  | 9 | is_enabled() { | 
|  | 10 | grep -q "^$1=y" include/config/auto.conf | 
|  | 11 | } | 
|  | 12 |  | 
|  | 13 | if_enabled_echo() { | 
|  | 14 | if is_enabled "$1"; then | 
|  | 15 | echo -n "$2" | 
|  | 16 | elif [ $# -ge 3 ]; then | 
|  | 17 | echo -n "$3" | 
|  | 18 | fi | 
|  | 19 | } | 
|  | 20 |  | 
|  | 21 | set_debarch() { | 
|  | 22 | if [ -n "$KBUILD_DEBARCH" ] ; then | 
|  | 23 | debarch="$KBUILD_DEBARCH" | 
|  | 24 | return | 
|  | 25 | fi | 
|  | 26 |  | 
|  | 27 | # Attempt to find the correct Debian architecture | 
|  | 28 | case "$UTS_MACHINE" in | 
|  | 29 | i386|ia64|alpha|m68k|riscv*) | 
|  | 30 | debarch="$UTS_MACHINE" ;; | 
|  | 31 | x86_64) | 
|  | 32 | debarch=amd64 ;; | 
|  | 33 | sparc*) | 
|  | 34 | debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;; | 
|  | 35 | s390*) | 
|  | 36 | debarch=s390x ;; | 
|  | 37 | ppc*) | 
|  | 38 | if is_enabled CONFIG_64BIT; then | 
|  | 39 | debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) | 
|  | 40 | else | 
|  | 41 | debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) | 
|  | 42 | fi | 
|  | 43 | ;; | 
|  | 44 | parisc*) | 
|  | 45 | debarch=hppa ;; | 
|  | 46 | mips*) | 
|  | 47 | if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then | 
|  | 48 | debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el | 
|  | 49 | elif is_enabled CONFIG_CPU_MIPSR6; then | 
|  | 50 | debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 | 
|  | 51 | else | 
|  | 52 | debarch=mips | 
|  | 53 | fi | 
|  | 54 | ;; | 
|  | 55 | aarch64|arm64) | 
|  | 56 | debarch=arm64 ;; | 
|  | 57 | arm*) | 
|  | 58 | if is_enabled CONFIG_AEABI; then | 
|  | 59 | debarch=arm$(if_enabled_echo CONFIG_VFP hf el) | 
|  | 60 | else | 
|  | 61 | debarch=arm | 
|  | 62 | fi | 
|  | 63 | ;; | 
|  | 64 | openrisc) | 
|  | 65 | debarch=or1k ;; | 
|  | 66 | sh) | 
|  | 67 | if is_enabled CONFIG_CPU_SH3; then | 
|  | 68 | debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) | 
|  | 69 | elif is_enabled CONFIG_CPU_SH4; then | 
|  | 70 | debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) | 
|  | 71 | fi | 
|  | 72 | ;; | 
|  | 73 | esac | 
|  | 74 | if [ -z "$debarch" ]; then | 
|  | 75 | debarch=$(dpkg-architecture -qDEB_HOST_ARCH) | 
|  | 76 | echo "" >&2 | 
|  | 77 | echo "** ** **  WARNING  ** ** **" >&2 | 
|  | 78 | echo "" >&2 | 
|  | 79 | echo "Your architecture doesn't have its equivalent" >&2 | 
|  | 80 | echo "Debian userspace architecture defined!" >&2 | 
|  | 81 | echo "Falling back to the current host architecture ($debarch)." >&2 | 
|  | 82 | echo "Please add support for $UTS_MACHINE to ${0} ..." >&2 | 
|  | 83 | echo "" >&2 | 
|  | 84 | fi | 
|  | 85 | } | 
|  | 86 |  | 
|  | 87 | # Some variables and settings used throughout the script | 
|  | 88 | version=$KERNELRELEASE | 
|  | 89 | if [ -n "$KDEB_PKGVERSION" ]; then | 
|  | 90 | packageversion=$KDEB_PKGVERSION | 
|  | 91 | revision=${packageversion##*-} | 
|  | 92 | else | 
|  | 93 | revision=$(cat .version 2>/dev/null||echo 1) | 
|  | 94 | packageversion=$version-$revision | 
|  | 95 | fi | 
|  | 96 | sourcename=$KDEB_SOURCENAME | 
|  | 97 | packagename=linux-image-$version | 
|  | 98 | kernel_headers_packagename=linux-headers-$version | 
|  | 99 | dbg_packagename=$packagename-dbg | 
|  | 100 | debarch= | 
|  | 101 | set_debarch | 
|  | 102 |  | 
|  | 103 | if [ "$ARCH" = "um" ] ; then | 
|  | 104 | packagename=user-mode-linux-$version | 
|  | 105 | fi | 
|  | 106 |  | 
|  | 107 | email=${DEBEMAIL-$EMAIL} | 
|  | 108 |  | 
|  | 109 | # use email string directly if it contains <email> | 
|  | 110 | if echo $email | grep -q '<.*>'; then | 
|  | 111 | maintainer=$email | 
|  | 112 | else | 
|  | 113 | # or construct the maintainer string | 
|  | 114 | user=${KBUILD_BUILD_USER-$(id -nu)} | 
|  | 115 | name=${DEBFULLNAME-$user} | 
|  | 116 | if [ -z "$email" ]; then | 
|  | 117 | buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)} | 
|  | 118 | email="$user@$buildhost" | 
|  | 119 | fi | 
|  | 120 | maintainer="$name <$email>" | 
|  | 121 | fi | 
|  | 122 |  | 
|  | 123 | # Try to determine distribution | 
|  | 124 | if [ -n "$KDEB_CHANGELOG_DIST" ]; then | 
|  | 125 | distribution=$KDEB_CHANGELOG_DIST | 
|  | 126 | # In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog | 
|  | 127 | elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then | 
|  | 128 | : # nothing to do in this case | 
|  | 129 | else | 
|  | 130 | distribution="unstable" | 
|  | 131 | echo >&2 "Using default distribution of 'unstable' in the changelog" | 
|  | 132 | echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" | 
|  | 133 | fi | 
|  | 134 |  | 
|  | 135 | mkdir -p debian/source/ | 
|  | 136 | echo "1.0" > debian/source/format | 
|  | 137 |  | 
|  | 138 | echo $debarch > debian/arch | 
|  | 139 | extra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)" | 
|  | 140 | extra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)" | 
|  | 141 |  | 
|  | 142 | # Generate a simple changelog template | 
|  | 143 | cat <<EOF > debian/changelog | 
|  | 144 | $sourcename ($packageversion) $distribution; urgency=low | 
|  | 145 |  | 
|  | 146 | * Custom built Linux kernel. | 
|  | 147 |  | 
|  | 148 | -- $maintainer  $(date -R) | 
|  | 149 | EOF | 
|  | 150 |  | 
|  | 151 | # Generate copyright file | 
|  | 152 | cat <<EOF > debian/copyright | 
|  | 153 | This is a packacked upstream version of the Linux kernel. | 
|  | 154 |  | 
|  | 155 | The sources may be found at most Linux archive sites, including: | 
|  | 156 | https://www.kernel.org/pub/linux/kernel | 
|  | 157 |  | 
|  | 158 | Copyright: 1991 - 2018 Linus Torvalds and others. | 
|  | 159 |  | 
|  | 160 | The git repository for mainline kernel development is at: | 
|  | 161 | git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git | 
|  | 162 |  | 
|  | 163 | This program is free software; you can redistribute it and/or modify | 
|  | 164 | it under the terms of the GNU General Public License as published by | 
|  | 165 | the Free Software Foundation; version 2 dated June, 1991. | 
|  | 166 |  | 
|  | 167 | On Debian GNU/Linux systems, the complete text of the GNU General Public | 
|  | 168 | License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. | 
|  | 169 | EOF | 
|  | 170 |  | 
|  | 171 | # Generate a control file | 
|  | 172 | cat <<EOF > debian/control | 
|  | 173 | Source: $sourcename | 
|  | 174 | Section: kernel | 
|  | 175 | Priority: optional | 
|  | 176 | Maintainer: $maintainer | 
|  | 177 | Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends | 
|  | 178 | Homepage: http://www.kernel.org/ | 
|  | 179 |  | 
|  | 180 | Package: $packagename | 
|  | 181 | Architecture: $debarch | 
|  | 182 | Description: Linux kernel, version $version | 
|  | 183 | This package contains the Linux kernel, modules and corresponding other | 
|  | 184 | files, version: $version. | 
|  | 185 |  | 
|  | 186 | Package: $kernel_headers_packagename | 
|  | 187 | Architecture: $debarch | 
|  | 188 | Description: Linux kernel headers for $version on $debarch | 
|  | 189 | This package provides kernel header files for $version on $debarch | 
|  | 190 | . | 
|  | 191 | This is useful for people who need to build external modules | 
|  | 192 |  | 
|  | 193 | Package: linux-libc-dev | 
|  | 194 | Section: devel | 
|  | 195 | Provides: linux-kernel-headers | 
|  | 196 | Architecture: $debarch | 
|  | 197 | Description: Linux support headers for userspace development | 
|  | 198 | This package provides userspaces headers from the Linux kernel.  These headers | 
|  | 199 | are used by the installed headers for GNU glibc and other system libraries. | 
|  | 200 | Multi-Arch: same | 
|  | 201 |  | 
|  | 202 | Package: $dbg_packagename | 
|  | 203 | Section: debug | 
|  | 204 | Architecture: $debarch | 
|  | 205 | Description: Linux kernel debugging symbols for $version | 
|  | 206 | This package will come in handy if you need to debug the kernel. It provides | 
|  | 207 | all the necessary debug symbols for the kernel and its modules. | 
|  | 208 | EOF | 
|  | 209 |  | 
|  | 210 | cat <<EOF > debian/rules | 
|  | 211 | #!$(command -v $MAKE) -f | 
|  | 212 |  | 
|  | 213 | srctree ?= . | 
|  | 214 |  | 
|  | 215 | build: | 
|  | 216 | \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ | 
|  | 217 | KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile | 
|  | 218 |  | 
|  | 219 | binary-arch: | 
|  | 220 | \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ | 
|  | 221 | KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg | 
|  | 222 |  | 
|  | 223 | clean: | 
|  | 224 | rm -rf debian/*tmp debian/files | 
|  | 225 | \$(MAKE) clean | 
|  | 226 |  | 
|  | 227 | binary: binary-arch | 
|  | 228 | EOF | 
|  | 229 | chmod +x debian/rules | 
|  | 230 |  | 
|  | 231 | exit 0 |