GMSLカメラ取り込み時の不具合対応の際、カーネルビルドが必要になったので手順を記載します。
動作環境
- Jetson
- AGX Orin Developer Kit(32GB)
- Jetpack 5.1.1 L4T 35.3.1
- HostPC
- Ubuntu 20.04.1 LTS
参考
作業手順(HostPC)
ビルド環境構築
$ sudo apt update
$ sudo apt install -y git build-essential bc
作業ディレクトリ作成
以下ディレクトリにソース、生成物を配置
$ mkdir -p ~/work/{downloads,source,tool,output}
$ cd ~/work/downloads/
Jetson Linux, toolchainのダウンロード
L4T 35.3.1を想定
downloadsディレクトリに各ファイルを保存
- Driver Package (BSP)
- Driver Package (BSP) Sources
- Sample Root Filesystem
- Bootlin Toolchain gcc 9.3
ディレクトリ構成一覧確認
$ tree
.
├── downloads
│ ├── aarch64–glibc–stable-final.tar.gz
│ ├── jetson_linux_r35.3.1_aarch64.tbz2
│ ├── public_sources.tbz2
│ └── tegra_linux_sample-root-filesystem_r35.3.1_aarch64.tbz2
├── output
├── source
└── tool
Jetson Linux, toolchainを展開
$ cd ~/work/tool/
$ tar xf ../downloads/aarch64--glibc--stable-final.tar.gz
$ cd ../output/
$ tar xf ../downloads/jetson_linux_r35.3.1_aarch64.tbz2
$ cd ./Linux_for_Tegra/rootfs/
$ sudo tar xpf ../../../downloads/tegra_linux_sample-root-filesystem_r35.3.1_aarch64.tbz2
$ cd ../source/
$ tar xf ../downloads/public_sources.tbz2
$ cd ./Linux_for_Tegra/source/public/
$ tar xf kernel_src.tbz2
$ mkdir ./kernel_out/
ディレクトリ構成一覧確認
$ tree -L 2
.
├── downloads
│ ├── aarch64–glibc–stable-final.tar.gz
│ ├── jetson_linux_r35.3.1_aarch64.tbz2
│ ├── public_sources.tbz2
│ └── tegra_linux_sample-root-filesystem_r35.3.1_aarch64.tbz2
├── output
│ └── Linux_for_Tegra
├── source
│ └── Linux_for_Tegra
└── tool
├── aarch64-buildroot-linux-gnu
├── bin
├── etc
├── include
├── lib
├── lib64 -> lib
├── libexec
├── relocate-sdk.sh
├── share
└── usr -> .
カーネルソースコードを編集
$ cd ~/work/source/Linux_for_Tegra/source/public/kernel/
修正対象のソースを編集
直接ファイルを編集、もしくはフォーラムで添付されているpatchファイルを当てる等の対応を行う
環境変数設定
コンパイルパス、カーネルビルドの対象ディレクトリを設定
$ export CROSS_COMPILE_AARCH64_PATH=~/work/tool
$ export CROSS_COMPILE_AARCH64=~/work/tool/bin/aarch64-buildroot-linux-gnu-
$ export CROSS_COMPILE=~/work/tool/bin/aarch64-buildroot-linux-gnu-
$ export TEGRA_KERNEL_OUT=~/work/source/Linux_for_Tegra/source/public/kernel_out
$ export INSTALL_PATH=~/work/output/Linux_for_Tegra/rootfs
ビルド
nvbuild.shを実行し、カーネルビルドを実行
HostPCのスペックにより多少時間がかかる
$ cd ~/work/source/Linux_for_Tegra/source/public/
$ mkdir kernel_out
$ ./nvbuild.sh -o $PWD/kernel_out
$ cp -i ./kernel_out/arch/arm64/boot/Image ~/work/output/Linux_for_Tegra/kernel/
$ cd ./kernel/kernel-5.10/
$ sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_PATH=$INSTALL_PATH
インストール
Jetsonをリカバリーモードで起動、HostPCでJetsonを認識していることを確認$ lsusb | grep NVIDIA
Bus 003 Device 007: ID 0955:7023 NVIDIA Corp. APX
インストール事前処理$ sudo ./apply_binaries.sh
Jetsonデフォルトユーザの作成$ cd ./tools/
$ sudo ./l4t_create_default_user.sh -u $user -p $password
コマンド実行後、以下のような表示が出力されるので「Accept」を押下
接続先JetsonのeMMCへ書き込み$ cd ../
$ sudo ./flash.sh jetson-agx-orin-devkit mmcblk0p1
書き込み完了後、Jetsonが起動したら作業完了
まとめ
以上でJetsonの環境構築手順が完了となります。
今後もエッジPCに関連する内容、クラウド・映像・AIの実装を中心に投稿していきますのでよろしくお願いします。