32ビットのシングルコアIntel Atomマシン用にカーネルをコンパイルしようとしています。言うまでもなく、コンパイルには膨大な時間がかかります。それは2時間続いていて、それはまだドライバーモジュールの半分だけです。
メインデスクトップでカーネルをコンパイルするのに15分しかかかりませんが、64ビットマシンです。より良いマシンから32ビットカーネルパッケージを生成するためにクロスコンパイルできますか?
カーネルはクロスコンパイルできますが、最も簡単な方法は32ビット(i386)chrootを作成してそこにビルドすることです。
ubuntu-dev-tools
をインストールします:
$ Sudo apt-get install ubuntu-dev-tools
I386 chrootを作成します。
$ mk-sbuild --Arch=i386 precise
(おそらく2回実行する必要があります。最初にschroot
などをインストールし、mk-sbuild
をセットアップします)
次に、chrootを入力します。
$ schroot -c precise-i386
通常どおり、カーネルをビルドします。
Afaik、gccでは、-m32
フラグを設定して、Linuxソースを32ビット実行可能ファイルにコンパイルできます。 Makefileの知識はあまりありませんが、微調整できます。
edit:私は stackoverflowからの質問 を追加したかったのですが、cflagsを設定するように指示されています:
export CFLAGS=-m32
そして、Torvalds 'githubアカウントのLinuxリポジトリから、メインメイクファイルの次のセクションを見つけました。環境変数を設定することでターゲットアーキテクチャを設定できることがわかります。コメントを読んでください、現在、これらの行はこのファイルから、行の間174-196 :
# Cross compiling and selecting different set of gcc/bin-utils
# ---------------------------------------------------------------------------
#
# When performing cross compilation for other architectures Arch shall be set
# to the target architecture. (See Arch/* for the possibilities).
# Arch can be set during invocation of make:
# make Arch=ia64
# Another way is to have Arch set in the environment.
# The default Arch is the Host where make is executed.
# CROSS_COMPILE specify the prefix used for all executables used
# during compilation. Only gcc and related bin-utils executables
# are prefixed with $(CROSS_COMPILE).
# CROSS_COMPILE can be set on the command line
# make CROSS_COMPILE=ia64-linux-
# Alternatively CROSS_COMPILE can be set in the environment.
# A third alternative is to store a setting in .config so that plain
# "make" in the configured kernel build directory always uses that.
# Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their Arch/*/Makefile
export KBUILD_BUILDHOST := $(SUBARCH)
Arch ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
# ...
# There are more architecture related stuff beyond this line