qshinoの日記

Powershell関係と徒然なこと

Jetson Xavier Build bsp kernel cboot

Jetson kernel build

Jetson Xavier Driver開発用のkernel build。

github jtagxhubさんのビルド用ツールが良さそうなので、中身を確認する。ツール自体は、Nano, TX2, Xavierに対応する。

git clone xx build により、build/*にツールをclone. build/envsetup.sh がインタラクティブにパラメータ入力を促す。envsetup.sh 内で、その他の関数ファイルを読み込み、カレントシェルで、関数を実行する。

動作確認環境

ubuntu18.04

centos7ではenvsetup.shでエラー。 centos7 bash では、環境変数TOPに代入できない。そもそもnvidiaの要求環境がubuntuなので、大きな問題ではなさそう。

利用方法

簡単に利用方法を記す。

  1. git clone https://github.com/jtagxhub/jetpack-agx-build build
  2. . build/envsetup.sh
  3. l4tout_setup
  4. bspsetup
  5. kdefconfig
  6. Kmenucnfig
  7. ksavedefconfig
  8. kbuild -a
  9. flash

envsetup.sh 以降は個別関数を実行する。ちょっと手数が多いかもしれない。

個別関数概要

3.1 $ . build/envsetup.sh 

 > This command must be executed under the TOP folder downloaded by Jetpack 

 > This command is to setup some basic env variables, some configurable

 > variables will be saved into $TOP/build/.config 

3.2 $ bspsetup 

 > download and setup the toolchains > download and setup kernel source code with git repo 

3.3 $ l4tout_setup

 > re-setup "Xavier --> Linux_for_Tegra" 

3.4 $ kbuild

 > build kernel source code, output to $TOP/out/KERNEL, $TOP/out/MODULES 

 > Copy the generated Image and dtbto $OUT/kernel. If "-m" specified, modules will also be copied 

3.5 $ kdefconfig

 > generate .config from defconfig (make xxx_defconfig) 

3.6 $ kmenuconfig

 > generate the menu of kernel config 

3.7 $ ksavedefconfig

 > save the kernel config to $TOP/kernel/arch/arm64/$KERNEL_DEFCONFIG 

3.8 $ flash

 > flash images with passing options to flash.sh 

3.9 $ flash_no_rootfs

 > flash all images excpet rootfs/APP partition, valid for Xavier and TX2 

3.10 $ flash_kernel

 > flash kernel partition, valid for Xavier 

3.11 $ update_kernel

 > update kernel on device by scp, valid for Nano and TX2 

インタラクティブ・パラメータ

最初に実行する build/envsetup.shでは、インタラクティブなパラメータ入力が要求される。それらは、下記shell 関数にまとまっている。

  • choose_target
  • choose_release

  • set_target_user

  • set_target_pwd
  • set_target_ip

chooseが選択式、setが文字列入力。毎回の入力が大変なので、パラメータ・ファイルを作成する。

cat <<EOS >param
2
1
nvidia
nvidia
192.168.55.1
EOS

なお、choose_target とchoose__relesae の選択肢は、build/config で決まる。現在の選択肢は下記の通り。順序はファイルの読み込み順に決まり、環境に依存する。

Target

0. Nano
1. TX2
2. Xavier

Release

0. 4.1.1_DP
1. 4.2

インタラクティブをスキップ

envsetup.sh では環境変数が設定済みの場合はインタラクティブ入力をスキップする。下記により設定しスキップする。

cat <<EOS >eparam
export TARGET_DEV=Jetson-Xavier
export TARGET_RELEASE=4.2
export TARGET_USER=nvidia
export TARGET_PWD=nvidia
export TARGET_IP=192.168.55.1
EOS

source eparam

個別関数と関数定義スクリプト

関数定義スクリプトと定義される関数は以下の通り。

  • bspsetup.sh l4tout_setup, bspsetup
  • cbootbuild.sh
  • kernelbuild.sh
  • flashsetup.sh

bspsetup.sh

  • bspsetup: toolchain, kernel and u-boot source setup
  • l4tout_setup: setup Linux_for_Tegra

l4tout_setup を先に実行しないと、bspsetupは実行できない。

kernelsetup.sh

  • kmenuconfig : kernel menuconfig
  • kdefconfig : kernel defconfig
  • ksavedefconfig : update kernel defconfig
  • kbuild : build and install kernel image,dtb
  • kbuild -a : build and install kernel image, dtb, module

flashsetup.sh

  • flash : flash image with options
  • flash_no_rootfs : flash all except rootfs - xavier or tx2
  • flash_cboot : flash cboot Image - xavier
  • flash_kernel : flash kernel Image - xavier
  • update_kernel : update kernel Image - none xavier

cbootbuild.sh

  • cbuild : build and install cboot

Xavier 4.2 config

変わりやすいファイル名などエラーが出そうなXavier Jetpack 4.2 のコンフィグファイル。build/config/Xavier-4.2 の内容。cboot sourceがコメントアウトされている理由は不明。

# JetPack 4.2 
#
# Download Links

KERNEL_TOOLCHAIN_LINK=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

BSP_TOOLCHAIN_LINK=https://developer.nvidia.com/embedded/dlc/l4t-gcc-toolchain-64-bit-32-1

SOURCES_LINK=https://developer.nvidia.com/embedded/dlc/l4t-sources-32-1-JAX-TX2

# CBOOT_SOURCE_LINK=https://developer.nvidia.com/embedded/dlc/cboot-source-r311

BSP_LINK=https://developer.nvidia.com/embedded/dlc/l4t-jetson-driver-package-32-1-JAX-TX2

ROOTFS_LINK=https://developer.nvidia.com/embedded/dlc/l4t-sample-root-filesystem-32-1-JAX-TX2

MM_API_LINK=https://developer.nvidia.com/embedded/dlc/l4t-multimedia-api-32-1-JAX-TX2 

# Toolchain

KERNEL_TOOLCHAIN=$KERNEL_TOOLCHAIN_ROOT/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-


BSP_TOOLCHAIN=$BSP_TOOLCHAIN_ROOT/install/bin/aarch64-unknown-linux-gnu- 

# DOWNLOAD

KERNEL_TOOLCHAIN_PACKAGE=$DOANLOAD_ROOT/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz

BSP_TOOLCHAIN_PACKAGE=$DOANLOAD_ROOT/gcc-4.8.5-aarch64.tgz

BSP_PACKAGE=$DOANLOAD_ROOT/JAX-TX2-Jetson_Linux_R32.1.0_aarch64.tbz2

ROOTFS_PACKAGE=$DOANLOAD_ROOT/JAX-TX2-Tegra_Linux_Sample-Root-Filesystem_R32.1.0_aarch64.tbz2

MM_API_PACKAGE=$DOANLOAD_ROOT/JAX-TX2-Tegra_Multimedia_API_R32.1.0_aarch64.tbz2 

# KernelKERNEL_VERSION=4.9TARGET_KERNEL_CONFIG=tegra_defconfig 

# 
OUTOUT_ROOT=$TOP/Xavier

まとめ

ダウンロードが必要なファイルは、LINKサフィックスの6個。cbootが必要な場合は+1の7個。

  1. kernel toolchain
  2. bsp toolchain
  3. kernel source
  4. bsp source
  5. rootfs source
  6. mm api source
  7. cboot source option

download

wget 
KERNEL_TOOLCHAIN_LINK
KERNEL_TOOLCHAIN_PACKAGE


BSP_TOOLCHAIN_LINK
BSP_TOOLCHAIN_PACKAGE

wget 
SOURCES_LINK
SOURCES_PACKAGE

wget
CBOOT_SOURCE_LINK
CBOOT_PACKAGE

wget
BSP_LINK
BSP_PACKAGE

wget
ROOTFS_LINK
ROOTFS_PACKAGE

wget
MM_API_LINK 
MM_API_PACKAGE

元に戻す方法は?

kernel, cboot, bsp/dtb, rootfsの作成方法は分かったが、元に戻すのは、jetpack を使ってインストール?

このツールの世界でバックアップが取れれば素敵なのだが。

また、中間的なイメージの履歴を取れれば、なお嬉しい。

分かっている範囲の生成物は、

  • kernel/config
  • rootfs
  • dtb
  • cboot

revision管理をどうするか。そこそこ大変そう。

ref

https://github.com/jtagxhub/jetpack-agx-build/blob/master/envsetup.sh