Jetson NanoでMIDIを使いたいがためにカーネルビルドすることになった
Jetson NanoでMIDIで演奏をしたいなと思い、頑張ってPygameをインストールするところまではできたのですが、MIDIを使うためには、更にカーネルビルドが必要なことが判明してしまいました。
若干絶望したのですが、以前ラズパイのカーネルビルドやったことあるから、できないことは無いだろうとビルドしようとしたら全然ダメで絶望していました。
そこで助けられたのは @yamamo-to さんの以下記事です。
この記事が無かったら、Jetson Nanoでカーネルビルドできませんでした。めちゃ感謝です。というわけで、ほとんど上記記事のままなのですが、MIDI使えるようにコンフィグファイルを弄ったのと、MIDI出力のサンプルスクリプトを用意したので、そちらを中心にメモを残しておこうと思います。
本記事は「jetson-nano-sd-r32.1.1-2019-05-31.zip」を使用した例を記載していますが、JetPack4.5でも動作確認しています。操作が異なる箇所は、バージョンごとに操作方法を記載使用しました。
追記:最新(最後)のJetPackでのカーネルビルド方法
以下記事が参考になりそうです。私は試せていません。すみません!
Jetson Nano初期セットアップ
Jetson NanoのSDカードをNVIDIAの開発者向けページからダウンロードして、SDを作成してJetson Nanoを起動します。
イメージは「jetson-nano-sd-r32.1.1-2019-05-31.zip」を使用しました。対象のイメージ見つからない時は、以下の記事を参考にして下さい。
起動したら、スワップファイルの増大とパフォーマンスの最大化を行います。
スワップファイルの増大は、以下コマンドで実施します。
$ git clone https://github.com/JetsonHacksNano/installSwapfile
$ cd installSwapfile
$ ./installSwapfile.sh
パフォーマンスの最大化は、以下のコマンドを実行します。
$ sudo jetson_clocks
カーネルソースのダウンロード
以下コマンドで、ホームディレクトリ以下にkernelというディレクトリ作成して、その中で作業します。
$ cd && mkdir kernel && cd kernel
ここからは、冒頭の参考サイトのままです。
Jetson Nanoのカーネルのソースは、NVIDIAのサイトのJetson NanoのBSP Sourcesというものになります。
以下コマンドで、カーネルのソースをダウンロードして解凍します。
$ wget https://developer.nvidia.com/embedded/dlc/l4t-sources-32-1-jetson-nano -O l4t-sources-32-1-jetson-nano.tar.gz
$ tar xvf l4t-sources-32-1-jetson-nano.tar.gz
$ cd public_sources
$ tar xvf kernel_src.tbz2
$ cd kernel/kernel-4.9
JetPack 4.5の場合は以下実行
$ wget https://developer.nvidia.com/embedded/L4T/r32_Release_v5.0/sources/T210/public_sources.tbz2
$ tar -xvjf public_sources.tbz2
$ cd Linux_for_Tegra/source/public/
$ tar -xvjf kernel_src.tbz2
$ cd kernel/kernel-4.9
コンフィグファイル編集
現在使用しているカーネルのコンフィグファイルを書き出します。
$ zcat /proc/config.gz > .config
コンフィグファイル(.config
)を編集します。
$ vim .config
ここでMIDIを有効にするために、コンフィグファイルに以下の項目を追記・修正します。
CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_SND_SEQUENCER=y
CONFIG_SND_SEQ_DUMMY=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_RAWMIDI_SEQ=y
編集済みのコンフィグファイルも用意しましたので、編集が大変でしたら以下コマンドでダウンロードしてもOKです。
$ wget -O .config https://raw.githubusercontent.com/karaage0703/jetson-nano-tools/master/kernel_config/config_midi
JetPack 4.5の場合は以下実行
$ wget -O .config https://raw.githubusercontent.com/karaage0703/jetson-nano-tools/master/kernel_config/config_midi_v4.5
カーネルビルド
ビルドに関しても、冒頭の参考サイトのままです。
以下コマンドでカーネルをビルドしてインストールします。必要に応じて /boot/Image
のバックアップをとっておきましょう。
$ make oldconfig
$ make prepare
$ make modules_prepare
$ make -j4 Image && make -j4 modules
$ sudo make modules_install
$ sudo cp arch/arm64/boot/Image /boot/Image
途中で、以下のような質問が出たら、全てy
で回答してください。
OSS Sequencer API (SND_SEQUENCER_OSS) [N/y/?] (NEW)
Virtual MIDI soundcard (SND_VIRMIDI) [N/m/y/?] (NEW)
一番時間かかるのは、make -j4 Image && make -j4 modules
です(1時間以上かかります)。ゆっくりコーヒーでも飲みながら待つか、寝て待ちましょう。
最初の3行は現状の設定を流用するためのお作法のようです(詳細分かっていません…)。後半3行は、ビルドしてできたイメージを、実際に使用するブートイメージに入れ替えている(のだと思います)。
menuconfigを使用してGUIでコンフィグファイルを作成する場合
GUIでコンフィグファイルを作成する場合は、以下コマンドで必要なインストールします。
$ sudo apt update
$ sudo apt install -y libncurses5-dev
あとは、kernel/kernel-4.9以下で、以下menuconfigコマンド実行すれば、GUIでConfigを行います。
$ make menuconfig
ラズパイではmenuconfigを使ってコンフィグファイルを作成しましたが、今回Jetson Nanoでは使いませんでした(というか使えませんでした)。参考までにメモとして残して置きます。
Jetson NanoでのMIDIのテスト
MIDI出力を確認します。お手元のMIDI機器(この記事を読んでいるということは、持っていると思っています)とJetson Nanoを接続してMIDIのテストを行いましょう。
この記事の通りにカーネルビルドをした上で、以下の記事を参考にPygameを入れて下さい
Jetson Nanoにpygameをインストールする方法(Python2/Python3)
今回は、MIDI機器としてポケット・ミクを使用しました。
テストプログラムを用意しました。以下コマンドでテストできます。
$ wget https://raw.githubusercontent.com/karaage0703/jetson-nano-tools/master/scripts/pocket_miku_test.py
$ python3 pocket_miku_test.py
うまくいけば、ポケット・ミクが「変デジ研究所」と歌ってくれるはずです。
参考リンク
nVidia Jetson Nano: Desktop Use, Kernel Builds, and Deeper Analysis
/dev/snd/seq failed: no such file or directory
関連ページ
Jetson Nano関係の情報は、上記ページにまとめていますのでよければ参照下さい。
変更履歴
- 2023/07/09 リンク追加、微修正
- 2020/11/04 参考リンク追記