chardev版(CentOS 7)
久々に撮っておきたい対象がでたので、作り直した。
ここで構築するデバイスドライバpt1_drvは、カーネル標準組み込みのDVB版デバイスドライバearth-pt1と競合します。
なので、事前にearth-pt1をblacklistを使って外しておきます。
[root@s ~]# echo "blacklist earth-pt1" >> /etc/modprobe.d/blacklist.conf
[root@s ~]# reboot
*手動でearth-pt1を外しても構わない(rmmod earth-pt1)
次に、カードリーダデバイスにB-CASカードを挿してカードリーダをテストします。
[root@s ~]# pcsc_scan
(中略)
Japanese Chijou Digital B-CAS Card (pay TV)
と表記されればOK
次にありがたい著作権保護機能の仕様を理解する為のツール
arib25-0.2.5(up0353.gz)をインストール
[root@s ~]# cd /opt/src/
[root@s src]#
[root@s src]# gzip -cd up0353.gz | tar xf - && cd arib25-0.2.5/src/
[root@s src]#
[root@s src]# make && make install
mkdir -p /usr/local/include/arib25
install -m644 arib_std_b25.h b_cas_card.h portable.h /usr/local/include/arib25
install -m755 b25 /usr/local/bin
install -m755 libarib25.so /usr/local/lib/libarib25.so.0.2.4
ln -sf /usr/local/lib/libarib25.so.0.2.4 /usr/local/lib/libarib25.so.0
ln -sf /usr/local/lib/libarib25.so.0 /usr/local/lib/libarib25.so
ldconfig
[root@s src]#
ld.so.confに/usr/local/libが入っていないので、
[root@s src]# echo "/usr/local/lib" >> /etc/ld.so.conf.d/local.conf
[root@s src]# /sbin/ldconfig
とします。
次に、デバイスドライバpt1_drvを用意します。
[root@s ~]# cd /opt/src/
[root@s src]# curl -O http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
[root@s src]# bzip2 -cd tip.tar.bz2 | tar xf - && cd pt1-c8688d7d6382/driver
[root@s driver]# make && make install
っで、このデバイスドライバpt1_drvをカーネルに読み込ませる。
[root@s ~]# ls /dev/pt1*
ls: /dev/pt1* にアクセスできません: そのようなファイルやディレクトリはありません
[root@s ~]#
[root@s ~]# modprobe pt1_drv
[root@s ~]# ls /dev/pt1*
/dev/pt1video0 /dev/pt1video1 /dev/pt1video2 /dev/pt1video3
[root@s ~]#
ってなことで、デバイス作成に成功。
留意
BIOSではなくUEFIでCentOS 7を構築して、デバイスドライバpt1_drvを
カーネルに組み込むと、下記が表示される
pt1_drv: module verification failed: signature and/or required key missing - tainting kernel
でも一応デバイスドライバ(/dev/pt1video*)は一応作られている。
*secure Bootを無効にしても表示される
次に、同じファイルに入っていた制御プログラム(recpt1)を作ります
[root@s ~]# cd /opt/src/pt1-c8688d7d6382/recpt1/
[root@s recpt1]#
[root@s recpt1]# ./autogen.sh
Generating configure script and Makefiles for recpt1.
Running aclocal ...
Running autoheader ...
Running autoconf ...
[root@s recpt1]#
[root@s recpt1]# ./configure --enable-b25
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for create_arib_std_b25 in -larib25... yes
checking for log10 in -lm... yes
checking for pthread_kill in -lpthread... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
[root@s recpt1]#
[root@s recpt1]# make
[root@s recpt1]# make -n install
install -m 755 recpt1 recpt1ctl checksignal /usr/local/bin
[root@s recpt1]#
[root@s recpt1]# make install
作ったプログラム recpt1 がキチンとarib25ライブラリを読んでいるのか確かめる
[root@s recpt1]# ldd /usr/local/bin/recpt1
linux-vdso.so.1 => (0x00007fff525c5000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbbec47a000)
libm.so.6 => /lib64/libm.so.6 (0x00007fbbec178000)
libarib25.so.0 => /usr/local/lib/libarib25.so.0 (0x00007fbbebf6e000)
libc.so.6 => /lib64/libc.so.6 (0x00007fbbebbac000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbbec6aa000)
libpcsclite.so.1 => /lib64/libpcsclite.so.1 (0x00007fbbeb9a1000)
librt.so.1 => /lib64/librt.so.1 (0x00007fbbeb798000)
[root@s recpt1]#
確かに、libarib25.so.0が読み込まれている事が確認できた。
検証 †
recpt1を引数なしで実行するとコマンドが表示されます。
pt2が2枚あるとデバイスとアンテナの関係は下記となる
| デバイス | アンテナ | 端子名 |
1枚目のpt2 | /dev/pt1video0 | BS/CS | S1 |
/dev/pt1video1 | BS/CS | S2 |
/dev/pt1video2 | 地上波 | T1 |
/dev/pt1video3 | 地上波 | T2 |
2枚目のpt2 | /dev/pt1video4 | BS/CS | S1 |
/dev/pt1video5 | BS/CS | S2 |
/dev/pt1video6 | 地上波 | T1 |
/dev/pt1video7 | 地上波 | T2 |
っで、コマンドラインで、とある電波を60秒間受けてみる。
[root@s ~]# recpt1 --b25 --strip --device /dev/pt1video2 --sid hd 27 60 /share/1.ts
using B25... *--b25 :カードデバイス経由で復号しながら
enable B25 strip *--strip :不要な部分を削除して
using device: /dev/pt1video2 *--device :このデバイスを経由しながら
pid = 1231
C/N = 31.664957dB
Recording...
Available sid = 1024 1025 1408 65520 *選べるsid。
Chosen sid = 1024
Available PMT = 0x1f0 0x3f0 0x1fc8 0x1cf0
Recorded 62sec *60秒間だけど実際には62秒間実行したみたい
[root@s ~]#
sidなるものが良くわからない。。。試しに --sid 65520 として実行するといわゆるワンセグが取れた。
--sid hdはHD画質放送を意味しているの?
まあー--sid hdでも--sid 1024でも 1ch(27) では電波が取得できた。
下記は一覧としてまとめた。
--sidの値は数値で指定しているが、--sid hdに差し替えても問題なかった。
--deviceは/dev/pt1video2でも/dev/pt1video3でもどちらでもOK。二枚目なら上記の表に従う。
recpt1 --b25 --strip --device /dev/pt1video2 --sid 1024 27 60 /share/1ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video3 --sid 1032 26 60 /share/2ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video2 --sid 1040 25 60 /share/4ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video3 --sid 1064 24 60 /share/5ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video2 --sid 1048 22 60 /share/6ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video3 --sid 1072 23 60 /share/7ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video2 --sid 1056 21 60 /share/8ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video3 --sid hd 16 60 /share/9ch.`date "+%y%m%d-%H%M%S"`.ts
BS系なら
recpt1 --b25 --strip --device /dev/pt1video4 101 60 /share/101ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video4 103 60 /share/103ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video4 141 60 /share/141ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video4 151 60 /share/151ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video4 161 60 /share/161ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video4 171 60 /share/171ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video4 181 60 /share/181ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video4 211 60 /share/211ch.`date "+%y%m%d-%H%M%S"`.ts
recpt1 --b25 --strip --device /dev/pt1video4 222 60 /share/222ch.`date "+%y%m%d-%H%M%S"`.ts
つかう †
EpgRecを使うのもいいのだが、年に数回しか使わないのならコマンドラインで済ませた方がいいのかと。
っで、atdデーモンを使うと指定した時間にコマンドを起動できる。
なので、これを使って、指定時刻から特定の時間受けてみる。
1
2
3
4
5
6
7
| [root@s ~]# yum -y install at
[root@s ~]# chkconfig atd on
[root@s ~]# /etc/init.d/atd start
[root@s ~]# echo "recpt1 --b25 --strip --device /dev/pt1video2 --sid 1024 27 14400 /share/1.ts" | at "19:55 2012-12-16"
*2012/12/16の19:55から4時間実行させる 4(時間)*60(分)*60(秒)=14400(秒)
[root@s ~]#
|