🧩
jetson nanoのカーネルをソースからビルドする
** 2022/05/15 追記 ビルドするホストにはx86_64のubuntu 20.04を使いましょう。
現在動いているカーネルのバージョンを確認する
$ cat /proc/version
Linux version 4.9.253-tegra (buildbrain@mobile-u64-5434-d8000) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) ) #1 SMP PREEMPT Sat Feb 19 08:59:22 PST 2022
参考にしたページ
作業ディレクトリの作成
作業ディレクトリを$TOPDIR で参照できるようにしておく。
$ TOPDIR=$PWD/tegra
$ mkdir -p $TOPDIR
$ cd $TOPDIR
ツールチェインのダウンロード
$ wget http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
$ tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
$ export CROSS_COMPILE=$(pwd)/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
$ export LOCALVERSION=-tegra
カーネルソースのダウンロード
$ wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.1/sources/t210/public_sources.tbz2
$ tar xf public_sources.tbz2
$ cd Linux_for_Tegra/source/public/
$ tar xf kernel_src.tbz2
$ cd kernel/kernel-4.9/
カーネルのビルド
ビルドに必要なツールをインストール
$ sudo apt install -y build-essential bc libncurses5 libncurses5-dev
ビルドファイルの出力先を指定し、デフォルトのコンフィグを実行
$ TEGRA_KERNEL_OUT=$TOPDIR/t4l-kernel
$ mkdir -p $TEGRA_KERNEL_OUT
$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig
コンフィグをカスタマイズ
$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT menuconfig
ビルドを実行
$ nohup make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j`nproc` &
$ tail -f nohup.out
dtbのビルドでエラーになってしまう。
$ nohup make -k ARCH=arm64 O=$TEGRA_KERNEL_OUT -j`nproc` &
-k
オプションをつけて可能なものだけビルドしてみた。
vmlinuxとmodules はビルドできていた。
dtbのビルドでエラーになってしまう件は今は深追いしないことにする。
** 2022/05/15 追記
最初はビルド環境としてubuntu 22.04を使用してdtbのビルドエラーが起こっていたのですが、ubuntu 20.04では問題なくビルドできました。何かのコマンドの挙動の変化が影響しているようです。
** 追記ここまで
仮の場所にカーネルモジュールをインストール
INSTALL_MOD_PATH=
をつけてカーネルモジュールをインストール
$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT INSTALL_MOD_PATH=$TEGRA_KERNEL_OUT -j`nproc` modules_install
関連
Discussion