Raspberry Pi 5 の USB-C ポートは、USBホストではなくUSBペリフェラル(USB機器)モードに設定できるそうです。
ということで、USB-MIDIデバイスとして使えるようセットアップしてみました。検索すると意外と情報があるようで完全ではなく、きっちり最新のDebianでの動作手順がまとまっているページがなかったので、備忘録としてまとめておきます。
手順
Raspberry Pi 5を買う
2025/11 RAM8GB版を秋月で買いました。14,960円でした。
標準搭載のUSBポートをUSBペリフェラルに設定できるのはRaspberry Pi Zero 2 と Pi 5ぐらいらしいので注意してください。また、ペリフェラル化できるのは特定のポートだけで、どのUSBポートでもOKというわけではないようです。Pi 5の場合はUSB-Cポートです。
起動する
Raspberry Pi Imagerで適当なSDカードに起動イメージを焼いて、Debian系Linuxを入れて起動します。私はヘッドレス起動で良いので 64bit版の Raspberry Pi OS Lite (Debian Trixie) にしました。
USBポートをperipheralモードにする
Raspberry Pi 5に何らかの手段でログインし、/boot/firmware/config.txt 末尾の[all]セクションに以下を追加します。
dtoverlay=dwc2,dr_mode=peripheral
USB-MIDIのモジュールを有効にする
/boot/firmware/cmdline.txt の rootwait の直後に modules-load=dwc2,g_midi を挿入します。追加したものがこんな↓感じです。改行すると動かなくなるので注意してください。
console=serial0,115200 console=tty1 root=PARTUUID=4e9ef90c-02 rootfstype=ext4 fsck.repair=yes rootwait modules-load=dwc2,g_midi cfg80211.ieee80211_regdom=JP
再起動します。
$ sudo reboot
USB-MIDIのサービスを動かす
/usr/bin/midi_over_usb を作って以下の内容を書き込みます。
#!/usr/bin/env bash
cd /sys/kernel/config/usb_gadget/
mkdir -p midi_over_usb
cd midi_over_usb
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
mkdir -p strings/0x409
echo "fedcba9876543210" > strings/0x409/serialnumber
echo "Your Name" > strings/0x409/manufacturer
echo "MIDI USB Device" > strings/0x409/product
ls /sys/class/udc > UDC
strings/0x409/{serialnumber,manufacturer,product}にechoで流し込んでいる値はお好みで変更して構いません。
できたら、実行権限を追加します。
$ sudo chmod +x /usr/bin/midi_over_usb
サービス自動起動のため、/etc/systemd/system/midi_over_usb.service を作成して、以下の内容を書き込みます。
[Unit]
Description=Start USB MIDI gadget
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/bin/midi_over_usb
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
最後にサービス有効化
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now midi_over_usb.service
動作チェック
正しく設定できていれば、Pi 5のUSB-CポートをPCと繋ぐとUSB-MIDIデバイスとして認識され、適当なMIDIソフトからポートが見えるはずです。
Pi側でも aconnect -l を実行すると、f_midi ポートが見えるはず。
$ sudo apt install -y alsa-utils # まだインストールされていなければ
$ sudo aconnect -l
client 0: 'System' [type=kernel]
0 'Timer '
1 'Announce '
client 14: 'Midi Through' [type=kernel]
0 'Midi Through Port-0'
client 16: 'f_midi' [type=kernel,card=0]
0 'f_midi
上記の例だとクライアント16:0がf_midiなので、
$ sudo aseqdump -p 16:0
とすると、MIDI入力の監視が始まります。PC側からMIDIデータを何か送信すると、コンソールにMIDIメッセージがダンプ表示されます。