ラズパイを録画用HDDにエミュレートする

前回の記事でラズパイにDLNAサーバを構築し、ラズパイに接続したHDDの動画をTVで見られるようにした。

今回はTV番組をラズパイに接続したHDDに録画できるようにしていく。

つまりTVに接続したラズパイにあたかも外付けHDDであるかのようにふるまっていただく。

▼前回の記事

https://synrock-tech.com/hardware/single_board/raspberry-pi-dlna

OTG

OTGとは

USB On-The-Go(略してUSB OTG)は、USB機器どうしを直接接続するインタフェース規格である。パソコン等をホストとせずに、動作時にホスト機器を動的に切り替える機能を拡張したもの。 IEEE 1394のように直接接続できるので、いろいろな機器に応用できる。

https://ja.wikipedia.org/wiki/USB_On-The-Go

OTGとはOn-The-Goの略であり、USBで接続された機器のホストを動的に切り替えることのできる機能である。ラズパイは基本的にホストとして動作するのだが、TVに接続した場合、TVをホスト(親)、ラズパイを子として動作させることができる。

OTGをサポートしてるUSBport

ラズパイのドキュメントには以下のようにある。

The USB host port inside the Pi is an On-The-Go (OTG) host as the application processor powering the Pi, BCM2835, was originally intended to be used in the mobile market: i.e. as the single USB port on a phone for connection to a PC, or to a single device. In essence, the OTG hardware is simpler than the equivalent hardware on a PC.

https://www.raspberrypi.org/documentation/hardware/raspberrypi/usb/README.md

ラズパイに電力を供給するUSBがOTGホスト、とある。Raspberr pi 4の電力供給用のUSBはUSB-Cである。なので、USB-CをOTGとして利用することができる。

OTGの設定

前置きはこの程度にして、早速ラズパイに設定をしていこう。

config.txtに追記

/bootディレクトのconfig.txtを編集。

pi@raspberrypi:/ $ sudo vi /boot/config.txt

以下の一文を最終行に追記。

dtoverlay=dwc2

cmdline.txtの編集

続いて、/bootディレクトリのcmdline.txtを編集する。

pi@raspberrypi:/ $ sudo vi /boot/cmdline.txt

modules-load=dwc2,g_mass_strageの記載を追記し、dwc2とg_mass_storageのモジュールをロードするように設定。

console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles modules-load=dwc2,g_mass_strage

g_mass_storage

続いて、仮想ストレージとなるイメージファイルを作成する。

pi@raspberrypi:/ $ dd if=/dev/zero of=/media/pi/HD-3/public/dlna/movies/virtual_storage bs=1MB count=100000
100000+0 レコード入力
100000+0 レコード出力
100000000000 bytes (100 GB, 93 GiB) copied, 1668.4 s, 59.9 MB/s

上記のコマンドでof=で指定したファイルが作成される。ファイルサイズはbs × count。この場合100,000MB=100GB。少々時間がかかる。ちなみにファイルの拡張子は.isoでも.binでも.imgでもあるいは拡張子がなくてもいい。※少なくとも.imgと拡張子なしは動作確認した。

以下コマンドで作成したファイルをstorageとして設定する。

pi@raspberrypi:/ $ sudo modprobe g_mass_storage file=/media/pi/HD-3/public/dlna/movies/virtual_storage removeable=0

起動しているモジュールのリストを表示させる。

pi@raspberrypi:/ $ lsmod | grep -E '(dwc|mass)'
g_mass_storage         16384  0
usb_f_mass_storage     49152  2 g_mass_storage
libcomposite           53248  2 g_mass_storage,usb_f_mass_storage
dwc2                  167936  0
udc_core               57344  3 usb_f_mass_storage,dwc2,libcomposite

g_mass_storageとdwc2が表示されていれば良い。もし表示されていない場合、sudo rebootなどで再起動を試す。

TVに接続

ラズパイのUSB-CとテレビのUSBportなどを接続する。

するとTV側でHDDとして認識される。

録画用HDDとして登録するにはフォーマットします、という文言に対してちょっとビビりつつ登録する。(当然フォーマットされる対象は先ほど作成したイメージファイルなのだが)

20200814-1.jpg

適当に番組を録画してみるとなんの問題もなく録画することができた。

20200814-2.jpg

あとは、どこからでも録画した番組が視聴できたらいいなあ。

参考サイト