スキップしてメイン コンテンツに移動

git clone したレポジトリから deian kernel packages をクロスビルド

amd64 以外のアーキテクチャー用にkernel パッケージをdistccを使ってビルドしてみたのですが、思ったより処理が分散されず時間がかかりすぎていました。どうしたものかと思案したのですが、amd64機(20core 40threads)でのネィティブビルドでは3分ほどで済んだので、クロスコンパイルの方が早いかもとおもいやってみたところ、アーキテクチャによっては4分から10分ほどかかりましたが、distccをつかったネィティブビルドよりもずっと早く済んだのでメモ代わりに挙げてみることにしました。
以下、arm64, armhf, riscv64向けクロスビルドの作業内容です。
## kernel bindeb-pkg cross compile memo
sudo mkdir -p /usr/src/linux-build/linux-6.16
sudo chown -R user1000:user1000 /usr/src/linux-build
cd /usr/src/linux-build/linux-6.16
git clone https://github.com/torvalds/linux -b v6.16
cp -a linux linux-6.16.bkup

## arm64
sudo dpkg --add-architecture arm64
sudo apt-get update
sudo apt install crossbuild-essential-arm64 libssl-dev:arm64

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-

cd /usr/src/linux-build/linux-6.16/linux
time make distclean
time make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
time make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j 40 bindeb-pkg
--
real	10m53.514s
user	325m48.438s
sys	48m1.326s

## armhf
sudo dpkg --add-architecture armhf
sudo apt-get update
sudo apt install crossbuild-essential-armhf libssl-dev:armhf

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

cd /usr/src/linux-build/linux-6.16/linux
time make distclean
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 40 bindeb-pkg
--
real	6m22.575s
user	180m20.723s
sys	22m1.152s

## riscv64
sudo dpkg --add-architecture riscv64
sudo apt-get update
sudo apt install crossbuild-essential-riscv64 libssl-dev:riscv64

export ARCH=riscv
export CROSS_COMPILE=riscv64-linux-gnu-

cd /usr/src/linux-build/linux-6.16/linux
time make distclean
time make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- defconfig
time make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j 40 bindeb-pkg
--
real	4m6.797s
user	115m31.895s
sys	12m32.633s

## amd64 (native binary package only)
sudo apt install build-essential libssl-dev
unset ARCH
unset CROSS_COMPILE

cd /usr/src/linux-build/linux-6.16/linux
time make distclean
time make defconfig
time make -j 40 bindeb-pkg
--
real	3m18.878s
user	77m50.721s
sys	9m41.170s
バイナリパッケージだけでなくソースパッケージもビルドする場合は、bindeb-pkgをdeb-pkgとします。
## amd64 (native binary and source packages)
sudo apt install build-essential libssl-dev
unset ARCH
unset CROSS_COMPILE

cd /usr/src/linux-build/linux-6.16/linux
time make distclean
time make defconfig
time make -j 40 deb-pkg
--
real	4m23.390s
user	79m1.686s
sys	9m54.881s
今回は以上です。それでは。

コメント