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: をなんとかすれば、
進むかもしれないが?