2024年9月15日 星期日

Archlinux 打包 Linux kernel 中特定 module 的 package

繼半手動編譯 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

沒有留言:

張貼留言