因為 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 linux3.加入要修改的程式碼到 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
….}
借用 archlinux 打包系統
#makepkg -C
執行直到卡住
4.準備編譯 module 設定
#cd src/linux-6.5.5
#make mrproper
#zcat /proc/config.gz > .config
#make EXTRAVERSION=-arch1 modules_prepare
#cp /usr/lib/modules/6.5.5-arch1-1/build/Module.symvers ./
5. 編譯 module 和 壓縮
#make -j8 M=drivers/media/usb/dvb-usb-v2#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-1/updates/
#sudo depmod
參考資料:
https://wiki.archlinux.org/title/Compile_kernel_module
https://wiki.archlinux.org/title/Kernel/Arch_build_system
沒有留言:
張貼留言