LoginSignup
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-05-31

はじめに

Jetson Xavier NX の発売と合わせて JetPack4.4 DP (Developer Preview) がリリースされたので、Nano と Xavier NX で Linux カーネルとモジュールをビルドしてみた。
通常のビルド手順と大きく変わりありませんが、今回は JetsonHacks の buildKernelAndModules ツールを使ってみました。

注意点

Nano と Xavier NX とでソースコードのダウンロードリンクが異なるので注意が必要です。
source_1.png

Xavier NX

Nano

ツールの変更点

まず、ツールをダウンロードします。

$ git clone https://github.com/JetsonHacksNano/buildKernelAndModules
$ cd buildKernelAndModules

ツールは JetPack 4.3 (r32.3.1) 用に作成されているので、ターゲットバージョンを JetPack 4.4 (r32.4.2) に変更します。

getKernelSources.sh
L4T_TARGET="32.3.1"L4T_TARGET="32.4.2"

Xavier NX の場合は上記に加えてモデル名を変更します。

getKernelSources.sh
JETSON_MODEL="NVIDIA Jetson Nano Developer Kit"JETSON_MODEL="NVIDIA Jetson Xavier NX Developer Kit"

カーネルソースコードのダウンロードリンクを変更します。Nano と Xavier NX とでリンク先が異なるので注意が必要です。

scripts/getKernelSources.sh
wget -N https://developer.nvidia.com/embedded/dlc/r32-3-1_Release_v1.0/Sources/T210/public_sources.tbz2
↓
# Xavier NX の場合
wget -N https://developer.nvidia.com/embedded/L4T/r32_Release_v4.2/Sources/T186/public_sources.tbz2
# Nano の場合
wget -N https://developer.nvidia.com/embedded/L4T/r32_Release_v4.2/Sources/T210/public_sources.tbz2

ビルド手順

1. カーネルソースをダウンロードするスクリプトを実行する

$ ./getKernelSources.sh

2. コンフィグを修正する

例として、書籍「Jetson Nano 超入門」の Part 6-2 に沿って MIDI 関連のコンフィグを追加します。

$ sudo vi /usr/src/kernel/kernel-4.9/.config
.config
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

直接 .config ファイルを編集する他に editConfig.sh を実行して menuConfig 形式で修正することも可能です。

$ ./editConfig.sh

3. カーネルをビルドする

$ ./makeKernel.sh

途中で質問された場合は y で答えます。

OSS Sequencer API (SND_SEQUENCER_OSS) [N/y/?] (NEW) y
Virtual MIDI soundcard (SND_VIRMIDI) [N/m/y/?] (NEW) y

Image makeにかかった時間は以下のとおりでした。

# Xavier NX
real    111m40.689s
user    44m39.048s
sys     3m40.908s
# Nano
real    31m41.584s
user    76m6.292s
sys     7m25.456s

4. モジュールをビルドする

$ ./makeModules.sh

Modules make にかかった時間は以下のとおりでした。

# Xavier NX
real    207m34.403s
user    108m12.652s
sys     9m6.864s
# Nano
real    35m29.093s
user    87m13.700s
sys     9m5.276s

5. Image のバックアップを取得する (オプション: 必須ではありません)

現在の Image をバックアップします。

$ sudo cp /boot/Image /boot/Image.backup

6. Image をコピーする

ビルドした新しい Image を現在の Image にコピーします。

$ ./copyImage.sh

7. /boot/extlinux/extlinux.conf を修正 (オプション: 必須ではありません)

起動時の backup kernel として /boot/Image.backup を指定することが可能です。

$ sudo vi /boot/extlinux/extlinux.conf

コメントを有効にします。

/boot/extlinux/extlinux.conf
# LABEL backup
#    MENU LABEL backup kernel
#    LINUX /boot/Image.backup
#    INITRD /boot/initrd
#    APPEND ${cbootargs}
↓
LABEL backup
   MENU LABEL backup kernel
   LINUX /boot/Image.backup
   INITRD /boot/initrd
   APPEND ${cbootargs}

8. 再起動

$ sudo reboot

動作確認

カーネルのビルドされた時刻を確認することができます。

$ uname -a
Linux jetson-desktop 4.9.140-tegra #1 SMP PREEMPT Sun May 31 13:27:02 JST 2020 aarch64 aarch64 aarch64 GNU/Linux

また、書籍「Jetson Nano 超入門」の Part 6-3 に沿って MIDI が鳴れば正常です。

$ wget https://raw.githubusercontent.com/karaage0703/jetson-nano-tools/master/scripts/pocket_miku_test.py
$ python3 pocket_miku_test.py

(参考) MIDI が認識されていない場合に出力されるエラー

$ python3 pocket_miku_test.py 
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
ALSA lib seq_hw.c:466:(snd_seq_hw_open) open /dev/snd/seq failed: No such file or directory
Traceback (most recent call last):
  File "pocket_miku_test.py", line 49, in <module>
    main()
  File "pocket_miku_test.py", line 20, in main
    midiOutput.set_instrument(instrument)
UnboundLocalError: local variable 'midiOutput' referenced before assignment

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5