commit b5093bd9ec68f7d4de13c80751d066160a1bd498 Author: Wang Zhiyu Date: Sun Jul 5 20:58:16 2026 +0800 feat: add linux-openstick diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ada7254 --- /dev/null +++ b/LICENSE @@ -0,0 +1,18 @@ +MIT License + +Copyright (c) 2026 pluv + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2fa1db --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# alpine-ports + +个人为 Alpine Linux 维护的一些软件包移植配置 + +- linux-openstick: 为骁龙 410 (MSM8916) 设备移植的 Alpine Linux 内核软件包构建, 是 [OpenStick](https://github.com/OpenStick) 项目的非官方 Alpine Linux 适配, 支持 armhf 和 arm64 + +如何使用: 见 [文档](https://wiki.alpinelinux.org/wiki/APKBUILD_Reference) diff --git a/linux-openstick/APKBUILD b/linux-openstick/APKBUILD new file mode 100644 index 0000000..6f508fb --- /dev/null +++ b/linux-openstick/APKBUILD @@ -0,0 +1,277 @@ +# Maintainer: Wang Zhiyu +# Based on https://git.alpinelinux.org/aports/tree/main/linux-rpi/APKBUILD +# This package will provide linux-openstick & linux-openstick-dev QwQ + +maintainer="Wang Zhiyu " +pkgname=linux-openstick +pkgver=5.15.0 +_kernver=${pkgver%.*} +pkgrel=0 +pkgdesc="Linux kernel for OpenStick Project" +url="https://github.com/OpenStick/linux" +depends="initramfs-generator linux-firmware-brcm" +_depends_dev="perl gmp-dev elfutils-dev bash mpc1-dev mpfr-dev" +makedepends="$_depends_dev gcc>=13.1.1_git20230603 sed installkernel bc linux-headers linux-firmware-any + bison flex openssl-dev>3 findutils xz mawk +" +options="!strip !check !checksum" +_openstick_repo="https://github.com/OpenStick/linux.git" +_linux_repo="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git" +# https://github.com/OpenStick/linux/archive/refs/tags/v5.15-msm8916.tar.gz is about 189.12M +source="https://github.com/OpenStick/linux/archive/refs/tags/v5.15-msm8916.tar.gz +common-changes.config" +arch="armhf aarch64" +license="GPL-2.0-only" +builddir="$srcdir"/linux-$_kernver-msm8916 +_flavors="openstick" + +for _f in $_flavors; do + if [ "linux-$_f" != "$pkgname" ]; then + subpackages="$subpackages linux-$_f::$CBUILD_ARCH" + fi + subpackages="$subpackages linux-$_f-dev:_dev:$CBUILD_ARCH" +done + +case "$CARCH" in + aarch64) _carch="arm64" ;; + arm*) _carch="arm" ;; +esac + +prepare() { + default_prepare + + # remove localversion from patch if any + rm -f localversion* + + local flavor= + for flavor in $_flavors; do + local _builddir="$srcdir"/build-$flavor.$CARCH + mkdir -p "$_builddir" + echo "-$pkgrel-$flavor" > "$_builddir"/localversion-alpine + _genconfig $flavor + make -C "$builddir" \ + O="$_builddir" \ + ARCH="$_carch" \ + olddefconfig + _verifyconfig $flavor + done +} + +_genconfig() { + # arch/arm/configs/msm8916_defconfig.part told me to do so + cat "$builddir"/arch/arm64/configs/msm8916_defconfig "$builddir"/arch/arm/configs/msm8916_defconfig.part > "$builddir"/arch/arm/configs/msm8916_defconfig + local flavor=$1 defconfig= + local _builddir="$srcdir"/build-$flavor.$CARCH + local defconfig= + case "$CARCH" in + armhf) defconfig=msm8916_defconfig;; + aarch64) defconfig=msm8916_defconfig;; + *) die "Unknown CARCH: $CARCH" ;; + esac + + cp "$builddir"/arch/$_carch/configs/$defconfig \ + "$_builddir"/.config + + while read line; do + # skip comments + case "$line" in + "#"*) continue;; + esac + local option=${line%%=*} str= + local cmd=$(echo $line | cut -d= -f2) + case "$cmd" in + y) cmd="enable";; + n) cmd="disable";; + m) cmd="module";; + '"'*) cmd="set-str"; str="${line#*=}";; + [0-9]*) cmd="set-val"; str="${line#*=}";; + *) die "Command $cmd not accepted" ;; + esac + msg "[$flavor] $cmd: $option $str" + "$srcdir"/linux-$_kernver/scripts/config \ + --file "$_builddir"/.config \ + --$cmd "$option" "${str//\"/}" + done < "$srcdir"/common-changes.config +} + +# verify if options are set to correct value +_verifyconfig() { + local flavor=$1 + local _builddir="$srcdir"/build-$flavor.$CARCH + while read line; do + [ ${line:0:1} = "#" ] && continue + local option=${line%%=*} str= invert= + local cmd=$(echo $line | cut -d= -f2) + case "$cmd" in + enable) str="$option=y" ;; + disable) str="$option"; invert="-v" ;; + module) str="$option=m" ;; + set-val) str="$option=${line##*=}" ;; + set-str) str=${line##*=} + str="$option=\"${str//\"/}\"" ;; + esac + grep -q $invert "^$str" "$_builddir"/.config || \ + die "Config: $option not properly set!" + done < "$srcdir"/common-changes.config +} + +build() { + unset LDFLAGS + # for some reason these sometimes leak into the kernel build, + # -Werror=format-security breaks some stuff + unset CFLAGS CPPFLAGS CXXFLAGS + for i in $_flavors; do + cd "$srcdir"/build-$i.$CARCH + local _kver=$(make kernelversion) + if [ "$_kver" != "$pkgver" ]; then + error "Version in Makefile ($_kver) does not correspond with pkgver ($pkgver)" + return 1 + fi + make ARCH="$_carch" CC="${CC:-gcc}" \ + AWK=mawk \ + KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-Alpine" + done +} + +_package() { + local _buildflavor="$1" _outdir="$2" + local _builddir="$srcdir"/build-$_buildflavor.$CARCH + + cd "$_builddir" + local _abi_release="$(make -s kernelrelease)" + mkdir -p "$_outdir"/boot "$_outdir"/lib/modules + + local _install + case "$CARCH" in + arm*) + _install="zinstall dtbs_install" + ;; + aarch64) + _install="install dtbs_install" + ;; + *) + _install=install + ;; + esac + + # modules_install seems to regenerate a defect Modules.symvers. Work + # around it by backing it up and restore it after modules_install + cp Module.symvers Module.symvers.backup + + local INSTALL_DTBS_PATH="$_outdir"/boot + make modules_install $_install \ + ARCH="$_carch" \ + INSTALL_MOD_PATH="$_outdir" \ + INSTALL_PATH="$_outdir"/boot \ + INSTALL_DTBS_PATH="$INSTALL_DTBS_PATH" + cp Module.symvers.backup Module.symvers + + rm -f "$_outdir"/lib/modules/$_abi_release/build \ + "$_outdir"/lib/modules/$_abi_release/source + rm -rf "$_outdir"/lib/firmware + + install -D -m644 include/config/kernel.release \ + "$_outdir"/usr/share/kernel/$_buildflavor/kernel.release + + ln -sf /boot/vmlinuz-"$_buildflavor" \ + "$_outdir"/lib/modules/"$_abi_release"/vmlinuz + + # allow the initramfs generators to know the package name the kernel came from + echo "${subpkgname:-$pkgname}" > "$_outdir"/lib/modules/$_abi_release/pkgname + + if [ "$CARCH" = "aarch64" ]; then + mv -f "$INSTALL_DTBS_PATH"/broadcom/*.dtb \ + "$INSTALL_DTBS_PATH" + rmdir "$INSTALL_DTBS_PATH"/broadcom + fi +} + +# main flavor installs in $pkgdir +package() { + case "$CARCH" in + armv7) + provides="linux=$pkgver-r$pkgrel" # for backward compatibility + replaces="linux" # for backward compatibility + ;; + aarch64) + provides="linux=$pkgver-r$pkgrel" # for backward compatibility + replaces="linux" # for backward compatibility + ;; + esac + _package openstick "$pkgdir" +} + + +_dev() { + local _flavor=$(echo $subpkgname | sed -E 's/(^linux-|-dev$)//g') + local _builddir="$srcdir"/build-$_flavor.$CARCH + + cd "$_builddir" + local _abi_release="$(make -s kernelrelease)" + # copy the only the parts that we really need for build 3rd party + # kernel modules and install those as /usr/src/linux-headers, + # simlar to what ubuntu does + # + # this way you dont need to install the 300-400 kernel sources to + # build a tiny kernel module + # + pkgdesc="Headers and script for third party modules for $_flavor kernel" + depends="$_depends_dev" + + # handle backward compatibility with legacy flavors + case "$_flavor" in + openstick) + case "$CARCH" in + armv7) + provides="linux-dev=$pkgver-r$pkgrel" + replaces="linux-dev" + ;; + aarch64) + provides="linux-dev=$pkgver-r$pkgrel" + replaces="linux-dev" + ;; + esac + ;; + *) die "Unknown flavor: $flavor" ;; + esac + + local dir="$subpkgdir"/usr/src/linux-headers-$_abi_release + + # first we import config, run prepare to set up for building + # external modules, and create the scripts + mkdir -p "$dir" + cp "$_builddir"/.config "$dir"/.config + echo "-$pkgrel-$_flavor" > "$dir"/localversion-alpine + + make -j1 -C "$builddir" ARCH="$_carch" O="$dir" \ + syncconfig prepare modules_prepare scripts + + # remove the stuff that points to real sources. we want 3rd party + # modules to believe this is the soruces + rm "$dir"/Makefile "$dir"/source + + # copy the needed stuff from real sources + # + # this is taken from ubuntu kernel build script + # http://kernel.ubuntu.com/git/ubuntu/ubuntu-zesty.git/tree/debian/rules.d/3-binary-indep.mk + cd "$builddir" + find . -path './include/*' -prune \ + -o -path './scripts/*' -prune -o -type f \ + \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \ + -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) \ + -print | cpio -pdm "$dir" + + cp -a scripts include "$dir" + find $(find arch -name include -type d -print) -type f \ + | cpio -pdm "$dir" + + install -Dm644 "$_builddir"/Module.symvers \ + "$dir"/Module.symvers + + mkdir -p "$subpkgdir"/lib/modules/$_abi_release + ln -sf /usr/src/linux-headers-$_abi_release \ + "$subpkgdir"/lib/modules/$_abi_release/build +} + +sha512sums="734d958bb9fa64e667e089aec0066a58526ae38fbf6fbd223a7bce746fe3ce7443ffe087f365a44f6892479186f2c0eb33abacd38eb7b0b8d40949602812e441 v5.15-msm8916.tar.gz +cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e common-changes.config" # common-changes.config is empty, make sure checksums are currected after any modification! diff --git a/linux-openstick/common-changes.config b/linux-openstick/common-changes.config new file mode 100644 index 0000000..e69de29