Skip to content

Instantly share code, notes, and snippets.

@py7hon
Created August 10, 2020 03:46
Show Gist options
  • Save py7hon/2e8d9de2a3cc6e47d72bee8c07585eee to your computer and use it in GitHub Desktop.
Save py7hon/2e8d9de2a3cc6e47d72bee8c07585eee to your computer and use it in GitHub Desktop.
linux-libre
# Maintainer : Daniel Bermond <[email protected]>
# Contributor: Jonas Heinrich <[email protected]>
# Contributor: André Silva <[email protected]>
# Contributor: Márcio Silva <[email protected]>
# Contributor (Parabola): Nicolás Reynolds <[email protected]>
# Contributor (Parabola): Sorin-Mihai Vârgolici <[email protected]>
# Contributor (Parabola): Michał Masłowski <[email protected]>
# Contributor (Parabola): Luke Shumaker <[email protected]>
# Contributor (Parabola): Luke R. <[email protected]>
# Contributor (Poi Linux): Iqbal Rifai <[email protected]>
# Based on linux package
_replacesarchkernel=('linux%') # '%' gets replaced with kernel suffix
_replacesoldkernels=() # '%' gets replaced with kernel suffix
_replacesoldmodules=() # '%' gets replaced with kernel suffix
pkgbase=linux-libre
pkgver=5.7.8
pkgrel=1
pkgdesc='Linux-libre'
rcnver=5.7.8
rcnrel=armv7-x13.1
url='https://linux-libre.fsfla.org/'
arch=(i686 x86_64 armv7h)
license=(GPL2)
makedepends=(
bc kmod libelf pahole
xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick
)
makedepends_armv7h=(uboot-tools vboot-utils dtc) # required by linux-libre-chromebook
options=('!strip')
_srcname=linux-5.7
source=(
"https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign}
"https://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu/patch-${_srcname##*-}-gnu-$pkgver-gnu.xz"{,.sign}
"https://repo.parabola.nu/other/linux-libre/logos/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm}{,.sig}
config.i686 config.x86_64 config.armv7h # the main kernel config files
linux-armv7h.preset # armv7h preset file for mkinitcpio ramdisk
"kernel"{.its,.keyblock,_data_key.vbprivk} # files for signing Chromebooks kernels
# maintain the TTY over USB disconnects
# http://www.coreboot.org/EHCI_Gadget_Debug
0001-usb-serial-gadget-no-TTY-hangup-on-USB-disconnect-WI.patch
# fix Atmel maXTouch touchscreen support
# https://labs.parabola.nu/issues/877
# http://www.fsfla.org/pipermail/linux-libre/2015-November/003202.html
0002-fix-Atmel-maXTouch-touchscreen-support.patch
# extracted patches from Arch Linux kernel sources
0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
0002-PCI-EDR-Log-only-ACPI_NOTIFY_DISCONNECT_RECOVER-even.patch
0003-Revert-ath9k-Fix-general-protection-fault-in-ath9k_h.patch
0004-iwlwifi-Make-some-Killer-Wireless-AC-1550-cards-work.patch
sphinx-workaround.patch
)
source_armv7h=(
# RCN patch (CM3 firmware deblobbed and bloatware removed)
"https://repo.parabola.nu/other/rcn-libre/patches/$rcnver/rcn-libre-$rcnver-$rcnrel.patch"{,.sig}
# Arch Linux ARM patches
0001-ARM-atags-add-support-for-Marvell-s-u-boot.patch
0002-ARM-atags-fdt-retrieve-MAC-addresses-from-Marvell-bo.patch
0003-SMILE-Plug-device-tree-file.patch
0004-fix-mvsdio-eMMC-timing.patch
0005-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch
0006-set-default-cubietruck-led-triggers.patch
0007-exynos4412-odroid-set-higher-minimum-buck2-regulator.patch
0008-ARM-dove-enable-ethernet-on-D3Plug.patch
0009-USB-Armory-MkII-support.patch
# ChromiumOS patches
0001-CHROMIUM-block-partitions-efi-Add-support-for-IGNORE.patch
)
validpgpkeys=(
'474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva
'6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P.
)
sha512sums=('4805b2956f628c6581e86d67b1996b5b404e7f4b5d29ecfe708ddca45344571d75018364d8f0049835d4286ca1ba591307be263536d1bed0ea006696a8b8ac73'
'SKIP'
'e4bb6a8e3342df1d4d87d916aba771c4561f8f27b70f7b8903eedcd96611403b1a168846a9e7658086a6e9d6ede0280459c04cd927765fb03ab4909857ffd9a4'
'SKIP'
'13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3'
'SKIP'
'7a3716bfe3b9f546da309c7492f3e08f8f506813afeb1c737a474c83313d5c313cf4582b65215c2cfce3b74d9d1021c96e8badafe8f6e5b01fe28d2b5c61ae78'
'SKIP'
'267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1'
'SKIP'
'76442fcb30849f0550a842c4bfce2f28b035a7a1f6f89cd0e3462631041de7074e6dee1122f614d6d408a25ad8d12990ede2234dfd0f530b6368e0290aecba1b'
'd7ae2e05f7b5a7edc396e2664f7d26b04bf8b5383680e8f49d3f5f239a879d46cd3b98cdbfffb6cee2bec9c208e82fae4167aead7579c2d86e6aa3b81c360bde'
'f7e47966b8732fa66fa939d174e7bbc677e70bd5f52322f9adbd163ac9532769f6eb65391a9321fbe826cd5533b80bade664c2301bad27955563bddf2b097595'
'53103bf55b957b657039510527df0df01279dec59cda115a4d6454e4135025d4546167fa30bdc99107f232561c1e096d8328609ab5a876cf7017176f92ad3e0b'
'167bc73c6c1c63931806238905dc44c7d87c5a5c0f6293159f2133dfe717fb44081018d810675716d1605ec7dff5e8333b87b19e09e2de21d0448e447437873b'
'bb6718984a7357c9b00c37e4788480e5b8b75018c172ecc1441bc3fc5d2d42444eb5d8c7f9d2e3a7d6fed6d03acb565e3c0559486e494c40a7fe6bd0570c9ede'
'143dea30c6da00e504c99984a98a0eb2411f558fcdd9dfa7f607d6c14e9e7dffff9cb00121d9317044b07e3e210808286598c785ee854084b993ec9cb14d8232'
'02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af'
'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168'
'4325085f4cb5d9f3bcfcc2cc98903422a378fe62edbdfe3610e19a4b6180819a9191a023fc969201977695bef80a8a30ca27056e97100b88075ce4e22f6b15b3'
'23b048b48da0297d1ad2397745a065f65910f6a8ac0f8fe4a6e29fb507c016cee696644da178feb0835bd6ebc909d99b9d88ce9733bed21e1efb273c440a31a7'
'1f377c5445e561da723998d92498d304025350789ef3ba8c302938ebb74452cfd22e846fa904311acb52c3143ed31192ff19e9e518eb1a15e82db1e78f8c3869'
'a4b36ca251d8e44781a43c8aff96a0b2e90bd9539bade47d79012bcec489dee49ab8cb42bf5706a9bd6e600396628adc212bc1376f79061100c87bc272630e1b'
'98e97155f86bbe837d43f27ec1018b5b6fdc6c372d6f7f2a0fe29da117d53979d9f9c262f886850d92002898682781029b80d4ee923633fc068f979e6c8254be')
sha512sums_armv7h=('8eb83d14aba5c43c88e39a72b230233131d898e052b968495e25d3e5d8605ff78da5c6f726f28d3ffd2d48717db0a062660fdd40bdd9b1205d00718814c7068b'
'SKIP'
'a3b23a92a6f9ee4c6200244e99b62e77af1f18cc9f9714f671c7e754502d0341a93b0461a4a5562329dc51822ae06ff713208ec7092d480492163862a455377c'
'1919ef4738ce25f405e5c68b13233ce19d821ebb65fcd4f8f55a268a2f25029b8a8c0f7ac1cb2ecb9026fc43a4851eca182001baa2dc32653ec34dbb13106a72'
'd49d464bac530ff6e51ff117dcef046e45440aba6020f6c100958b664417f0a91cd045d3b132d86e8b74928c1a72fcec1ee41c6da8b432f6525a35a6a9c2cad9'
'99c6694d78d3232df078fbe8ec8948c278aea94c1784e27d052d92a3bf23757c4341be3477ef42741bba0f25d11e520def01cdd0cdd24ef9e0005aefff6a90f6'
'd9a22997da50c735090c3b48828cae45ee7e4dac8f54acfa723c8200e94103440e1b30059126c95aea307aa0c344340cc0ce72bd7b0982016707676d2dc0bb63'
'cd35bafeb918a14ffdbf87bc0c056a9e0ec4887827c32dd9889dbdda5c366cbcf0e753f223098c0cc4f7f58234dd6311dd06dbbebca54e86af6d02f96a7bda98'
'0e9200c19666cf9e8f13242ff1d76bc43953f98e3a2dd015c7242d780c856af39c0c24bfe8643ab0492ab4422cc72428c724b429899280ff348c8a5cdb918808'
'22a02ac89eb579b7a1cc581944b16ce946d0a8969418f5162ef9b6bb32b20e545998c74a6f11757ad6514c77d6f825cf2116695bcb97a7f68331ddd8b1fe4080'
'627ececc2ae6d3c50f29ab26e1e74a34c494f520341958d8c1196e52fdeb0cdcb606ebb1bc0be6324b2ca0f64c75fc9707c1825e50c24369c4241da5022e1675'
'7bda2ad7eb81af802873cb6764cb9c675ec50ceeb5adc487881ebc8c316cf55f836e56c2cc67494a2920e86494861db2eb924b7ff9b151ae3c5b0e493c373bf9')
_replacesarchkernel=("${_replacesarchkernel[@]/\%/${pkgbase#linux-libre}}")
_replacesoldkernels=("${_replacesoldkernels[@]/\%/${pkgbase#linux-libre}}")
_replacesoldmodules=("${_replacesoldmodules[@]/\%/${pkgbase#linux-libre}}")
case "$CARCH" in
i686|x86_64) KARCH=x86;;
armv7h) KARCH=arm;;
esac
export KBUILD_BUILD_HOST=poilinux
export KBUILD_BUILD_USER=$pkgbase
export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})"
prepare() {
cd $_srcname
if [ "${_srcname##*-}" != "$pkgver" ]; then
echo "Applying upstream patch..."
patch -Np1 < "../patch-${_srcname##*-}-gnu-$pkgver-gnu"
fi
echo "Adding freedo as boot logo..."
install -m644 -t drivers/video/logo \
../logo_linux_{clut224.ppm,vga16.ppm,mono.pbm}
echo "Setting version..."
scripts/setlocalversion --save-scmversion
echo "-$pkgrel" > localversion.10-pkgrel
echo "${pkgbase#linux-libre}" > localversion.20-pkgname
if [ "$CARCH" = "armv7h" ]; then
local src_armv7h
for src_armv7h in "${source_armv7h[@]}"; do
src_armv7h="${src_armv7h%%::*}"
src_armv7h="${src_armv7h##*/}"
[[ $src_armv7h = *.patch ]] || continue
echo "Applying patch $src_armv7h..."
patch -Np1 < "../$src_armv7h"
done
fi
local src
for src in "${source[@]}"; do
src="${src%%::*}"
src="${src##*/}"
[[ $src = *.patch ]] || continue
echo "Applying patch $src..."
patch -Np1 < "../$src"
done
echo "Setting config..."
cp ../config.$CARCH .config
make olddefconfig
make -s kernelrelease > version
echo "Prepared $pkgbase version $(<version)"
}
build() {
cd $_srcname
make all
make htmldocs
}
_package() {
pkgdesc="The $pkgdesc kernel and modules"
depends=(coreutils kmod initramfs)
optdepends=('crda: to set the correct wireless channels of your country'
'linux-libre-firmware: firmware images needed for some devices')
provides=(LINUX-ABI_VERSION="$pkgver" VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE)
cd $_srcname
local kernver="$(<version)"
local modulesdir="$pkgdir/usr/lib/modules/$kernver"
echo "Installing boot image..."
# systemd expects to find the kernel here to allow hibernation
# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
install -Dm644 "$(make -s image_name)" "$modulesdir/vmlinuz"
# Used by mkinitcpio to name the kernel
echo "$pkgbase" | install -Dm644 /dev/stdin "$modulesdir/pkgbase"
echo "Installing modules..."
make INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 modules_install
# remove build and source links
rm "$modulesdir"/{source,build}
if [ "$CARCH" = "armv7h" ]; then
echo "Installing device tree binaries..."
make INSTALL_DTBS_PATH="$pkgdir/boot/dtbs/$pkgbase" dtbs_install
# armv7h presets only work with ALL_kver=$kernver
backup=("etc/mkinitcpio.d/$pkgbase.preset")
echo "Installing mkinitcpio preset..."
sed "s|%PKGBASE%|$pkgbase|g;s|%KERNVER%|$kernver|g" ../linux-armv7h.preset \
| install -Dm644 /dev/stdin "$pkgdir/etc/mkinitcpio.d/$pkgbase.preset"
fi
}
_package-headers() {
pkgdesc="Headers and scripts for building modules for the $pkgdesc kernel"
cd $_srcname
local builddir="$pkgdir/usr/lib/modules/$(<version)/build"
echo "Installing build files..."
install -Dt "$builddir" -m644 .config Makefile Module.symvers System.map \
localversion.* version vmlinux
install -Dt "$builddir/kernel" -m644 kernel/Makefile
install -Dt "$builddir/arch/$KARCH" -m644 arch/$KARCH/Makefile
if [[ $CARCH = i686 ]]; then
install -Dt "$builddir/arch/$KARCH" -m644 arch/$KARCH/Makefile_32.cpu
fi
cp -t "$builddir" -a scripts
# add objtool for external module building and enabled VALIDATION_STACK option
if [[ -e tools/objtool/objtool ]]; then
install -Dt "$builddir/tools/objtool" tools/objtool/objtool
fi
# add xfs and shmem for aufs building
mkdir -p "$builddir"/{fs/xfs,mm}
echo "Installing headers..."
cp -t "$builddir" -a include
cp -t "$builddir/arch/$KARCH" -a arch/$KARCH/include
install -Dt "$builddir/arch/$KARCH/kernel" -m644 arch/$KARCH/kernel/asm-offsets.s
install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h
install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h
# http://bugs.archlinux.org/task/13146
install -Dt "$builddir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h
# http://bugs.archlinux.org/task/20402
install -Dt "$builddir/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h
install -Dt "$builddir/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h
install -Dt "$builddir/drivers/media/tuners" -m644 drivers/media/tuners/*.h
# from linux-armv7
if [ "$CARCH" = "armv7h" ]; then
for i in dove exynos omap2; do
mkdir -p "$builddir/arch/$KARCH/mach-$i"
cp -t "$builddir/arch/$KARCH/mach-$i/" -a arch/$KARCH/mach-$i/include
done
for i in omap orion samsung versatile; do
mkdir -p "$builddir/arch/$KARCH/plat-$i"
cp -t "$builddir/arch/$KARCH/plat-$i/" -a arch/$KARCH/plat-$i/include
done
fi
echo "Installing KConfig files..."
find . -name 'Kconfig*' -exec install -Dm644 {} "$builddir/{}" \;
echo "Removing unneeded architectures..."
local arch
for arch in "$builddir"/arch/*/; do
[[ $arch = */$KARCH/ ]] && continue
echo "Removing $(basename "$arch")"
rm -r "$arch"
done
echo "Removing documentation..."
rm -r "$builddir/Documentation"
echo "Removing broken symlinks..."
find -L "$builddir" -type l -printf 'Removing %P\n' -delete
echo "Removing loose objects..."
find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete
echo "Stripping build tools..."
local file
while read -rd '' file; do
case "$(file -bi "$file")" in
application/x-sharedlib\;*) # Libraries (.so)
strip -v $STRIP_SHARED "$file" ;;
application/x-archive\;*) # Libraries (.a)
strip -v $STRIP_STATIC "$file" ;;
application/x-executable\;*) # Binaries
strip -v $STRIP_BINARIES "$file" ;;
application/x-pie-executable\;*) # Relocatable binaries
strip -v $STRIP_SHARED "$file" ;;
esac
done < <(find "$builddir" -type f -perm -u+x ! -name vmlinux -print0)
echo "Stripping vmlinux..."
strip -v $STRIP_STATIC "$builddir/vmlinux"
echo "Adding symlink..."
mkdir -p "$pkgdir/usr/src"
ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase"
}
_package-docs() {
pkgdesc="Documentation for the $pkgdesc kernel"
cd $_srcname
local builddir="$pkgdir/usr/lib/modules/$(<version)/build"
echo "Installing documentation..."
local src dst
while read -rd '' src; do
dst="${src#Documentation/}"
dst="$builddir/Documentation/${dst#output/}"
install -Dm644 "$src" "$dst"
done < <(find Documentation -name '.*' -prune -o ! -type d -print0)
echo "Adding symlink..."
mkdir -p "$pkgdir/usr/share/doc"
ln -sr "$builddir/Documentation" "$pkgdir/usr/share/doc/$pkgbase"
}
_package-chromebook() {
pkgdesc="$pkgdesc kernel sign for Veyron Chromebooks"
depends=(linux-libre=$pkgver)
provides=("${_replacesarchkernel[@]/%/-armv7-chromebook=$pkgver}")
conflicts=("${_replacesarchkernel[@]/%/-armv7-chromebook}" "${_replacesoldkernels[@]/%/-armv7-chromebook}")
replaces=("${_replacesarchkernel[@]/%/-armv7-chromebook}" "${_replacesoldkernels[@]/%/-armv7-chromebook}")
install=$pkgbase-chromebook.install
cd $_srcname
cp ../kernel.its .
mkimage -D "-I dts -O dtb -p 2048" -f kernel.its kernel.signed
dd if=/dev/zero of=bootloader.bin bs=512 count=1
echo 'console=tty0 init=/sbin/init root=PARTUUID=%U/PARTNROFF=1 rootwait rw noinitrd' > cmdline
echo "Creating kernel sign..."
vbutil_kernel \
--pack vmlinux.kpart \
--version 1 \
--vmlinuz kernel.signed \
--arch arm \
--keyblock ../kernel.keyblock \
--signprivate ../kernel_data_key.vbprivk \
--config cmdline \
--bootloader bootloader.bin
echo "Installing kernel sign..."
mkdir -p "$pkgdir/boot"
cp vmlinux.kpart "$pkgdir/boot"
}
pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
[[ $CARCH = armv7h ]] && pkgname+=("$pkgbase-chromebook")
for _p in "${pkgname[@]}"; do
eval "package_$_p() {
$(declare -f "_package${_p#$pkgbase}")
_package${_p#$pkgbase}
}"
done
# vim:set ts=8 sts=2 sw=2 et:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment