😎
Jetson AGX Orin でカーネルをセルフビルドしてみる
せっかく12コアのARMマシンが手元にあるので、カーネルをビルドしてみることにしました。
ストレージは500GBのUSB外付けSSDをつなげて使いました。
自動マウントするUSB外付けSSDにdockerのファイルを移動させる
準備
$ sudo apt install -y build-essential bc libncurses5 libncurses5-dev
ソースコードのダウンロードと展開
ソースコードはここからたどることができます。
$ 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