PCIe(PCI Express)しかない環境でPT2を無理矢理使ってChinachu Gamma+Mirakurun

2018年7月8日デジタルガジェット, DTVLinux, DTV, Chinachu

imgres

PCのリフレッシュに伴ってPCIのないマザーボードを購入してしまったので、PT2が使えなくなってしまった。なんとかUbuntuでも使い、PT2を認識させ、Chinachu Gamma + Mirakurunが出来ないかと探ったら、出来たのでご紹介。

なぜにPT2?

PT3があるのになぜにPT2かって?PT3とPT2の中古価格が全然違うからです。

PT3 Rev.A

PT3 Rev.A

42,000円(08/14 21:16時点)
Amazonの情報を掲載しています
アースソフト PT2

アースソフト PT2

22,200円(08/14 21:16時点)
Amazonの情報を掲載しています

PT3もPT2も生産終了。PT3なんかは2-3万円にまで値上がりしている一方で、PT2はソフマップなどでも5,000円程度で販売されている。予備としてストックしておく分には、恒久的にPT2が使えるのであればPT2でも良いかなと思ったのがきっかけ。

PCIe-> PCI変換アダプタを使ってPT2を無理矢理使う

結論から言うと、下記の製品でPCIe(PCI Express)をPCIに無理矢理変換し、PT2をUbuntuで認識させることが出来た。

PCIe->PCI変換ボードを取り付けてみる

ただしこいつは外付けが前提である。
PCIeのスロットにUSB3.0と3ピンの電源アダプタがくっついており、付属のUSBケーブルと3ピン電源ケーブルで外付けのユニットに接続、外付けのユニットにはPCIが2スロットついている、という構成。

少し見づらいが、こんな感じになった。

Ubuntu 16.04では特に何もしなくても認識した。

02:00.0 PCI bridge: Pericom Semiconductor Device e113 (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0, IRQ 16
Bus: primary=02, secondary=03, subordinate=03, sec-latency=64
Memory behind bridge: df100000-df1fffff
Capabilities: [80] PCI-X bridge device
Capabilities: [90] Power Management version 3
Capabilities: [a8] Subsystem: Device 0000:0000
Capabilities: [b0] Express PCI-Express to PCI/PCI-X Bridge, MSI 00
Capabilities: [f0] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [100] Advanced Error Reporting
Capabilities: [150] Virtual Channel
Kernel modules: shpchp

PT2のドライバを作る

こちらも普通の手順で実施することが出来た。
下記の通りの手順でChinachuに対応するPT2ドライバを作ることが出来る。

$ hg clone http://hg.honeyplanet.jp/pt1.oyama/ PT2
$ cd ./PT2/driver
$ vim pt1_pci.c

で、修正。

--- pt1_pci.c 2017-01-12 01:04:19.813447674 +0900
+++ ../../driver/pt1_pci.c 2017-01-11 21:48:02.844485030 +0900
@@ -9,8 +9,11 @@
#include <linux/pci.h> 
#include <linux/init.h> 
#include <linux/interrupt.h> -
+#include <linux/version.h> 
#include <asm/io.h>
+#if LINUX_VERSION_CODE >=KERNEL_VERSION(4,2,0)
+#include <linux/vmalloc.h> +#endif
#include <asm/irq.h>
#include <asm/uaccess.h>
#include <linux/version.h> 

@@ -400,13 +403,12 @@
channel->req_dma = FALSE ;
wake_up(&channel->ptr->dma_wait_q);
}
- mutex_unlock(&channel->ptr->lock);

/* send tuner to sleep */
set_sleepmode(channel->ptr->regs, &channel->lock,
channel->address, channel->type, TYPE_SLEEP);
schedule_timeout_interruptible(msecs_to_jiffies(50));
+ mutex_unlock(&channel->ptr->lock);
return 0;
}

これでmake clean && make && sudo make installで終わり。
無事、Chinachu Gamma + MirakurunでもPT2が使用出来るようになります。