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なので、大きな問題ではなさそう。
利用方法
簡単に利用方法を記す。
- git clone https://github.com/jtagxhub/jetpack-agx-build build
- . build/envsetup.sh
- l4tout_setup
- bspsetup
- kdefconfig
- Kmenucnfig
- ksavedefconfig
- kbuild -a
- 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
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個。
- kernel toolchain
- bsp toolchain
- kernel source
- bsp source
- rootfs source
- mm api source
- 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