- 2020/06/11 [修正] Makefileのカーネル指定がDKMSから受け取れるよう書き換え
久しぶりにMax M4をLinuxで使ったら、カーネルアップデートでドライバが消えて録画失敗して悲しい気持ちになったのでDKMSで自動的にインストールされるようにするためのメモ。
どなたかが手順を検証してもっと包括的なDTV環境の構築手順を作ったりして頂けると嬉しいです。
参考
- AUR (en) – dddvb-dkms
- モジュールの指定方法はこのパッケージの内容から丸パクリさせて頂きました
確認環境
- Ubuntu 20.04
- dddvb v0.9.37
手順
バージョンが変わっても大幅な変更がなければ、バージョン番号だけ適宜書き替えて同じ手順が使えるかもしれない。
必要パッケージのインストール
1 | $ sudo apt install dkms build-essential git unzip |
ソースとdkms.confの準備
作業用ディレクトリを作成。
1 2 | $ mkdir -p ~ /work/dddvb $ cd ~ /work/dddvb |
ドライバのソースファイルを展開。
1 2 3 | $ wget https: //github .com /DigitalDevices/dddvb/archive/0 .9.37.zip $ unzip 0.9.37.zip $ cd dddvb-0.9.37 |
dkms.confで指定するモジュールを確認するため、いったんmakeで生成する。
1 | $ make |
dkms.confを生成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $ cat << 'EOF' | tee dkms.conf PACKAGE_NAME=dddvb PACKAGE_VERSION=0.9.37 AUTOINSTALL= "yes" CHECK_MODULE_VERSION= "no" MAKE= "'make' all KVER=${kernelver}" CLEAN= "make clean" EOF $ let "module_number=0" || true $ for file in $( find ./ - type f -name "*.ko" ); do MODULE_LOCATION=$( dirname $ file | cut -d\/ -f 2-) echo "BUILT_MODULE_NAME[$module_number]=\"$(basename $file .ko)\"" >> dkms.conf echo "BUILT_MODULE_LOCATION[$module_number]=\"$MODULE_LOCATION\"" >> dkms.conf echo "DEST_MODULE_LOCATION[$module_number]=\"/extramodules/$pkgname\"" >> dkms.conf let "module_number=${module_number}+1" || true done |
確認用に生成したモジュールなどを削除する。
1 | $ make clean |
この時点で生成されたdkms.confを確認すると以下のようになっているはず。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | $ cat dkms.conf PACKAGE_NAME=dddvb PACKAGE_VERSION=0.9.37 AUTOINSTALL= "yes" CHECK_MODULE_VERSION= "no" MAKE= "'make' all KVER=${kernelver}" CLEAN= "make clean" BUILT_MODULE_NAME[0]= "ddbridge" BUILT_MODULE_LOCATION[0]= "ddbridge" DEST_MODULE_LOCATION[0]= "/extramodules/" BUILT_MODULE_NAME[1]= "octonet" BUILT_MODULE_LOCATION[1]= "ddbridge" DEST_MODULE_LOCATION[1]= "/extramodules/" BUILT_MODULE_NAME[2]= "lnbp21" BUILT_MODULE_LOCATION[2]= "frontends" DEST_MODULE_LOCATION[2]= "/extramodules/" BUILT_MODULE_NAME[3]= "cxd2099" BUILT_MODULE_LOCATION[3]= "frontends" DEST_MODULE_LOCATION[3]= "/extramodules/" BUILT_MODULE_NAME[4]= "tda18271c2dd" BUILT_MODULE_LOCATION[4]= "frontends" DEST_MODULE_LOCATION[4]= "/extramodules/" BUILT_MODULE_NAME[5]= "stv6111" BUILT_MODULE_LOCATION[5]= "frontends" DEST_MODULE_LOCATION[5]= "/extramodules/" BUILT_MODULE_NAME[6]= "stv6110x" BUILT_MODULE_LOCATION[6]= "frontends" DEST_MODULE_LOCATION[6]= "/extramodules/" BUILT_MODULE_NAME[7]= "cxd2843" BUILT_MODULE_LOCATION[7]= "frontends" DEST_MODULE_LOCATION[7]= "/extramodules/" BUILT_MODULE_NAME[8]= "drxk" BUILT_MODULE_LOCATION[8]= "frontends" DEST_MODULE_LOCATION[8]= "/extramodules/" BUILT_MODULE_NAME[9]= "lnbh25" BUILT_MODULE_LOCATION[9]= "frontends" DEST_MODULE_LOCATION[9]= "/extramodules/" BUILT_MODULE_NAME[10]= "mxl5xx" BUILT_MODULE_LOCATION[10]= "frontends" DEST_MODULE_LOCATION[10]= "/extramodules/" BUILT_MODULE_NAME[11]= "tda18212dd" BUILT_MODULE_LOCATION[11]= "frontends" DEST_MODULE_LOCATION[11]= "/extramodules/" BUILT_MODULE_NAME[12]= "stv0910" BUILT_MODULE_LOCATION[12]= "frontends" DEST_MODULE_LOCATION[12]= "/extramodules/" BUILT_MODULE_NAME[13]= "stv0367dd" BUILT_MODULE_LOCATION[13]= "frontends" DEST_MODULE_LOCATION[13]= "/extramodules/" BUILT_MODULE_NAME[14]= "stv090x" BUILT_MODULE_LOCATION[14]= "frontends" DEST_MODULE_LOCATION[14]= "/extramodules/" BUILT_MODULE_NAME[15]= "dvb-core" BUILT_MODULE_LOCATION[15]= "dvb-core" DEST_MODULE_LOCATION[15]= "/extramodules/" |
Makefile内のカーネル指定部分を書き換えて、ビルド時のカーネルでなくDKMSから指定されたカーネルが使用されるよう変更。
1 | $ sed -i -e 's/shell uname -r/KVER/g' Makefile |
ソースなどをDKMSで使用するディレクトリへコピー。
ディレクトリ名を 「[パッケージ名]-[バージョン番号]」 のようにする必要がある。
1 2 | $ cd .. $ sudo cp -r dddvb-0.9.37 /usr/src/ |
インストールとドライバの設定
DKMSへの登録とインストール。
1 2 3 4 5 6 7 8 9 10 | # DKMSに登録 $ sudo dkms add -m dddvb - v 0.9.37 # 現在のカーネルへドライバをインストール $ sudo dkms install -m dddvb - v 0.9.37 # DKMSによるインストール状態を確認 $ dkms status dddvb, 0.9.37, 5.4.0-33-generic, x86_64: installed |
まだ実施していなければ、OS標準のドライバでなく追加したものを使うよう設定。
1 2 3 | $ sudo mkdir -p /etc/depmod.d $ echo 'search extra updates built-in' | sudo tee /etc/depmod.d/extra.conf $ sudo depmod -a |
以降は新しいカーネル(とカーネルヘッダ)がインストールされた際にドライバもインストールされるはず。
dkms.confはドライバが同じバージョンであれば動的に生成せずとも同じものを使いまわせそう。
(おまけ) ドライバのアンインストール
allオプションで全てのカーネルからアンインストールされる。
1 | $ sudo dkms remove -m dddvb -v 0.9.37 --all |
コメント