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


….}

借用 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



沒有留言:

張貼留言