LinuxTVのDVBドライバをビルド

# 概要
[LinuxTV](https://www.linuxtv.org/)のDVBドライバや、それをforkしたサードパーティ製ドライバをビルドする際、デフォルトの状態だと不要なドライバ等もコンパイルするので、ビルドにかなり時間がかかってしまいます。
そこで、DVBドライバのビルドの設定や目的のDVBドライバが使用するtunerとfrontendドライバの調べ方を記載します。

# ビルド環境
| 項目 | 詳細 |
|:-:|:-:|
| OS | Gentoo Linux  |
| Kernel | 4.4.26-gentoo |

# 準備
DVBドライバをビルドするのに必要なツールをインストールします。

```
# emerge patchutils Proc-ProcessTable
```

# ビルド
[LinuxTV](https://www.linuxtv.org/)からmedia_buildとDVBドライバのソースコードを取得します

```
# git clone git://linuxtv.org/media_build.git
# git clone -b fixes --depth=1 git://linuxtv.org/media_tree.git ./media
```
media_buildにビルドするDVBドライバのソースコードディレクトリを設定します。

```
# cd media_build
# make dir DIR=../media
# make distclean
```
DVBドライバの設定を行います。

```
# make menuconfig
```
実行すると下記のエラーが発生します。(2016/12/29現在)

```
/lib/modules/4.4.26-gentoo/build/scripts/kconfig/mconf ./Kconfig
./Kconfig:7211: syntax error
./Kconfig:7210: unknown option "---"
./Kconfig:7211:warning: ignoring unsupported character ','
./Kconfig:7211: unknown option "Say"
./Kconfig:7212: unknown option "compilation"
Makefile:379: ターゲット 'menuconfig' のレシピで失敗しました
make[1]: *** [menuconfig] エラー 1
make[1]: ディレクトリ '/tmp/dvb/media_build/v4l' から出ます
Makefile:26: ターゲット 'menuconfig' のレシピで失敗しました
make: *** [menuconfig] エラー 2
```
「v4l/Kconfig」ファイルの7210行目の「--- help ---」を「---help---」に修正します。

```text:v4l/Kconfig
if STAGING
menu "Media devices in staging"

config STAGING_BROKEN
        bool "Enable drivers that are known to not compile"
        default n
        --- help ---    # ここを「---help---」に修正
          Say N here, except if you will be fixing the drivers
          compilation.

menuconfig STAGING_MEDIA
```
もう一度、

```
# make menuconfig
```
ここでは、PT1/2とPT3のDVBドライバをビルドする設定で、「*」もしく「M」にした項目のみ記します。その他の項目はすべてOFFで構いません。
また、「Autoselect ancillary drivers」項目をOFFにしないと、「Customize TV tuners」と「Customise DVB Frontends」の項目が出現しません。

```
<M> Multimedia support  --->
    [*]   Digital TV support
    [*]   Dynamic DVB minor allocation
    [*]   Enable DVB demux section packet loss log
    [*]   Media PCI Adapters  --->
        <M>   PT1 cards
        <M>   Earthsoft PT3 cards
    [ ]   Autoselect ancillary drivers (tuners, sensors, i2c, spi, frontends)
    Customize TV tuners  --->
        <M> MaxLinear MxL301RF tuner
        <M> Sharp QM1D1C0042 tuner
    Customise DVB Frontends  --->
        <M> Toshiba TC90522
```

あとは、ビルドとインストールです。

```
# make
# make install
# reboot
```
PT2ではDVBドライバのロードが成功すると下記のようなログが出力されました。

```
WARNING: You are using an experimental version of the media stack.
 As the driver is backported to an older kernel, it doesn't offer
 enough quality for its usage in production.
 Use it with care.
Latest git patches (needed if you report a bug to linux-media@vger.kernel.org):
 6f60a5ece0cc130380277f2118cdaf2e1f768cf7 gx1503: fixed some mistake
earth-pt1 0000:03:00.0: enabling device (0000 -> 0002)
dvbdev: DVB: registering new adapter (earth-pt1)
dvbdev: DVB: registering new adapter (earth-pt1)
dvbdev: DVB: registering new adapter (earth-pt1)
dvbdev: DVB: registering new adapter (earth-pt1)
earth-pt1 0000:03:00.0: DVB: registering adapter 0 frontend 0 (VA1J5JF8007/VA1J5JF8011 ISDB-S)...
earth-pt1 0000:03:00.0: DVB: registering adapter 1 frontend 0 (VA1J5JF8007/VA1J5JF8011 ISDB-T)...
earth-pt1 0000:03:00.0: DVB: registering adapter 2 frontend 0 (VA1J5JF8007/VA1J5JF8011 ISDB-S)...
earth-pt1 0000:03:00.0: DVB: registering adapter 3 frontend 0 (VA1J5JF8007/VA1J5JF8011 ISDB-T)...
```

# DVBドライバが使用するtuner及びfrontendドライバの探し方
PT1/2とPT3用のDVBドライバでは「MaxLinear MxL301RF tuner」、「Sharp QM1D1C0042 tuner」、「Toshiba TC90522」を有効にしましたが、全てPT3用です。PT1/2用DVBドライバはtunerとfrontendドライバは必要ありません。
このtunerとfrontendドライバは「make menuconfig」を実行したあとに作成される「v4l/Kconfig」内のDVBドライバ設定部分に記載されているので必要なtunerとfrontendドライバのみを有効にすることが可能です。
下記はPT1/2とPT3のDVBドライバ設定部分で、「select」の項目が必要なtunerとfrontendドライバになります。

```text:v4l/Kconfig
config DVB_PT1
        tristate "PT1 cards"
        depends on DVB_CORE && PCI && I2C
        help
          Support for Earthsoft PT1 PCI cards.

          Since these cards have no MPEG decoder onboard, they transmit
          only compressed MPEG data over the PCI bus, so you need
          an external software decoder to watch TV on your computer.
```
```text:v4l/Kconfig
 config DVB_PT3
        tristate "Earthsoft PT3 cards"
        depends on DVB_CORE && PCI && I2C
        select DVB_TC90522 if MEDIA_SUBDRV_AUTOSELECT
        select MEDIA_TUNER_QM1D1C0042 if MEDIA_SUBDRV_AUTOSELECT
        select MEDIA_TUNER_MXL301RF if MEDIA_SUBDRV_AUTOSELECT
        help
          Support for Earthsoft PT3 PCIe cards.
```
サードパーティ製ドライバでは「select」項目がなくtunerとfrontendドライバを必要とするものがありますが、そのときはDVBドライバのソースコードを読んで必要なtunerとfrontendドライバを探すか、もしくは「Autoselect ancillary drivers」を有効にしてビルドしてください。