Ubuntu20.04でddbridge(dddvb)をDKMSからインストールする

  • 2020/06/11 [修正] Makefileのカーネル指定がDKMSから受け取れるよう書き換え

 久しぶりにMax M4をLinuxで使ったら、カーネルアップデートでドライバが消えて録画失敗して悲しい気持ちになったのでDKMSで自動的にインストールされるようにするためのメモ。
 どなたかが手順を検証してもっと包括的なDTV環境の構築手順を作ったりして頂けると嬉しいです。

参考

  • AUR (en) – dddvb-dkms
    • モジュールの指定方法はこのパッケージの内容から丸パクリさせて頂きました

確認環境

  • Ubuntu 20.04
  • dddvb v0.9.37

手順

 バージョンが変わっても大幅な変更がなければ、バージョン番号だけ適宜書き替えて同じ手順が使えるかもしれない。

必要パッケージのインストール

$ sudo apt install dkms build-essential git unzip

ソースとdkms.confの準備

 作業用ディレクトリを作成。

$ mkdir -p ~/work/dddvb
$ cd ~/work/dddvb

 ドライバのソースファイルを展開。

$ wget https://github.com/DigitalDevices/dddvb/archive/0.9.37.zip
$ unzip 0.9.37.zip
$ cd dddvb-0.9.37

 dkms.confで指定するモジュールを確認するため、いったんmakeで生成する。

$ make

 dkms.confを生成する。

$ 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

 確認用に生成したモジュールなどを削除する。

$ make clean

 この時点で生成されたdkms.confを確認すると以下のようになっているはず。

$ 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から指定されたカーネルが使用されるよう変更。

$ sed -i -e 's/shell uname -r/KVER/g' Makefile

 ソースなどをDKMSで使用するディレクトリへコピー。
 ディレクトリ名を 「[パッケージ名]-[バージョン番号]」 のようにする必要がある。

$ cd ..
$ sudo cp -r dddvb-0.9.37 /usr/src/

インストールとドライバの設定

 DKMSへの登録とインストール。

# 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標準のドライバでなく追加したものを使うよう設定。

$ 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オプションで全てのカーネルからアンインストールされる。

$ sudo dkms remove -m dddvb -v 0.9.37 --all

コメント