😎

Jetson AGX Orin でカーネルをセルフビルドしてみる

2022/05/15に公開

せっかく12コアのARMマシンが手元にあるので、カーネルをビルドしてみることにしました。
ストレージは500GBのUSB外付けSSDをつなげて使いました。
自動マウントするUSB外付けSSDにdockerのファイルを移動させる

準備

$ sudo apt install -y build-essential bc libncurses5 libncurses5-dev

ソースコードのダウンロードと展開

ソースコードはここからたどることができます。
https://developer.nvidia.com/embedded/jetson-linux

$ wget https://developer.nvidia.com/embedded/l4t/r34_release_v1.0/sources/public_sources.tbz2
$ tar xf public_sources.tbz2
$ cd Linux_for_Tegra/source/public/
$ tar xf kernel_src.tbz2
$ cd kernel/kernel-5.10/

現在動いているカーネルのバージョンを確認

$ cat /proc/version
Linux version 5.10.65-tegra (buildbrain@mobile-u64-5280-d6000) (aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2020.08) 9.3.0, GNU ld (GNU Binutils) 2.33.1) #1 SMP PREEMPT Wed Apr 6 11:45:49 PDT 2022

カーネルコンフィグの設定

$ export LOCALVERSION=-tegra
$ TEGRA_KERNEL_OUT=$HOME/work/src/Linux_for_Tegra/out
$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig

今回はコンパイラはデフォルトのgccを使うことにしました。

$ which gcc
/usr/bin/gcc
$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ビルド

$ nohup make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j`nproc` &
$ tail -f nohup.out

htop でみると12コアが働いているのが見えてなんとなく嬉しい。
特に問題なくビルドは完了しました。

仮の場所にカーネルモジュールをインストール

INSTALL_MOD_PATH= をつけて現在動いているものを上書きしないようにして、カーネルモジュールをインストール

$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT INSTALL_MOD_PATH=$TEGRA_KERNEL_OUT -j`nproc` modules_install

Discussion