On ubuntu 22.04 docker build source l4t for ubuntu 22.04 Jetson Nano 2G.

On ubuntu 22.04 docker build source l4t for ubuntu 22.04 Jetson Nano 2G.

ubuntu 22.04 docker 上で、l4t source を ubuntu 22.04 Jetson Nano 2G 向けにビルドできるのか試して見る。
本来であれば、aarch64 toolchain を使うところだが、今回は、 Jetson Nano armbian jammy でビルドするとどうなるのかの参考にしたいので、
あえて、arm64 のままでビルドしてみます。

参考は、
Compiling Custom Kernel Modules on the Jetson Nano

開発環境
PC: Ubuntu Mate 22.04
docker version 24.0.7
他に、
$ sudo apt install docker-buildx
$ sudo apt install qemu binfmt-support qemu-user-static

はじめに、
Dockerを使ってポータブルなArm64エミュレート環境を構築 を参考にして、
Ubuntu 22.04 x86-64 上で、arm64 を実行できるようにします。

$ docker run --privileged --rm tonistiigi/binfmt --install all

$ export DOCKER_DEFAULT_PLATFORM=linux/arm64/v8
$ docker run --rm -it arm64v8/ubuntu:22.04 bash
が実行できるようにします。

ここから開始。

$ export DOCKER_DEFAULT_PLATFORM=linux/arm64/v8

1. ここからインタラクティブに処理を実行します。
$ docker run -it -d arm64v8/ubuntu:22.04
$ docker ps で、 active な、CONTAINER IDをチェック
$ docker exec -it container-id bash
# apt-get update
# apt install -y build-essential bc libncurses5 libncurses5-dev
# apt install -y wget
# mkdir -p /home/nishi
# cd /home/nishi
# wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.1/sources/t210/public_sources.tbz2
# tar -xjf public_sources.tbz2
# cd Linux_for_Tegra/source/public
# tar -xjf kernel_src.tbz2
# cd kernel/kernel-4.9

# export TEGRA_KERNEL_OUT=/home/nishi/t4l-kernel
# mkdir -p $TEGRA_KERNEL_OUT

## Initialize the config
# make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig

make[1]: Entering directory '/home/nishi/t4l-kernel'
HOSTCC scripts/basic/fixdep
GEN ./Makefile
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#

# make ARCH=arm64 O=$TEGRA_KERNEL_OUT menuconfig

## build
# make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j2

もともとのソースにコンパイルバグがあるので、それがでてきました。

エラー 1

/home/nishi/Linux_for_Tegra/source/public/kernel/kernel-4.9/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c を vim で開いて、
line 2447
{} で囲む。

まあ、デバッグようらいしいから、コンパイルが通ればOKか。

エラー 2

/home/nishi/Linux_for_Tegra/source/public/kernel/kernel-4.9/drivers/net/ethernet/neterion/vxge/vxge-traffic.c の中の関数のパラメータ定義と
/home/nishi/Linux_for_Tegra/source/public/kernel/kernel-4.9/drivers/net/ethernet/neterion/vxge/vxge-traffic.h の中の関数プロトタイプ宣言のパラメータ記述とが、一致していないみたい。

vxge-traffic.c の関数パラメータを、vxge-traffic.h の記述に合わせる。

例)

エラー 3


/home/nishi/Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/bcmdhd/dhd_dbg.h を修正

エラー #4


/home/nishi/Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/bcmdhd/dhd_linux.c を修正。

エラー #5


home/nishi/Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/realtek/rtl8812au/core/rtw_mlme.c を修正。



なんか、きりがないから、このへんにしておくか?

どうやら、 -Wall または、-Wmisleading-indentation オプションが問題みたいだ。

grep -rnH "\-Wall" ./

./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/bcmdhd_pcie/Makefile:6:DHDCFLAGS += -Wall -Wstrict-prototypes -Dlinux -DLINUX -DBCMDRIVER \
./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/realtek/rtl8812au/Makefile:4:#EXTRA_CFLAGS += -Wall
./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/realtek/rtl8821cu/Makefile:4:#EXTRA_CFLAGS += -Wall
./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/realtek/rtl8822bu/Makefile:4:#EXTRA_CFLAGS += -Wall
./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/realtek/rtl8821au/Makefile:4:#EXTRA_CFLAGS += -Wall
./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/realtek/rtl8822ce/Makefile:4:#EXTRA_CFLAGS += -Wall
./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/realtek/rtl8814au/Makefile:4:#EXTRA_CFLAGS += -Wall
./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/bcmdhd/Makefile:10:DHDCFLAGS += -Wall -Wstrict-prototypes -Dlinux -DLINUX -DBCMDRIVER \
....

いっぱい出るが、とりあえず、

./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/bcmdhd_pcie/Makefile:6:DHDCFLAGS += -Wall -Wstrict-prototypes -Dlinux -DLINUX -DBCMDRIVER \
./Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/bcmdhd/Makefile:10:DHDCFLAGS += -Wall -Wstrict-prototypes -Dlinux -DLINUX -DBCMDRIVER \
の部分だけ、+=-Wall を取るか?

最終エラー。



'arch/arm64/boot/dts/_ddot_' なんぞ無いから、検証は、ここ迄で終了。
Linux_for_Tegra/source/public/kernel/kernel-4.9/arch/arm64/boot/dts/Makefile:132: をなんとかすれば、
進むかもしれないが?

このブログ記事について

このページは、おんちゃんが2024年7月27日 13:43に書いたブログ記事です。

ひとつ前のブログ記事は「Transformers Object detection - detr の転移学習とONNX変換と実行。」です。

次のブログ記事は「岸田首相が今期限りで首相を止めてしまうのは残念だ。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ