ラズパイを録画用HDDにエミュレートする
目次
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として登録するにはフォーマットします、という文言に対してちょっとビビりつつ登録する。(当然フォーマットされる対象は先ほど作成したイメージファイルなのだが)
適当に番組を録画してみるとなんの問題もなく録画することができた。
あとは、どこからでも録画した番組が視聴できたらいいなあ。
参考サイト
- https://linux-sunxi.org/USB_Gadget/Mass_storage
- qiita:大画面テレビの録画用HDDの代わりにRasberry Pi4のUSB OTG機能を生かしてUSBtoLAN(NAS)なストレージゲートウェイを構成する https://qiita.com/kthrtty/items/7243d59bb418de50f732
- Very simple OTG on pi4
- https://gist.github.com/gbaman/50b6cca61dd1c3f88f41
- http://ww1.microchip.com/downloads/en/Appnotes/AN_3326-How-to-use-SAMA5D2-USB-Mass-Storage-Gadget-Under-Linux-00003326a.pdf