Jetson NanoでMIDIを使うためにカーネルビルド


Jetson NanoでMIDIを使いたいがためにカーネルビルドすることになった

 Jetson NanoでMIDIで演奏をしたいなと思い、頑張ってPygameをインストールするところまではできたのですが、MIDIを使うためには、更にカーネルビルドが必要なことが判明してしまいました。

 若干絶望したのですが、以前ラズパイのカーネルビルドやったことあるから、できないことは無いだろうとビルドしようとしたら全然ダメで絶望していました。

 そこで助けられたのは @yamamo-to さんの以下記事です。

Jetson Nanoのカーネル再コンパイル

 この記事が無かったら、Jetson Nanoでカーネルビルドできませんでした。めちゃ感謝です。というわけで、ほとんど上記記事のままなのですが、MIDI使えるようにコンフィグファイルを弄ったのと、MIDI出力のサンプルスクリプトを用意したので、そちらを中心にメモを残しておこうと思います。

本記事は「jetson-nano-sd-r32.1.1-2019-05-31.zip」を使用した例を記載していますが、JetPack4.5でも動作確認しています。操作が異なる箇所は、バージョンごとに操作方法を記載使用しました。

Jetson Nano初期セットアップ

 Jetson NanoのSDカードをNVIDIAの開発者向けページからダウンロードして、SDを作成してJetson Nanoを起動します。

 イメージは「jetson-nano-sd-r32.1.1-2019-05-31.zip」を使用しました。対象のイメージ見つからない時は、以下の記事を参考にして下さい。

Jetson Nanoで使えるSDカードのイメージファイルまとめとイメージ書き込み方法

 起動したら、スワップファイルの増大とパフォーマンスの最大化を行います。

 スワップファイルの増大は、以下コマンドで実施します。

$ 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の画面

 ラズパイでは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

 うまくいけば、ポケット・ミクが「変デジ研究所」と歌ってくれるはずです。

参考リンク

Jetson Nanoのカーネル再コンパイル

nVidia Jetson Nano: Desktop Use, Kernel Builds, and Deeper Analysis

/dev/snd/seq failed: no such file or directory

Jetson JetPack4.4 DP のカーネルビルド

関連ページ

Jetson Nano関係のTIPSまとめ
Jetson Nano関係の情報は、上記ページにまとめていますのでよければ参照下さい。

変更履歴

  • 2020/11/04 参考リンク追記