2024年2月11日 星期日

在 archlinux 編譯特定 kernel module ( Funuv TV1520 DTV-T USB dongle )



因為 Funuv TV1520 DTV-T USB dongle使用 rtl28xxu kernel module,

但是 vendor ID 和 product ID 都沒有在module 資料內,

所以修改程式碼加上去。


之前用 AUR 中的 v4l-dvb package 修改編譯,

但是原始碼來源因為向前修改越來越複雜,

所以已將沒有繼續針對新 kernel 更新。


1.先建立一個工作目錄

#mkdir ~/build

#cd ~/build

2.下載原始碼

#pkgctl repo clone --protocol=https linux

3.加入要修改的程式碼到 PKGBUILD 的 prepare()

#cd linux

#vim PKGBUILE


prepare() {

cd $_srcname

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


….}

 

設定編譯用的CPU核心數

找到 make all 改成

make all -j[CPU核心數]

例如:

make all -j8

 

借用 archlinux 打包系統

#makepkg -C

如果要在指定地點編譯

#BUILDDIR=/dev/shm makepkg -C

執行直到卡住

4.準備編譯 module 設定

#cd src/linux-6.5.5

#make mrproper

避免錯誤 Skipping BTF generation xxx. due to unavailability of vmlinux

#cp /sys/kernel/btf/vmlinux ./

 
#zcat /proc/config.gz > .config
#make EXTRAVERSION=-arch1 modules_prepare
#cp /usr/lib/modules/6.5.5-arch1-2/build/Module.symvers ./

檢查 localversion.10-pkgrel

#uname -a

如果是6.5.5-arch-2 但是localversion.10-pkgrel 內容是 -1

把localversion.10-pkgrel內容改成-2

才不會載入module時 dmesg 中出現 version magic error

5. 編譯 module 和 壓縮

#make -j8 M=drivers/media/usb/dvb-usb-v2

壓縮 kernel module

#zstd drivers/media/usb/dvb-usb-v2/dvb-usb-rtl28xxu.ko

7.複製並更新 module 相依列表

#sudo cp drivers/media/usb/dvb-usb-v2/dvb-usb-rtl28xxu.ko.zst /lib/modules/6.5.5-arch1-2/updates/
#sudo depmod

檢查module資料

#modinfo dvb-usb-rtl28xxu

或是插入裝置後以 dmesg 檢查


參考資料:

https://wiki.archlinux.org/title/Compile_kernel_module

https://wiki.archlinux.org/title/Kernel/Arch_build_system

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

https://gitlab.archlinux.org/archlinux/packaging/packages/cuda

沒有留言:

張貼留言