linux-ampere-fourier: bootstrap PKGBUILD (CoolPi GenBook RK3588) #15
@@ -0,0 +1,150 @@
|
|||||||
|
# Maintainer: Markus Fritsche <mfritsche@reauktion.de>
|
||||||
|
#
|
||||||
|
# linux-ampere-fourier — CoolPi GenBook (RK3588) kernel from the
|
||||||
|
# marfrit-iterated linux-rk3588-marfrit branch (pinned commit).
|
||||||
|
#
|
||||||
|
# Baseline carries the marfrit RK3588 delta on top of mainline v7.0-rc3:
|
||||||
|
# 10 Markus commits (board DTS + Kconfig + suspend/wakeup + bluetooth)
|
||||||
|
# plus 8 upstream cherry-picks (Shawn Lin's pcie3 phy series, Collabora
|
||||||
|
# clk/dts/dw-dp fixes, Sebastian Reichel's Rock 5 ITX hdmirx). The 6
|
||||||
|
# board-relevant patches are scope-tagged in marfrit/kernel-agent under
|
||||||
|
# patches/{soc,module,board}/ — see fleet/ampere.yaml manifest.
|
||||||
|
#
|
||||||
|
# Coexists with the user's other extlinux labels in
|
||||||
|
# /boot/firmware/extlinux/extlinux.conf; never edits them. Adds a
|
||||||
|
# managed `linux-ampere-fourier` label (the user sets `default` manually
|
||||||
|
# after verifying boot).
|
||||||
|
#
|
||||||
|
# Bootloader path: /boot/firmware/ (vfat on mmcblk0p1). Kernel +
|
||||||
|
# initramfs + DTB land there directly. Reverting = boot a different
|
||||||
|
# extlinux label (e.g. arch_mainline, ubuntu_mainline).
|
||||||
|
|
||||||
|
pkgbase=linux-ampere-fourier
|
||||||
|
pkgname=("$pkgbase" "$pkgbase-headers")
|
||||||
|
pkgver=7.0rc3.kafr1
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc='CoolPi GenBook kernel (linux-rk3588-marfrit @ f8f3ad9 + RK3588 cherry-picks + GenBook DTS)'
|
||||||
|
arch=(aarch64)
|
||||||
|
url='https://git.reauktion.de/marfrit/kernel-agent'
|
||||||
|
license=(GPL-2.0-only)
|
||||||
|
makedepends=(
|
||||||
|
bc cpio gettext kmod libelf pahole perl python tar xz
|
||||||
|
ccache
|
||||||
|
uboot-tools dtc
|
||||||
|
)
|
||||||
|
options=('!strip')
|
||||||
|
|
||||||
|
# Pinned tip of marfrit/linux-rk3588-marfrit. 18 commits ahead of v7.0-rc3:
|
||||||
|
# 10 by Markus Fritsche (board/SoC/module/Bluetooth/Kconfig)
|
||||||
|
# 4 by Shawn Lin (phy: rockchip-snps-pcie3 stability series)
|
||||||
|
# 2 by Cristian Ciocaltea (clk + dw-dp bridge — Collabora track)
|
||||||
|
# 1 by Sebastian Reichel (Rock 5 ITX hdmirx — not used by ampere)
|
||||||
|
# 1 by Pedro Alves (CLK_SET_RATE_PARENT VOP2 fix)
|
||||||
|
_commit=f8f3ad934433bd7e1207d9b0b37e817a692b7ee9
|
||||||
|
|
||||||
|
source=(
|
||||||
|
# Local tarball produced by ./prebuild.sh from a local clone of the
|
||||||
|
# linux-rk3588-marfrit branch. Not fetched from a URL because the
|
||||||
|
# boltzmann working clone is shallow (gitea push rejects) and the
|
||||||
|
# 260MB tarball isn't committed to marfrit-packages. Run prebuild.sh
|
||||||
|
# before makepkg; see README in this dir.
|
||||||
|
"linux-rk3588-marfrit-${_commit:0:7}.tar.gz"
|
||||||
|
'config' # snapshot of running ampere kernel's /proc/config.gz (7.0.0-rc3-ARCH+)
|
||||||
|
'linux-ampere-fourier.preset'
|
||||||
|
'extlinux-add.hook'
|
||||||
|
'extlinux-add.sh'
|
||||||
|
)
|
||||||
|
sha256sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP')
|
||||||
|
|
||||||
|
# kernelrelease becomes <Makefile-VERSION>.<PATCH>.<SUBLEVEL><EXTRAVERSION><LOCALVERSION>
|
||||||
|
# i.e. 7.0.0-rc3-ampere-fourier. Module dir + EXTRAVERSION suffix keep
|
||||||
|
# this disjoint from the hand-managed /boot/firmware/Image-7.0.0-rc3-ARCH+
|
||||||
|
# that's currently on the host.
|
||||||
|
_kernver=7.0.0-rc3-ampere-fourier
|
||||||
|
_srcdir=linux-rk3588-marfrit
|
||||||
|
|
||||||
|
prepare() {
|
||||||
|
cd "${_srcdir}"
|
||||||
|
|
||||||
|
echo ":: writing config"
|
||||||
|
cp "${srcdir}/config" .config
|
||||||
|
|
||||||
|
# LOCALVERSION suffix to differentiate from upstream-stock builds.
|
||||||
|
scripts/config --set-str LOCALVERSION "-ampere-fourier"
|
||||||
|
scripts/config -d LOCALVERSION_AUTO
|
||||||
|
|
||||||
|
echo ":: olddefconfig (accept new symbols sensibly)"
|
||||||
|
make olddefconfig
|
||||||
|
|
||||||
|
make -s kernelrelease > version
|
||||||
|
echo ":: kernel release: $(<version)"
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cd "${_srcdir}"
|
||||||
|
unset LDFLAGS
|
||||||
|
# Native build only — no distcc per kernel-agent policy
|
||||||
|
# (feedback_kernel_agent_no_distcc.md). ccache stays.
|
||||||
|
export CC="ccache gcc"
|
||||||
|
export HOSTCC="ccache gcc"
|
||||||
|
make ${MAKEFLAGS:--j$(nproc)} Image modules dtbs
|
||||||
|
}
|
||||||
|
|
||||||
|
_package() {
|
||||||
|
pkgdesc='CoolPi GenBook overclocked kernel (ampere-fourier baseline)'
|
||||||
|
depends=(coreutils kmod mkinitcpio uboot-tools)
|
||||||
|
optdepends=('linux-firmware: firmware images needed for some devices')
|
||||||
|
backup=("etc/mkinitcpio.d/${pkgbase}.preset")
|
||||||
|
|
||||||
|
cd "${_srcdir}"
|
||||||
|
local _kver
|
||||||
|
_kver=$(<version)
|
||||||
|
|
||||||
|
# Kernel image into the vfat firmware partition (where extlinux looks).
|
||||||
|
install -Dm644 arch/arm64/boot/Image \
|
||||||
|
"${pkgdir}/boot/firmware/Image-ampere-fourier"
|
||||||
|
|
||||||
|
# Single DTB for the GenBook target — install directly under
|
||||||
|
# /boot/firmware/ (no subdir, matches existing host convention).
|
||||||
|
install -Dm644 arch/arm64/boot/dts/rockchip/rk3588-coolpi-cm5-genbook.dtb \
|
||||||
|
"${pkgdir}/boot/firmware/rk3588-coolpi-cm5-genbook.dtb-ampere-fourier"
|
||||||
|
|
||||||
|
ZSTD_CLEVEL=19 make INSTALL_MOD_PATH="${pkgdir}/usr" \
|
||||||
|
INSTALL_MOD_STRIP=1 modules_install
|
||||||
|
rm -f "${pkgdir}/usr/lib/modules/${_kver}/"{source,build}
|
||||||
|
|
||||||
|
install -Dm644 "${srcdir}/${pkgbase}.preset" \
|
||||||
|
"${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
|
||||||
|
|
||||||
|
install -Dm755 "${srcdir}/extlinux-add.hook" \
|
||||||
|
"${pkgdir}/usr/share/libalpm/hooks/95-${pkgbase}-extlinux.hook"
|
||||||
|
install -Dm755 "${srcdir}/extlinux-add.sh" \
|
||||||
|
"${pkgdir}/usr/share/libalpm/scripts/${pkgbase}-extlinux"
|
||||||
|
}
|
||||||
|
|
||||||
|
_package-headers() {
|
||||||
|
pkgdesc='Headers and scripts for the linux-ampere-fourier kernel'
|
||||||
|
depends=(pahole)
|
||||||
|
|
||||||
|
cd "${_srcdir}"
|
||||||
|
local _kver _builddir
|
||||||
|
_kver=$(<version)
|
||||||
|
_builddir="${pkgdir}/usr/lib/modules/${_kver}/build"
|
||||||
|
|
||||||
|
install -Dt "${_builddir}" -m644 .config Makefile Module.symvers System.map vmlinux version
|
||||||
|
install -Dt "${_builddir}/kernel" -m644 kernel/Makefile
|
||||||
|
|
||||||
|
cp -a scripts "${_builddir}"
|
||||||
|
install -Dt "${_builddir}/arch/arm64" -m644 arch/arm64/Makefile
|
||||||
|
cp -a arch/arm64/include "${_builddir}/arch/arm64/"
|
||||||
|
cp -a include "${_builddir}/"
|
||||||
|
|
||||||
|
find . -name 'Kbuild' -exec install -Dm644 {} "${_builddir}/{}" \;
|
||||||
|
find . -name 'Kconfig*' -exec install -Dm644 {} "${_builddir}/{}" \;
|
||||||
|
|
||||||
|
install -d "${pkgdir}/usr/src"
|
||||||
|
ln -sr "${_builddir}" "${pkgdir}/usr/src/${pkgbase}"
|
||||||
|
}
|
||||||
|
|
||||||
|
eval "package_${pkgbase}() { _package; }"
|
||||||
|
eval "package_${pkgbase}-headers() { _package-headers; }"
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
# linux-ampere-fourier
|
||||||
|
|
||||||
|
Kernel package for ampere (CoolPi GenBook RK3588). Baselined on
|
||||||
|
`marfrit/linux-rk3588-marfrit @ f8f3ad9` (mainline v7.0-rc3 + 18
|
||||||
|
RK3588-fleet-relevant commits — 10 Markus, 8 upstream cherry-picks).
|
||||||
|
|
||||||
|
See `marfrit/kernel-agent/fleet/ampere.yaml` for the manifest +
|
||||||
|
`marfrit/kernel-agent/patches/{soc,module,board}/...` for the
|
||||||
|
scope-tagged board patches in the baseline.
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
The kernel source isn't on Gitea — boltzmann's working clone is
|
||||||
|
shallow (Gitea refuses shallow pushes) and a 260MB tarball doesn't
|
||||||
|
belong in `marfrit-packages`. Stage the source locally from a
|
||||||
|
clone of the `linux-rk3588-marfrit` branch:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd arch/linux-ampere-fourier
|
||||||
|
./prebuild.sh # produces linux-rk3588-marfrit-f8f3ad9.tar.gz
|
||||||
|
makepkg -s --noconfirm # native aarch64 build; no distcc
|
||||||
|
```
|
||||||
|
|
||||||
|
`prebuild.sh` looks at `$LINUX_RK3588_MARFRIT_TREE` (default
|
||||||
|
`~/src/linux-rockchip`) for the kernel working tree. The tip commit
|
||||||
|
must be reachable in that clone — fetch the `linux-rk3588-marfrit`
|
||||||
|
branch first if you cloned from elsewhere.
|
||||||
|
|
||||||
|
## Build hosts
|
||||||
|
|
||||||
|
Native aarch64 only (per kernel-agent `feedback_kernel_agent_no_distcc.md`).
|
||||||
|
Either ampere itself (8C/2.4GHz, 32GB, native arch) or boltzmann
|
||||||
|
(Rock 5 ITX+, same uarch). fermi as fallback.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Adds a managed label to `/boot/firmware/extlinux/extlinux.conf`:
|
||||||
|
|
||||||
|
```
|
||||||
|
label linux-ampere-fourier
|
||||||
|
menu label linux-ampere-fourier (managed)
|
||||||
|
kernel /Image-ampere-fourier
|
||||||
|
initrd /initramfs-ampere-fourier.img
|
||||||
|
fdt /rk3588-coolpi-cm5-genbook.dtb-ampere-fourier
|
||||||
|
append <inherited from arch_mainline>
|
||||||
|
```
|
||||||
|
|
||||||
|
Default label is NOT changed. After verifying boot of the managed
|
||||||
|
label at the u-boot menu, you flip `default` manually. Reverting =
|
||||||
|
boot a different label (e.g. `arch_mainline`, `ubuntu_mainline`).
|
||||||
|
|
||||||
|
## Boot path
|
||||||
|
|
||||||
|
ampere uses `/boot/firmware/` (vfat on mmcblk0p1, ~1G), distinct
|
||||||
|
from fresnel's `/boot/` on root partition. The PKGBUILD installs
|
||||||
|
Image, initramfs, and DTB directly under `/boot/firmware/`. No
|
||||||
|
DTB subdir — single board target.
|
||||||
|
|
||||||
|
## Open follow-ups (per kernel-agent issue #6)
|
||||||
|
|
||||||
|
- **Ask 2** (VP9 enablement on RK3588 rkvdec) — not addressed in this
|
||||||
|
iteration. Separate session.
|
||||||
|
- **Ask 3** (AV1 decoder integration) — backend libva work, not kernel.
|
||||||
|
- Hosting the source tarball publicly so `prebuild.sh` isn't needed —
|
||||||
|
candidate: Gitea release asset, or `packages.reauktion.de/sources/`.
|
||||||
|
- Splitting the 12 non-board cherry-pick commits in the baseline
|
||||||
|
(4 Shawn Lin phy, 2 Cristian Ciocaltea, etc.) into scope-tagged
|
||||||
|
patches in kernel-agent — currently they ride along inside the
|
||||||
|
pinned baseline rather than being explicit `includes:` in the
|
||||||
|
manifest.
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
|||||||
|
[Trigger]
|
||||||
|
Operation = Install
|
||||||
|
Operation = Upgrade
|
||||||
|
Operation = Remove
|
||||||
|
Type = Path
|
||||||
|
Target = boot/firmware/Image-ampere-fourier
|
||||||
|
Target = boot/firmware/rk3588-coolpi-cm5-genbook.dtb-ampere-fourier
|
||||||
|
Target = boot/firmware/initramfs-ampere-fourier.img
|
||||||
|
|
||||||
|
[Action]
|
||||||
|
Description = Updating extlinux entry for linux-ampere-fourier
|
||||||
|
When = PostTransaction
|
||||||
|
Exec = /usr/share/libalpm/scripts/linux-ampere-fourier-extlinux
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Add / update / remove the linux-ampere-fourier entry in
|
||||||
|
# /boot/firmware/extlinux/extlinux.conf. Idempotent. Coexists with
|
||||||
|
# the hand-managed labels in that file; never edits them. Default
|
||||||
|
# label is NOT touched — user picks at u-boot menu.
|
||||||
|
#
|
||||||
|
# ampere boots from a vfat partition (mmcblk0p1) mounted at
|
||||||
|
# /boot/firmware/, distinct from fresnel's /boot/ on root.
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
CONF="/boot/firmware/extlinux/extlinux.conf"
|
||||||
|
TAG_BEGIN="# >>> linux-ampere-fourier (managed) >>>"
|
||||||
|
TAG_END="# <<< linux-ampere-fourier (managed) <<<"
|
||||||
|
|
||||||
|
# Copy APPEND from the user's `arch_mainline` label so the managed
|
||||||
|
# entry inherits the same root= and console= settings the host's
|
||||||
|
# bootloader already trusts. Falls back to a CoolPi GenBook default
|
||||||
|
# if no arch_mainline label exists (first-time install on a fresh
|
||||||
|
# bootloader config).
|
||||||
|
EXISTING_APPEND=$(awk '
|
||||||
|
/^[[:space:]]*label[[:space:]]+arch_mainline[[:space:]]*$/ { found=1; next }
|
||||||
|
found && /^[[:space:]]*append[[:space:]]/ {
|
||||||
|
sub(/^[[:space:]]*append[[:space:]]+/, "")
|
||||||
|
print
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
/^[[:space:]]*label[[:space:]]/ { found=0 }
|
||||||
|
' "$CONF" 2>/dev/null || true)
|
||||||
|
|
||||||
|
APPEND="${EXISTING_APPEND:-root=LABEL=arch rw rootwait rootfstype=btrfs rootflags=subvol=@,ssd,discard=async console=ttyS2,1500000 console=tty1 consoleblank=0 loglevel=7 cma=256M coherent_pool=2M}"
|
||||||
|
|
||||||
|
ENTRY=$(cat <<EOF
|
||||||
|
${TAG_BEGIN}
|
||||||
|
label linux-ampere-fourier
|
||||||
|
menu label linux-ampere-fourier (managed)
|
||||||
|
kernel /Image-ampere-fourier
|
||||||
|
initrd /initramfs-ampere-fourier.img
|
||||||
|
fdt /rk3588-coolpi-cm5-genbook.dtb-ampere-fourier
|
||||||
|
append ${APPEND}
|
||||||
|
${TAG_END}
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
|
||||||
|
# Strip any prior managed block, then append fresh
|
||||||
|
TMP=$(mktemp)
|
||||||
|
awk -v b="$TAG_BEGIN" -v e="$TAG_END" '
|
||||||
|
$0==b{skip=1; next}
|
||||||
|
$0==e{skip=0; next}
|
||||||
|
!skip{print}
|
||||||
|
' "$CONF" > "$TMP"
|
||||||
|
|
||||||
|
# Post-Remove: kernel files absent → don't re-add the entry
|
||||||
|
if [ -f "/boot/firmware/Image-ampere-fourier" ] \
|
||||||
|
&& [ -f "/boot/firmware/rk3588-coolpi-cm5-genbook.dtb-ampere-fourier" ]; then
|
||||||
|
printf '%s\n' "$ENTRY" >> "$TMP"
|
||||||
|
echo "linux-ampere-fourier: extlinux entry updated"
|
||||||
|
else
|
||||||
|
echo "linux-ampere-fourier: kernel files absent, entry removed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mv "$TMP" "$CONF"
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# mkinitcpio preset for linux-ampere-fourier
|
||||||
|
#
|
||||||
|
# ampere boots from /boot/firmware/ (vfat partition on mmcblk0p1). The
|
||||||
|
# initramfs lands there too so extlinux can pick it up. Only one PRESET
|
||||||
|
# because /boot/firmware is ~1G total — no room for a fallback image
|
||||||
|
# alongside the primary.
|
||||||
|
|
||||||
|
ALL_kver="/boot/firmware/Image-ampere-fourier"
|
||||||
|
ALL_microcode=()
|
||||||
|
|
||||||
|
PRESETS=('default')
|
||||||
|
|
||||||
|
default_image="/boot/firmware/initramfs-ampere-fourier.img"
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# prebuild — stage the kernel source tarball this PKGBUILD expects.
|
||||||
|
#
|
||||||
|
# linux-ampere-fourier's source is a snapshot of marfrit/linux-rk3588-marfrit
|
||||||
|
# @ f8f3ad9 (260MB), too big to commit to marfrit-packages and currently
|
||||||
|
# unpushable to Gitea (boltzmann's working clone is shallow; gitea push
|
||||||
|
# refuses shallow updates). Hosting the tarball outside Gitea would need
|
||||||
|
# infrastructure setup that's not in scope for the first iteration.
|
||||||
|
#
|
||||||
|
# So: produce the tarball locally from the kernel working tree just
|
||||||
|
# before makepkg runs. Idempotent — if an existing tarball matches the
|
||||||
|
# expected sha256 we skip the archive step.
|
||||||
|
#
|
||||||
|
# Run from this directory: cd arch/linux-ampere-fourier && ./prebuild.sh
|
||||||
|
# Override the kernel-tree location: LINUX_RK3588_MARFRIT_TREE=/path ./prebuild.sh
|
||||||
|
#
|
||||||
|
# Default tree location matches the boltzmann/ampere convention from
|
||||||
|
# kernel-agent issue #6: $HOME/src/linux-rockchip.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
TREE="${LINUX_RK3588_MARFRIT_TREE:-${HOME}/src/linux-rockchip}"
|
||||||
|
COMMIT=f8f3ad934433bd7e1207d9b0b37e817a692b7ee9
|
||||||
|
SHA256_EXPECTED=b4eca11e883fe6f7f306d8751c3efa3afed9cc3465c74a3320de1b7204f5f330
|
||||||
|
|
||||||
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
OUTPUT="${HERE}/linux-rk3588-marfrit-${COMMIT:0:7}.tar.gz"
|
||||||
|
|
||||||
|
if [ -f "$OUTPUT" ]; then
|
||||||
|
have=$(sha256sum "$OUTPUT" | cut -d' ' -f1)
|
||||||
|
if [ "$have" = "$SHA256_EXPECTED" ]; then
|
||||||
|
echo "prebuild: $OUTPUT already exists with correct sha256"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "prebuild: existing $OUTPUT sha mismatch (have=$have, want=$SHA256_EXPECTED) — regenerating" >&2
|
||||||
|
rm -f "$OUTPUT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "$TREE/.git" ]; then
|
||||||
|
echo "prebuild: kernel tree not at $TREE" >&2
|
||||||
|
echo " set LINUX_RK3588_MARFRIT_TREE=/path/to/linux-rockchip and retry" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$TREE"
|
||||||
|
|
||||||
|
if ! git cat-file -e "$COMMIT" 2>/dev/null; then
|
||||||
|
echo "prebuild: commit $COMMIT not found in $TREE" >&2
|
||||||
|
echo " fetch the linux-rk3588-marfrit branch first:" >&2
|
||||||
|
echo " git fetch <remote> linux-rk3588-marfrit" >&2
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "prebuild: generating archive from $TREE @ $COMMIT..."
|
||||||
|
git archive --format=tar.gz --prefix=linux-rk3588-marfrit/ "$COMMIT" -o "$OUTPUT"
|
||||||
|
|
||||||
|
# git archive emits a deterministic tar stream but gzip compression may
|
||||||
|
# vary by version. The sha256 check is informational; warn-don't-fail.
|
||||||
|
have=$(sha256sum "$OUTPUT" | cut -d' ' -f1)
|
||||||
|
if [ "$have" != "$SHA256_EXPECTED" ]; then
|
||||||
|
echo "prebuild: WARNING $OUTPUT sha=$have (canonical=$SHA256_EXPECTED)" >&2
|
||||||
|
echo " probably a gzip-version difference; tar payload should be identical" >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "prebuild: wrote $OUTPUT ($(du -h "$OUTPUT" | cut -f1), sha=$have)"
|
||||||
Reference in New Issue
Block a user