ソースコードからカーネルをビルドする¶
EDGEPLANT T1は、NVIDIA L4T1 をベースに開発された専用のOSイメージで動作します。 デバイスツリーやカーネルコードの修正内容は公開されているため、それらを利用して自身でビルドやカスタマイズを行うことも可能です。
注釈
NVIDIA L4Tのカスタマイズについては、NVIDIAが公開している Kernel Customization などのページも参照してください。
事前準備¶
ビルドに必要なプログラムをインストールする¶
$ sudo apt install build-essential bc
コンパイラをインストールする¶
ビルドにはaarch64用のコンパイラが必要です。 Jetson環境(EDGEPLANT T1など)以外でコンパイルを行う場合は、クロスコンパイルとなるため必要なコンパイラをインストールしてください。
NVIDIA L4Tにより使用すべきコンパイラのバージョンが指定されているため、指定されたバージョンを利用します。
version |
compiler version |
---|---|
R32.4.4 |
Linaro gcc 7.3.1 2018.05 aarch64 toolchain |
R32.4.3 |
Linaro gcc 7.3.1 2018.05 aarch64 toolchain |
Linaro gcc 7.3.1 2018.05 aarch64 toolchain 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
ソースコードをダウンロードする¶
EDGEPLANT T1 ページ のソフトウェア一覧にて、NVIDIA L4T のソースコードの再頒布と、EDGEPLANT T1のソースコードの公開を行っています。 このページから任意のバージョンのソースコードをダウンロードしてください。 バージョンは必ず一致するものを使用してください。
必要なファイルは以下の通りです。
内容 |
ファイル名 |
---|---|
aptpod L4T Driver Package (BSP) Sources |
aptpod-l4t-jb01-<version>_public_sources_patches.tbz2 |
NVIDIA L4T Driver Package (BSP) Sources |
<version>_T186_public_sources.tbz2 |
<version>
にはリリースバージョンが入ります(R32.4.4
など)。
同一のバージョン番号のファイルを使用してください。
カーネルをビルドする¶
NVIDIA L4Tのソースコードを展開します。
$ mkdir public_sources $ tar -xf <version>_T186_public_sources.tbz2 -C public_sources
EDGEPLANT T1用のパッチをL4Tのソースコードに適用します。
$ tar -xf aptpod-l4t-jb01-<version>_public_sources_patches.tbz2 $ ./public_sources_patches/kernel/build_kernel_package.sh -k public_sources/Linux_for_Tegra/source/public/kernel_src.tbz2
EDGEPLANT T1用のパッチが適用されたL4Tのソースコードを展開します。 カスタマイズを加えたい場合は、展開されたソースコードをここで変更してください。
$ cd public_sources/Linux_for_Tegra/source/public $ mkdir sources $ tar -xjf kernel_src_patched.tbz2 -C sources
ビルド用のツールチェインの環境変数設定を行います。
ビルド生成物の出力先を設定します。
$ export TEGRA_KERNEL_OUT=kernel_out
Jetson環境(EDGEPLANT T1など)以外でビルドを行う場合は、クロスコンパイルの設定をします。
$ export CROSS_COMPILE=/path/to/gcc-linaro-x.x.x-xxxx.xx-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- $ export LOCALVERSION=-tegra
コンフィグレーションファイルを生成します。
$ cd sources/kernel/kernel-4.9 $ mkdir -p $TEGRA_KERNEL_OUT $ make ARCH=arm64 O=$TEGRA_KERNEL_OUT jasmine_defconfig
カーネルのビルドを実行します。
<n>
はパラレルビルドの並列実行数です。自身のビルド環境に応じて設定してください。$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j<n>
ビルドに成功すると、以下の成果物が生成されます。
内容
パス
カーネルイメージ
$TEGRA_KERNEL_OUT/arch/arm64/boot/Image
Device Tree Blob(DTB)
$TEGRA_KERNEL_OUT/arch/arm64/boot/dts
カーネルイメージの更新方法については カーネルイメージを変更する を参照してください。
DTBの更新方法については デバイスツリーを変更する を参照してください。
カーネルコンフィグを変更する¶
EDGEPLANT T1のカーネルコンフィグは kernel/aptpod/arch/arm64/configs/jasmine_defconfig
に設定されています。
変更を加えたい場合はこちらのファイルを修正し、再度カーネルのコンフィグレーションファイルを生成してください。