繼半手動編譯 funUV dvb dongle USB電視棒 Linux modules後,
搞定打包Archlinux package 檔案的 PKGBUILD
以後只要以
#uname -a
查 linux kernel 的版本,
配合替換目標版本 linux PKGBUILD 檔中 checksum
https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/commits/main
就能完成FunUV dvb dongle 的 archlinux package。
如果 uname -a 是
Linux Arch64rexctUEFI 6.10.9-arch1-2
修改
pkgver=6.10.9.arch1
pkgrel=2
sha256sums=(...) 和 b2sums=(...) 前4行都替換成 linux 的 PKGBUILD 內容。
PKGBUILD 內容
####
pkgname=funuv-tv
pkgver=6.10.9.arch1
pkgrel=2
pkgdesc='FunUV DTV USB Dongle Driver'
url='https://github.com/archlinux/linux'
arch=(x86_64)
license=(GPL2)
makedepends=(
bc
cpio
gettext
libelf
pahole
perl
python
tar
xz
# htmldocs
graphviz
imagemagick
python-sphinx
texlive-latexextra
)
options=('!strip')
#install=funuv_dtv.install
_srcname=linux-${pkgver%.*}
_srctag=v${pkgver%.*}-${pkgver##*.}
source=(
https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/${_srcname}.tar.{xz,sign}
$url/releases/download/$_srctag/linux-$_srctag.patch.zst{,.sig}
)
validpgpkeys=(
ABAF11C65A2970B130ABE3C479BE3E4300411886 # Linus Torvalds
647F28654894E3BD457199BE38DBBDC86092693E # Greg Kroah-Hartman
83BC8889351B5DEBBB68416EB8AC08600F108CDF # Jan Alexander Steffens (heftig)
)
# https://www.kernel.org/pub/linux/kernel/v6.x/sha256sums.asc
sha256sums=('a4489b70e0a7c2dc8f501b9cd7fc76989be2febb5519e163ecf816064f2f6858'
'SKIP'
'889e187d3236cb3db98735003b92191add4dc86a53aa6b8c9db4f95473bc4c69'
'SKIP')
b2sums=('97152136f0bed53850aba45e55e2ab0d017699257e54da19f62a79c7b28c68c16cd56295602d2a631ad9332b64ff573dc7217bf51355624463ff7cfb7f6d0b7d'
'SKIP'
'dba9a43cd8b332f64523ddcd7ff776e72782782ee02fa7310b36ec86d1f44077c1ad3fc6a5611f0bd65b6284e0e9c7694390e8b95e41470bdf2e98be014fdc92'
'SKIP')
export KBUILD_BUILD_HOST=archlinux
export KBUILD_BUILD_USER=$pkgbase
export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})"
prepare() {
cd $_srcname
#TV1520 DTV USB dongle
sed -e 's.\/\* Vendor IDs \*\/.\/\* Vendor IDs \*\/\n#define USB_VID_FUNUV_TV_TV1520 0x282d.g' -e 's.\/\* Product IDs \*\/.\/\* Product IDs \*\/\n#define USB_PID_FUNUV_TV_TV1520 0x0608.g' -i include/media/dvb-usb-ids.h
sed 's.RTL2832U devices: \*\/.RTL2832U devices: \*\/\n { DVB_USB_DEVICE(USB_VID_FUNUV_TV_TV1520, USB_PID_FUNUV_TV_TV1520,\&rtl28xxu_props, "Funuv TV TV1520", NULL) },.g' -i drivers/media/usb/dvb-usb-v2/rtl28xxu.c
echo "Setting version..."
echo "-$pkgrel" > localversion.10-pkgrel
# echo "${pkgbase#linux}" > localversion.20-pkgname
local src
for src in "${source[@]}"; do
src="${src%%::*}"
src="${src##*/}"
src="${src%.zst}"
[[ $src = *.patch ]] || continue
echo "Applying patch $src..."
patch -Np1 < "../$src"
done
echo "Setting config..."
#cp ../config .config
zcat /proc/config.gz > .config
make olddefconfig
diff -u ../config .config || :
make -s kernelrelease > version
echo "Prepared $pkgbase version $(<version)"
make EXTRAVERSION=-arch1 modules_prepare
cp /usr/lib/modules/`uname -r`/build/Module.symvers ./
cp /sys/kernel/btf/vmlinux ./
}
build() {
cd $_srcname
make -j8 M=drivers/media/usb/dvb-usb-v2
zstd drivers/media/usb/dvb-usb-v2/dvb-usb-rtl28xxu.ko
}
package() {
kgdesc="The $pkgdesc modules"
depends=(
coreutils
initramfs
kmod
)
optdepends=(
'linux-firmware: firmware images needed for some devices'
)
provides=(
)
replaces=(
)
cd $_srcname
local modulesdir="$pkgdir/usr/lib/modules/$(<version)"
echo "Installing modules..."
_extradir="/usr/lib/modules/$(</usr/src/linux/version)/updates"
mkdir -p ${pkgdir}${_extradir}
install -Dt "${pkgdir}${_extradir}" -m644 drivers/media/usb/dvb-usb-v2/dvb-usb-rtl28xxu.ko.zst
}
# vim:set ts=8 sts=2 sw=2 et:
####
參考資料:
check sum
https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/commits/main
Build modules
--- 2.1 Command Syntax
https://www.kernel.org/doc/Documentation/kbuild/modules.txt
bbswitch 的 PKGBUILD 檔案
https://gitlab.archlinux.org/archlinux/packaging/packages/bbswitch/-/blob/main/PKGBUILD?ref_type=heads
cuda package 的 cuda.install
沒有留言:
張貼留言