ソースコードからカーネルをビルドする

EDGEPLANT T1は、NVIDIA L4T1 をベースに開発された専用のOSイメージで動作します。 デバイスツリーやカーネルコードの修正内容は公開されているため、それらを利用して自身でビルドやカスタマイズを行うことも可能です。

1

https://developer.nvidia.com/embedded/linux-tegra

注釈

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

ソースコードをダウンロードする

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 など)。 同一のバージョン番号のファイルを使用してください。

カーネルをビルドする

  1. NVIDIA L4Tのソースコードを展開します。

    $ mkdir public_sources
    $ tar -xf <version>_T186_public_sources.tbz2 -C public_sources
    
  2. 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
    
  3. EDGEPLANT T1用のパッチが適用されたL4Tのソースコードを展開します。 カスタマイズを加えたい場合は、展開されたソースコードをここで変更してください。

    $ cd public_sources/Linux_for_Tegra/source/public
    $ mkdir sources
    $ tar -xjf kernel_src_patched.tbz2 -C sources
    
  4. ビルド用のツールチェインの環境変数設定を行います。

    1. ビルド生成物の出力先を設定します。

      $ export TEGRA_KERNEL_OUT=kernel_out
      
    2. 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
      
  5. コンフィグレーションファイルを生成します。

    $ cd sources/kernel/kernel-4.9
    $ mkdir -p $TEGRA_KERNEL_OUT
    $ make ARCH=arm64 O=$TEGRA_KERNEL_OUT jasmine_defconfig
    
  6. カーネルのビルドを実行します。 <n> はパラレルビルドの並列実行数です。自身のビルド環境に応じて設定してください。

    $ make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j<n>
    
  7. ビルドに成功すると、以下の成果物が生成されます。

    内容

    パス

    カーネルイメージ

    $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 に設定されています。 変更を加えたい場合はこちらのファイルを修正し、再度カーネルのコンフィグレーションファイルを生成してください。