web-dev-qa-db-ja.com

64ビットマシンで32ビットカーネルをコンパイルする

32ビットのシングルコアIntel Atomマシン用にカーネルをコンパイルしようとしています。言うまでもなく、コンパイルには膨大な時間がかかります。それは2時間続いていて、それはまだドライバーモジュールの半分だけです。

メインデスクトップでカーネルをコンパイルするのに15分しかかかりませんが、64ビットマシンです。より良いマシンから32ビットカーネルパッケージを生成するためにクロスコンパイルできますか?

23
Oli

カーネルはクロスコンパイルできますが、最も簡単な方法は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

通常どおり、カーネルをビルドします。

27
tumbleweed

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
5
user91091